從TXT文件匯入DB還可以加快速度嗎? |
答題得分者是:timhuang
|
pprayer
高階會員 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
之前的流程是這樣:
先將一份文字檔Load至TRichEdit,再從第一行起,(每行長度55字元)
,一筆筆insert into 至Table裡。
每行皆包括了各欄位需要輸入的值,因此會用到COPY,Trim等函式。
文字檔大約二至三萬行,這樣轉大概要花十五或者二十分鐘左右。
有可能把時間再縮短嗎?
我想轉檔的時間,大都是花費在:
1.TRichEdit要抓到指定的行數,行數越到後面,花的時間越多?
2.一筆筆insert得重複二三萬次,可能太慢了,但有方法一次INSERT數筆嗎?
不知有否可以增快效率的方式?
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
可不可以不用先讀入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 發送簡訊給我 |
引言: 可不可以不用先讀入richedit?資料庫的insert速度要想改變,可能要研究sql語法,但在讀入richedit數萬筆資料時,會浪費許多時間,用以下方法直接讀入並寫入database,能加快您一倍的速度謝謝前輩的回應。 先讀入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:26var 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;努力會更接近成功 |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
pprayer
高階會員 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
pprayer
高階會員 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |