單向dataset! |
答題得分者是:cashxin2002
|
chrislao
初階會員 ![]() ![]() 發表:86 回覆:69 積分:36 註冊:2002-12-28 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject);
var
workid:array of string;
x,i:integer;
begin
SetLength(workid, 3);
i:=0;
while not simpledataset1.Eof do
begin
edit1.Text:=edit1.Text simpledataset1.FieldValues['workid'];
workid[i]:=simpledataset1.FieldValues['workid'];
simpledataset1.Next;
i:=i 1;
end;
sqlquery1.sql.add( 'select date, user');
for x:=0 to high(workid) do
sqlquery1.sql.add(', ' workid[x] ' as "' workid[x] '"');
sqlquery1.sql.add('from work where user="chris"');
edit2.Text:=sqlquery1.SQL.Text;
sqlquery1.open;
end; 用dbexpress連mysql,click button 後出現"operation not allowed on a unidirectional dataset"
dbexpress是單向的dataset,有甚麼辦法?
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! TSQLDataSet, TSQLQuery, TSQLStoredProc, TSQlTable元件從資料庫中擷取出的資料集后, 將之存放到記憶體(稱之為Cursor), 是屬于單向的資料集形態. 單向的Cursor有很好的存取效率, 對于網頁, 報表顯示等資料展示情況可直接以此來應付, 但對于使用者來回瀏覽, 編輯的作業要求, 這種存取方法就會出現您所說的問題. 解決的方法一: 可以整合TDataSetProvider和TClientDataset元件的特性, 將單向資料集轉換成本機端的雙向資料集, 再指定資料感知元件顯示出來, 這樣即可瀏覽編輯資料, 也可利用快取更新機制來異動資料. 以TSQLDataSet舉例, 其設定方法如下:
1. SQLConnection1元件和SQLDataSet元件正常設定, 并連接資料庫, 處于Open狀態, 您應該已經完成了吧.
2. 在Form中各加一個ClientDataSet元件, DataSource元件, DataSetProvider元件.
3. 屬性設定:
ClientDataSet1的ProviderName屬性值設定為DataSetProvider1
DataSource1的DataSet屬性值設定為ClientDataSet1
DataProvider1的DataSet屬性值設定為SQLDataSet1
正确連接后, 將ClientDataSet元件之Active屬性設定True 經過以上的步驟, 此時已經利用ClientDataSet元件來對資料庫進行動作, 所以在更新資料庫的異動時, 需要注意使用: ClientDataSet1.ApplyUpdates(-1); 其它的方法請參考ClientDataSet相關的資料. 解決的方法二: 如果只是要維持應用程式和資料庫兩層架搆, 第一種解決的方法就顯得复雜了一些, 其實Borland還提供了一個叫作SQLClientDataSet的元件, 這個就是整合了ClientDataSet元件, SQLDataSet元件和DataSetProvider元件, 可以簡化設定的建置程式, 設定方法如下:
1. SQLClientDataSet元件屬性設定:
ConnectionName屬性值請設定為資料庫名稱
CommandType屬性值請指定擷取資料集的方法, ctTable;ctQuery...有點像ADODataSet的設定.
CommandText屬性值會根据CommandType屬性值的設定出現選擇, 如果CommandType屬性值設定為ctTable, 其內容則會出現所有的資料表名稱用以選擇, 如果CommandType屬性值設定為ctQuery的話, 就需要輸入SQL指令了.
Active屬性值請設為True.
2. DataSource的DataSet屬性值設定為剛才設定屬性的SQLClientDataSet.
3. 加入資料感知元件, 連接上DataSource 經過以上的步驟, 此時已經利用SQLClientDataSet元件來對資料庫進行動作, 所以在更新資料庫的異動時, 需要注意使用: ClientDataSet1.ApplyUpdates(-1); 參考看看! =====================
努力,相信會獲得美麗!
忻晟 發表人 - cashxin2002 於 2003/09/11 18:59:59
------
忻晟 |
chrislao
初階會員 ![]() ![]() 發表:86 回覆:69 積分:36 註冊:2002-12-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |