为何从使用BDE改为ADO后速度变慢?(50分)

  • 主题发起人 主题发起人 eversun
  • 开始时间 开始时间
E

eversun

Unregistered / Unconfirmed
GUEST, unregistred user!
我原来是用Tquery, TDBedit来连接SQL SERVER 7数据库,现在改为ADO的构件后
(TADOConnection, TADOQuery) 从FORM CREATE到ACTIVE的时间大概比用BDE构件
多了近2秒(原来大概只要不到0.5秒左右), 请问应更改何参数?
 
没有任何的参数更改,确实是比BDE慢,这是因为ADO是业界新数据访问标准,与任何
数据库系统无关,与编程语言无关,通用当然速度不行了。鱼与熊掌不可兼得。但ADO
的访问数据对象扩展到了各种资源,而不象BDE只能访问数据库中的资源。BDE是数据库时代的产物,而ADO是INTERNER时代的产物。
 
各个操作有差别是正常的,有的是bde快,有的是ado快
 
而且ADO取数是一次全取到应用服务器,而BDE是按需取,不是一次性全取。
 
不要通过odbc,要直接用它的ole db for mssql
不会比bde慢的。
 
ole db?
好象很复杂的说?
 
ADO的速度比BDE要慢? 还有这么多的不足,是否该继续用BDE连SQL SERVER?
 
使用OLE DB与ODBC在配置上有何区别?
我已经在ADOCONNECTION中指定了OLE DB,但速度还是很慢:(
 
我找到出问题的地方了,主要是下面这段代码影响了速度,不知该如何优化?

在FORM1中有ADOCONNECTION1, ADOQUERY1, ADOQUERY2, DATASOURCE1, DBGRID1,
BUTTON1, BUTTON2其中ADOQUERY1, ADOQUERY2的CONNECTION属性均为ADOCONNECTION1
DATASOURCE1的DATASET为ADOQUERY1, datasource1的DATASOURCE属性为DATASOURCE1,
当单独按BUTTON1或BUTTON2时执行时间均正常大约不到1秒,但如果按了BUTTON2之后,
再去按BUTTON1会发现执行时间会需要3-4秒, 即按BUTTON2之后会使BUTTON1事件的运行
速度大大降低,我的记录数<800 以下为我的代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:=DateTimeToStr(Now);
with ADOQuery1 do
begin
close;
SQL.clear;
sql.add('select * from customers');
open;
end;
Label2.Caption:=DateTimeToStr(Now);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:=DateTimeToStr(Now);
with ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('select distinct contractno from customers');
Open;
first;
ComBoBox1.Items.Clear;
while not eof do
begin
ComBoBox1.Items.Add(ADOQuery2.Fields[0].AsString);
next;
end;
Label2.Caption:=DateTimeToStr(Now);
Close;
end;
end;
 
总的来说,ODBC比BDE慢。
 
CursorType改为clUseServer,就和BDE速度差不多了。
 
连接Sql server7怎么可能比Bde慢呢,用BDE连接Sql server7还要经过odbc呢,
而Ado可以不通过odbc,要直接用它的ole db 进行底层连接,一定会比Bde快。
建议你不用AdoQuery,而改用AdoDatset,用CommandText属性写上Sql语句。
另外,一般如果不是必须,不要用SElect *, 需要的字段才选择出来。
 
CursorLocation不一定改成clUseServer就快,有一次我这样用慢得像爬。
改为clUseClient后就快多了,不过速度和CursorType也有很大关系
ctStatic比ctKeyset快,而且用数据感知控件的话,设成ctStatic并不影响
能否改动数据库。
总体感觉ado确实比bde慢。
另外,open后可以不要first,这有时候会影响速度。
 
什么?怎么会这样,ADO比BDE慢!不会吧?!
我用ADO和BDE试过,ADO要快才对,还有不用设BDE,而且就连李维也说
如果是SQL SERVER最好用ADO不要用BDE!
也许你设置有问题!
 
多人接受答案了。
 
后退
顶部