为什么不能将clientdataset.delta赋于OleVariant变量中呢? ( 积分: 50 )

  • 主题发起人 主题发起人 newhfy
  • 开始时间 开始时间
N

newhfy

Unregistered / Unconfirmed
GUEST, unregistred user!
中间层代码
procedure Tcom_test.applydata(vdata1, vdata2: OleVariant);
var
ierror:integer;
begin
try
if not (VarIsNULL(vData1) or VarIsEmpty(vData1)) then
DataSetProvider1.ApplyUpdates(vdata1,0,ierror);
if not (VarIsNULL(vData2) or VarIsEmpty(vData2)) then
datasetprovider2.ApplyUpdates(vdata2,0,ierror);
SetComplete;
except
SetAbort;
Raise Exception.Create('数据保存失败!');
end;
end;

客户端
var
vData11,vData21:OleVariant;
begin
if clientdataset1.ChangeCount>0 then
vData11:=clientdataset1.Delta;
if clientdataset2.ChangeCount>0 then
vData21:=clientdataset2.Delta;
DCOMConnection1.AppServer.applydata(vData11,vData21);
end;

用以上语句修改后保存出错,说内存(read)错误,但将
DCOMConnection1.AppServer.applydata(vData11,vData21);
直接改为
DCOMConnection1.AppServer.applydata(clientdataset1.Delta,clientdataset2.Delta);
就可以了,为什么不能将clientdataset.delta赋于OleVariant变量中呢?
 
中间层代码
procedure Tcom_test.applydata(vdata1, vdata2: OleVariant);
var
ierror:integer;
begin
try
if not (VarIsNULL(vData1) or VarIsEmpty(vData1)) then
DataSetProvider1.ApplyUpdates(vdata1,0,ierror);
if not (VarIsNULL(vData2) or VarIsEmpty(vData2)) then
datasetprovider2.ApplyUpdates(vdata2,0,ierror);
SetComplete;
except
SetAbort;
Raise Exception.Create('数据保存失败!');
end;
end;

客户端
var
vData11,vData21:OleVariant;
begin
if clientdataset1.ChangeCount>0 then
vData11:=clientdataset1.Delta;
if clientdataset2.ChangeCount>0 then
vData21:=clientdataset2.Delta;
DCOMConnection1.AppServer.applydata(vData11,vData21);
end;

用以上语句修改后保存出错,说内存(read)错误,但将
DCOMConnection1.AppServer.applydata(vData11,vData21);
直接改为
DCOMConnection1.AppServer.applydata(clientdataset1.Delta,clientdataset2.Delta);
就可以了,为什么不能将clientdataset.delta赋于OleVariant变量中呢?
 
改为variant试一下
 
To: tohh79
改为variant,错误一样的,'Ox011547e8'指令引用'ox0000000004'内存,该内存不能为'read',终止程序,请单击'确定',调试用'取消'.
然后提示'远程过程调用失败'
 
我也用这样的方式,好像没问题。你用的是哪个版本的delpi?你先去掉DCOMConnection1.AppServer.applydata(vData11,vData21);测试一下先。
 
我用delphi6,去掉DCOMConnection1.AppServer.applydata(vData11,vData21);直接用clientdataset1.applyupdate(0);clientdataset2.applyupdate(0);
没问题。
 
delphi7中也不行,提示参数不兼容,但不用参数直接用clientedata.delta就没有问题.
 
问题自己已解决,送分了.
 
接分,顺便关注一下怎么解决的
 
我的习惯是,先把vData11,vData21初始化为Null,这样服务端只用VarIsNULL就可以判断,嘿嘿,题外话[:D]
 
后退
顶部