三层数更新问题,搞了我一个多月,或许你们从来都没碰到过(40分)

  • 主题发起人 主题发起人 hyxic
  • 开始时间 开始时间
H

hyxic

Unregistered / Unconfirmed
GUEST, unregistred user!
服务器用remotedatamodule,客户端用socketconnection连接
1。我的客户端代码:
function TSysDM.ApplyUpdates(dsClient:olevariant):Integer;//提交修改到数据库
var
ErrMsg:Variant;
i:Integer;
begin
ErrMsg:=0;
for i:=0 to dsCount-1do
begin
dsClient.CheckBrowseMode;
if dsClient.ChangeCount>0 then
SckConn.AppServer.ApplyUpdates(dsClient,ErrMsg);
end;
Result:=ErrMsg;
end;
2。我的服务器端代码:
procedure TEliteSrv.ApplyUpdates(dsClient:olevariant;
var ErrMsg: OleVariant);
var
ECount:Integer;
cmp:TComponent;
cmpdsp:TDataSetProvider;
begin
cmp:=FindComponent(CustName);
If (not Assigned(cmp)) or (not (cmp is TDataSetProvider)) then
SysUtils.Abort;
cmpdsp:=TDataSetProvider(cmp);
try
if not VarIsNull(CustVar) then
begin
cmpdsp.ApplyUpdates(CustVar,0,ECount);
If ECount>0 then
begin
ErrMsg:=ECount;
SysUtils.Abort;
end;
end;
except
ErrMsg:=ECount;
end;
end;
第一次保存一点问题都没有,如果连续保存的话就出问题了,怎么也保存不了,提示:无法定位行记录或某些正用户在使用它?
晕了一个多月,那位高手指点一下,在线送分,家当全给了!!!!!!!!!!
 
1、建议单步跟踪一下
2、检查一下每个表是否含有主键
3、怎么叫连续保存?
4、更改更新方式
 
主键设了,自动增量的
 
就是这些默认值的问题,你显示的指定这些值这可以了
再不就新建一跟踪,看看在服务器上最终提交的SQL语句不就知道问题了
 
还有,你真想获得帮助,可以把完整的demo代码贴出,
有空大家可以帮你调试一下。
 
[:)]
其实这中情况(第一次保存一点问题都没有,如果连续保存的话就出问题了,怎么也保存不了,提示:无法定位行记录或某些正用户在使用它)
是因为三层结构是把数据读取到本地,但你第一次保存到数据库后,数据库的数据更改了,
但本地的实际数据没有变化,只是他的副本发生变化,所以你再点保存就出错了
解决方法是,你每次保存后 都重新从数据库获取数据集
 
如果是数据不一致,你可以试一下将
DataSetProvider的options属性设一下???changes设成true,
而没有必要重新读数据
 
搬个凳子听课。
 
主键设了,《自动增量的》
这是问题的所在!
 
多人接受答案了。
 
后退
顶部