讀取TXT文字檔 |
尚未結案
|
smallmi
一般會員 發表:18 回覆:18 積分:7 註冊:2012-09-02 發送簡訊給我 |
請問各位板大~以下程式碼是讀取TXT文字檔到DBGIRD..
第一次執行程式結果正常..但第2次執行程式會出現"Duplicate name'ID'in TFieldDefs" 必須關閉視窗再執行一次才會正常. 請問各位板大..此錯誤需如何修正...請指導~謝謝!! procedure TForm1.Button1Click(Sender: TObject); var f: textfile; wStr,filename: String; wList: TStringList; i: Integer; begin DBGrid1.DataSource := DataSource1; DataSource1.DataSet := ADODataSet1; wList := TStringList.Create; with ADODataSet1.FieldDefs do begin Add('ID', ftInteger); Add('Col_1', ftString, 50); Add('Col_2', ftString, 50); end; ADODataSet1.CreateDataSet; if OpenTextFileDialog1.Execute then filename:= OpenTextFileDialog1.FileName; if fileexists(filename)=true then begin i := 1; Assignfile(f, filename); Reset(f); while not eof(f) do begin Readln(f, wStr); wStr := StringReplace(wStr, '|',',', [rfReplaceAll]); wList.CommaText := wStr; ADODataSet1.Append; ADODataSet1.FieldByName('ID').AsInteger := i; ADODataSet1.FieldByName('Col_1').AsString := wList.Strings[0]; ADODataSet1.FieldByName('Col_2').AsString := wList.Strings[1]; ADODataSet1.Post; Inc(i); end; closefile(f); wList.Free; end; end; end. 編輯記錄
smallmi 重新編輯於 2012-09-02 10:31:15, 註解 無‧
|
ANDY8C
資深會員 發表:114 回覆:582 積分:299 註冊:2006-10-29 發送簡訊給我 |
紅色那段是把 "欄位" 加入 dbgrid 中嗎? 如果是......那 dbgrid 中,當然會重複
這功能只要執行一次即可..... 所以... 法1 在加入一個 button2 把 紅色 那段,放在 button2 中,先按 button2 產生欄位.....,再按 button1 把資料加入 程式結束前, button2 不用再按 法 2 或者把 把 紅色 那段,放在 onformcreate 也可以,程式一啟用,就建立 省下 button2 法3 在 ide 的設計時,就加入,讓 DBGRID 有此三個 FIELDS ===================引 用 smallmi 文 章=================== 請問各位板大~以下程式碼是讀取TXT文字檔到DBGIRD.. 第一次執行程式結果正常..但第2次執行程式會出現"Duplicate name'ID'in TFieldDefs" 必須關閉視窗再執行一次才會正常. 請問各位板大..此錯誤需如何修正...請指導~謝謝!! procedure TForm1.Button1Click(Sender: TObject); var f: textfile; wStr,filename: String; wList: TStringList; i: Integer; begin DataSource1.DataSet := ADODataSet1; with ADODataSet1.FieldDefs do Add('ID', ftInteger); Add('Col_2', ftString, 50); end; ADODataSet1.CreateDataSet; if OpenTextFileDialog1.Execute then filename:= OpenTextFileDialog1.FileName; if fileexists(filename)=true then begin i := 1; Assignfile(f, filename); Reset(f); while not eof(f) do begin Readln(f, wStr); wStr := StringReplace(wStr, '|',',', [rfReplaceAll]); wList.CommaText := wStr; ADODataSet1.Append; ADODataSet1.FieldByName('ID').AsInteger := i; ADODataSet1.FieldByName('Col_1').AsString := wList.Strings[0]; ADODataSet1.FieldByName('Col_2').AsString := wList.Strings[1]; ADODataSet1.Post; Inc(i); end; closefile(f); wList.Free; end; end; end.
------
--------------------------------------- 偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩. |
smallmi
一般會員 發表:18 回覆:18 積分:7 註冊:2012-09-02 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
顯然你是一位完全生手, 不了解Delphi基本功, 所以建議多看一些Delphi的初階書
DBGrid 是一個顯示介面, 把資料庫的記錄明白顯示到螢幕上而已, 不是DBGrid 儲存到資料庫 所你應該要了解, 只要資料庫有資料, DBGrid 就可以顯示, 要DBGrid 做任何顯示, 也是要從資料庫進行動作, 如何將資料存到資料庫, 請回頭看書, 會比我們寫的更詳細! ===================引 用 smallmi 文 章=================== 請指導~謝謝!! |
smallmi
一般會員 發表:18 回覆:18 積分:7 註冊:2012-09-02 發送簡訊給我 |
謝謝以上版大的指導..請教各位版大..我寫了2個BUTTON,第一個BUTTON讀取文字檔並顯示在DBGRID,等待USER確認無誤,按BUTTON2存檔至資料庫中,目前問題,按下BUTTON2不會存檔至資料庫..請版大指導~謝謝!!
已有將 ADODataSet1 CommandType屬性值設定為cmdText CommandText屬性值設為Select * From aaa Active屬性設為True LockType設為ltBatchOptimistic procedure TForm1.Button1Click(Sender: TObject); var f: textfile; wStr,filename: String; wList: TStringList; i: Integer; begin if OpenTextFileDialog1.Execute then filename:= OpenTextFileDialog1.FileName; if fileexists(filename)=true then begin wList := TStringList.Create; ADODataSet1.Close; ADODataSet1.FieldDefs.Clear; ADODataSet1.FieldDefs.Add('ID', ftInteger); ADODataSet1.FieldDefs.Add('DAT_SRDT', ftString, 8); ADODataSet1.FieldDefs.Add('NUM_PS', ftString, 12); ADODataSet1.FieldDefs.Add('COD_EMP', ftString, 5); ADODataSet1.FieldDefs.Add('LIN_SRDT', ftString, 2); ADODataSet1.CreateDataSet; i := 1; Assignfile(f, filename); Reset(f); while not eof(f) do begin Readln(f, wStr); wList.CommaText := wStr; ADODataSet1.Append; ADODataSet1.FieldByName('ID').AsInteger := i; ADODataSet1.FieldByName('DAT_SRDT').AsString := wList[0]; ADODataSet1.FieldByName('NUM_PS').AsString := wList[1]; ADODataSet1.FieldByName('COD_EMP').AsString := wList[2]; ADODataSet1.FieldByName('LIN_SRDT').AsString := wList[3]; ADODataSet1.Post; Inc(i); end; closefile(f); wList.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); begin ADODataSet1.updateBatch(arAll); end; end.
|
ANDY8C
資深會員 發表:114 回覆:582 積分:299 註冊:2006-10-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |