为什么ADOQuery组件无法更新数据?(50分)

  • 主题发起人 主题发起人 ynduanlian
  • 开始时间 开始时间
Y

ynduanlian

Unregistered / Unconfirmed
GUEST, unregistred user!
用ADOQry组件打开一个纪录集,并把它们显示在DBGrid组件中,现在用另一个ADOuery组件ADOQry2去更新这个纪录集中的纪录,执行后数据总不被修改,是怎么回事啊?

我用下面的代码更新纪录:

ADOQry2.Close;
ADOQry2.SQL.Clear;
ADOQry2.SQL.Add('Update Rent set CarID='''+EdtCarID.Text+''' Where CarID=''ABC'''');
ADOQry2.ExecSQL;

数据库是ACCESS的,并没有使用事务。
 
可能是你的修改条件不对,语句没有问题的。仔细检查一下吧
 
更新后刷新下数据集
 
ADOQry2.SQL.Add('Update Rent set CarID='''+EdtCarID.Text+''' Where CarID='''ABC'''');
 
一、这句错写,应改为
ADOQry2.SQL.Add('Update Rent set CarID='''+EdtCarID.Text+''' Where CarID=''ABC'' ');
为了精确,一般都要去空格,改为:
ADOQry2.SQL.Add('Update Rent set CarID='''+trim(EdtCarID.Text)+''' Where CarID=''ABC'' ');
这种错误,delphi会报告的。
二、显示在DBGrid组件的adoquery没有更新。
我们设它为adoquery1,代码如下:
adoquery1.close;
adoquery1.open;
 
一、这句错写,应改为
ADOQry2.SQL.Add('Update Rent set CarID='''+EdtCarID.Text+''' Where CarID=''ABC'' ');
为了精确,一般都要去空格,改为:
ADOQry2.SQL.Add('Update Rent set CarID='''+trim(EdtCarID.Text)+''' Where CarID=''ABC'' ');
这种错误,delphi会报告的。
二、显示在DBGrid组件的adoquery没有更新。
我们设它为adoquery1,代码如下:
adoquery1.close;
adoquery1.open;
 
两个疑问:第一个:用ADOQry1查询后再来更新的话,是要用updatesql控件吧.
第二个:用ADOQry1查询后,所生成的是临时数据表,在sql中好似是不能用ADOQry2直接更新的.
 
连接DBGrid的那个ADOQry是用于查询的啦,你查询出来后当然是将数据放到前台的缓存中了,即使你用另一个ADOQry2做了数据库更新,数据库中的数据是更新了,但当前连着DBGrid的ADOQry中缓存的数据并没有更新啊~所以再一次关闭打开ADOQry就可以了。
ADOQry.close;
ADOQry.open;
 
ADOQry2.SQL.Add('Update Rent set CarID='+QuotedStr(EdtCarID.Text)+'Where CarID='+QuotedStr('ABC'));

宝你准确,我不喜欢 总用 单引号 还是 QuotedStr 方便 尤其是有大量的查询条件的时候或者联合查询的时候,不会错的!!
 
支持lngdtommy
 
我觉得yuqiu0527说得不错,对于SQL语句中单引号是一个相当麻烦的事情,很多时候程序出错了,你却找不到问题出在哪里。用QuotedStr()方便书写,利于检查,阅读起来也一目了然。

本来是一个小问题,完全起到抛砖引玉的目的了
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
回复
0
查看
769
老衲
I
回复
0
查看
594
import
I
后退
顶部