2009-08-27 128 views
1

我有一個SQL Server作爲後端,並使用ms訪問作爲前端。插入SQL服務器中的視圖

我有兩個表(personsmanagers),managerpersons衍生(1:1的關係),因此,我創建的視圖managersFull這基本上是一個:

SELECT * 
     FROM `managers` `m` 
INNER JOIN `persons` `p` 
     ON `m`.`id` = `p`.`id` 

idpersons自動增量並且主鍵idmanagers中是主鍵和外鍵,引用personsid

現在我想能夠插入一個新的數據集的形式在MS訪問,但我不能讓它的工作。沒有錯誤信息,沒有狀態行,什麼都沒有。新的行不會被插入,我必須按下escape才能取消我的更改以返回ms訪問中的設計視圖。

我在談論一個managers形式,我希望能夠在同一時間在一個單一的形式進入經理和個人信息

我的問題是現在:是否有可能是我想在這裏做?如果沒有,是否有一個「簡單」的解決方法,使用插入觸發器或一些VBA代碼行後?

在此先感謝

回答

2

問題是,您的視圖跨越幾個表。如果你訪問多個表,你可以只更新或插入其中的一個。

也請您查看MSDN更詳細的信息,限制和proper strategies for view updates

+0

有沒有辦法解決這個問題? – knittl 2009-08-27 08:21:15

+0

是的,有策略。我已經用MSDN鏈接更新了我的答案。本文http://www.craigsmullins.com/cnr_0299b.htm也可能有所幫助 – 2009-08-27 08:26:47

0

伊利亞Kochetov指出,你只能更新一個表,但工作周圍是將更新應用到田間地頭上一個表,然後另一個。此解決方案假定您必須訪問這兩個表的唯一途徑是通過此視圖,並且您不允許創建存儲過程來處理此問題。

1

假設ODBC,一些事情要考慮:

  1. 請確保您有在人表中的時間戳字段,並且它在你的經理視圖返回。你也可能需要管理員視圖中人員表的真正PK(我假設你的視圖將FK用於自聯接並將其別名作爲ID字段 - 我不會那樣做,因爲它是令人困惑的,相反,我會在經理視圖中使用真正的外鍵名稱,並讓PK以自己的真實名稱獨立)。

  2. 在記錄源中嘗試Jet/ACE特定的DISTINCTROW謂詞。使用Jet/ACE後端時,這通常可以在兩個表中插入時,否則就不可能。但我不確定Jet是否足夠聰明,可以告訴SQL Server做正確的事情。

  3. 如果這些事情都不起作用,請將您的表單更改爲使用基於您的人員表的記錄來源,並使用基於經理視圖的組合框作爲控件,使用該控件編輯記錄以將人員關聯到經理。

0

要在訪問中建模和維護兩個相關表,您不要使用兩個表的連接的查詢或視圖。你所做的就是使用主窗體,並放入基於子表的子表單中。如果子表格中的鏈接主設備和子設置設置正確,則不需要編寫任何代碼,訪問將在連接字段中插入該用戶的標識。

所以,不要在這裏使用連接表。只需使用表單+子表單設置,即可編輯和維護相關子表中的數據和數據。

這意味着您將表格基於表格而不是視圖。並且您將子表格基於子表格。所以,不要在這裏使用視圖。