在三層結構中,TClientDataSet的地位是不可估量的,她的使用正確與否,是十分關鍵的,
本文從如下幾個方面闡述她的使用,但願對你有所幫助.
1.動態索引
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
if (not column.Field is Tblobfield) then//Tblobfield不能索引,二進制
ClientDataSet1.IndexFieldNames:=column.Field.FieldName;
end;
2.多層結構中主從表的實現
設主表ClientDataSet1.packetrecord爲-1,全部記錄
設從表ClientDataSet1.packetrecord爲0,當前記錄sql
3.Taggregates使用
(1)在字段編輯中add new field類型爲aggregates
後設置 Exp ression
設置 Active:=true便可
使用Dbedit的field爲前者便可
(2)使用Aggergates屬性add設計表達試 調用 showmessage(floattostr(ClientDataSet1.Aggregates.Count)); showmessage(ClientDataSet1.Aggregates.Items[0].Value); 4.在單層數據庫中不要BDE 使用ClientDataSet代替table,使用ClientDataSet的loadfilename裝入cds 代替table的tablename的db或者dbf 原來的程序改造方法: 加一個ClientDataSet,使用右鍵assign locate data 後savetofile,再loadfromfile,後刪除table 將原連table的datasource設爲ClientDataSet 惟一注意的是:要將midas.dll拷到system或者當前目錄 5.三層結構的公文包的實現方法 同時設定1:filename(*.cds)2.remote server 6.能夠對data賦值(從另外一個數據集取值) ClientDataSet2.Data:=ClientDataSet1.Data; ClientDataSet2.Open; 或者 ClientDataSet2.CloneCursor(ClientDataSet1,true); ClientDataSet2.Open; 7.附加數據取得 客戶程序嚮應用服務器請求數據。若是TClientDataSet 的FetchOnDemand 屬性設爲True, 客戶程序會根據須要自動檢索附加的數據包如BLOB字段的值或嵌套表的內容。 不然,客戶程序須要顯式地調用GetNextPacket 才能得到這些附加的數據包。 ClientDataSet的packetrecords設置一次取得的記錄個數 8.ClientDataSet與服務器端query鏈接方法 (1)sql內容爲空 ClientDataSet1.Close; ClientDataSet1.CommandText:=edit1.Text;//即sql內容 ClientDataSet1.Open; 對於沒有應用服務器設置filter 如:country like 'A%' filtered=true可實現sql功能 (2)有參數 如服務端query的sql爲 select * from animals where name like :dd 則:客戶端ClientDataSet var pm:Tparam; begin ClientDataSet1.Close; ClientDataSet1.ProviderName:='DataSetProvider1'; pm:=Tparam.Create(nil); pm.Name:='dd'; pm.DataType:=ftString; ClientDataSet1.Params.Clear; ClientDataSet1.Params.AddParam(pm); ClientDataSet1.Params.ParamByName('dd').AsString:=edit1.Text ; ClientDataSet1.Open; pm.Free; end; 9.數據的更新管理 (1)savepoint 保存目前爲止數據狀態,能夠恢復到這個狀態 var pp:integer; begin pp:=ClientDataSet1.SavePoint; ClientDataSet1.Edit; ClientDataSet1.FieldByName('姓名').asstring:='古話'; ClientDataSet1.Post; table1.Refresh; end; 恢復點 ClientDataSet1.SavePoint:=pp; (2)cancel,RevertRecord 取消對當前記錄的修改,只適合沒有post的,若是post,調用 RevertRecord (3)cancelupdate 取消對數據庫全部的修改 (4)UndoLastChange(boolean),changecount 取消上一次的修改,能夠實現連續撤消 參數爲true:光標到恢復處 false:光標在當前位置不動 changecount返回修改記錄的次數,一個記錄修改屢次,返回只一次 但UndoLastChange只撤消一次 10.可寫的recno 對於Ttable和Tquery的recno是隻讀的,而TClientDataSet的recno可讀可寫 ClientDataSet1.recno:=5;是設第五個記錄爲當前記錄 11.數據保存 對於table使用post可更新數據 而ClientDataSet1的post只更新內存數據,要更新服務器數據要使用 ApplyUpdates(MaxErrors: Integer),他有一個參數,是容許發出錯誤的 次數,-1表示無數次,使用simpleobjectbroker時常設爲0,實現自動容錯和負載平衡