请大家help!

zxf52 2003-12-12 10:01:01
我使用adoquery来查询sql2000的数据,可自定义目标表名,简单点,无须条件。但adoquery已经open后,我一行行读取数据,发现速度非常慢,一个14000条记录,10个字段的表光读取就花了近8秒。但我看看,若使用dbgrid好象一下子就ok了,请教大家我该如何提高速度!能在1秒内遍历还差不多。别告诉我使用dbgrid ,我必须无界面的处理这些记录。因为这些数据还要再加工。
明晚结贴,答我问题者皆友也
...全文
72 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
关注。。。

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧