是ADO的错还是程序的错?(100分)

  • 主题发起人 主题发起人 Sonic_Ben
  • 开始时间 开始时间
S

Sonic_Ben

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ADOQuery 连接 Access2000数据库。
程序运行初始状态的ADOQuery的SQL是“select * from N1”
在运行中动态改变SQL为“select * from N1 where Level > 100”

程序如下:
ADOQuery1.Active := false;
ADOQuery1.SQL.Text := 'select * from N1 where Level > 100 ';
ADOQuery1.Active := true;
showmessage(IntToStr(ADOQuery.RecordCount));

但返回的RecordCount却不正确。如果我在DBGrid中没有选择的话,则可以返回正确的值,
但一旦我选择了某条记录,则返回不正确的值。
这到底是怎么回事?是ADO的BUG还是程序中有不对的地方?
请高手指教!
 
Look Cache ...
 
前面应该sql.clear;
 
对。在ADOQuery1.SQL.Text 前应该加上Sql.Clear
 
加上这句吧
ADOQUERY1.SQL.CLEAR;
 
不是bug,ADOQuery.RecordCount属性只包含已经访问过的记录数,而不是查询返回的记录数,
请调用ADOQuery.Last,就可以取得正确的记录数
 
ADOQuery1.Active := false;
ADOQuery1.SQL.clear;
ADOQuery1.SQL.add( 'select * from N1 where Level > 100 ');
ADOQuery1.Active := true;
showmessage(IntToStr(ADOQuery.RecordCount));
 
to gxx:这种说法不对。我用ado+sql2000试了一下,没有发现上面的问题。
猜测,可能是ADO版本的问题,试着安装madc2.6
 
我用ado+Access 97也没有问题
 
我已经安装了madc2.6,以及ENT的升级包,BDE的升级包,并把程序改了,但还是无法
解决问题:(
gxx说,要加一句ADOQuery.Last,是放在哪里呢?请指教
 
同意 gxx
我在用Query+SQL7.0时也遇到过这个问题

to Sonic_Ben

ADOQuery1.Active := false;
ADOQuery1.SQL.Clear; {这是一个好习惯}
ADOQuery1.SQL.Text := 'select * from N1 where Level > 100 ';
ADOQuery1.open;
ADOQuery1.Last
showmessage(IntToStr(ADOQuery.RecordCount));
 
来晚啦!
 
ADOQuery1.SQL.Clear;只是在ADOQuery1.SQL.Add('XXX')时才有效,象
ADOQuery1.SQL.Text := 'select * from N1 where Level > 100 ';这样赋值根本不需要。

还有,用TQuery访问SQL Server时,RecordCount和RecNo 都是没有用的,只能通过SQL语句
来得到记录总数,但是用ADO查询时,RecordCount和RecNo是可以返回正确值的,我没有
访问过Access,所以不敢乱下结论,但我想同是MS的东西,如果这都不行的话,那也太没面
子了吧。


 
升级了ado的包没有?delphi有两个ado的升级文件。
 
接受答案了.
 
后退
顶部