動態的建立,與解除Master/Detail |
尚未結案
|
Jadugarr
一般會員 發表:3 回覆:1 積分:0 註冊:2003-11-28 發送簡訊給我 |
我使用MsSql7.0 TAdoTable
在 Master/Detail 架構下
我希望能在程式執行中,動態
的建立,與解除Master/Detail
的關係,我用 Detail.MasterFields:='';
Detail.MasterSource:=nil;
Detail.First; 可以讓我解除 Master/Detail
但是我用先前備份的 MasterFields
MasterSource 來重建,卻讓
Detail 的所有資料跑出來,也就是超出
目前Master 的Cursor 所對應到的資料。
除非,我移動 Cursor,
在程式碼中,我嘗試用
Master.Frist, or Master.Next and Prior
是可行的,希望能找到比較可用的方法
因為這樣的話,要考慮很多種情況
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
Hi, 測試完你說的狀態, 並沒有這種異常的現象, 隨著 detail 資料表的 MasterDataSource 及 MasterFields 的設定, 會使得 detail 資料表會發生對應的功能無誤, 唯一會發生不理想的現象僅為當解除 detail 和 master 的關連時, detail 資料表會顯示出所有資料的現象. 解決的方法可以改用 ADOQuery 來進行, 或是在解除 detail 和 master 關連時, 連帶將 detail 資料表 close 起來即可, 在重建關連時, 再 open 即可, 如下: 其中 Button2 為解除關連, Button1 為建立關連, ADOTable2 為 detail 資料表, ADOTable1 為 master 資料表.
myrel: string; procedure TForm1.Button2Click(Sender: TObject); begin // dismiss master/detail myrel := ADOTable2.MasterFields; ADOTable2.MasterFields := ''; ADOTable2.MasterSource := nil; //ADOTable2.First; ADOTable2.Close; end; procedure TForm1.Button1Click(Sender: TObject); begin // assemble master/detail ADOTable2.MasterFields := myrel; ADOTable2.MasterSource := DataSource1; ADOTable2.Open; end;至於你說重建關連後還必須將 master 移動一下才能將 detail 的資料表內容修正為對應資料列, 這個現象, 即使不透過上面的 detail close 再 open 也不會發生, 是否你的程式尚有其他的程式碼與此段有關造成這樣的現象呢, 弟試過是不會這樣子, 當設定完關連後, detail 資料表會馬上出現對應資料列, 沒有問題. |
Jadugarr
一般會員 發表:3 回覆:1 積分:0 註冊:2003-11-28 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |