請問如何在UPDATE一個table的某筆數據時同步寫入另一table |
尚未結案
|
terran_wang
一般會員 發表:9 回覆:14 積分:4 註冊:2005-03-23 發送簡訊給我 |
|
oktony
中階會員 發表:67 回覆:132 積分:64 註冊:2004-12-05 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 如果是使用資料集元件的Insert/Edit/Post方法來更新資料﹐可使用如下方法來將更新的資料同步新增到另一個資料表中﹒
以下步驟以ADO存取為例﹒ 在對應原始資料表的資料集元件的BeforePost事件中﹐利用一個變數記錄下當前資料的鍵值欄位值﹒在AfterPost事件中﹐在對應同步新增資料表(目標資料表)的資料集元件中﹐將原始資料表中被Post的資料利用先前記錄下的變數值再新增進來﹒ Private S: String; //宣告變數(假設為字串形態) ADOTable1元件的BeforePost事件中(假設ADOTable1對應原始資料表) begin S := ADOTable1.Fields.FieldByName('鍵值欄位名').AsString; end; ADOTable1元件的AfterPost事件中(假設ADOQuery1對應目標資料表) begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Insert Into 目標資料表 Select * From '); ADOQuery1.SQL.Add('原始資料表 Where 鍵值欄位 = :STemp'); ADOQuery1.Parameters.ParamByName('STep').Value := S; ADOQuery1.ExecSQL; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
wct
一般會員 發表:5 回覆:17 積分:4 註冊:2002-06-07 發送簡訊給我 |
您好, 若是您之資料庫支援Trigger的話,針對該Table撰寫Trigger來攔截欲Insert Or Update之資料(Before Insert,After Insert,Or Before Update,After Update),將資Insert入相同結構之另一Table,並在該Table新增一DateTime欄位,Default 值為"Now"(Insert時之系統時間)來記錄何時被新增或修改,
此種方法之好處是可以不Care應用程式在哪裡,只要有人動過該Table都會紀錄到另一Table中。 wct
|
terran_wang
一般會員 發表:9 回覆:14 積分:4 註冊:2005-03-23 發送簡訊給我 |
|
oktony
中階會員 發表:67 回覆:132 積分:64 註冊:2004-12-05 發送簡訊給我 |
|
terran_wang
一般會員 發表:9 回覆:14 積分:4 註冊:2005-03-23 發送簡訊給我 |
大家好,剛剛嘗試了WCT前輩所指出的方向,發現比cashxin2002前輩的實現方法更加方便,且功能更強,貼出來給大家參考一下。
我使用SQL2000,有test與test2兩張table,在test中創建一個trigger,代碼如下:
CREATE TRIGGER [SAVE_LOG] ON [dbo].[TEST]
FOR INSERT, UPDATE
AS
UPDATE TEST SET UPDATE_TIME=GETDATE() WHERE ID=(SELECT ID FROM INSERTED)
INSERT INTO TEST2 SELECT * FROM TEST WHERE ID= (SELECT ID FROM INSERTED)
因為沒辦法只在test2中加入update_time項(從test插入時會提示欄位不正確),所以只能在test中也加入該項,並在每次更新時填入最新的系統時間,然後再將這一行整個插入test2,大家如果有更好的辦法請指點,謝謝。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |