关闭

Delphi tips

197人阅读 评论(0) 收藏 举报

1. When using TDataSet, if you want to check the data is changed or not, you can use ChangeCount porperty, but before this, you should Post all modifications. ChangeCount collects the counts of Posts. Or you can use TDataSet.Modified to check the modifications.

 

2. ''record not found or changed by  another user'',这个错误是我在做项目时,遇到的问题,找了一些参考才解决。如下:

所用的控件有:TDataSetProvider,TADOQuery,TClientDataSet

1.当 DataSetProvider.UpdateMode=upWhereAll 时,update时 where 是指定全部字段,比如,你有a、b、c 3个字段,修改了c字段,在app server中修改的命令是update ... set c=新c where a=旧a and b=旧b and c=旧c

如果 旧的a、b、c之一 已经被其他人改掉了,那where就找不到合适的记录来修改了。所以报告“记录被其他人修改”,这个问题和“锁定”是无关的。

2.当 DataSetProvider.UpdateMode=upWhereKeyOnly 时,update时 where 是指定key字段,比如,

你有a、b、c 3个字段,修改了c字段,a是key field在app server中修改的命令是

update ... set c=新c where a=旧a (只比较a字段)你的程序应该设计为客户修改不到主键字段的值,这样

你的客户只能修改到其他字段的值,其他字段不会出现在where中,就不会出现你说的问题了。

(用第2种方法解决,注意如果你的表原来没有主键的,需要双击dataset,添加你的所有field,在有唯一值的field的 ProviderFlasgs 属性里面 InKey 设置为 true (该field必须是有唯一值的,能相当于主键的,也就是能唯一确定该行记录的),TADOQuery,TClientDataSet控件里的唯一值的field字都要设置InKey为true)

 

3. You can use CloneCursor function to get a copy of the clientdataset.

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:24350次
    • 积分:392
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:19篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论