none
Access(adp)使用SQL SERVER TRIGGER Insert資料的問題 RRS feed

  • 問題

  • 大家好:

    我有一個Access與SQL Server連結使用的問題,

    我的系統資訊如下:

    伺服器作業系統:windows2000server+SQL Server2000(sp3a)

    client端:WindowsXPsp2+Access2003(sp2,因為更新到sp3會產生另一個bug)

     

    我的問題是:

     

    我使用的後端資料庫為SQL2000標準版,前端使用Access2003的ADP連接後端的sql server,

    現在在後端的sql server新增一個trigger,目的為table1新增資料時,會自動複製一份到table2,

    但table1的索引是使用自動增值的identity欄位,

    table1及table2欄位如下:

     

    table1:

    1.自動編號索引     int   primarykey 識別種子 識別值增值1 

    2.欄位一              char

    3.欄位二              char

     

    table2:

    1.序號:                 int   primarykey (自動增值)

    1.自動編號索引     int   (接收來自table1的欄位)

    2.欄位一              char (接收來自table1的欄位)

    3.欄位二              char (接收來自table1的欄位)


    目的就是為了在table1新增紀錄時能自動複製到table2,所以新增了一個trigger如下:

    create TRIGGER table1_INSERT
    ON dbo.table1
    FOR INSERT
    AS

    SET NOCOUNT ON

    INSERT table2
    (
    自動編號索引,
    欄位一,
    欄位二
    )
    SELECT DISTINCT
    i.自動編號索引,
    i.欄位一,
    i.欄位二
    FROM inserted i

     

     

    但是在Access資料表中(或是設計一個表單)實際敲入一筆資料時發生一個錯誤訊息:

     

    [資料被新增至資料庫了,但是資料不會被顯示在表單上,因為它不滿足基準記錄來源的準則。]

     

    敲進的資料還是會新增進去,但會消失在當時的檢視中,而且出現這個錯誤也很困擾,

     

    微軟有相關說明:

    http://support.microsoft.com/kb/291091/zh-tw

     

    但是我的發生原因並不是他描述的那般,我直接在資料表上敲資料也會發生,

    我想到的原因是因為當要新增到table2 的時候,因為table1的自動編號索引是要新增到資料庫時才能產生出來,

    所以他要新增到table2時尚無資料的關係?!,

    但是我如果直接在sql server的MMC上面直接敲資料就不會發生這個問題,

    所以應該是Access這邊的問題才對,

    另外我如果把table1的自動增值欄位取消自動識別(改成user自己輸入編號),也不會發生這個錯誤訊息(可以解決此問題),

    但是因為其他原因我又必須保留這個自動增值的方式,所以現在有點困擾,

    我是怕這是微軟的bug且因為很少人使用這樣的架構,所以微軟也沒有去解決,

    不知各位先進有沒有好的方法,

    感謝各位...

    2008年5月12日 上午 09:02