导入数据到数据库的问题!(30分)

  • 主题发起人 主题发起人 天邪狼
  • 开始时间 开始时间

天邪狼

Unregistered / Unconfirmed
GUEST, unregistred user!
Date Time ALLOC_SDCCH ALLOC_SDCCH_FAIL ALLOC_TCH
27-10-2006 14 0:00 ? ? ?
27-10-2006 14 0:00 1536 0 1214
27-10-2006 14 0:00 1028 0 649
27-10-2006 14 0:00 4112 0 3348
27-10-2006 14 0:00 153 0 212

我做了个把文件中的数据导入到数据库的的程序(文件格式的一部分如上),程序流程是,一行一行的循环插入。比如:在第一行,先读日期,在读小时,再依次读各个指标(读每个指标的时候还要做一些特定判断);然后把读出的值插入到数据库中对应的列中。接着循环到第2行,依次这样直到最后一行。入数据库的程序如下:

ADOQuery1.Edit;
ADOQuery1.FieldByName('日期').AsString:=aDate;
ADOQuery1.FieldByName('时间).AsString:=aTime;
ADOQuery1.FieldByName('ALLOC_SDCCH').AsString:=ALLOC_SDCCH;
ADOQuery1.FieldByName('ALLOC_SDCCH_FAIL').AsString:=ALLOC_SDCCH_FAIL;
ADOQuery1.FieldByName(ALLOC_TCH').AsString:=ALLOC_TCH;
ADOQuery1.post;

我的问题是,这样读取一行,然后post一下到数据库,觉得导完整个文件速度有些慢(1500多行,插入要花3分钟)。请问大家有没有什么好的方法,使速度更快一些?
 
用原生态ADO,我不太懂,不过我用挺好,批量追加很好使
var
AdoRecordSet : variant;
FConnectionObject : _Connection;
I:integer;
begin
AdoRecordSet:=CreateOleObject('ADODB.RecordSet');
ADOConnection1.Connected := True;
FConnectionObject := ADOConnection1.ConnectionObject;
AdoRecordSet.CursorLocation := clUseClient;
AdoRecordSet.open('select * from exaquestions ', FConnectionObject,
adOpenStatic, adLockOptimistic, AdCmdText); //写数据库
try
for i:=1 to datarec do
BEGIN
AdoRecordSet.AddNew;
AdoRecordSet.fields[1].value := spec;
AdoRecordSet.fields[2].value := combobox2.Items[combobox2.ItemIndex];
AdoRecordSet.fields[3].value := zjgrid1.Cells[2,i].text;
AdoRecordSet.fields[4].value := zjgrid1.Cells[3,i].text;
AdoRecordSet.Update;
end;
finally
AdoRecordSet.Close;
end;
 
还有别人知道么?LUJIAYU110说的我很模糊
 
如果不需要显示进度,完全可以用bcp或者dts
 
'select * from exaquestions'中的exaquestions为你的表
AdoRecordSet.fields[1].value =你第一个字段的值
以此类推...下列追加一条记录
AdoRecordSet.AddNew;
AdoRecordSet.fields[1].value := 第一个字段值;
AdoRecordSet.fields[2].value := 第二个;
AdoRecordSet.fields[3].value := 第三个;
AdoRecordSet.fields[4].value := 第四个;
AdoRecordSet.Update;
对了,前面加上USES variants,comobj;
AdoRecordSet创建后要CLOSE;

你可以在DFW离线库中查一下原生ADO
 
我觉得跟这些都没关系,时间主要花在赋值上,你试一下,不提交只赋值要多长时间
 
大家好,这个问题我解决了,谢谢大家关注。
我把在delphi里用程序写的插入语句,全部当做参数,传给存储过程,在数据库里执行exec,数据N快,以前要6分钟的,现在只要14秒。所以我觉得遇到大量insert和update数据库的时候,用存储过程还是最快的
 
后退
顶部