線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1220
推到 Plurk!
推到 Facebook!

DataSet 間快速拷貝一條記錄

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-25 12:05:57 IP:61.221.xxx.xxx 未訂閱
此為轉貼資料 DataSet 間快速拷貝一條記錄 在一個資料庫應用程式中,我們經常要將記錄從一個 dataset 拷貝到另一個 dataset。作?一名 Delphi 程式師,你其實只需要一條命令。 回答: 通常,你完成此項任務時使用 TBatchMove 構件。但 TBatchMove 也有不合適的情況: - 你並不希望拷貝所有的記錄,也不想使用篩檢程式。 - 你希望用到目的 DataSet 的有效事件(如 BeforPost,OnValidate,等)。 - 或者更壞的情況,兩 DataSet 的結構並不相同。 使用下面的簡單過程,上面的問題都可以被解決,所有欄位中的資料將被拷貝到另外一個 Dataset 中的同名欄位中。但這裏面也存在一些限制: - 不能拷貝查找和計算欄位 - 當存在相同欄位名但資料類型不同時,你需要先使用 Assign 判斷。 - 當然,目的欄位不能是唯讀的。 procedure CopyRecord(Source, Destination: TDataSet); var Ind:longint; SField, DField: TField; begin for Ind:=0 to Source.FieldCount - 1 do begin SField := Source.Fields[ Ind ]; DField := Destination.FindField( SField.FieldName ); if (DField < > nil) and (DField.FieldKind = fkData) and not DField.ReadOnly then if (SField.DataType = ftString) or (SField.DataType < > DField.DataType) then DField.AsString := SField.AsString else DField.Assign( SField ) end; end; 舊方法: DEST.Open; ORIGIN.Open; while not ORIGIN.Eof do begin if ORIGINTYPE.AsString = 'T' then with ORIGIN do begin DEST.Append; DEST.FieldByName('TYPE').AsString := ORIGINTYPE.AsString; DEST.FieldByName('FIRSTNAME').AsString := ORIGINFIRSTNAME.AsString; DEST.FieldByName('LASTNAME').AsString := ORIGINLASTNAME.AsString; DEST.FieldByName('CPF').AsString := ORIGINCPF.AsString; DEST.FieldByName('PARTY').AsString := ORIGINPARTY.AsString; DEST.Post; end; ORIGIN.Next; end; 使用該過程的調用示範: DEST.Open; ORIGIN.Open; while not ORIGIN.Eof do begin if ORIGINTYPE.AsString = 'T' then begin DEST.Append; CopyRecord( ORIGIN, DEST ); DEST.Post; end; ORIGIN.Next; end; 此過程在使用 TQueries, TClientDataSet 和其他 TDataset 子類時,工作良好。 希望對大家有所幫助。.
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-05-15 19:26:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!