记录写入数据库速度较慢怎么解决?

WSL_5631 2011-12-13 03:28:47
下面的操作时把ADOQuery1的记录 一条一条导入到 ADOQuery3连接的数据,速度较慢,怎么更改可以速度快点,请高手指点。

ADOQuery1 是通过socket接收过来的数据,有办法一次性导入吗?谢谢先。


ADOConnection2.BeginTrans;
while not Form5.ADOQuery1.Eof do
begin
ADOQuery3.Append;
for i:=1 to Form5.ADOQuery1.FieldCount-1 do
begin
ADOQuery3.Fields[i] := Form5.ADOQuery1.Fields[i];
end;
Form5.ADOQuery1.Next;
ADOQuery3.Post;
ADOQuery3.Next;
end;

ADOConnection2.CommitTrans;
...全文
626 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
WSL_5631 2011-12-16
  • 打赏
  • 举报
回复
有大虾对我12楼和18楼的程序有改进意见吗,谢谢先
WSL_5631 2011-12-15
  • 打赏
  • 举报
回复
ADOConnection2.BeginTrans;
while not Form5.ADOQuery1.Eof do
begin
ADOQuery3.Append;
for i:=1 to Form5.ADOQuery1.FieldCount-1 do
begin
ADOQuery3.Fields[i] := Form5.ADOQuery1.Fields[i];
end;
Form5.ADOQuery1.Next;
ADOQuery3.Post;
ADOQuery3.Next;
end;

ADOConnection2.CommitTrans;

大家帮我看一下,上面一条一条拷贝,是一次性保存到数据库,还是每条保存一次,有没有办法一次性提交到数据库。
都先生 2011-12-15
  • 打赏
  • 举报
回复
为什么不用INSERT,而要这样写呢,在你没有使用滚动显示控件的时候,最好不要这样来写
WSL_5631 2011-12-15
  • 打赏
  • 举报
回复
xml格式
babydog01 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wsl_5631 的回复:]
引用 13 楼 smallhand 的回复:

如果使用的是相同的连接,那么能查出来就能批量添加进去,使用类似如下的语句。
insert into table1(field1) select field2 from table2


这个方法不行,主要是不存在table2
adoquery1的数据是通过远程传过的文件 通过 loadfromfile导进来的
[/Quote]
你那文件是什么格式的?能导入ADO,转换一下格式试试。如excel格式就可用SQL语句了.
WSL_5631 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 smallhand 的回复:]

如果使用的是相同的连接,那么能查出来就能批量添加进去,使用类似如下的语句。
insert into table1(field1) select field2 from table2
[/Quote]

这个方法不行,主要是不存在table2
adoquery1的数据是通过远程传过的文件 通过 loadfromfile导进来的
火龙岛主 2011-12-15
  • 打赏
  • 举报
回复
如果使用的是相同的连接,那么能查出来就能批量添加进去,使用类似如下的语句。
insert into table1(field1) select field2 from table2
WSL_5631 2011-12-15
  • 打赏
  • 举报
回复
with ADOQuery3 do
begin
Close;
SQL.Clear;
SQL.Add('delete * from Value临时表');
ExecSQL;
SQL.Clear;
SQL.Add('select * from Value临时表');
ExecSQL;
open;
end;
ADOQuery3.Append;
ADOQuery3.Clone(Form5.ADOQuery1,ltunspecified);
ADOQuery3.Edit;
ADOQuery3.post;
怎么保存不到数据库啊


楼上的是什么方法 能不能详细点啊

谢谢
skap 2011-12-14
  • 打赏
  • 举报
回复
俺300多个字段的都动态生成SQL
SQLite的库,begin transaction; commit transaction;那是相当的快。
WSL_5631 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zzn007 的回复:]

将每条语句生成一个insert语句,然后一条一条添加到query中,最后executesql
[/Quote]

怎么生成?
xugang96 2011-12-14
  • 打赏
  • 举报
回复
用语句试试看,不要直接操作数据集
zzn007 2011-12-14
  • 打赏
  • 举报
回复
将每条语句生成一个insert语句,然后一条一条添加到query中,最后executesql
WSL_5631 2011-12-14
  • 打赏
  • 举报
回复
ADOQuery1 的记录是通过网络接收的数据 不对应具体的数据库。ADOQuery3对应具体的数据库。能用insert into 吗?或者克隆?我是初学,不太懂,能给出具体的代码吗?谢谢先!
WSL_5631 2011-12-14
  • 打赏
  • 举报
回复
能说的详细点吗,怎么克隆?
grjs2004 2011-12-13
  • 打赏
  • 举报
回复
楼主的循环语句就有问题,
用克隆是可以的
kaikai_kk 2011-12-13
  • 打赏
  • 举报
回复
用insert into ...
kevin_li125 2011-12-13
  • 打赏
  • 举报
回复
ADOQuery1和ADOQuery3都是数据集,用克隆试过没有啊?直接克隆好像可以的呢。
伊吹萃香 2011-12-13
  • 打赏
  • 举报
回复
如果数据规模很大,可以使用bulk insert
sundayzhao 2011-12-13
  • 打赏
  • 举报
回复
用sql 语句能快些,要不就用bcp

2,507

社区成员

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

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