全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1688
推到 Plurk!
推到 Facebook!

從TXT文件匯入DB還可以加快速度嗎?

答題得分者是:timhuang
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-24 11:29:44 IP:211.75.xxx.xxx 未訂閱
之前的流程是這樣: 先將一份文字檔Load至TRichEdit,再從第一行起,(每行長度55字元) ,一筆筆insert into 至Table裡。 每行皆包括了各欄位需要輸入的值,因此會用到COPY,Trim等函式。 文字檔大約二至三萬行,這樣轉大概要花十五或者二十分鐘左右。 有可能把時間再縮短嗎? 我想轉檔的時間,大都是花費在: 1.TRichEdit要抓到指定的行數,行數越到後面,花的時間越多? 2.一筆筆insert得重複二三萬次,可能太慢了,但有方法一次INSERT數筆嗎? 不知有否可以增快效率的方式?
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-24 12:40:56 IP:211.76.xxx.xxx 未訂閱
可不可以不用先讀入richedit?資料庫的insert速度要想改變,可能要研究sql語法,但在讀入richedit數萬筆資料時,會浪費許多時間,用以下方法直接讀入並寫入database,能加快您一倍的速度
var f: TextFile;  
     s: string; 
     Ch: Char;
begin  
   AssignFile(f, 'C:\xxx.txt');  
   Reset(F1);  
   while not Eof(f) do 
   begin    
     ReadLn(f, s);  
     if Pos(' ', s) then // s 字串內有一個空白      ;   
     if Pos('  ', s) then // s 字串內有兩個空白    
     Break; 
  end; 
  CloseFile(f);
end;
努力會更接近成功
------
努力會更接近成功
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-24 14:07:14 IP:211.75.xxx.xxx 未訂閱
引言: 可不可以不用先讀入richedit?資料庫的insert速度要想改變,可能要研究sql語法,但在讀入richedit數萬筆資料時,會浪費許多時間,用以下方法直接讀入並寫入database,能加快您一倍的速度
var f: TextFile;  
     s: string; 
     Ch: Char;
begin  
   AssignFile(f, 'C:\xxx.txt');  
   Reset(F1);  
   while not Eof(f) do 
   begin    
     ReadLn(f, s);  
     if Pos(' ', s) then // s 字串內有一個空白      ;   
     if Pos('  ', s) then // s 字串內有兩個空白    
     Break; 
  end; 
  CloseFile(f);
end;
努力會更接近成功
謝謝前輩的回應。 先讀入TRichEdit主要的目的是給使用者看的。 但是真正在寫入DB時,還是可以在TextFile和TRichEdit中選擇, 這樣似乎是 ReadLN() 跟 TRichEdit.Lines.Strings[] 在拼速度? ReadLN()在讀入一行之後會停在下一行的起點,是說一直有個指標會指向目前文件中的某個位置? 那麼TRichEdit.Lines.Strings[]是否每讀一行都會從檔案起始處開始找一次? 如果這樣的話,在同樣都是從頭到尾一行行讀取時,好像是ReadLN動作比較小一點。 不知道這樣理解有沒有錯? 我先把兩者試驗一下,晚點把結果也弄上來。 剛剛試了一下文件20800行,使用TextFile時間2:56,TRichEdit 3:38 大概差了半分鐘呢 發表人 - pprayer 於 2003/10/24 14:12:05 發表人 - pprayer 於 2003/10/24 15:46:26
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-24 17:15:58 IP:203.95.xxx.xxx 未訂閱
請參考這篇: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34591 http://delphi.ktop.com.tw/topic.php?topic_id=34655
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-28 12:26:40 IP:211.75.xxx.xxx 未訂閱
引言: 請參考這篇: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34591 http://delphi.ktop.com.tw/topic.php?topic_id=34655
小弟還有個問題,要把這些資料存入DB的話,該怎麼做呢? 用select into 可以做得到嗎?
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-28 19:21:07 IP:203.204.xxx.xxx 未訂閱
請問是使用何種資料庫呢? 你可以使用 TBatchMove 元件來進行異質資料庫的資料移轉.
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-03 14:53:33 IP:211.75.xxx.xxx 未訂閱
引言: 請問是使用何種資料庫呢? 你可以使用 TBatchMove 元件來進行異質資料庫的資料移轉.
我使用MS SQL Server,想說文件可以變成一個Table是不是也可以直接寫到DB裡面?
系統時間:2024-11-25 2:42:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!