DELPHI ClientData使用詳解

在三層結構中,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,實現自動容錯和負載平衡
相關文章
相關標籤/搜索