关于从TXT文档读取数据的问题 |
尚未結案
|
liangzai
初階會員 發表:77 回覆:91 積分:33 註冊:2004-08-13 發送簡訊給我 |
小弟想从某Txt文档读取数据到数据库table中,使用以下代码:
ST3:=TStringList.Create;
ST4:=TStringList.Create;
if(opendialog2.Execute) and (copy(opendialog2.FileName,2,2)=':\') then
begin
fname:=opendialog2.FileName;
ST3.LoadFromFile(fname);
end;
for M:= 0 to ST3.Count - 1 do
begin
ST4.Delimiter := #9; // TAB 鍵
ST4.DelimitedText := ST3[M];
for N:=0 to ST4.Count-1 do
begin
self.SQLStoredProc4.Params[N].AsString:=ST4[N];
end;
self.SQLStoredProc4.ExecProc;
end;
ST4.Free;
ST3.Free;
结果发现某Txt文档以Tab作为分隔符,如果数据里面字符串存在空格,则不能正常读取数据,反之,将空格删除,就可以正常读取,请帮忙看看什么问题,谢谢!
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
liangzai
初階會員 發表:77 回覆:91 積分:33 註冊:2004-08-13 發送簡訊給我 |
|
shieh2700
高階會員 發表:0 回覆:127 積分:100 註冊:2002-06-13 發送簡訊給我 |
ST3:=TStringList.Create; ST4:=TStringList.Create; if(opendialog2.Execute) and (copy(opendialog2.FileName,2,2)=':\') then begin fname:=opendialog2.FileName; ST3.LoadFromFile(fname); end; for M:= 0 to ST3.Count - 1 do begin //ST4.Delimiter := #9; // TAB 鍵 //ST4.DelimitedText := ST3[M]; ST4.Text := StringReplace(ST3[M],#9,#13,[rfReplaceAll, rfIgnoreCase]); for N:=0 to ST4.Count-1 do begin self.SQLStoredProc4.Params[N].AsString:=ST4[N]; end; self.SQLStoredProc4.ExecProc; end; ST4.Free; ST3.Free; |
liangzai
初階會員 發表:77 回覆:91 積分:33 註冊:2004-08-13 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
大概像這樣子, 您試試看可不可以?
var STmp: string; begin ST3 := TStringList.Create; if (OpenDialog2.Execute) and (Copy(OpenDialog2.FileName, 2, 2)= ':\') then begin fname := OpenDialog2.FileName; ST3.LoadFromFile(fname); STmp := ST3.Text; STmp := StringReplace(STmp, ' ', #255#255#255, [rfReplaceAll]); ST3.Delimiter := #9; // TAB 鍵 ST3.DelimitedText := STmp; for M:= 0 to ST3.Count - 1 do begin STmp := ST3.Strings[M]; STmp := StringReplace(STmp, #255#255#255, ' ', [rfReplaceAll]); self.SQLStoredProc4.Params[N].AsString := STmp; self.SQLStoredProc4.ExecProc; end; end; ST3.Free;-- hagar. |
shieh2700
高階會員 發表:0 回覆:127 積分:100 註冊:2002-06-13 發送簡訊給我 |
ST3:=TStringList.Create; ST4:=TStringList.Create; if(opendialog2.Execute) and (copy(opendialog2.FileName,2,2)=':\') then begin fname:=opendialog2.FileName; ST3.LoadFromFile(fname); end; for M:= 0 to ST3.Count - 1 do begin ST4.Text := StringReplace(ST3[M],#9,#13#10,[rfReplaceAll]); for N:=0 to ST4.Count-1 do begin self.SQLStoredProc4.Params[N].AsString:=ST4[N]; end; self.SQLStoredProc4.ExecProc; end; ST4.Free; ST3.Free;先前的程式未經測試, 發現一些問題, 此為更新後之資料. |
liangzai
初階會員 發表:77 回覆:91 積分:33 註冊:2004-08-13 發送簡訊給我 |
hi,shieh2700
按照你的方法,我试了一下,比如说将下面的Txt文档内容加入到table中,
filed分别为:empno,lastname,givenname,chinesename,deptsect,descrp. Txt文档内容:
081566 Ito Kenyu 李明 ggg Business Management
081522 Ie Kenn 李达 ttt Business Management
... 会出现错误信息:ora-01400,无法将null插入到(“table"."lastname")...
请问是怎么回事,谢谢!
|
shieh2700
高階會員 發表:0 回覆:127 積分:100 註冊:2002-06-13 發送簡訊給我 |
ST3:=TStringList.Create; ST4:=TStringList.Create; if(opendialog2.Execute) and (copy(opendialog2.FileName,2,2)=':\') then begin fname:=opendialog2.FileName; ST3.LoadFromFile(fname); end; for M:= 0 to ST3.Count - 1 do begin ST4.Text := StringReplace(ST3[M],#9,#13#10,[rfReplaceAll]); for N:=0 to ST4.Count-1 do begin ShowMessage(ST4[N]);//DEBUG CODE self.SQLStoredProc4.Params[N].AsString:=ST4[N]; end; self.SQLStoredProc4.ExecProc; end; ST4.Free; ST3.Free;看看 ST4[N] 的內容值是什麼 |
liangzai
初階會員 發表:77 回覆:91 積分:33 註冊:2004-08-13 發送簡訊給我 |
|
liangzai
初階會員 發表:77 回覆:91 積分:33 註冊:2004-08-13 發送簡訊給我 |
|
liangzai
初階會員 發表:77 回覆:91 積分:33 註冊:2004-08-13 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
小弟是用 Delphi5, 所以沒用 Delimiter 這個東東
改成如下:
var fName: string; M: integer; ST3: TStringList; STmp: string; begin ST3 := TStringList.Create; if (OpenDialog2.Execute) and (Copy(OpenDialog2.FileName, 2, 2)= ':\') then begin fname := OpenDialog2.FileName; ST3.LoadFromFile(fname); STmp := ST3.Text; STmp := StringReplace(STmp, ' ', #255#255#255, [rfReplaceAll]); ST3.CommaText := STmp; for M:= 0 to ST3.Count - 1 do begin STmp := ST3.Strings[M]; STmp := StringReplace(STmp, #255#255#255, ' ', [rfReplaceAll]); Memo1.Lines.Add(STmp); // 用一個 TMemo 看分解出來的結果是什麼 self.SQLStoredProc4.Params[N].AsString := STmp; self.SQLStoredProc4.ExecProc; end; end; ST3.Free; end;-- hagar. |
shieh2700
高階會員 發表:0 回覆:127 積分:100 註冊:2002-06-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |