200分,还是三层结构中数据更新的问题:ADO产生错误的SQL更新语句!!(200分)

  • 主题发起人 主题发起人 clncln
  • 开始时间 开始时间
C

clncln

Unregistered / Unconfirmed
GUEST, unregistred user!
最常见的三层结构了:
SQL7+ADO+Midas:
最常见的ADOcommandText:
select * from 表1,表2 where 表1.ID=表2.ID and 时间=今天 order by 时间
(字段ID为KEY)
一开始,小弟的DataSetProvider(DSP)及AdoDataSet(ADS)的数据字段均为默认
显然在客户端是不可能更新的,一更新
要么“Unable to find the record.....”,
要么“Record has changed by another”云云
好,李维的书在这呢,我改!!
一呀改:DSP:updatemode->upwherechanged,resolvetodataset->true
1小呀改 id字段:pflnwhere->true;
id字段:pflnkey->true
客户端applyupdate(0)!
邦!!!!!
'项目在所需的名称或序数中未被发现'(我想这是ADO的错误)
'record changed by another'(我想这是Midas的错误)
Sql7的profile没有更新纪录
2小呀改 id:pflnwhere->false;
id:pflnkey->true
客户端applyupdate(0)!
邦!!!!!
'项目在所需的名称或序数中未被发现'
'record changed by another'
Sql7的profile没有更新纪录
3小呀改 id:pflnwhere->false;
id:pflnkey->false;(id字段的Providerflag全是false了!!)
客户端applyupdate(0)!
邦!!!!!
'项目在所需的名称或序数中未被发现'
谔???
没有midas的错误喔?!!
Sql7的profile有‘update .......’喔?!

我成功了?!!定睛一看:Sql7profile的语句是错误的!!!
“update 表1 set 字段1=@p1,字段2=@p3 where id=@p4 and 字段1=@p5,字段2=@p6”
@p4值是错的!!不是更新的纪录的id,而是客户端第一条纪录的id值!!!
如果客户端再随意更新一条纪录,@p4就会变成客户端第二、第三.....纪录的id值

一句话:ado自动产生了更新SQL语句,但是错的
我@#@#$#%#$%#%

二呀改:DSP:updatemode->upwherekeyonly,resolvetodataset->true
1小呀改 id字段:pflnwhere->true;
id字段:pflnkey->true
客户端applyupdate(0)!
邦!!!!!
(ADO没有报错)
'record changed by another'
Sql7的profile没有更新纪录

2小呀改 id字段:pflnwhere->false;
id字段:pflnkey->true
客户端applyupdate(0)!
邦!!!!!
(ADO没有报错)
'record changed by another'
Sql7的profile没有更新纪录
不过更奇怪:
此时有时能够更新,@p4值为客户端更新纪录的下一纪录的id值
我实在没折了!!!!!




 
据我的经验:'record changed by another'是因数据库表中有完全相同的记录,即该表不满足2nf
 
可是我的ID在SQL7里面是自增的,不大可能有完全相同记录吧 ?
 
你的问题好像很怪,我去试一试。
 
to clncln:
你的这种情况我也遇见过,当时我传sql的时候,where后面的参数没有传过去,
然后我就自己写函数动态传参数,你试试看,也许行的!祝你好运!
 
全部都用初始的设置,
你先用clientdataset,并且再用一个DBgrid,在dbgrid中改值,然后再applyupdate
希望可以帮到你
 
To 苦瓜
试了,不行:((
(..一开始,小弟的DataSetProvider(DSP)及AdoDataSet(ADS)的数据字段均为默认..)
 
我也用的都是缺省的,根本就没有什么设置,你出错的信息是什么,可以告诉我吗,
或者你试试,只用单独的一个表看看会不会好点.也许是你连接查询更新的问题好吗,谢谢你.
 
To苦瓜
我在应用服务器中跟踪,在DSP的beforeupdaterecord事件前,有中文的错误信息
'项目在所需的名称或序数中未被发现',我估计是ADO的错误,如果ID的pflnkey为true,
则beforeupdaterecord事件后有'record changed by another'的错误信息
 
下载delphi5的升级补丁,里面已经修正了这个错误!!!
 
To大木头
你是说ADO的补丁吗,我已经装过了:(
 
移除delphi,update1,update2,然后重装一遍again,因为我也曾经如此
 
原因是我的ADODataset中没有设pfkey发生这种情况
 
后退
顶部