如何實現TXT轉入SQL最快. |
答題得分者是:andychang1690
|
ye_top1
一般會員 發表:22 回覆:22 積分:9 註冊:2002-05-25 發送簡訊給我 |
請教各位先進.本人需要將TXT考勤資料轉入SQL.有實現此功能.但是轉3000筆資料需要10分鐘.時間太長.USER常常以為電腦當機.不知是否有更好更快方式轉入. var
fromfile:textfile;
str:string;
s1,s2,s3 :string;
begin
//打開原始檔
Assignfile(fromfile,'c:\WR.txt');
reset(fromfile); //寫入SQL DB中
WHILE not EOF(FROMFILE) DO
begin
ReadLn(fromfile,str);
s1 := copy(str,1,3);
s2 := copy(str,4,4);
s3 := copy(str,8,2);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from ATTEND');
adoquery1.Open;
adoquery1.ControlsDisabled;
adoquery1.Insert;
adoquery1.FieldByName('machineno').asstring := s1;
adoquery1.fieldbyname('icserial').asstring := s2;
adoquery1.FieldByName('machrem').AsString := s3;
adoquery1.Post;
adoquery1.EnableControls;
end;
end;
closefile(fromfile);
showmessage('轉檔作業完畢');
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 使用ADO的匯入TXT形態資料的方法試試看﹕
begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select * Into 資料表名稱 From '); ADOQuery1.SQL.Add('[test.txt] In "D:\" "Text;"'); ADOQuery1.ExecSQL; end;========================= 大病初愈﹐休養調整中... =========================
------
忻晟 |
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
若是要快的話使用文字檔確實是最快的方式, 一般若是用Delphi一筆一筆轉, 我會放個TLabel讓他在那邊跳數字, User就不會覺得程式卡住不動
Ex:
Label1.Caption := IntToStr(iCount); adoquery1.Insert; adoquery1.FieldByName('machineno').asstring := s1; adoquery1.fieldbyname('icserial').asstring := s2; adoquery1.FieldByName('machrem').AsString := s3; adoquery1.Post; Inc(iCount); Application.ProcessMessages;你的程式碼感覺不太對, 是不是沒有貼完整 我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2004/10/21 15:48:48
------
我不是高手, 高手是正在銀幕前微笑的人. |
ye_top1
一般會員 發表:22 回覆:22 積分:9 註冊:2002-05-25 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
Andy Chang引言: 請教各位先進.本人需要將TXT考勤資料轉入SQL.有實現此功能.但是轉3000筆資料需要10分鐘.時間太長.USER常常以為電腦當機.不知是否有更好更快方式轉入. var fromfile:textfile; str:string; s1,s2,s3 :string; begin //打開原始檔 Assignfile(fromfile,'c:\WR.txt'); reset(fromfile); //寫入SQL DB中 WHILE not EOF(FROMFILE) DO begin ReadLn(fromfile,str); s1 := copy(str,1,3); s2 := copy(str,4,4); s3 := copy(str,8,2); begin adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add('select * from ATTEND'); adoquery1.Open; // adoquery1.ControlsDisabled; adoquery1.Insert; adoquery1.FieldByName('machineno').asstring := s1; adoquery1.fieldbyname('icserial').asstring := s2; adoquery1.FieldByName('machrem').AsString := s3; adoquery1.Post; // adoquery1.EnableControls; end; end; closefile(fromfile); showmessage('轉檔作業完畢');ye_top1:將上面紅字移到WHILE not EOF(FROMFILE) DO上面 在試試看速度! 你每存一次檔案就開啟一次Table速度當然慢。 請參考。
------
Andy Chang |
TTS
初階會員 發表:72 回覆:66 積分:27 註冊:2003-05-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |