關於table與table 之間的轉移(備份) |
尚未結案
|
dino
一般會員 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
|
dino
一般會員 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
還是我將出現的錯誤訊息貼出來讓各位先進幫忙debug
procedure TForm1.Button2Click(Sender: TObject); begin DBGrid_Tapmc.DataSource.DataSet.First; WHILE NOT DBGrid_Tapmc.DataSource.DataSet.Eof DO BEGIN Backup_Query.Insert; Backup_Query.FieldByName('NAME').Value := DBGrid_Tapmc.DataSource.DataSet.FieldByName('NAME').Value; Backup_Query.FieldByName('SIZE').Value := DBGrid_Tapmc.DataSource.DataSet.FieldByName('SIZE').Value; Backup_Query.FieldByName('WEIGHT').Value := DBGrid_Tapmc.DataSource.DataSet.FieldByName('WEIGHT').Value; Backup_Query.FieldByName('AREA').Value := DBGrid_Tapmc.DataSource.DataSet.FieldByName('AREA').Value; Backup_Query.FieldByName('BMP').Value := DBGrid_Tapmc.DataSource.DataSet.FieldByName('BMP').Value; Backup_Query.FieldByName('receive_da').Value := DBGrid_Tapmc.DataSource.DataSet.FieldByName('receive_da').Value; Backup_Query.Post; DBGrid_Tapmc.DataSource.DataSet.Next; END; end;結果出現 Backup_Query : Cannot not modify a read-only dataset 不曉得這個訊息是怎麼產生的@@ 發表人 - dino 於 2004/10/23 23:10:38 |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
dino
一般會員 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
版主...嗚...嗚
很感謝你啦,原來這樣就解決了,我搞了一個下午
就在"Cannot perform this operation on a closed dataset"
和 "Cannot modify a read-only dataset"
這兩個錯誤訊息打轉...真是搞死我了@@
實在是對於"資料集"這個東東感到頭痛,例如insert,post等等method
在什麼狀態底下要如何使用,看了很幾本書還是覺得零零落落的,無法了解
要是搭配上DataControl元件的話,還有dsEdit,dsxxxx等等狀態要了解
還有event又分AfterXXX跟beforeXXX等等,真是頭痛
這邊有沒有什麼教學文件可以讓菜鳥對於資料庫的程式可以做個完整透徹的
了解呢? 再一次感謝您^^
後輩 敬上
祝身體安康
|
dino
一般會員 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
Procedure TForm2.Button1Click(Sender: TObject);
Begin
DBGrid_Tapmc.DataSource.DataSet.First;
While Not DBGrid_Tapmc.DataSource.DataSet.Eof Do
Begin
If Not Query1.Locate(比對欄位名稱, query.fieldbyname(欄位).asstring, [loCaseInsensitive]) Then
Begin
Backup_Query.Insert;
Backup_Query.FieldByName('NAME').Value := DBGrid_Tapmc.DataSource.DataSet.FieldByName('NAME').Value;
Backup_Query.FieldByName('SIZE').Value := DBGrid_Tapmc.DataSource.DataSet.FieldByName('SIZE').Value;
Backup_Query.FieldByName('WEIGHT').Value := DBGrid_Tapmc.DataSource.DataSet.FieldByName('WEIGHT').Value;
Backup_Query.FieldByName('AREA').Value := DBGrid_Tapmc.DataSource.DataSet.FieldByName('AREA').Value;
Backup_Query.FieldByName('BMP').Value := DBGrid_Tapmc.DataSource.DataSet.FieldByName('BMP').Value;
Backup_Query.FieldByName('receive_da').Value := DBGrid_Tapmc.DataSource.DataSet.FieldByName('receive_da').Value;
Backup_Query.Post;
End;
DBGrid_Tapmc.DataSource.DataSet.Next;
End;
End; =========================
讀萬卷書~不如來K.TOP走一遭
=========================
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
dino
一般會員 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
likush 您好 謝謝您的答覆
我試過了,不過不是很了解Locate,看過Help也不是很懂
先說明一下我所使用的元件:
Source資料庫使用:
TDatabase1
TQuery名稱:Master_Query
TDBGrid名稱:DBGrid_Tapmc
Dest資料庫使用:
TDatabase2
TQuery名稱:Backup_Query
兩個資料庫有相同的table ,欄位是NAME,SIZE,WEIGHT,AREA,BMP,receive_da
將Source資料庫的Master_Query open 和 Dest資料庫的Backup_Query open之後就將DBGrid_Tapmc得到的資料集指定給Backup_Query
所以是跨資料庫的table複製,我的資料庫是用dbf格式
假設都有設NAME為Unique
那Query1.Locate(比對欄位名稱, query.fieldbyname(欄位).asstring, [loCaseInsensitive])裡面的值要怎麼填呢?
我試的結果是都沒有複製過去?? 發表人 - dino 於 2004/10/25 09:41:23
|
dino
一般會員 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
後來我try出來了,寫法如下
If Not Backup_Query.Locate('NAME', Master_Query.FieldByName('NAME').AsString, [loCaseInsensitive]) Then
謝謝各位的解答
我只是先用Paradox做試驗,
我想如果使用SQL Server的話,資料重複的問題應該由後端來處理掉,
檢查是否重複的動作就不用自己寫了,
但是insert時應該會由後端產生例外出來,
不曉得要如何將這個例外隱藏起來?
讓資料重複時就覆蓋掉或跳過,沒有時就新增?
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
|
dino
一般會員 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |