本人要完成一个对数据分析的模块,需要把原始数据导入到数据库中,原始数据为文本文件,格式如下,(时间格式,整数,和十六进制的整数,字段用','隔开)
2002-09-20 08:18:00.340,12,3a4f,……
数据量比较大,请问怎么用Dephi快速导入到数据库中(还需要对其中一个字段进行转换)。
我以前用Table,读一条记录就Append,Append多条后就Post,结果发现其实Append后数据就已经到数据库中去了,那么这样实际就是一条一条入库,效率应该很低。各位大侠不知有没有更好的办法?
另外,读入原始文件怎么读入效率高,用文件流怎么样?怎么读入呢?一个一个字节读入判断还是一行读入再做处理好呢?
谢谢!
2002-09-20 08:18:00.340,12,3a4f,……
数据量比较大,请问怎么用Dephi快速导入到数据库中(还需要对其中一个字段进行转换)。
我以前用Table,读一条记录就Append,Append多条后就Post,结果发现其实Append后数据就已经到数据库中去了,那么这样实际就是一条一条入库,效率应该很低。各位大侠不知有没有更好的办法?
另外,读入原始文件怎么读入效率高,用文件流怎么样?怎么读入呢?一个一个字节读入判断还是一行读入再做处理好呢?
谢谢!
文本还是一行行的读好,如果你的文本一行就是一条记录的所有数据的化
AnsiString sql;
AnsiString S[18]; TStrings *pList=new TStringList();
pList->LoadFromFile("e:\\hehe.txt"); for(int i=0;i<pList->Count-1;i++)
{ S[i]=pList->Strings[i];
p=S[i].Pos(',');
gameno=S[i].SubString(1,p);
S[i].Delete(1,p);
cname =S[i].SubString(1,p=S[i].Pos(',')) ;
S[i].Delete(1,p);
nno =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
sex =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
birth =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
heigth =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
weigth =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
cteam =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
tno =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
steam =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
sno =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
item =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
ino =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
best =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
res =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
rank =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
kind =S[i].SubString(1,p=S[i].Pos(','));
S[i].Delete(1,p);
re=S[i].Trim();
sql="insert into ydy (gameno,cname,nno,sex,birth,heigth,weigth,cteam ,tno,sno,item,ino,best,res,bank,kind,re)\
value ("+gameno+""+cname+""+nno+""+sex+""+birth+""+heigth+""+weigth+""+cteam+""+tno+""+sno+""+item+""+ino+""+best+""+res+""+rank+""+kind+""+re+")";
}
Query->SQL->Add(sql)
procedure TForm1.Button2Click(Sender: TObject);
var str:Tmemorystream;
begin
str:=Tmemorystream.Create;
str.Position:=0;
Tblobfield(adoquery1.FieldByName('tt')).savetostream(str);
str.SaveToFile('c:\a.word');
str.Free;
end;
读出文件
procedure TForm1.Button1Click(Sender: TObject);
var str:Tmemorystream;
begin
str:=Tmemorystream.Create;
str.LoadFromFile('f:\page.pas');
str.Position:=0;
adoquery1.Append;
Tblobfield(adoquery1.FieldByName('tt')).loadfromstream(str);
try
adoquery1.Post;
finally
str.Free;
end;
end;
好像是一条记录就insert一次,有没有批量导入的办法啊?to timelyraining(jack_feng)
如果某个字段要修改一下怎么办呢?比如十六进制到十进制?
用SQL 工具是可以导入数据,但是那样用户用起来不方便,我需要的是自动导入,并不是一个文件,以后还有新的文件会实时不断产生需要导入。如果只是自己做个测试,当然可以这样了。
而且,SQL自动导入不支持类型转换,比如字段是十六进制的,怎么导入到整数字段里去呢?
能不能具体一点,比如给个例子。
谢谢!