如何比较两个数据集(ClientDataSet1,ClientDataSet2)内容是否相等? (59分)

  • 主题发起人 主题发起人 dlmn
  • 开始时间 开始时间
D

dlmn

Unregistered / Unconfirmed
GUEST, unregistred user!
如何比较两个数据集(ClientDataSet1,ClientDataSet2)内容是否相等?
 
很简单,在更新前把他们放到个临时表中去不就得了。
 
在DatsetProvider的afterupdateRecord事件中处理,具体可参看联机例子。
procedure Tbys.DSPAfterUpdateRecord(Sender: TObject;
SourceDS: TDataSet;
DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind);
const sp=' ';
UpdateKindStr: array[TUpdateKind] of string = ('修改', '添加',
'删除');
var F: TextFile;
s:string;
//str:UpdateKindStr;
begin
try
s:=DateToStr(Date)+SP+TimeToStr(Time)+SP+
(sender as TDataSetProvider).DataSet.Name+sp+UpdateKindStr[UpdateKind];
AssignFile(F, 'd:/log.txt');
if not FileExists('d:/log.txt') then
Rewrite(F);
Append(f);
Writeln(f,s);
Flush(f);
CloseFile(f);
except
raise;
end;
end;
 
多表的更新在李维的书中写的很详细
如果用ado,直接在客户端applyupdates就可以,不过我没试过
如果用bde,需要一个函数,这个函数在李维的书中有
新值、旧值的问题在书中都有详细的讲解,多看。
 
应用系统不是我作的,我只是监控对哪个表进行那一种操作。人家采用。
那种联接方式,我也不知道。但是,当表的数据发生变化时,如何感知,并记录下来
还有,如何把ClientDataset 中的数据写入sql server
 
用ado直接在客户端applyupdates我试过了,好象也不可以。不知是没属性没设置好还是就是不行,哪位高手试成功了?
 
假如有多个系统,我的系统只是其中之一,当别的系统更改了表中的数据时,如何获得
更改内容,如改动前字段值,改动后字段值。SqlServer,Oracle下可以建触发器,而Access
Foxpro之类的数据库则根本没有触发器的概念
 
比较ClientDataSet1.XMLData 和ClientDataSet2.XMLData
 
如果是DELPHI6,可以直接使用XMLData来比较:
var
s1,s2:widestring;
begin
s1:= clientdataset1.XMLData;
s2:=clientdataset2.XMLData;
比较S1和S2是否相等.....
 
后退
顶部