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

維護 Group-Member 關係的 Master Detail 怎麼做?

尚未結案
jimmygump
一般會員


發表:8
回覆:12
積分:4
註冊:2003-09-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-19 16:57:37 IP:61.71.xxx.xxx 未訂閱
使用 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
系統時間:2024-09-09 4:01:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!