CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

请问如何将成批的数据插入到数据库表中?

楼主net_morning(矿泉水)2006-03-07 17:38:09 在 Delphi / 数据库相关 提问

比如自动生成了一万条记录。不insert一万次的话,有什么好办法?  
  for   I:=   1   to   10000   do  
  begin  
      //insert数据库表  
  end  
   
  以上方法要insert10000次,时间久了,系统要崩溃 问题点数:9、回复次数:12Top

1 楼zzq4823(高原猫)回复于 2006-03-07 17:43:23 得分 1

insert   into   table1   select   ....   from   table2  
  1和2的字段要对应,如有差异,可先将2建立成视图以保证字段对应关系一致Top

2 楼net_morning(矿泉水)回复于 2006-03-07 19:25:55 得分 0

谢谢楼上。不过成批的数据是delphi生成的,不是sql生成的,与表2没有关系Top

3 楼Rubi(浪迹Csdn各个板块!MS-Borland-IBM-SUN-水区-在去哪里呢?)回复于 2006-03-07 19:55:13 得分 1

1,select   *   into   #tmp   from   new    
  2,   insert   into   tb   (a,b,c)   select   a,b,c   from   #tmpTop

4 楼zhangl_cn(和尚-修行)回复于 2006-03-07 20:18:32 得分 1

用TADOQuery组件的Batch模式:  
  adoquery.locktype:=ltBatchOptimistic;  
  adoquery.CacheSize:=1000;  
   
  提交到数据库用:   adoquery.UpdateBatch;Top

5 楼net_morning(矿泉水)回复于 2006-03-07 21:26:59 得分 0

不做和尚的主意可看起来好像更好一些。  
  打算做成  
  for   i   :=   1   to   10000   do  
  begin  
      adoqry.append  
      adoqry.fieldByName('filed1')   :=   'test'  
  end;  
   
  adoquery.UpdateBatch;  
   
  有个问题,adoquery.CacheSize:=1000;如果记录不足1000的话,update也能生效吗?Top

6 楼net_morning(矿泉水)回复于 2006-03-08 10:45:55 得分 0

selfupTop

7 楼Hank(星星农场)回复于 2006-03-08 11:04:12 得分 1

有两种方式  
  1、临时表模式  
        建立临时表,首先把数据保存到临时表中  
        通过   insert   into   表   select   *   from   临时表   完成  
   
  2、批量SQL模式  
        insert   into   表  
        select   数据一,数据二   union   数据一,数据二   ......  
        通过循环控制,一次关联100个数据,然后批量增加到数据库中  
   
  本质的原因是如果数据库有索引的时候,如果表很庞大,一旦增加一条记录就是一个庞大的量  
   
  当然,如果数据库和应用程序在同一台电脑上,那问题就太简单了,通过TSQL数万条记录一下搞定。Top

8 楼net_morning(矿泉水)回复于 2006-03-08 12:08:18 得分 0

用临时表,看来非得insert1000次不可,没有别的好办法了。  
  谢谢楼上朋友的解答Top

9 楼chijingde(AD)回复于 2006-03-08 12:17:04 得分 1

clientdataset有个AppendDatasetTop

10 楼duanhai(段海)回复于 2006-03-08 15:04:09 得分 2

在Sqlserver中,一條sql語句的最大長度為:8KB,  
  也就是說你的SQL語句只要在8KB以內,都可以正常  
  運行,當然前提條件是SQL語句合法:  
   
  而且在Sqlserver中,可以同時執行兩條以上的語句,  
  如:  
  AdoQuery1.Close;  
  AdoQuery1.SQL.Text:=  
        'insert   into   [TableName](IDNO)values(1)'  
    +   '   select   max(IDNO)   from   [TableName]';  
  AdoQuery1.Open;  
   
  上面的語句執行可以得到一個結果集  
   
  所以你可以在你的語句中加入一條以上的insert語句  
   
  我記得我以前在本版寫過一篇關於批量數據插入,  
  速度比較的帖子,如果你有空,可以找找看:)  
   
  --------------------------------  
  如果我的說法對你有幫助,請您也幫我一個忙:  
  詳情請見:  
  http://community.csdn.net/Expert/topic/4598/4598070.xml?temp=.1748011  
   
   
   
  Top

11 楼VisualLion(狮子)回复于 2006-03-08 23:35:16 得分 1

可以使用TClientDataset,这个组件不一定非要用在三层结构Top

12 楼oushengfen(逸帆)回复于 2006-03-09 11:04:40 得分 1

批量功能,楼主都说得对啊。值得学习。Top

相关问题

  • 怎样把一个Recordset成批的插入一个指定的数据库中.
  • Delphi 中如何TQuery进行数据库表的插入操作?
  • oracle数据库其中一个表不能插入数据了
  • 关于ADO.net将一个表插入数据库的问题
  • 数据库中向表中插入数据的问题,谢谢
  • 高手请进,关于数据库表格插入问题
  • (急)如何向数据库表中插入HTML标记?????
  • asp.net中对数据库表插入null空值的问题
  • 我要将数据库(main.mdb)中表(attend)的数据插入到数据库(Attend.mdb)的表(attend)中
  • 如何将一个oracle数据库表的数据插入到另一个oracle数据库的表中

关键词

  • 数据库
  • 数据
  • 模式
  • sql
  • 表
  • adoquery
  • 临时
  • 語句
  • 生成
  • insert

得分解答快速导航

  • 帖主:net_morning
  • zzq4823
  • Rubi
  • zhangl_cn
  • Hank
  • chijingde
  • duanhai
  • VisualLion
  • oushengfen

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo