碰到修改日期的数据值 就有这样的错误:row cannot be located for updating(200分)

  • 主题发起人 主题发起人 hehuan
  • 开始时间 开始时间
H

hehuan

Unregistered / Unconfirmed
GUEST, unregistred user!
碰到修改日期的数据值 就有这样的错误:row cannot be located for updating <br><br>row cannot be located for updating .<br> &nbsp; &nbsp;some values may have been changed since it was last read<br><br>代码如下:<br><br> &nbsp; &nbsp; &nbsp; ADOQuery1.Close;<br> &nbsp; &nbsp; &nbsp; &nbsp;ADOQuery1.SQL.Add('select * from inscription where ins_id='+ IntToStr(PosMgrInscription.idInscription));<br> &nbsp; &nbsp; &nbsp; &nbsp;ADOQuery1.Open;<br> &nbsp; &nbsp; &nbsp; &nbsp;ADOQuery1.Edit;<br> &nbsp; &nbsp; &nbsp; &nbsp;ADOQuery1.FieldByName('ins_duree_cert1').AsString := duree1.Text;<br> &nbsp; &nbsp; &nbsp; &nbsp;ADOQuery1.Post;<br> &nbsp; &nbsp; &nbsp; &nbsp;ADOQuery1.Close;<br>这样没有问题<br><br>但是实际上还需要修改多个类型的值,因此如下:<br> &nbsp; &nbsp; &nbsp; &nbsp;ADOQuery1.Edit;<br> &nbsp; &nbsp; &nbsp; &nbsp;ADOQuery1.FieldByName('ins_duree_cert1').AsString := duree1.Text;<br> &nbsp; &nbsp; &nbsp; &nbsp;ADOQuery1.FieldByName('ins_datefin_cert1').AsDateTime := Trunc(datefin1.Date); // 数据库定义日期类型为0000-00-00<br> &nbsp; &nbsp; &nbsp; &nbsp;ADOQuery1.Post;<br>就出现了如上错误。查了DFW历史数据库,所说的非定义主键、记录重复等等情况,在我这里不存在。最大的可能是DELPHI ADO本身的bug。但是我不修改日期型字段就不出错,怪! 我是用Winxp +Delphi7+update1.1+odbc+ mysql5 ,<br><br>把日期型数值插入数据库时没有问题。代码如下:<br> &nbsp; &nbsp;with DM.Query1 do<br> &nbsp; &nbsp; &nbsp;SQL.Add('Select * from Classe');<br> &nbsp; &nbsp; &nbsp;Open;<br> &nbsp; &nbsp; &nbsp;Append;<br> &nbsp; &nbsp; &nbsp;fieldbyname('cls_datebegin').AsDateTime:= datebegin.Date;<br> &nbsp; &nbsp; &nbsp;fieldbyname('cls_dateend').AsDateTime:= dateend.Date;<br> &nbsp; &nbsp; &nbsp;Post;<br> &nbsp; &nbsp; &nbsp;Close;<br>还请各位大大指教。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2384649<br>数据库棘手问题 <br><br>hzjone (2004-01-09 19:51:00) &nbsp;<br>这是ADO与BDE的通病。最好不使同一时间内有两个以上的前台程序修改同一个字段值。直接用SQL可以解决问题。例如用,<br>用户一<br>UPDATE TABLE SET X=<br>用户二<br>STR:=ADOQUERY。FIELYBY(X)。ASSTRING;<br>UPDATE TBALE SET X=’‘ WHERE X=STR<br>可以解决的。
 
ADOQuery1.FieldByName('ins_datefin_cert1').DataType := dtDateTime;<br>ADOQuery1.FieldByName('ins_datefin_cert1').AsDateTime := Trunc(datefin1.Date);<br>前面一定要加一句这个,因为DateTime和Double实际上一样的,如果不指定dtDateTime的话,在Post的时候生成的SQL语句,会把ins_datefin_cert1按照浮点数提交,这样就出错了.<br>另外,上面我第一行可能拼写有错误,你查查帮助,反正是设置数据类型的,找找就知道了.
 
无法定位数据(行).<br>请在inscription中建个主键.
 
to zqw0117,<br> 的确是你所说的问题。非常感谢!!!<br><br>不过奇怪啊,一样的写法:<br>ADODataSet1.FieldByName('ins_datefin_cert1').DataType := dtDateTime;<br>ADODataSet1.FieldByName('ins_datefin_cert1').AsDateTime := Trunc(datefin1.Date);<br>却不行。这是为什么呢?<br>顺便问一下,ADODataSet1与ADOQuery有什么区别?
 
上面的写法可以如下,不用加其它语句..<br>ADODataSet1.FieldByName('ins_datefin_cert1').AsString:=FormatDateTime('YYYY-MM-DD',Date);<br><br>AdodataSet和AdoQuery差别不大<br>都是从TDataSet继承下..<br>使用上面也没多大区别..<br>引SQL有点区别: AdoQuery.Sql <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AdoDataSet.CommandText<br><br><br>可能AdoQuery是为了兼顾以往的BDE用户(BDE基本上都是使用Tquery)<br>不必太在意区别,用哪个看个人喜好..
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
965
import
I
S
回复
0
查看
941
SUNSTONE的Delphi笔记
S
后退
顶部