2011-09-08 65 views
5

我在SQL Server 2000上創建了一個視圖,並通過ODBC將視圖鏈接到我的Access 2007數據庫。從Access打開視圖顯示看起來像重複的值。我更新了我的視圖,以包括有問題的數據的ID,並且它被複制。爲什麼鏈接的視圖會給出與MS Access和SQL Manager不同的結果?

它看起來像訪問顯示每種類型的每個類型的第一個記錄。這question提到查看Order By或Top子句,但在我看來,我沒有使用它們中的任何一個。該視圖將8個錶鏈接在一起,唯一我能想到的就是我在我看來的一些表格,我沒有在Access中鏈接。我將鏈接這些表也只是爲了嘗試它,但我不認爲我需要它們在Access中。

我已經厭倦搜索Google的答案,但除了我提到的問題之外,我沒有多少運氣。這種行爲對於像這樣的鏈接視圖是否正常?

這是我的結果從SQL管理器設置:

id Type   Dim1 
---- ------------ ------ 
3111 Pipe   480 
3112 Fittings  0 
3113 Pipe   1080 
3114 Fittings  0 
3115 Fittings  0 
3116 Fittings  0 
3117 Pipe   216 

,並在Access我看到這一點:

id Type   Dim1 
---- ------------ ------ 
3111 Pipe   480 
3112 Fittings  0 
3111 Pipe   480 
3112 Fittings  0 
3112 Fittings  0 
3112 Fittings  0 
3111 Pipe   480 

回答

5

你不需要在訪問鏈接的所有8個表...的視圖就足夠了,Access不需要了解底層表。

我覺得你有一個不同的問題,我也遇到過類似的問題。
當我通過ODBC訪問鏈接SQL Server視圖,會彈出一個窗口說要我選擇的唯一標識符(讀:主鍵)從列視圖:

"select unique identifier" window

如果我不要選擇任何東西(或者某些錯誤的列,而不是確定一個唯一的記錄),訪問將顯示的數據擰緊,如示例中所示。
顯然,如果沒有唯一標識符,Access無法正確顯示視圖。

解決你的問題:
正如我理解你的觀點,id是獨一無二的,對不對?
如果是,只需刪除視圖,通過ODBC重新鏈接,當彈出「選擇唯一標識符」窗口時,需要選擇id列。

+0

我知道這會很簡單。我剛添加ID時刷新了表格。不刪除它不會給出唯一記錄對話框。謝謝。 – xecaps12

1

當您在訪問SQL Server表或視圖時創建ODBC鏈接時,Access會存儲有關該SQL Server數據源的元信息。如果以後更改SQL Server表結構或視圖定義,則即使您「刷新」鏈接,Access的緩存信息也不會可靠地更新以匹配...。刪除鏈接並重新創建它會更安全,以確保Access的緩存信息與修改後的數據源保持一致。

似乎你在克里斯蒂安的幫助下發現了這個事實。我強調這一點是爲了其他讀者的利益。這似乎是一個相當常見的問題,但是當你瞭解封面上發生了什麼時很容易避免。

+0

它還有助於瞭解訪問如何處理數據,如果您沒有選擇唯一的標識符,或沒有足夠的一個。我第一次選擇類型字段時,不知道訪問權限會將結果向上滾動選定的值。我只是假定它會通過不選擇真正獨特的值來減慢查詢視圖的速度,而不會改變結果。 – xecaps12

+0

是的,這讓我感到驚訝。沒有一個唯一的鍵,我期望Access將數據源視爲只讀,但*不*返回不同的行集。我不明白爲什麼會發生。仍然有趣的是,在您重新創建鏈接而不是刷新鏈接後,問題就消失了。 – HansUp

+1

如果沒有密鑰,Access一般將其視爲只讀...但另外,如果沒有密鑰或錯誤密鑰,它會將顯示的視圖行集合(只有視圖,沒有我知道的表的問題)選擇。我也不理解它,但是我經常在工作中遇到它,因爲我們有幾個高級用戶(主要是控制器),他們擁有帶有鏈接SQL Server視圖和表的MDB,以便他們可以創建和運行自定義查詢。幾乎每次他們將新視圖鏈接到他們的MDB時...... –

相關問題