为什么DELPHI5的TClientdataset的ApplyUpdates()问题?

lt2000 2001-07-13 12:17:51
为什么在TClientdataset的insert后,再ApplyUpdates却不能取出自动增长字段的值?
是不是不能取出来呀?
...全文
184 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
radar 2001-08-08
  • 打赏
  • 举报
回复
gz
sundaylh 2001-08-08
  • 打赏
  • 举报
回复
到底谁的方法好?
dana 2001-07-20
  • 打赏
  • 举报
回复
谁对了
lt2000 2001-07-16
  • 打赏
  • 举报
回复
谢谢了,我要给分了。
chills 2001-07-14
  • 打赏
  • 举报
回复
To BlueTrees:
1,在中间层计算太麻烦,因为需要多个应用服务器之间通信,如果不进行通信,会出现关键字重复。
2,对于第二种办法,如果这个自动增长字段值为关键字,并且是唯一的Unique字段,SQL查询找不到该记录
lt2000 2001-07-14
  • 打赏
  • 举报
回复
to comanche(太可怕) :refresh 也不行
to BlueTrees(蜗牛) :先试试看,谢谢
BlueTrees 2001-07-14
  • 打赏
  • 举报
回复
用GUID,这样就不用在多个服务器间通讯,也能保证全局唯一!!!!
BlueTrees 2001-07-14
  • 打赏
  • 举报
回复
你可以用GUID作为关键字,绝大多数的情况下可以保证全球唯一!!!!!!!,况且插入纪录不能用存储过程吗?
comanche 2001-07-13
  • 打赏
  • 举报
回复
没办法, refresh
yangxb 2001-07-13
  • 打赏
  • 举报
回复
111
BlueTrees 2001-07-13
  • 打赏
  • 举报
回复
对的
BlueTrees 2001-07-13
  • 打赏
  • 举报
回复
有一个好办法,可以这样,去掉所有的数据库的自动增长,改成在服务器端的中间层计算并修改,这时使用ClientDataSet.ApplyUpdate,仍然不能得到中间层修改的值,怎么办呢?在中间层的Provider的Option设置poProgateChanges为True,并且响应Provider的BeforeUpdateRecord事件,在这事件中设置DeltaDS.NewValue为你要的自动增长的值,同样的方法,这样任何的在这个事件中改变的值都能反映到ClientDataSet中,记住一点要用NewValue其它的都不会有用!!!,或者这样,不去掉数据库的自动增长,响应Provider的AfterUpdateRecord,通过SQL查询,或者存储过程的返回参数,得到Insert后的自动增长的值,赋值给DeltaDS.NewValue,这样也能将自动增长的值返回给ClientDataSet。这些方法是我看了一天的Provider的源程序才弄明白的,好好珍惜!!!
Clus 2001-07-13
  • 打赏
  • 举报
回复
先取出再Insert

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧