数据的插入!(50分)

  • 主题发起人 主题发起人 berg
  • 开始时间 开始时间
B

berg

Unregistered / Unconfirmed
GUEST, unregistred user!
在我的程序中一按钮事件如下:
procedure TFpass.Button3Click(Sender: TObject);
begin
with fdm.Query1 do
begin
close;
sql.Clear;
sql.Add('delete from T_ds');
execsql;

close;
sql.clear;
sql.add('insert into T_ds(zch,bjh,multiple,max_value)');
sql.add('select sub,bj,multiple,max_value');
sql.add('from T_parameter ');
sql.Add('order by sub,bj');
execsql;
end;
end;
当记录只有1000多条时,速度就慢的很了,有时还会死在那里!
可我新建 了一个工程文件,同样在一按钮事件中写了同样的代码,
即使是2000多条记录速度却也很快,我真的不明白,这是什么原因?
 
可能是数据库的问题,不大稳定吧。如果是通过网络连接服务器的话,就有可能是受到
网络的影响了。
 
sql server数据库,在本机上!
请注意:当我重新建立一个工程文件,且在一按钮事件中写入相同的代码
速度则很快,这怎么解释?
 
是否可选择使用BATCHMOVE控件
 
batchmove和query应该都可以的,我想问题不是在这里,
 
to berg:
我猜想你很可能在前一个Application中采用了多个数据集控件,
并且在窗体的激活事件中,调用了控件的OPen 方法,这样的话,你便与数据库建立了
多条通道。同时占据了很大的内存,自然,在插入大批量的数据时,由于内存空间减小,
系统将频繁调度内存,速度就会减慢。
 
我想是因为同样的语句在第二次执行的时候会快一些吧,
要不你试试先执行新工程中的语句,再执行你原来的,看看那个速度快。
 
pcc_mmz1你说的有道理,我是用到了很多的数据集控件,
关键是我没有open 很多啊
就open了三个数据集!也会有这么大的影响吗?
你们是怎么处理的?
 
同志们帮帮忙啊!
 
to berg:
如果你真的只OPen 了三个数据集,你最好先写到缓存里,
再调用 Applyupdates 提交到数据库。你也可以优化你的插入语句。
另外,不知道你打开的那三个数据集,数据量是不是较在。
 
可以使用SQL Monitor跟踪一下程序,看一下程序为什么
可以在程序中设置一些条件断点,这样可以批量跟踪循环语句
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
337
import
I
I
回复
0
查看
662
import
I
后退
顶部