ClientDataSet的字段赋值为空后,添加的记录马上删除或修改出错 (50分)

  • 主题发起人 主题发起人 pnljh
  • 开始时间 开始时间
P

pnljh

Unregistered / Unconfirmed
GUEST, unregistred user!
一个ClientDataSet的Data属性被赋值为X,新增一条记录,ApplyUpdates后,
马上又修改或此记录,在ApplyUpdates时为何为出现
Record changed by another user。的错误。
现发现是有些字段(字符型)被赋值为空字串后就会出此问题。赋值为空在ApplyUpdates
时却没有出错。(字段允许为空)
但是完全不赋值(也就相当于空值吧)却不会出错。
 
>>一个ClientDataSet的Data属性被赋值为X,新增一条记录,ApplyUpdates后,
>>马上又修改此记录,在ApplyUpdates时为何为出现
我看是属于提交以后再修改,而不是Data的问题吧,刷新一下吧
 
问题是(CommandText中选出的数据与Data属性不一致,由于数据作了更改,
Data又与X不一致),怎么刷新?
 
你是ClientDataSet1.Data:=X;
这样赋值的么,
那么请仔细坚持你的
ClientDataSet1.Provider;
ClientDataSet1.RemoteServer;
的设置吧
 
不是data的问题,而是操作的问题和各种设置的问题
 
请各位大侠指点,急啊,好几个功能都有此问题。
拜托,快点,急死了。
 
实际上还是刷新的问题,
applyuadate后close 再 open,再修改刚才的记录就可以了。
 
commandtext执行出来是空数据,然后才加上去的,如果close再open,数据就出不来了。
 
//实际上还是刷新的问题,
//applyuadate后close 再 open,再修改刚才的记录就可以了。
或者在applyuadate后进行REQUERY。
 
第一次ApplyUpdates后数据是否更新成功?
察看客户端的这笔要修改的数据是否已经存在于数据库中!
 
第一次更新是成功的,可以查找到。
我做了四个,有两个有此问题,另两个又没有此问题,好烦!!!
 
X里字段的定义中一定有些字段包含有默认值,如果是access数据库的话数值型字段
的默认值是0,这样在你提交数据时,如果这些有默认值的字段一没有输入数据,提交
以后数据库会自动为这写没有输入数据的字段应用默认值。也就是说X提交后,数据库
又对数据源应用了默认值,X的记录集已经变成脏的了。
解决办法
1 去掉数据库里的默认值
2 提交数据库时保证定义默认值的字段不要为null (也就是不让数据库应用默认值)
希望可以解决你遇到的问题。
 
符值为空和不符值时ApplyUpdates时这条记录时不被提交的。
所以你编辑时更本就编辑不了这条记录的,你可以用dbgrid和DBNavigator
组合起来检查一下,问题到底出在那里
 
问题已经解决了,全都没说对,不过alvinlv和yangyugw说得还是很有道理的。
都是Delphi的Bug惹的祸。解决方案请看下回分解。
 
[:D][:D][:D]请快分解啊,我也遇到了这个问题
 
虽然各位大虾没能帮上忙,但我还是决定帮大家一个忙,公布解决方案。
ClientDataSet的FieldByName有Bug。
主要是指赋值方面,比如FieldByName('字段名').AsString:='';
将此语句改为FieldValues['字段名']:='';
问题即解决。有的人也用FieldByName,却没事,这就不知道了,反正我用的时候有事。
不过各位不要用if FieldValues['字段名']='' then
语句来判断字段是否为
空字串,取值的时候还是用回FieldByName。
以上是此问题本人的解决方案,希望能帮上忙。
也希望各位在提出问题以后,若问题解决,请在接受答案的时候,给出解决方案。
 
多人接受答案了。
 
FieldByName('字段名').AsString 只能赋字符串,就算是''也是字符串
FieldValues['字段名']='' fieldvalues是操作variant类型,可以赋空值
问题是不是出在这上面,你可以检查一下。
另外FieldValues['字段名']=''速度要慢得多,因为它需要类型转换。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部