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

读取TXT文档数据至table中的问题

尚未結案
liangzai
初階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-23 13:19:43 IP:218.19.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]; 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文档中的数据出现错误,例如说某field中的某些内容长度超过了指定长度等情况,程序怎样处理这种情况比较好?谢谢!
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-23 13:47:18 IP:61.222.xxx.xxx 未訂閱
可以先判定在ST3或者ST4程式中的每一筆資料,在做預儲程序前各個欄位的大小 是否跟資料庫符合,若是不符的話可以把不符的資料加到另一個TABEL中,存到資料庫中或者是跑完程式後開一個FORM,SHOW出不符合的資料索引值或名稱
liangzai
初階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-23 14:17:27 IP:218.19.xxx.xxx 未訂閱
hi,huangeider 谢谢你的回复,能不能具体一点,比如说现在TXT中有用分隔符分隔的6个fields,Table中也是6个fields,各自有一个字符长度限制。具体要做么去做? 我想如果要判断错误的话,就判断ST4就可以了,但是问题是TXT文档中的数据有错误,可能会有很多种错误的原因(或者字符长度过长,或者与params个数不符等等),假如一个一个这样去判断就会比较麻烦,也费时间。
liangzai
初階會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-26 11:46:24 IP:218.19.xxx.xxx 未訂閱
请教前辈,谁能帮我一下: 我的storeprocedure是这样写的,我在想,在storeprocedure里面应该可以来判断数据的正确与否,要怎么实现呢? ( h_empno in varchar2, ----限定6个字长 h_lastname in varchar2, ----限定10个字长 h_givenname in varchar2, ----限定8个字长 h_chinesename in varchar2, ----限定8个字长 h_deptsect in varchar2, ----限定20个字长 h_descrp in varchar2) ----限定30个字长 IS BEGIN if h_empno insert into hr_master (empno,lastname,givenname,chinesename,deptsect,descrp) values(h_empno,h_lastname,h_givenname,h_chinesename,h_deptsect,h_descrp); END wbs_hr_upload;
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-26 13:59:48 IP:222.248.xxx.xxx 未訂閱
首先,這种判斷衹能是一种簡單性的內容分析,更多的還要靠人的約定(即對程序來講,提供的文件可以認為是滿足程序需要的)。 判斷也衹能做以下步驟: 1、文件是否存在? 2、文件是否有內容? 3、文件中每一行是否有內容? 4、每一行是否包含6個字段內容? 5、每個字段內容是否滿足長度限定? 如果不滿足1、2,直接退出處理;如果不滿足3-5,則直接跳到下一行處理。 在哪里判斷都是可以的, 是放在程序中判斷還是放在存儲過程中判斷,主要是看性能需求,以及實現起來的方便性。顯然,這种判斷用程序實現更簡單。 ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
liangzai
初階會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-26 15:40:12 IP:218.19.xxx.xxx 未訂閱
hi,h@visli 能告诉我具体代码怎么实现吗?非常感谢!
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-28 14:11:50 IP:222.248.xxx.xxx 未訂閱
procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog2.Execute then ExecStoredProc(OpenDialog2.FileName);
end;    procedure TForm1.ExecStoredProc(FileName: string);
var
  ST3, ST4: TStrings;
  M, N: integer;
begin
  if not FileExists(FileName) then
  begin
    Application.MessageBox(PChar('指定的文件'''   FileName   '''不存在'), '錯誤', 16);
    Exit;
  end;
  ST3 := TStringList.Create;
  ST4 := TStringList.Create;
  try
    ST3.LoadFromFile(FileName);
    if Trim(ST3.Text) = '' then
      Application.MessageBox('指定的文件沒有內容', '錯誤', 16)
    else
    for M := 0 to ST3.Count - 1 do
    begin
      if Trim(ST3.Strings[M]) = '' then Continue;          ST4.Delimiter := #9; // TAB 鍵
      ST4.DelimitedText := ST3.Strings[M];          if ST4.Count <> 6 then Continue;
      if Length(ST4.Strings[0]) > 6 then Continue;
      if Length(ST4.Strings[1]) > 10 then Continue;
      if Length(ST4.Strings[2]) > 8 then Continue;
      if Length(ST4.Strings[3]) > 8 then Continue;
      if Length(ST4.Strings[4]) > 20 then Continue;
      if Length(ST4.Strings[5]) > 30 then Continue;          for N := 0 to 5 do
        SQLStoredProc4.Params[N].AsString := ST4[N];
      SQLStoredProc4.ExecProc;
    end;
  finally
    ST3.Free;
    ST4.Free;
  end;
end;
---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
系統時間:2024-06-01 17:00:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!