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

触发器及联更新

尚未結案
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-11 01:32:11 IP:222.183.xxx.xxx 未訂閱
各位大大好, 我有一个单位表:dm,mc,add 其中dm为主键 从表商品表:id,spm,fk_dm,fk_mc 两表通过dm,mc字段相连,请问如何用触发器当在单位表dm或mc变更时进行及联更新商品表?
cashxin2002
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-11 11:05:51 IP:202.62.xxx.xxx 未訂閱
您好﹗    從您的敘述來看﹐單位資料表和商品資料表為一對一的關聯狀態﹐請參考如下方法﹕
在Private區宣告兩個字串變數
Private
StrTemp1, StrTemp2 : String;    將如下程式碼寫于單位資料表之AfterEdit事件中﹕
假設dm欄位為String形態﹐且其位于資料表第一欄位﹐即序號值為0
begin
  StrTemp1 := ADOTable1.Fields.Fields[0].AsString;
end;    將如下程式碼寫于單位資料表之BeforePost事件中﹕
begin
  StrTemp2 := ADOTable1.Fields.Fields[0].AsString;
end;    將如下程式碼寫于單位資料表之AfterInsert事件中﹕
begin
  StrTemp1 := '';
  StrTemp2 := '';
end;    將如下程式碼寫于單位資料表之AfterPost事件中﹕
begin
  if StrTemp1 <> StrTemp2 then
    begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('Update 商品資料表 Set fk_mc = ''' StrTemp2 ''' Where fk_mc = ''' StrTemp1 '''');
      ADOQuery1.ExecSQL;
    end
  else
    begin
      ShowMessage('dm欄位未改變﹐故不需更新商品資料表的fk_mc內容');
    end;
end;
其中還會涉及一些諸如資料刪除等方面的部分﹐大致方法就是在某資料表的BeforeDelete事件中利用Private區域變數記錄下當前欲刪除資料錄之主鍵值﹐然后在AfterDelete事件中刪除另一資料表中主鍵值相同于此變數的資料錄﹒ 商品資料表的触發方法相同于單位資料表﹒ ========================= 我是您的朋友﹐有您真好﹗ ========================= 發表人 - cashxin2002 於 2004/12/11 11:16:33
------
忻晟
系統時間:2024-06-25 13:38:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!