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

文字檔(*.TXT)轉ACCESS資料庫問題

尚未結案
ryowu
一般會員


發表:56
回覆:25
積分:16
註冊:2002-04-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-02 07:38:26 IP:61.216.xxx.xxx 未訂閱
我現在在'c:\123.txt'有一些簡單的字串,ex. GS7-12-B,021231T1,03/01/02, 13.16V, 17.0 m?00:07.48 GS7-12-B,021231T1,03/01/02, 13.19V, 17.1 m?00:16.81 GS7-12-B,021231T1,03/01/02, 13.21V, 15.9 m?00:27.11 GS7-12-B,021231T1,03/01/02, 13.20V, 16.4 m?00:06.98 GS7-12-B,021231T1,03/01/02, 13.20V, 16.5 m?00:46.88 如何利用TABLE1/DBGRID1(不經BDE設定,完全在程式上運作)將上述字串值寫入ACCESS資料庫 執行後DBGRID1的畫面為下表所示: ┌────┬────┬────┬───┬───┬────┐ │ 樣品 │製造日期│輸入時間│電壓值│阻抗值│測試時間│ ├────┼────┼────┼───┼───┼────┤ │GS7-12-B│021231T1│03/01/02│13.16 │ 17.0 │ 7.48 │ ├────┼────┼────┼───┼───┼────┤ │GS7-12-B│021231T1│03/01/02│13.19 │ 17.1 │ 16.81 │ ├────┼────┼────┼───┼───┼────┤ │GS7-12-B│021231T1│03/01/02│13.21 │ 15.9 │ 27.11 │ ├────┼────┼────┼───┼───┼────┤ │GS7-12-B│021231T1│03/01/02│13.20 │ 16.4 │ 6.98 │ ├────┼────┼────┼───┼───┼────┤ │GS7-12-B│021231T1│03/01/02│13.20 │ 16.5 │ 46.88 │ └────┴────┴────┴───┴───┴────┘ ↑ ↑ ↑ ↑ ↑ ↑ 字串格式 字串格式 日期格式 數值 數值 數值
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-02 08:46:27 IP:218.16.xxx.xxx 未訂閱
請你先攪清楚,你想甚樣連上 ACCESS 數據庫? 不用BDE,是否用ADO?還是第三者軟件? 總不能完全不連上K.Top而在K.Top留言罷
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-02 09:52:43 IP:61.218.xxx.xxx 未訂閱
方法有很多種 像是開啟文字檔讀入後轉存至你所新建立的Access 資料庫 我提供另一方法 利用ODBC text Driver 將txt檔建立ODBC 連線 可於ODBC內設定格式 再以ADODataSet 開啟,連至DBGrid即可 至於已讀入DataSet 的文字檔資料,看你是要繼續的轉存mdb 還是其它…都可以        
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-02 10:41:43 IP:61.221.xxx.xxx 未訂閱
ryowu你好: 用M$的東西不經過odbc,好像有點難度,小弟知道mysql可以不用經過odbc 因為小弟有問過你可以參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25791
------
======================
昏睡~
不昏睡~
不由昏睡~
ryowu
一般會員


發表:56
回覆:25
積分:16
註冊:2002-04-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-03 13:07:01 IP:61.216.xxx.xxx 未訂閱
各位大哥: 小弟已先用TStringGrid這一個元件將文字資料轉成像access的格式,有沒有可以將TStringGrid所做成的表格轉存為ACCESS或是EXECL的格式 謝謝!
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-03 15:52:00 IP:61.218.xxx.xxx 未訂閱
TStringGrid 元件不是資料感知元件 你將資料塞入StringGrid,那只是在外觀上(顯示上看起來條DBGrid) 實際上你還是要寫code 來處理    一、先建立一個空的資料庫mdb,將資料格式建立好 二、以TStringList 將文字檔讀入 三、參考這二篇 http://delphi.ktop.com.tw/topic.php?method=SugestGood&method2=Y&TOPIC_ID=21331 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20862     將讀入的文字檔,以","為分割字元,各自讀出, 四、以ado 開啟資料庫,將分割字串依序寫入資料庫 五、轉換完畢    
stonys
初階會員


發表:64
回覆:111
積分:38
註冊:2002-09-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-03 23:36:58 IP:61.59.xxx.xxx 未訂閱
亂入一下 請問,非得自己寫程式來處理嗎? 如果不用的話,其實可以用EXCEL將文字檔讀進來 再用ACCESS將EXCEL轉入就可以了~ (這樣不知道有沒有偏離主題呢^^")
ryowu
一般會員


發表:56
回覆:25
積分:16
註冊:2002-04-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-05 08:43:43 IP:61.216.xxx.xxx 未訂閱
我嘗試用tquery來寫,可是出現了下的的錯誤訊息,我該如何解決呢? "Porject Project1.exe raised exception class EDBEngineError with message 'Invalid parameter' Process stopped. Use Step or Run to Continue" 我的原始程式碼如下: function _split(const vOriStr: AnsiString; const vDelimiter: AnsiString=','): TStrings; var i: Integer; s: AnsiString; begin try result := TStringList.Create(); s := Trim(vOriStr); repeat i := Pos(vDelimiter, s); if i = 0 then result.Append(s) else begin result.Append(Copy(s, 1, i - 1)); Delete(s, 1, i); end; until i = 0; except on e: Exception do; end; end; procedure TForm1.FormCreate(Sender: TObject); var s,sl,s2,s4:string; a:TStrings; i:integer; begin sl:='HR1224WF21,021231A1T1,03/01/02, 13.23V, 16.6 m?00:07.21'; s2:= StringReplace(sl,'m?',',',[rfReplaceAll]); s4:= StringReplace(s2,'00:','',[rfReplaceAll]); s := StringReplace(s4,'V,',',',[rfReplaceAll]); a := _split(s); memo1.Clear ; for i:= 0 to a.count - 1 do begin memo1.lines.add(trim(a.strings[i])); end; a.free; end; procedure TForm1.FormActivate(Sender: TObject); begin Query1.DatabaseName := GetCurrentDir; Query2.DatabaseName := GetCurrentDir; Query1.SQL.Clear; Query1.SQL.Add('SELECT * FROM CAP.DBF'); Query1.SQL.Add('ORDER BY ENO'); Query1.CLOSE; Query1.OPEN; end; procedure TForm1.Button2Click(Sender: TObject); VAR MAXENO : INTEGER; begin Query2.SQL.Clear; Query2.SQL.Add('SELECT MAX(ENO) AS MAXENO FROM CAP.DBF'); Query2.CLOSE; Query2.OPEN; MAXENO := Query2.FieldByName('MAXENO').AsInteger 1; Query2.SQL.Clear; Query2.SQL.Add('INSERT INTO CAP.DBF'); Query2.SQL.Add('( ENO ,'); Query2.SQL.Add(' TYPE ,'); Query2.SQL.Add(' LOT_NO ,'); Query2.SQL.Add(' VOLTAGE ,'); Query2.SQL.Add(' RESISTANCE ,'); Query2.SQL.Add(' CAPACITY '); Query2.SQL.Add(' ) VALUES ( '); Query2.SQL.Add(' ''' INTTOSTR(MAXENO) ''' ,'); Query2.SQL.Add(' ''' memo1.Lines[0] ''' , '); Query2.SQL.Add(' ''' memo1.Lines[1] ''' , '); Query2.SQL.Add(' ''' memo1.Lines[2] ''' , '); Query2.SQL.Add(' ''' memo1.Lines[3] ''' , '); Query2.SQL.Add(' ''' memo1.Lines[4] ''' , '); Query2.SQL.Add(' ''' memo1.Lines[5] ''' ) '); Query2.ExecSQL; Query1.CLOSE ; Query1.OPEN; end;
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-05 09:25:25 IP:218.16.xxx.xxx 未訂閱
你 update 六個欄位卻有七個 Value 當然是 'Invalid parameter' 了 另外,你每次改變SQL Query 都會用使用不少時間去重新驗証SQL的內容。你最後的SQL就要重覆驗証16次(clear及Add 都是改變),若你直接用 Query.SQL.Text := '....' '....' .... 等等便可以只驗証一次,應可增加效能五到十部。可參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27906 中段對 SQL.Text 的討論。
ryowu
一般會員


發表:56
回覆:25
積分:16
註冊:2002-04-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-04-05 13:31:16 IP:61.216.xxx.xxx 未訂閱
本來我在Query2.SQL.Add(' LOT_NO ,');下加了Query2.SQL.Add(' DATE ,');也是會出現錯誤, 可是我改了Query2.SQL.Add(' M_DATE,');【CAP.DBF也有改欄位名稱】之後就可以新增了 可是針對Query.SQL.Text的delphi help語法說明及站上的範例,看了之後還是一頭霧水,坊間是否有sql語法的說明 另外,下列的sql.add改成sql.text要怎樣改....(因為我有試著依Justmade的方法去改,可是會出現錯誤訊息)
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-04-05 13:46:26 IP:218.16.xxx.xxx 未訂閱
Date 是保留字,不能在SQL句字裡直接當欄位使用,若要用的話要用 ' ' 來括住。    網上 SQL 資料這裡有個,是 hagar 版主提供給別網友的我抄來一用 http://www.w3schools.com/sql/default.asp    不過長遠來說買本書看會比較好。
Query2.SQL.Text := 'INSERT INTO CAP.DBF (ENO, TYPE, LOT_NO, M_ADATE, VOLTAGE, RESISTANCE, CAPACITY) '  
                   'VALUES ('''   INTTOSTR(MAXENO)   ''', '''   memo1.Lines[0]   ''', '''   
                   memo1.Lines[1]   ''', '''   memo1.Lines[2]   ''', '''   memo1.Lines[3]   ''', '''  
                   memo1.Lines[4]   ''', '''   memo1.Lines[5]   '''';
另外你要註要你日期皂格式是否符合數據庫的格式。
ryowu
一般會員


發表:56
回覆:25
積分:16
註冊:2002-04-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-04-05 19:48:19 IP:61.216.xxx.xxx 未訂閱
謝謝大家 此問題由在大家的指導之下完成了
系統時間:2024-05-09 1:00:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!