困惑,速度为什么越来越慢呢?

ljccyzy 2004-08-06 05:38:19
示例代码如下:
adoquery1.sql.text:='select * from table1';
adoquery1.open;
adoquery2.sql.text:='select * from table2';
adoquery2.open;
adoquery1.first;
while not adoquery1.eof do
begin
adoquery2.append;
adoquery2.['field1']:=adoquery1.['field1'];
adoquery2.['field2']:=adoquery1.['field2'];
adoquery2.post;
adoquery1.next;
end;
其中两个ado都是非缓冲的,table1中记录有4万条,我执行时速度由
6000条/分钟一直递减到了800条/分钟,我以为是内存未释放造成,可
退出程序后,接着运行,速度还是慢。
我想知道这是什么原因造成的,紧紧一个append不至于这厉害吧?
改进的方法如何作?
谢谢各位了。
...全文
172 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljccyzy 2004-08-10
  • 打赏
  • 举报
回复
感谢各位,结贴!
Canvas 2004-08-09
  • 打赏
  • 举报
回复
楼上你帅。

adoquery1.sql.text:='select * from table1';
adoquery1.open;
adoquery2.sql.text:='select * from table2';
adoquery2.open;
adoquery1.first;
while not adoquery1.eof do
begin
adoquery2.append;
adoquery2.['field1']:=adoquery1.['field1'];
adoquery2.['field2']:=adoquery1.['field2'];
adoquery1.next;
end;
adoquery2.post;
偶瞎猜的,没试过,不知道能不能通过。
twttafku 2004-08-09
  • 打赏
  • 举报
回复
在SQL Explorer建两个别名,用SQL语名搞定就行了,还用写什么程序啊,有这么好的工具为什么不用啊
lwk_hlj 2004-08-09
  • 打赏
  • 举报
回复
有必要这样做吗?
ljccyzy 2004-08-08
  • 打赏
  • 举报
回复
我的实际代码如下,原先描述得不清楚,

query1.sql.text:='select * from table1';
query1.open;

adoquery2.sql.text:='select * from table2';
adoquery2.open;

query1.first;
while not query1.eof do
begin
adoquery2.append;
adoquery2.['field1']:=query1.['field1'];
adoquery2.['field2']:=query1.['field2'];
adoquery2.post;
query1.next;
end;
ljccyzy 2004-08-08
  • 打赏
  • 举报
回复
忘了告诉大家,我的数据源:table1用的是BDE(Prodox数据库),Table2用的是ADO
引擎(Sql数据库),并且我的ADO不让用批处理模式,各位再提提意见。
谢谢了。
beyondtkl 2004-08-07
  • 打赏
  • 举报
回复
怎么都喜欢用汉字哦。。。。。别扭
marf_cn 2004-08-06
  • 打赏
  • 举报
回复
直接用sql语句实现
cronuz 2004-08-06
  • 打赏
  • 举报
回复
with ADOQuery1 do
begin
SQL.Clear
SQL.Text:='INSERT INTO table2 (field1,field2) SELECT field1,field2 FROM table1';
ExecSQL;
end;

(注:用一個SQL語句試試)
GoldShield 2004-08-06
  • 打赏
  • 举报
回复
上面两个都是很好的方法,
hanlin2004(渴死的鱼)的感觉最是点子上.
meiqingsong(阿飛)的把数据处理放到后面出是一种很好的方法.
楼主自己选择吧!
lingco 2004-08-06
  • 打赏
  • 举报
回复
server or client?
梅青松 2004-08-06
  • 打赏
  • 举报
回复
why not
adoquery1.close;
adoquery1.sql.text:='select field1,field2 from table1 into table2';
adoquery1.open;
hanlin2004 2004-08-06
  • 打赏
  • 举报
回复
你对数据库的操作太频繁了

先增加,然后一起提交,不用增加一条就提交一条
hanlin2004 2004-08-06
  • 打赏
  • 举报
回复
adoquery1.sql.text:='select * from table1';
adoquery1.open;
adoquery2.sql.text:='select * from table2';
adoquery2.open;
adoquery1.first;
while not adoquery1.eof do
begin
adoquery2.append;
adoquery2.['field1']:=adoquery1.['field1'];
adoquery2.['field2']:=adoquery1.['field2'];
//////////////////
adoquery1.next;
end;

adoquery2.post;
[软件简介]--------------------------------------- InstallShield作为软件安装制作工具的业界老大,她的的多平台安装程序制作软件,可以制作任何平台任何系统下的安装程序, 如Mac OS X、OS/400、Windows、AIX、 Solaris、Linux、HP-UX 或是各种类型的 Unix 系统。迄今为止,她的地位是没有人敢绝对 挑战的,连软件帝国的王者——微软也不例外,微软的相当大的一部分程序安装包都是通过 InstallShield 制作的;在国内,现在只 要是一些稍有名气的大软件公司,如金山、东软、用友、金蝶………,她们的软件安装包也几乎是清一色的 InstallShield ,足可以见, InstallShield 已经在多大程度上影响着我们的生活了。 现在以 InstallShield 制作的安装程序是越来越多了,随之,InstallShield CAB 也成为了困惑我们的文件格式,因为,InstallShield 制作 出来的家伙常常却是一些大块头。很多时候,因为某些方面的原因,我们的程序会损坏或者丢失了一些文件(有时甚至就是一两 个文件而已),为了这一小组文件,我们唯一的选择就是重新运行 InstallShield 制作的安装包,重新来安装我们的程序。 杀鸡用牛刀啊,不但费时费力,还要顾虑软件重装过程中的数据丢失风险……… 有没有其他的解决办法吗? 有的,方法之一就是使用 WinPack,不过,作为第三方程序,WinPack 除了打开 InstallShield 安装包的速度、很容易损坏 InstallShield 安装包之外,最大缺点还在于她只能对付 InstallShield 5.x、6.x 版的安装包。 方法之二是使用InstallShield Cabinet File Viewer,作为 InstallShield 自家的孩子,InstallShield Cabinet File Viewer 无论在开启 InstallShield CAB的速度和安全性上,还是InstallShield 上下版本的兼容性上,是其他第三方工具无法比拟的!不过,遗憾的是, InstallShield Cabinet File Viewer 10.5 只在 InstallShield 10.5 Premier Edition 提供。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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