目前遇到这样一个问题:
数据库SQL SERVER中的一个表 A,其中有一个自动加1的字段ID,也就是int的标识字段。我对这个表添加记录后,post-ApplyUpdate,之后记录提交正确,但是这个ID字段是空的——数据没有更新回来。由于这个字段是作为主键,那么再继续添加记录的时候,由于都是空的,所以CLIENT认为“主键冲突”。 我对这个问题是这样考虑的,标识字段的数据只有真正写到数据库中的时候,才会为这个字段产生一个值。我在CLIENT提交数据的时候,这个字段是不可编辑的(只读)。提交到了应用服务器(中间层、远程数据模板)那里的时候,这个字段还是空的。当应用服务器中对应的TADOTable真正提交到SQL SERVER的时候,这个字段才被SQL SERVER赋值。
由于以上的原因,CLIENT提交数据后,这个字段的值是空的——虽然数据库中实际的字段上是已经有值了的,但是并没有更新回来。 我尝试把应用服务器的Provider的option里面设置了AutoRefresh,在客户端ApplyUpdate后调用Refresh,都没有作用(如果调用RefreshRecord会提示其他用户修改了该字段)。目前,我只采用了一个临时变通的办法,就是ApplyUpdate后把ClientDataSet Close 后然后再 Open。这样就会更新了——这表示应用服务器那里的数据是正确的,只是没有及时的更新回到客户端。 推而广之,如果是数据库触发器的修改了数据,也不能及时的更新到客户端。 请问:如何正确的更新这种数据?我不知道该用哪些设置或者调用什么函数。特别是,如果这个字段没有任何特别的特征(比如索引、主键之类的)。 谢谢。
数据库SQL SERVER中的一个表 A,其中有一个自动加1的字段ID,也就是int的标识字段。我对这个表添加记录后,post-ApplyUpdate,之后记录提交正确,但是这个ID字段是空的——数据没有更新回来。由于这个字段是作为主键,那么再继续添加记录的时候,由于都是空的,所以CLIENT认为“主键冲突”。 我对这个问题是这样考虑的,标识字段的数据只有真正写到数据库中的时候,才会为这个字段产生一个值。我在CLIENT提交数据的时候,这个字段是不可编辑的(只读)。提交到了应用服务器(中间层、远程数据模板)那里的时候,这个字段还是空的。当应用服务器中对应的TADOTable真正提交到SQL SERVER的时候,这个字段才被SQL SERVER赋值。
由于以上的原因,CLIENT提交数据后,这个字段的值是空的——虽然数据库中实际的字段上是已经有值了的,但是并没有更新回来。 我尝试把应用服务器的Provider的option里面设置了AutoRefresh,在客户端ApplyUpdate后调用Refresh,都没有作用(如果调用RefreshRecord会提示其他用户修改了该字段)。目前,我只采用了一个临时变通的办法,就是ApplyUpdate后把ClientDataSet Close 后然后再 Open。这样就会更新了——这表示应用服务器那里的数据是正确的,只是没有及时的更新回到客户端。 推而广之,如果是数据库触发器的修改了数据,也不能及时的更新到客户端。 请问:如何正确的更新这种数据?我不知道该用哪些设置或者调用什么函数。特别是,如果这个字段没有任何特别的特征(比如索引、主键之类的)。 谢谢。
解决方案 »
- ado连接 EXCEL 查询的时候加上WHERE条件报错
- 服务器端怎么知道客户端发送的数据格式?(用的TTCP)
- 【高分请教】从后台取csv文件,在前台存成excel
- GetScrollPos函数为何总是返回0?
- 请教DLL初级问题
- 庆祝升星,散分!
- 请问大家如何用DELPHI6.0(BDE)和数据库SQL SERVER2000进行连接?
- 编了一个播放器,想做出像WINAMP或MediaPlayer那样的SKIN,我该用什么控件?
- 我是小新,我只有5岁,你在线吗?
- 类似与delphi5的工具栏的制作
- 上次问了个安装Flatstyle控件的问题,但。。。。
- 如何在oracle数据库中修改相同记录的数据
http://expert.csdn.net/Expert/topic/1964/1964802.xml?temp=.2390406
看 comanche(太可怕) 的回复
补充的是: MaxID := AdoQry.FieldByName('MAX_ID').AsInteger;
DeltaDS.FieldByName('ID').NewValue := MaxID;
在
DeltaDS.FieldByName('ID').NewValue := MaxID;
之前加上一句话
DeltaDS.FieldByName('ID').ReadOnly := False;