所以建 你 用 TSimpleDataSet
我 人一向不使用 TSimpleDataSet (以李先生的建 是, 於一些 Simple 的事 , 可交由它 理, 其它的事 是以分成三元件的撰 方式 佳)
使用 TSQLQuery+TDataSetProvider+TClientDataSet 有 的好
要改用 ADO , 只要把 TSQLQuery 成 TADOQuery 即可
要改成三 式 , 只要把 TSQLQuery 和 TDataSetProvider 搬到中 即可"
方法2:(未试过,备用)
from http://www.diybl.com/course/7_databases/database_other/200838/103354.html
''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)
作者“清风乱翻书”