比如说我有两个数据集:clientDataset1,clientDataSet2;
这两个数据集的字段是完全相同,当执行到下面的代码时就出错了:
if clientDataSet2.Data <> clientDataSet1.Data then //出错当然通过FOR循环判断每一个字段的值是否相等是可以判断的,
请问有更好的方法吗?
这两个数据集的字段是完全相同,当执行到下面的代码时就出错了:
if clientDataSet2.Data <> clientDataSet1.Data then //出错当然通过FOR循环判断每一个字段的值是否相等是可以判断的,
请问有更好的方法吗?
var
Stream1,Stream2: TMemoryStream;
begin Stream1:= TMemoryStream.Create;
Stream2:=TMemoryStream.Create;
try
ClientDataSet1.SaveToStream(Stream1);
ClientDataSet2.SaveToStream(Stream1);
if Stream1.Size<>Stream2.Size then
ShowMessage('不相同')
else if not CompareMem( Stream1.Memory,Stream2.Memory,Stream1.Size) then
ShowMessage('不相同')
else
ShowMessage('相同');
finally
Stream2.Free ;
Stream1.Free;
end;
end;
if Stream1.Size <>Stream2.Size then
只是比较流的大小,并不能说明两个记录就是相同的
var
Stream1,Stream2: TMemoryStream;
begin Stream1:= TMemoryStream.Create;
Stream2:=TMemoryStream.Create;
try
ClientDataSet1.SaveToStream(Stream1);
ClientDataSet2.SaveToStream(Stream1);
if Stream1.Size <>Stream2.Size then
ShowMessage('不相同')
else if not CompareMem( Stream1.Memory,Stream2.Memory,Stream1.Size) then
ShowMessage('不相同')
else
ShowMessage('相同');
finally
Stream2.Free ;
Stream1.Free;
end;
end;
这个是对的,它是先比较大小,如果大小都不一样就表示不同,否则比较内存
ClientDataSet2.Data := ClientDataSet1.Data;之后我对ClientDataSet1进行了一些操作,但还是恢复到原来的样子。
比如有一个字段"AA"的内容为"123456",我对这个字段进行修改成"123",再修改
成"123456"后执行madyak的方法时提示不相同。
执行到
if Stream1.Size <>Stream2.Size then 这句时提示“不相同”.这又不是我想要的结果,似乎Stream1.Size 应该还是等于 Stream2.Size 才对呀。
var
Stream1,Stream2: TMemoryStream;
begin Stream1:= TMemoryStream.Create;
Stream2:=TMemoryStream.Create;
try
ClientDataSet1.SaveToStream(Stream1);
ClientDataSet2.SaveToStream(Stream1);
if Stream1.Size <>Stream2.Size then
ShowMessage('不相同')
else if not CompareMem( Stream1.Memory,Stream2.Memory,Stream1.Size) then
ShowMessage('不相同')
else
ShowMessage('相同');
finally
Stream2.Free ;
Stream1.Free;
end;
end;
ClientDataSet2.Data := ClientDataSet1.Data; 之后我对ClientDataSet1进行了一些操作,但还是恢复到原来的样子。
比如有一个字段"AA"的内容为"123456",我对这个字段进行修改成"123",再修改
成"123456"后执行madyak的方法时提示不相同。
执行到
if Stream1.Size <>Stream2.Size then 这句时提示“不相同”. 这又不是我想要的结果,似乎Stream1.Size 应该还是等于 Stream2.Size 才对呀。
如果跟最初的没有什么变化就不需要保存(因保存要花的时间比较长),
我本来想用clientDataSet1.changeCount来判断是否有变化,
但是这个属性有时也判断不出来。
建议还是逐条检验记录。
也许正如你所说的
"它记录了你一系列的操作和Delta"。