ADO的效率怎么能提高?查询3000多行的数据库竟然要近10分钟(100分)

J

jadesun

Unregistered / Unconfirmed
GUEST, unregistred user!
1,ADOConnection 的 CursorLocation设定为Cleint - Side Cursor类型

2,ADOQuery 的 CacheSize 设为 1000

3,ADOQuery 的 CursorType 设为 KeySet

数据库里面3000多条数据。执行如下的查询竟然要将近10分钟

procedure TForm1.Button5Click(Sender: TObject);
var
username : String;
begin
Try
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'select username,announceid from bbs1 where isre=0';
ADOQuery1.Open ;
ADOQuery1.First ;
While not ADOQuery1.Eof Do
Begin
ADOQuery2.Close;
username := ADOQuery1.Fieldbyname('username').Value;
ADOQuery2.SQL.Clear ;
ADOQuery2.SQL.Text := 'select userid from [user] where username='''+username+'''';
ADOQuery2.Open ;
IF Not(ADOQuery2.IsEmpty) Then
userid := ADOQuery2.Fieldbyname('userid').Value
Else
userid := 0;
ADOQuery1.Next;
End;
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'update bbs1 set isre=0';
ADOQuery1.ExecSQL ;
Except
on e:exception do
ShowMessage('发生错误:'+e.Message+'');
End;

end;
 
数据库为ACCESS
 
使用原生ADO对象.
 
Ado速度是慢
 
原生ADO对象??我就是用的ADOExpress组件组的,能说得详细一些吗?谢谢
 
在user库中对username 和userid做一个联合索引
 
在ASP中执行相同的功能的代码,也是使用的ADO,只要1分钟左右。我想应该不是ADO的原因。可能是我的语句有问题
 
你在ASP用的就是原生的ADO,直接生成com/ole对象。
追求效率的程序最好不要用ADOExpress组件组
 
你的写法有问题。 换一种方式写就好了

 
谢谢xeen,想请问你我应该使用哪方面的方法?或者告诉我看哪方面的资料也行

我手头有李维的那本ADO的书,上面讲的多是ADOExpress组件组的问题。

我这个问题很紧,希望给予帮助
 
to xsqxsq111:

可以指明应该怎么写吗?
 
oh?我这里也有,那本书第10页就将怎么使用原生ADO对象.
 
应该不是ADO的问题
 
xeen非常感谢你,我能继续和你保持联系吗?
 
多人接受答案了。
 
10分钟,不是吧!3000行数据,我手动查也就10分钟了。[:(!]肯定有问题。
还有你讲ASP做同样操作3000条数据,只要1分钟,不过网页通常为30秒过期。
10分钟太恐怖了!
 
你这段语句是要做什么的呀,不能用一条sql语句搞定吗?非要用2个查询套用?
 
用不用原生ADO对象不是主要的问题(连李维同志也不建议你用嘛)
你的那段程序到底是想干什么?
你那个while循环好像只要adoquery1.last便能达到效果
 
顶部