用TAdoquery怎样在一个表内比较快的大批量插入及删除记录? 听说用临时表比较快,但我不知是怎么个用法,望指点。 (50分)

  • 主题发起人 chemstar
  • 开始时间
C

chemstar

Unregistered / Unconfirmed
GUEST, unregistred user!
1、我用一个循环在一个表(mdb)内自动加入及删除大量记录(约有几千条),如何做到比较快?
我用Append和post,及delete,真是太慢了,足足要等好十几分钟。

2、听说用临时表比较快,但我不知是怎么个用法,望指点。
 
Adoquery.append;
.......
adoquery.post;
//////
adoquery.delete
 
添加
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Text:='INSERT INTO TableName VALUES()';
AdoQuery1.ExecSQL;
删除
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Text:='DELETE TableName WHERE';
AdoQuery1.ExecSQL;
 
with adoquery1 do
begin
close;
sql.clear;
sql.add('select * from item');
append;
fielbyname('no').asstring:=edit1.text
post;
end;
 
Insert into Table1 select ... from table2
 
1、我用一个循环在一个表(mdb)内自动加入大量记录(约有几千条),如何做到比较快?
我用Append和post,真是太慢了,足足要等好几分钟。
insert into 接批量记录最快
2、我的表内有一个字段ID用的是自动编号,那么我又如何在插入一条记录之前就能得到它的ID的值
默认是以ID排序的,那么你取最大ID加1不就行了
 
to 火龙真人:
1、用insert into可能是比较快一点,但是我查了以前的帖子,说是用 UpdateBatch的方法最快。
 但是如何用我不是很清楚,你知道吗?
2、取ID号这个问题我已经知道了。
(你的方法不行,主要是因为会影响速度,因为“取最大值”时又读了一次库)
下面是代码:
ADOQuery := TADOQuery.Create(Self);
ADOQuery.Connection := Form1.ADOConn;
ADOQuery.SQL.Add('Insert Into Login_User (用户名,密码) Values (''' +
Edit1.Text + ''',''' + Edit2.Text + ''')');//插入记录
ADOQuery.Sql.Add('Select @@identity As NewId');//得到插入的id号,id是自增字段
ADOQuery.Open;
NewId := ADOQuery.FieldByName('NewId').AsString;
ADOQuery.Free;
 
to 火龙真人:
用insert into怎样用,你能给我一个例子吗?我怎么老通不过?
 procedure TForm1.Button12Click(Sender: TObject);
var
i:integer;
ins:string;
begin
Adoquery1.SQL.clear;
ins:='Insert into cd (pid) Values (2);'+
'Insert into cd (pid) Values (5);';
Adoquery1.SQL.Add(ins);
AdoQuery1.ExecSQL;
end;
 
首先,用SQL语句操作数据库将大大提高速度,不管是插入还是删除.另外该表中不要建立太
多的索引,这样用影响插入或更新速度.
再者,你可以在插入之前用SELECT MAX(ID) AS MAXID FROM YOURTABLE
来取得当前最大的ID号,那么目前要写入的号码就知道啦!
 
用insert的方法:
insert into 目的表 select * from 源表 where 条件
如果是两个不同的库:
insert into 目的表 in '中间的我记忘了:)' select * from 源表
这种方法不好的一点是目的表和源的结构必须一样
 

如果是要插入数据 ,我认为用ADOCOMMAND更快,我有做过相关实验
听我得,没错
 
to Imfish:
  我这儿的每一条记录是动态生成的,并且每加入的后一条记录都是根据前一条生成。
听说用临时表可以实现较快,你会吗?
 
to dreamblue:
ADOCOMMAND怎么用?给个例子好吗?用它删除数据快吗?

为什么用adoquery删除比插入还要慢上N倍?我插入时用了几分钟,可是删除却用了10几分钟!!!
 
ADOCOMMAND给query差不多的只是把SQL写到ADOCOMMAND的commandtext里
 
1。写在存储过程里
2。插入和删除时取消索引
3。insert into table_a select * from table_b where 条件
4。
SQLstr := ’‘;
for i := 0 to 20 do
begin
SQLstr := SQLstr + ' Insert into cd (pid) Values (2) '//不加' ; '
end;
Adoquery1.SQL.text := SQLstr ;
AdoQuery1.ExecSQL;
5。ADOCOMMAND给query速度差不多
 
顶部