維護 Group-Member 關係的 Master Detail 怎麼做? |
尚未結案
|
jimmygump
一般會員 ![]() ![]() 發表:8 回覆:12 積分:4 註冊:2003-09-09 發送簡訊給我 |
使用 Access 2000 的 mdb 檔, Delphi 7 中用 TADOQuery。
我把問題簡化成以下:
1. table:
Member: ID AutoInc Name Char(10) GroupID Integer // 可以為 NULL Group: ID AutoInc Name Char(10)2. 語義上,每個 Member 可以暫不屬於任何 Group (Member.GroupID 為 NULL 時), 或屬於某一 Group 3. 在維護 Member 的 Form 中可以設定其 Group (額外做一點 lookup 的小畫面) 4. 我現在若要做 Group 的維護畫面, 看似一個 master detail 的 Form。 master 部份為 Group 的維護 qryGroup.SQL : SELECT * FROM Group detail 部份則為 "屬於這個 Group 的 Member" qryMember.SQL : SELECT * FROM Member WHERE GroupID = :ID LockType: ltBatchOptimistic 並在程式中自己設定關聯 現在 detail 部份的問題來了, 事實上要達成的目標如下: 1. detail 的部份若 "新增", 則並不表示在 Member 中進行 "INSERT", 而是表示該筆 Member.GroupID 要 "UPDATE" 成目前 Group.ID 2. detail 若 "刪除" 一筆, 也不是把該 Member 刪除, 而是將該 Member.GroupID 設回 NULL 3. 不提供 "編輯" 的功能 我想, 一般的 master detail 模式可能不適合了, 因為它只會認為 "INSERT 就是 INSERT, DELETE 就是 DELETE", ADOQuery 和 DBGrid 搭配起來, 不會如我所願的。大俠們能給些方向嗎? 到目前為止,我的猜想是否要用另一個 ClientDataSet 給 DBGrid 使用, 並在整個 Group Form 真的儲存時, 再拿這 ClientDataSet 與原先的 qryMember 做比對?(最多不會超過 400 筆 detail 的).....還沒開始試驗呢,我先問問大家看法 ps. 有個朋友叫我改 schema 變成 "多對多" 也就是三個 table 比較好做, 但我覺得語義上明明就是一個 Member 只能屬於 0~1 個 Group.... Jimmy Gump
------
Jimmy Gump |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |