線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1092
推到 Plurk!
推到 Facebook!

关于从TXT文档读取数据的问题

尚未結案
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-09 13:19:02 IP:218.19.xxx.xxx 未訂閱
小弟想从某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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-09 19:34:01 IP:202.39.xxx.xxx 未訂閱
試試先把文字檔裡的空格字元換成其它字元 等分解完要填到資料庫前再換回空白字元 -- hagar.
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-11 10:53:46 IP:218.19.xxx.xxx 未訂閱
hi,hagar 不明白要怎么去做,能不能具体指教一下,谢谢!
shieh2700
高階會員


發表:0
回覆:127
積分:100
註冊:2002-06-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-11 20:15:21 IP:61.229.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-13 10:41:47 IP:218.19.xxx.xxx 未訂閱
hi,shieh2700 我试过了不行啊,会弹出错误对话框:说什么不能将null值加入到table中去。我知道#13代表Enter,#9代表Tab,但是我是针对于空格键space,请指教。
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-13 11:00:18 IP:202.39.xxx.xxx 未訂閱
大概像這樣子, 您試試看可不可以?
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-13 15:01:13 IP:61.229.xxx.xxx 未訂閱
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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-13 16:03:06 IP:219.137.xxx.xxx 未訂閱
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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-13 21:04:38 IP:61.229.xxx.xxx 未訂閱
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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-21 08:31:22 IP:218.19.xxx.xxx 未訂閱
hi,shieh2700 showmessage出来的信息是一个“?”,接着就出来上面我写的错误信息。
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-21 09:01:52 IP:218.19.xxx.xxx 未訂閱
hi,hagar 按照你的方法,我试了,会出现错误:project raised exception class ElistError with message:'List index out of bounds(1073764687)'; 请指教!
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-22 18:52:29 IP:218.19.xxx.xxx 未訂閱
各位大哥, 请知道怎么做的大哥,指教一下,谢谢!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-06-22 19:44:24 IP:202.39.xxx.xxx 未訂閱
小弟是用 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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-06-22 23:06:54 IP:218.161.xxx.xxx 未訂閱
引言: hi,shieh2700 showmessage出来的信息是一个“?”,接着就出来上面我写的错误信息。
你的文檔內容可能有問題, 最好去查查是否有下列問題: 1.兩個分隔符號相連 2.文檔內容的資料個數與 Params 的個數不匹配 3.文檔資料型態與 Database Table 中的設定不一致 4.文檔資料錯誤或不完整 5.其他(太多了....) 試試吧.
系統時間:2024-07-02 7:39:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!