请大家help!

zxf52 2003-12-12 10:01:01
我使用adoquery来查询sql2000的数据,可自定义目标表名,简单点,无须条件。但adoquery已经open后,我一行行读取数据,发现速度非常慢,一个14000条记录,10个字段的表光读取就花了近8秒。但我看看,若使用dbgrid好象一下子就ok了,请教大家我该如何提高速度!能在1秒内遍历还差不多。别告诉我使用dbgrid ,我必须无界面的处理这些记录。因为这些数据还要再加工。
明晚结贴,答我问题者皆友也
...全文
34 13 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Erice 2003-12-13
减少显示不必要的字段,参考CLIENTDATASET的分页功能
  • 打赏
  • 举报
回复
cyai 2003-12-13
OPEN后若要一行一行的再处理,则要关闭ADOQUERY与其他控件的连接.
adoquery.disableconnect;
完成后.
adoquery.enableconnect;
  • 打赏
  • 举报
回复
zxf52 2003-12-13
我在写新一版的通用应用服务器MayGTS,以前的几个版本逐渐暴露了一些缺点。现在我要把它改成一个更高性能,也更通用的产品。目前内核已全部改好,我已测试了部分,very ok! 支持:多应用部署,每个应用可自配连接池及连接数,支持各种数据库,如sqlserver,Oracle,DB2,Sybase等。各数据库均使用优化的数据引擎。如Oracle使用OCI层次引擎。业务逻辑自配.使用MayGTS后,决不再要midas这种烂东西,呵呵!
  • 打赏
  • 举报
回复
zxf52 2003-12-13
hehe,我已基本解决了这个问题。首先,如soundbug所说,
我使用了adoquery.disablecontrols,这样速度可以提高不少,但也需要3秒多种。代码如下:
with adoquery do
begin
...
DisableControls;
Open;
for I:=0 to RecordCount-1 do
begin
......
Next;
end;
end;
但我还是不满足,结果实际读时,我采取如下方法:
with adoquery do
begin
...;
Open;
for I:=0 to RecordSet.RecordCount-1 do
begin
......
RecordSet.MoveNext;
end;
end;

呵呵,不到1秒就能将数据全部取出来了。
  • 打赏
  • 举报
回复
xiaocuo_zrf 2003-12-13
其实这和DBGRid没有关系,应为adoquery不是一次性载入数据的
不是一次性载入的,当你拖动滚动条或者调用Last,Locate等命令的时候
才获取数据。
不知道楼主要做什么,既然不需要界面显示为什么不在存储过程中来完成呢
  • 打赏
  • 举报
回复
angelface 2003-12-13
DBGrid是不能一次载入的,

我同意楼上的做法!~~~
  • 打赏
  • 举报
回复
xyc189 2003-12-13
DBGrid不是一次性全部载入,所以速度快,如果你确认要将14000条记录全部做处理的话,建议写在存储过程中
  • 打赏
  • 举报
回复
zsjzwj 2003-12-13
数据分几次来取试试
  • 打赏
  • 举报
回复
soundbug 2003-12-13
试试处理前先执行adoquery.DisableControls;
  • 打赏
  • 举报
回复
ptzld 2003-12-12
看看dbexpress
  • 打赏
  • 举报
回复
zxf52 2003-12-12
没特别的,比如 select * from atable;
  • 打赏
  • 举报
回复
seeder 2003-12-12
dbgrid好像不是一下子读出所有的数据的吧,他是读一些,要读的话再缓冲一些进来的.

优化一下你的SQL语句,贴出来
  • 打赏
  • 举报
回复
delphi2java 2003-12-12
关注。。。
  • 打赏
  • 举报
回复
相关推荐
发帖
数据库相关
加入

2468

社区成员

Delphi 数据库相关
社区管理员
  • 数据库相关社区
申请成为版主
帖子事件
创建了帖子
2003-12-12 10:01
社区公告
暂无公告