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

请教一个数据库的问题!

尚未結案
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-03 10:09:31 IP:218.18.xxx.xxx 未訂閱
我在sqlserver中建了两个表 一个A表,一个B表 A表字段如下: A1,A2,A3 B表字段如下:A1,C1,C2 A,B表没有建关联,因为A表是输入一些基础性资料,B表中A1字段的内容是以A表中的A1字段为基础的。我之前将A,B表的内容全部输入了,但因为某种原因,我现在更改了A表的A1字段的某些记录,那么请问,我在B表中的A1字段的内容如何相应的更改过来?
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-03 11:32:43 IP:203.204.xxx.xxx 未訂閱
引言: 我在sqlserver中建了两个表 一个A表,一个B表 A表字段如下: A1,A2,A3 B表字段如下:A1,C1,C2 A,B表没有建关联,因为A表是输入一些基础性资料,B表中A1字段的内容是以A表中的A1字段为基础的。我之前将A,B表的内容全部输入了,但因为某种原因,我现在更改了A表的A1字段的某些记录,那么请问,我在B表中的A1字段的内容如何相应的更改过来?
jtp, 您好 如果您尚未更改A表中A1的記錄 那可以在更改A表中A1的記錄的同時找到B表相同的一筆記錄一起更改 若您已更改A表中A1的記錄 可能就無解了 ======================= 是非終日有,不聽自然無 天下本無事,庸人自擾之
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-03 14:37:40 IP:61.221.xxx.xxx 未訂閱
Hi, 請問修改 A table 的 A1 Column 時, 是否有某種邏輯, 例如:    A0001, A0002, A0003  改為 AB0001, AB0002, AB0003    這樣, 若是如此, 尚可以相關的方法來異動 B table 中的 A1 Column, 若是沒有邏輯的狀況下修改的話, 可能只能從備份資料來找起配合修改來調整 B table 的資料了.. 
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-03 16:10:30 IP:218.18.xxx.xxx 未訂閱
请问如何異動 B table 中的 A1 Column?
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-03 16:46:26 IP:203.204.xxx.xxx 未訂閱
引言: 请问如何異動 B table 中的 A1 Column?
jtp, 您好 如果是像timhuang前輩所說的 是有邏輯可循的話 可以先將 B table 中的 A1 Column 的值讀取出來 經過該邏輯變更之後 再將變更資料回寫回 B table ======================= 是非終日有,不聽自然無 天下本無事,庸人自擾之 發表人 - tech_state 於 2003/05/03 16:57:14
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-03 22:37:02 IP:218.163.xxx.xxx 未訂閱
引言: 请问如何異動 B table 中的 A1 Column?
建議您二種方式:
  • 前端Delphi處理: 假設:Table1->A表 private 宣告一變數old_A1: String;
    //記錄修改前A表的A1
    procedure TForm1.Table1BeforeEdit(DataSet: TDataSet);
    begin
      old_A1 := Dataset.FieldByName('A1').AsString;
    end;
    //A表存完檔後更新B表
    procedure TForm1.Table1AfterPost(DataSet: TDataSet);
    var
      qry: TQuery;
    begin
      qry := TQuery.Create(nil);
      with qry do
      try
        DatabaseName := '給Alias Name'
        SQL.Clear;
        SQL.Add('Update B Set A1 = :new_A1 Where A1 = :old_A1');
        ParamByName('new_A1').AsString := Dataset.FieldByName('A1').AsString;
        ParamByName('old_A1').AsString := old_A1;
        ExecSQL;
      finally
        FreeAndNil(qry);
      end;
    end;
    
  • 後端Trigger處理:(以MS SQL而言,修改前的值是記錄在deleted,修改後的值是記錄在inserted)
    Create Trigger UpdateB on A 
      For UPDATE
      As
        UPDATE A
        SET A1 = I.A1
        FROM A A,inserted I,deleted D  
        WHERE A.A1 = D.A1 AND D.A1 <> I.A1 
    
~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-04 11:26:59 IP:218.32.xxx.xxx 未訂閱
jtp 你好:    我又來了, 我對你的問題都很有興趣. > 針對 class="code"> create table A表 (A1 varchar(10) primary key clustered, -- A1 欄是主鍵 A2 ....) go create table B表 (A1 varchar(10) constraint A表FK -- Constraint Name references A表(A1) on update cascade, -- A表(A1)更新時一併更新此欄相關資料 C1 ....) go 發表人 - Mickey 於 2003/05/04 12:05:17
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-04 13:26:04 IP:61.155.xxx.xxx 未訂閱
对于2个表中A1字段,任意一个表中的字段更新,均要用自己的程序进行手动更新。    风花雪月 e梦情缘
------
风花雪月 e梦情缘
系統時間:2024-05-20 17:42:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!