最近我做了一个com+ 的小程序。功能是用客户端程序调用中间的数据更新模块,然后再用中间的数据更新模块调用数据模块,由数据模块对数据库进行更新。
问题:我的查询正常,但更新数据时总是出错,例如:我修改查询数据的第一条记录的第一个字段的值,然后点击更新后发现是修改的最后一条记录,并且最后一条记录的第一个字段是我修改的值,其余的字段值都变成第一条记录的值了。并且不能进行删除,但添加正常。
各个控件的属性已设置。数据模块用:adoconnection,adoQuery,Datasetprovider
数据模块接口:ImtsTextUpdate
数据更新方法:TestMyUp
procedure TmtsTextUpdate.TestMyUp(var vDatas: OleVariant;
iMaxErrors: Integer; var iErrorCount: Integer);
var OwnerDatas:OleVariant;
begin
try
dspUPworker.ApplyUpdates(vDatas,iMaxErrors,iErrorCount,OwnerDatas);
setcomplete;
except on E:exception do
begin
setabort;
end;
end;
end;
数据更新模块用:dcomconnection
数据模块接口:ImtsTestUpdate
数据更新方法:UpdateMy
procedure TmtsTestUpdate.UpdateMy(var vDatas: OleVariant;
iMaxError: Integer; var iErrorCount: Integer);
var serverObj:Iappserver;
QwnerDatas:OleVariant;
begin
try
dcomcupdate.AppServer.TestMyUp(vDatas,iMaxError,iErrorCount);
setcomplete;
except on E:exception do
begin
setabort;
end;
end;
end;
客户端:DBgrid,Clientdataset,DataSource
数据更新按钮:Button2
procedure TForm2.Button2Click(Sender: TObject);
var Udate:ImtsTestUpdate;
iMaxError,iErrorCount:integer;
vDatas:OleVariant;
begin
vDatas:=clientdataset1.Data;
Udate:=ComtsTestUpdate.CreateRemote('jjj');
Udate.UpdateMy(vDatas,iMaxError,iErrorCount);
clientdataset2.Data:=vDatas;
end;
问题:我的查询正常,但更新数据时总是出错,例如:我修改查询数据的第一条记录的第一个字段的值,然后点击更新后发现是修改的最后一条记录,并且最后一条记录的第一个字段是我修改的值,其余的字段值都变成第一条记录的值了。并且不能进行删除,但添加正常。
各个控件的属性已设置。数据模块用:adoconnection,adoQuery,Datasetprovider
数据模块接口:ImtsTextUpdate
数据更新方法:TestMyUp
procedure TmtsTextUpdate.TestMyUp(var vDatas: OleVariant;
iMaxErrors: Integer; var iErrorCount: Integer);
var OwnerDatas:OleVariant;
begin
try
dspUPworker.ApplyUpdates(vDatas,iMaxErrors,iErrorCount,OwnerDatas);
setcomplete;
except on E:exception do
begin
setabort;
end;
end;
end;
数据更新模块用:dcomconnection
数据模块接口:ImtsTestUpdate
数据更新方法:UpdateMy
procedure TmtsTestUpdate.UpdateMy(var vDatas: OleVariant;
iMaxError: Integer; var iErrorCount: Integer);
var serverObj:Iappserver;
QwnerDatas:OleVariant;
begin
try
dcomcupdate.AppServer.TestMyUp(vDatas,iMaxError,iErrorCount);
setcomplete;
except on E:exception do
begin
setabort;
end;
end;
end;
客户端:DBgrid,Clientdataset,DataSource
数据更新按钮:Button2
procedure TForm2.Button2Click(Sender: TObject);
var Udate:ImtsTestUpdate;
iMaxError,iErrorCount:integer;
vDatas:OleVariant;
begin
vDatas:=clientdataset1.Data;
Udate:=ComtsTestUpdate.CreateRemote('jjj');
Udate.UpdateMy(vDatas,iMaxError,iErrorCount);
clientdataset2.Data:=vDatas;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货