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

文字檔寫入資料庫發生無限迴圈

答題得分者是:st33chen
sssp116
一般會員


發表:23
回覆:27
積分:10
註冊:2008-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-30 09:35:02 IP:60.248.xxx.xxx 訂閱
您們好,文字檔已經擷取成功了,寫入資料庫發生了問題
查了查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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-30 10:07:40 IP:122.116.xxx.xxx 未訂閱
您好,
無限 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-30 10:46:00 IP:60.248.xxx.xxx 訂閱
前輩~我試過加上Readln(TF,str) 一樣不行呢,我不加post的原因是因為我有另一個存檔按鈕

我是要把這些東西放在我的DBGrid上而已~先給需求者看看是否格式資料正確後~再按下存檔按鈕

我的CDS 就會自動Update了。現在還是一樣無限迴圈呢~怎麼會這樣ˊˋ
編輯記錄
sssp116 重新編輯於 2009-04-30 11:16:00, 註解 無‧
sssp116
一般會員


發表:23
回覆:27
積分:10
註冊:2008-12-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-30 12:03:40 IP:60.248.xxx.xxx 訂閱
我的問題已經解決了~原來要在Append還有Edit後面才可以開始Readln

這樣就不會無限迴圈了,資料也已經寫入了!感謝前輩的回應~^^"
系統時間:2024-04-25 17:51:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!