请问如何将 自增字段 返回给客户端(100分)

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

huawdg

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DatasetProvider 和 ClientDataSet
表中有一字段为自增字段,客户端提交一个新记录后,服务端以一个自增字段作为关键字。
问题是,服务端不将此自增字段的新值返回到客户端,只有客户端刷新后才能得到这个值。
如果客户端不刷新,立即再对这条记录进行更改,提交时出错“Update Failed”,找不到关键字(因客户端的关键字没有更新)
 
我采用了以下方法解决问题:
在服务端的DatasetProvider.AfterUpdateRecord事件中,
if UpdateKind=ukInsert then
begin
AQuery.SQL.Add('SELECT MAX(ID) AS NewID FROM table');
DeltaDS.FieldByName('ID').NewValue:=AQuery.FieldValues['NewID'];
end;
但总觉得此方法太笨,请问有无更好方法?
 
一个可能更笨的办法,增加记录不编辑先Post再说
 
请大家帮忙 UP,有分相赠!
 
我也碰到同样问题。up
 
你要定义这个Insert函的返回值就是这个这个主键就行了!然后在客户端将这个值给你这条记录
 
可以建一个FORM基类处理CLIENTDATASET的POST与DELETE事件。
或者在服务端写一个接口方法。

 
楼主的方法在下认为不妥,如果在你插入数据后、取最大值之前其他用户插入了数据,这样
你取到的最大值(假设取到)就是其他用户插入数据的自增长字段的值。
这个问题如果在Oracle下好解决,通过Sequence来处理很简单,但如果在其他数据库中可能就
得麻烦一些:可以根据插入数据的信息到数据库中去检索刚刚插入的记录,从而得到自增长
字段的值。
 
请大家再出出主意,谢谢
 
算了,算了,大家也没有更好的办法。
不过还是感谢各位的关注!!
 
多人接受答案了。
 
后退
顶部