文字檔寫入資料庫發生無限迴圈 |
答題得分者是:st33chen
|
sssp116
一般會員 發表:23 回覆:27 積分:10 註冊:2008-12-05 發送簡訊給我 |
您們好,文字檔已經擷取成功了,寫入資料庫發生了問題
查了查Debug不曉得哪裡出錯了,所以放上來讓各位前輩們看看指教一下^^" [code delphi] procedure TForm1.Bit_tClick(Sender: TObject); var TF:TEXTFILE; str,tmp_cno,tmp_sup,tmp_wd:STRING; begin bit_t.Enabled:=false; bit_s.Enabled:=true; adoquery1.open; cds1.Open; memo1.Lines.Clear; assignFile(TF,'C:\TF2.txt'); reset(TF); while not eof(TF) do begin cds1.Append; cds1.Edit; if trim(str) <> '' then begin Memo1.Lines.Add(str); if copy(str,1,8)='採購單號' then tmp_cno:=copy(str,11,8) else if copy(str,29,8) = '供 應 商' then tmp_sup:=copy(str,39,12) else begin cds1['pur_sup']:=tmp_sup; cds1['pur_nm']:=tmp_cno; cds1['pur_sn']:=copy(str,1,2); cds1['pur_snm']:=copy(str,4,10); cds1['pur_st']:=copy(str,15,20); cds1['pur_unit']:=trim(copy(str,36,4)); cds1['pur_date']:=copy(str,73,8); tmp_wd:=copy(str,41,8); if copy(tmp_wd,3,1)=',' then begin tmp_wd:=copy(tmp_wd,1,2) copy(tmp_wd,4,5); end; cds1['pur_qty']:=strtofloat(trim(tmp_wd)); tmp_wd:=copy(str,50,9); if copy(tmp_wd,3,1)=',' then begin tmp_wd:=copy(tmp_wd,1,2) copy(tmp_wd,4,5); end; cds1['pur_pri']:=strtofloat(trim(tmp_wd)); tmp_wd:=copy(str,60,12); if copy(tmp_wd,3,1)=',' then begin tmp_wd:=copy(tmp_wd,1,2) copy(tmp_wd,4,5); end; cds1['pur_amt']:=strtofloat(trim(tmp_wd)); end; end; end; closefile(TF); end; [/code] |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
無限 LOOP 是因為 您可能少下了一個 READLN 命令 ===================引 用 sssp116 文 章=================== 您們好,文字檔已經擷取成功了,寫入資料庫發生了問題 查了查Debug不曉得哪裡出錯了,所以放上來讓各位前輩們看看指教一下^^" procedure TForm1.Bit_tClick(Sender: TObject); var TF:TEXTFILE; str,tmp_cno,tmp_sup,tmp_wd:STRING; begin bit_t.Enabled:=false; bit_s.Enabled:=true; adoquery1.open; cds1.Open; memo1.Lines.Clear; assignFile(TF,'C:\TF2.txt'); reset(TF); while not eof(TF) do begin str := readln(TF); // 現在都改用 tstringlist, 忘了 textfile 語法是否是這樣, 請自行修正 // cds1.Append; 調到 if 裏面, 不然會很多筆空資料 // cds1.Edit; if trim(str) <> '' then begin Memo1.Lines.Add(str); // if copy(str,1,8)='採購單號' then tmp_cno:=copy(str,11,8) // 依上一題, 這兩欄在同一列上. 用 else if 會少資料 // else if copy(str,29,8) = '供 應 商' then tmp_sup:=copy(str,39,12) if copy(str,1,8)='採購單號' then begin tmp_cno:=copy(str,11,8); tmp_sup:=copy(str,39,12); end else begin cds1.Append; // 我 沒用過 clientdataset 不知為何要 append 再 edit , 不是用 insert 或 append 就好了? cds1.Edit; cds1['pur_sup']:=tmp_sup; cds1['pur_nm']:=tmp_cno; cds1['pur_sn']:=copy(str,1,2); cds1['pur_snm']:=copy(str,4,10); cds1['pur_st']:=copy(str,15,20); cds1['pur_unit']:=trim(copy(str,36,4)); cds1['pur_date']:=copy(str,73,8); tmp_wd:=copy(str,41,8); if copy(tmp_wd,3,1)=',' then begin tmp_wd:=copy(tmp_wd,1,2) copy(tmp_wd,4,5); end; cds1['pur_qty']:=strtofloat(trim(tmp_wd)); tmp_wd:=copy(str,50,9); if copy(tmp_wd,3,1)=',' then begin tmp_wd:=copy(tmp_wd,1,2) copy(tmp_wd,4,5); end; cds1['pur_pri']:=strtofloat(trim(tmp_wd)); tmp_wd:=copy(str,60,12); if copy(tmp_wd,3,1)=',' then begin tmp_wd:=copy(tmp_wd,1,2) copy(tmp_wd,4,5); end; cds1['pur_amt']:=strtofloat(trim(tmp_wd)); end; cds1.post; // 我 沒用過 clientdataset 不知是否要 post, (照理要) end; end; closefile(TF); end; 參考一下
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-04-30 10:09:26, 註解 無‧
|
sssp116
一般會員 發表:23 回覆:27 積分:10 註冊:2008-12-05 發送簡訊給我 |
|
sssp116
一般會員 發表:23 回覆:27 積分:10 註冊:2008-12-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |