線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1370
推到 Plurk!
推到 Facebook!

兩個Access 的 mdb 檔案互相匯入的問題

缺席
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-05 23:22:31 IP:61.59.xxx.xxx 未訂閱
請教各位高手,我用Delphi5 的 ADOTABLE及ADOQUERY 做兩個mdb檔互相轉入的動作,一個有索引,一個沒有,卻出現錯誤,告訴我因為有索引所以不能寫入,不知要如何解決
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-06 07:39:28 IP:202.39.xxx.xxx 未訂閱
您互相轉入的程式碼可以貼上來嗎? -- 將進酒 杯莫停 與君歌一曲 請君為我傾耳聽
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-06 09:59:19 IP:210.201.xxx.xxx 未訂閱
程式碼如下: unit Unit15; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, ADODB, StdCtrls, Grids, DBGrids, DBTables; type TForm15 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; OpenDialog1: TOpenDialog; Button2: TButton; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form15: TForm15; TB1, TB2 : TADOTable; Path1, Path2 : String; implementation uses MainForm; {$R *.DFM} procedure TForm15.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=CaFree; end; procedure TForm15.FormShow(Sender: TObject); begin Path1:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=' Form1.Path Form1.DBName ';Persist Security Info=True'; TB1:=TADOTable.Create(Self); TB2:=TADOTable.Create(Self); TB1.ConnectionString:=PATH1; TB1.TableName:='攔巡查資料'; end; procedure TForm15.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then Edit1.Text := OpenDialog1.FileName; end; procedure TForm15.Edit1Change(Sender: TObject); begin Path2:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=' Edit1.Text ';Persist Security Info=True'; TB2.ConnectionString:=PATH2; TB2.TableName:='巡查資料庫'; end; procedure TForm15.Button2Click(Sender: TObject); var I,j:Integer; CARNO,ExDate,QS,sTYPE : String; begin I:=0; j:=0; TB2.Open; TB1.Open; sTYPE:='1'; Label3.Caption:=IntToStr(TB2.RecordCount); While not TB2.Eof Do begin J:=J 1; Application.ProcessMessages; Label4.Caption:=IntTostr(J) ' / ' Label3.Caption; CARNO := TB2.FieldByName('車號').asvariant; ExDate := TB2.FieldByName('巡查日期').asvariant; if NOT TB1.Locate('車號;巡查日期;型態',VarArrayOf([CARNO,EXDATE,sTYPE]),[]) then begin Application.ProcessMessages; I := I 1; TB1.Insert; TB1.FieldByName('序號').Asvariant := TB2.FieldByName('序號').Asvariant; TB1.FieldByName('車號').Asvariant := TB2.FieldByName('車號').Asvariant; TB1.FieldByName('執行人員編號').Asvariant := TB2.FieldByName('執行人員編號').Asvariant ; TB1.FieldByName('執行單位').Asvariant := TB2.FieldByName('執行單位').Asvariant; TB1.FieldByName('巡查日期').asvariant := TB2.FieldByName('巡查日期').asvariant ; TB1.FieldByName('巡查時間').Asvariant := TB2.FieldByName('巡查時間').Asvariant ; TB1.FieldByName('行政區域').Asvariant := TB2.FieldByName('行政區域').Asvariant; TB1.FieldByName('車組').Asvariant := TB2.FieldByName('車組').Asvariant; TB1.FieldByName('巡查地點').Asvariant := TB2.FieldByName('巡查地點').Asvariant; TB1.FieldByName('廠牌').Asvariant := TB2.FieldByName('廠牌').Asvariant; TB1.FieldByName('輕重型').Asvariant := TB2.FieldByName('輕(1)/重(2)').Asvariant; TB1.FieldByName('行程別').Asvariant := TB2.FieldByName('行程別').Asvariant; TB1.FieldByName('排氣量').Asvariant := TB2.FieldByName('排氣量').Asvariant; TB1.FieldByName('里程數').AsInteger := TB2.FieldByName('里程數').AsInteger; TB1.FieldByName('型態').AsVariant := '1'; TB1.Post; Label2.Caption:='共寫入 ' IntTostr(I) ' 筆'; end; TB2.Next; end; ShowMessage('全部匯入完成!'); end; end.
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-06 10:09:06 IP:202.39.xxx.xxx 未訂閱
再仔細想了一下 有索引不能匯入, 會不會是之前要匯入的資料有重覆 而被匯入的有建 Index, 所以匯不進去? -- 將進酒 杯莫停 與君歌一曲 請君為我傾耳聽
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-06 10:47:33 IP:210.201.xxx.xxx 未訂閱
版主,謝謝您,是的要匯入的資料有重覆,所以我才用 Locate 去找,若沒有找到才新增,這樣不行嗎?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-02-06 11:01:50 IP:202.39.xxx.xxx 未訂閱
引言: 版主,謝謝您,是的要匯入的資料有重覆,所以我才用 Locate 去找,若沒有找到才新增,這樣不行嗎?
您的 TB1 在存入一筆後, 讓 TB1 的 cursor 回到第一筆 不然每次都停在存檔的那一筆 已經有重覆的也 Locate 不到! 即 TB1.Post; 這行之後加 TB1.First; 這行試試。 -- 將進酒 杯莫停 與君歌一曲 請君為我傾耳聽
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-02-06 11:16:56 IP:210.201.xxx.xxx 未訂閱
真是一語驚醒夢中人,謝謝您版主,我試試看
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-02-06 13:24:32 IP:210.201.xxx.xxx 未訂閱
版主,不行耶,還是出現一樣的錯誤,我己將錯誤的圖插入了,不知版主是能看的到    
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-02-06 13:32:57 IP:202.39.xxx.xxx 未訂閱
看不到圖, 不然不介意的話, 把程式與 db 寄給小弟看看。 -- 將進酒 杯莫停 與君歌一曲 請君為我傾耳聽 (hagar@gcn.net.tw)
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-02-06 13:33:03 IP:210.201.xxx.xxx 未訂閱
我要如何才能將圖貼上去呢?
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-02-06 15:25:04 IP:210.202.xxx.xxx 未訂閱
引言: 我要如何才能將圖貼上去呢? < face="Verdana, Arial, Helvetica"> 您的貼圖路逕為D:/DelphiError.bmp 只有您自己的電腦才看的到 網路上貼圖方法請見 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=7332 ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-02-06 16:42:35 IP:210.201.xxx.xxx 未訂閱
錯誤如圖,謝謝您,因為兩個 mdb 檔都有二十幾 mb 可以上傳嗎?  
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-02-06 17:05:17 IP:202.39.xxx.xxx 未訂閱
1.mdb 經過壓縮後, 還是 20 幾 mb 嗎? 2.如果 Locate 不行, 用另一個 TQuery, 以 Select 的 SQL 語句來試試。 -- 將進酒 杯莫停 與君歌一曲 請君為我傾耳聽 (hagar@gcn.net.tw)
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-02-06 17:44:26 IP:192.168.xxx.xxx 未訂閱
最好不要用locate去搜尋 建議採用SQL指令另外去查詢看有無鍵值重複 ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-02-06 18:09:10 IP:210.201.xxx.xxx 未訂閱
我之前就是用SQL指今去做查詢,然後判斷它的RecoudCount,如果等於零就是裡面沒有這筆記錄,然後用 Q1.append ..... ..... ..... Q1.post 的方法寫入,但是一樣,出現一樣的錯誤.唉.......
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-02-06 18:20:20 IP:202.39.xxx.xxx 未訂閱
您哪幾個欄位設為 Index? 用 Query 下 SQL 時, 該 SQL 內容為何? -- 將進酒 杯莫停 與君歌一曲 請君為我傾耳聽 (hagar@gcn.net.tw)
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-02-06 19:11:40 IP:210.201.xxx.xxx 未訂閱
SQL 的敘述中的三個欄位都是索引值(車號,巡查日期及型態) 程式碼如下: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Db, ADODB; type TForm1 = class(TForm) ADOQuery1: TADOQuery; Button1: TButton; ADOQuery2: TADOQuery; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); VAR CARNO, EXDATE, QS : STRING; I,J:INTEGER; begin I:=0;J:=0; ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('SELECT * FROM 巡查資料庫'); ADOQuery2.Open; WHILE NOT ADOQuery2.Eof DO BEGIN APPLICATION.ProcessMessages; I:=I 1; Label1.Caption := IntToStr(I) ' / ' INTTOSTR(ADOQuery2.RecordCount); CARNO := ADOQuery2.FieldByName('車號').ASSTRING; EXDATE := ADOQuery2.FieldByName('巡查日期').ASSTRING; QS:='SELECT * FROM 攔巡查資料 WHERE 車號 = ''' CARNO ''' AND 巡查日期 = #' EXDATE '# AND 型態 = ''1'' ' ; ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add(QS); ADOQuery1.Open; IF ADOQuery1.RecordCount = 0 THEN BEGIN J:=J 1; ADOQuery1.Append; ADOQuery1.FieldByName('車號').ASVARIANT:=ADOQuery2.FieldByName('車號').ASVARIANT; ADOQuery1.FieldByName('巡查日期').ASVARIANT:=ADOQuery2.FieldByName('巡查日期').ASVARIANT; ADOQuery1.FieldByName('巡查時間').ASVARIANT:=ADOQuery2.FieldByName('巡查時間').ASVARIANT; ADOQuery1.FieldByName('廠牌').ASVARIANT:=ADOQuery2.FieldByName('廠牌').ASVARIANT; ADOQuery1.FieldByName('行程別').ASVARIANT:=ADOQuery2.FieldByName('行程別').ASVARIANT; ADOQuery1.FieldByName('排氣量').ASVARIANT:=ADOQuery2.FieldByName('排氣量').ASVARIANT; ADOQuery1.FieldByName('里程數').ASVARIANT:=ADOQuery2.FieldByName('里程數').ASVARIANT; ADOQuery1.FieldByName('輕重型').ASVARIANT:=ADOQuery2.FieldByName('輕(1)/重(2)').ASVARIANT; ADOQuery1.FieldByName('行政區域').ASVARIANT:=ADOQuery2.FieldByName('行政區域').ASVARIANT; ADOQuery1.FieldByName('巡查地點').ASVARIANT:=ADOQuery2.FieldByName('巡查地點').ASVARIANT; ADOQuery1.FieldByName('執行人員編號').ASVARIANT:=ADOQuery2.FieldByName('執行人員編號').ASVARIANT; ADOQuery1.FieldByName('執行單位').ASVARIANT:=ADOQuery2.FieldByName('執行單位').ASVARIANT; ADOQuery1.FieldByName('車組').ASVARIANT:=ADOQuery2.FieldByName('車組').ASVARIANT; ADOQuery1.FieldByName('回檢日期').ASVARIANT:=ADOQuery2.FieldByName('回檢日期').ASVARIANT; ADOQuery1.FieldByName('型態').ASVARIANT:='1'; ADOQuery1.Post; Label2.Caption:='共匯入 ' IntToStr(J) ' 筆'; END; ADOQuery2.Next; END; SHOWMESSAGE('全部匯入完畢....'); end; end.
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-02-07 08:19:51 IP:210.201.xxx.xxx 未訂閱
我在想可能是我要匯入的TB1裡還有重覆的資料,因為我將TB1清空,然後再重匯入就都沒有問題了,但讓我想不透的是它居然還可以讓我建立索引?!!!,不管怎麼說都還是要謝謝版主的熱心幫忙!! 再次說聲謝謝....
系統時間:2024-07-03 5:02:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!