全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1084
推到 Plurk!
推到 Facebook!

MySQL(ODBC) + ADO的Master Detail刪除問題

尚未結案
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-14 20:25:39 IP:219.93.xxx.xxx 未訂閱
我用MySQL(ODBC) ADO做了一個Master Detail的資料庫,元件如下: MyAddressADOConnection UserProfileADOTable PaymentADOTable UserProfileDataSource PaymentDataSource MySQL資料庫是myaddress,有兩個表格: userprofiletable: UserProfileID, UserProfileName, UserProfilePassword, UserProfilePerm paymenttable: PaymentID, UserProfileID, PaymentAmount 這兩個表格我都已經設好在上面兩個ADOTable元件裡,並且其屬性都已經設好… 現在問題是表格正常運作,但在刪除表格時郤不正常了… 在主表格新增一記錄後,然後在副表格輸入數筆記錄,一切都很正常… 但完成後,再把剛剛新增的主表格記錄刪除,可以刪除,但副表格裡的記錄郤還在? 有何方法解決這個問題,我知道DELPHI對MySQL的實作並不理想,但不懂要如何解決這個問題?
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-15 09:10:21 IP:202.62.xxx.xxx 未訂閱
您好﹗    一些建議﹐供參考﹒
Step1. 在對應主表格的ADOTable元件的BeforeDelete事件中﹐先記錄下
當前欲刪除資料的Primary欄位值﹐如下﹕
變數需宣告在全域區﹐此處舉例為字串形態
Private
  MyStr : String;
...
ADOTable1之BeforeDelete事件中﹐此處舉例Primary欄位的序號為第一個
begin
  MyStr := ADOTable1.Fiels[0].AsString;  
end;    Step2. 在對應主表格的ADOTable元件的AfterDelete事件中﹐使用剛才記錄的
字串變數值﹐在對應副表格的ADOTable元件中做刪除的動作
begin
  ADOTable2.First;
  While Not ADOTable2.Eof do
    begin
      if ADOTable2.Locate('欄位名稱', MyStr, [loCaseInsensitive]) then
        ADOTable2.Delete;
    end;
  ADOTable2.Close;
  ADOTable2.Open;
end;    不過﹐在此使用Locate方法是一個比較沒有效率的方法﹐建議您使用ADOQuery
元件﹐利用其SQL指令﹐能做到效率上的提升
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Delete From 副表格 Where 欄位名稱=''' MyStr '''');
  ADOQuery1.ExecSQL;
  ADOTable2.Close;
  ADOTable2.Open;
end;
========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-15 10:01:03 IP:219.93.xxx.xxx 未訂閱
好的,我去試試看,看結果如何,如果可以行,我就可以結案了。 謝謝大大的指導哦…
系統時間:2024-05-19 19:03:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!