Delphi批量插入数据库的问题

zpsemo 2010-12-29 11:01:36
数据库是access

我的表名是test
有三个字段:ID, PASS,TMP

数据源是一个函数叫 zhuanhuan(pass,16)

这个函数将参数pass传进zhuanhuan然后经过内部的算法返回一个值 也就是
tmp:=zhuanhuan(pass,16)
tmp和pass每次都次变的 不重复

我想批量插入pass和tmp,但是一条一条的插入效率太慢了

我想在每次调用zhuanhuan后 把每次传进去的pass 和生成的tmp 保存下来 积累到一定数量 然后一次性提交


我用的是adoquery 当然adoconnection的代码也可以

先谢谢各位 教我下代码

...全文
526 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
somemak 2011-01-04
  • 打赏
  • 举报
回复
这个规律只是一个例子而已,数据是按你自己的要求产生的。。。
就是说在生成数据后再拼接字符串。。。
YLCN2010 2010-12-30
  • 打赏
  • 举报
回复
关注下,对于大批量快速添加速度还是有需求地。
haitao 2010-12-30
  • 打赏
  • 举报
回复
adoquery、adoconnection都可以一次性执行一个较大的sql(包含很多个insert语句)
当然,access是否支持就不知道了
somemak 2010-12-30
  • 打赏
  • 举报
回复
实质上就是将数据转换为后台SQL语句,再由后台执行而已。。。
1.首先,你要了解后台SQL批量INSERT的语句
例如:MySQL就是
insert into (id,pass,tmp)
(1,1,1),(2,2,2),(3,3,3)...(n,n,n)
2.第二,将你的数据按指定格式写入一个Tstringlist
//实际就是拼接字符串而已。。。
3.将Tstringlist赋值到TAdoQuery.SQL.Text,执行就可以。
4.如果数据量很大,可以将第2,3点分批操作。
例如:插入100000条数据,每次插入1000条(重复第2,3点),循环(100000/1000)次

逐条插入和批量插入的效率有很大差别,测试过MySQL,1.5W条批量插入35秒左右,逐条插入要15分钟左右
zpsemo 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 somemak 的回复:]

实质上就是将数据转换为后台SQL语句,再由后台执行而已。。。
1.首先,你要了解后台SQL批量INSERT的语句
例如:MySQL就是
insert into (id,pass,tmp)
(1,1,1),(2,2,2),(3,3,3)...(n,n,n)
2.第二,将你的数据按指定格式写入一个Tstringlist
//实际就是拼接字符串而已。。。
3.将Tstringlist赋值……
[/Quote]

多谢这位仁兄
但是我有个疑问
就是 pass和tmp都不固定的值 而不是像你那样有规律的写出来
我就这个地方不好搞

rose_lanlan 2010-12-30
  • 打赏
  • 举报
回复
不了解ACCESS, ORACLE 是可以做到的
zpsemo 2010-12-29
  • 打赏
  • 举报
回复
我就是不知道 两个随机变量 在循环中累加 是如何写的
变量又不是 有规律的
zpsemo 2010-12-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ok1411 的回复:]
插入用adocommand会快不少
[/Quote]

能给个具体代码?
ok1411 2010-12-29
  • 打赏
  • 举报
回复
插入用adocommand会快不少
frankzhusky168 2010-12-29
  • 打赏
  • 举报
回复
第三名
zpsemo 2010-12-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ok1411 的回复:]

我说的也是一条一条插入,不用adoquery,改用adocommand
Delphi(Pascal) code

MyCommand.CommandText := DDLString;
MyCommand.Prepared := True;
MyCommand.Execute;
[/Quote]


非常感谢 我测试了下 虽然有所提高 但是提高不了多少
请问能批量的插吗?
ok1411 2010-12-29
  • 打赏
  • 举报
回复
我说的也是一条一条插入,不用adoquery,改用adocommand

MyCommand.CommandText := DDLString;
MyCommand.Prepared := True;
MyCommand.Execute;

2,507

社区成员

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

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