用ADOQuery如何批量录入以提高insert的速度?怎么用UPDATEBATCH?

beyond_goal 2004-08-20 11:05:49
我用的是这样的方式写数
据库的ADOConnection连接数据库,ADOQuery的connection属性为ADOConnection
for i:=1 to 20000 do
begin
adoquery1.Close;
adoquery1.SQL.Clear;
strsql:='insert into t1 (a) values(''1'')';
adoquery1.SQL.Add(strsql);
adoquery1.ExecSQL;
end;
这样需要2分钟,在网上看了一些帖子说可以用UPDATEBATCH批量录入,就是先写在缓存里后一起执行。
请问在用ADOConnection+ADOQuery的方式下如何使用,希望能有源代码
...全文
542 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
surpassable 2004-11-16
  • 打赏
  • 举报
回复
up~~~~~~~
pdbird 2004-11-15
  • 打赏
  • 举报
回复
可以INSERT 1000条COMMIT一次,这样速度就快多了。
wafeijian 2004-11-15
  • 打赏
  • 举报
回复
1. LockType设为ltBatchOptimistic
2. 设定CacheSize 为1000左右的数值
3. ADOQUERY1.UPDATEBATCH;
flexitime 2004-11-15
  • 打赏
  • 举报
回复
困扰,关注中!
prosimon 2004-11-15
  • 打赏
  • 举报
回复
自己尝试一下 更新数据集 然后批更新
bmwyc 2004-11-15
  • 打赏
  • 举报
回复
我现在也正在为这事烦着呢,帮楼主顶!
oioioi-090 2004-08-20
  • 打赏
  • 举报
回复
LockType设为ltBatchOptimistic就好了!

同时,
ADODataSet1.Filtered := True;
ADODataSet1.FilterGroup := fgNone (fgPendingRecords等);
可以筛选哪些记录动过,很有用(除了被删的!)
beyond_goal 2004-08-20
  • 打赏
  • 举报
回复
答非所问啊
chenylin(陈SIR)用的是adodataset吧
我用adoquery怎么做呢?
ADOQUERY1.CursorLocation := clUseClient;
ADOQUERY1.CursorType := ctStatic;
ADOQUERY1.LockType := ltBatchOptimistic;
for i:=1 to 20000 do
begin
adoquery1.SQL.Clear;
strsql:='insert into t1 (a) values(''1'')';
adoquery1.SQL.Add(strsql);
adoquery1.Open;
end;
ADOQUERY1.UPDATEBATCH(ARALL);
ADOQUERY1.LOCKTYPE:=LTOPTIMISTIC;
这样写不行,有问题,我查了些帖子说只能用select?那我insert怎么做?
zhouxiaochenchina 2004-08-20
  • 打赏
  • 举报
回复
这么EASY的问题。
bluesky23 2004-08-20
  • 打赏
  • 举报
回复
是的,楼上方法正确。
chenylin 2004-08-20
  • 打赏
  • 举报
回复
procedure TForm1.FormShow(Sender: TObject);
begin
ADODataSet1.LockType:=ltBatchOptimistic;
end;

procedure TForm1.ButtonCommitClick(Sender: TObject);
begin
ADODataSet1.UpdateBatch;
end;

procedure TForm1.ButtonCancelClick(Sender: TObject);
begin
ADODataSet1.CancelUpdates;
end;

5,388

社区成员

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

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