2009-08-19 64 views
0

我有一個(非常簡單和標準)UPDATE語句,其可以直接在查詢分析器能正常工作,或在查詢分析器的存儲過程執行。的Microsoft Access ADP更新查詢不更新

UPDATE A 
SET 
     A.field1 = B.col1 
    , A.field2 = B.col2 
FROM 
     tblA AS A INNER JOIN tblB AS B 
ON A.pk1 = B.pk1 AND A.pk2 = B.pk2 

問題是,當我執行通過Microsoft ADP相同的存儲過程(通過存儲過程的名稱或使用運行選項雙擊),它說:「查詢成功運行,但沒有返回記錄」,不當我直接檢查表時更新記錄。

人之前甚至有傳言稱「MS-訪問的語法比SQLServer的T-SQL的不同」,請記住,與ADP一切都發生在服務器上,一個實際上是通過直通到T-SQL。

任何來自ADP大師的精彩創意?

回答

1

Gotcha。迴應我自己的問題,爲了別人的利益。

工具/選項/高級/客戶端 - 服務器設置/默認最大記錄設置爲10,000(想必這是默認值)。無限制地將其更改爲0。

我的表擁有100,000多行,無論是更新的10,000個集合都很難找到(在90,000多條未更新的行中)。因此更新沒有按預期完全運行。

0

嘗試,看看查詢是否被使用SQL事件探查器的SQL服務器上執行。
此外,我想你可能需要關閉鏈接表&重新打開它才能看到更新的記錄。

這是否行得通?

+0

要查看更新的記錄我直接檢查表中的SQL Server,而不是連接的一種。稍後我會嘗試使用Profiler,因爲我以前從未使用它,需要一些時間來弄清楚。 – joedotnot 2009-08-19 02:39:11

-1

我似乎記得,我總是得到「未返回任何行」的消息,不得不乾脆關閉的消息。這是因爲它沒有返回任何行!

至於另一個 - 有時有一個主要關鍵問題。被更新的表是否在SQLServer中有一個主鍵?如果是這樣,請檢查Access中的表格視圖 - 有時該鏈接不會通過。這已經有一段時間了,所以我可能是錯的,但我認爲你可能需要在訪問時查看錶的設計視圖,並在那裏添加主鍵。

編輯:其他的想法: 在您的調試,嘗試在打印報表扔,看看你的輸入變量的值。它是否實際從您訪問時執行的期望中獲取表中的數據?

+0

自動編號不是問題。 PK想法是一個很好的想法,但不適用於ADP查詢。 – JohnFx 2009-08-19 02:42:33

+0

我認爲你是對的 - 它不是自動編號。但我清楚地記得,主鍵可能是一個問題。雖然簡單地執行一個存儲過程並不重要,但我想知道,如果從訪問環境執行它仍然會導致主鍵問題成爲問題。如果是我,我會檢查一下,以確保在找出可能是一個不明確的錯誤之前。 – user158017 2009-08-19 03:04:28

+0

我忽略了「沒有記錄返回」的消息,我知道它畢竟是一個更新查詢,如果它說「沒有行受到影響」,我會更加關注它。 我的例子暗示我加入主鍵pk1,pk2。不,它們不是自動編號/標識列。 – joedotnot 2009-08-19 03:07:36

0

運行SQL PRofiler運行查詢。在開始追蹤之前添加所有錯誤事件。這會給你任何錯誤,SQL Server產生的訪問ADP可能無法正確顯示(或根本)。

隨意張貼在這裏。

+0

我運行了Profiler,打開了所有的錯誤和警告。除了一系列指示查詢確實運行的語句(SP:開始,SQL:StmtStarting,SQL:StmtCompleted,SP:已完成)以及一些持續時間之外,沒有任何內容看起來像是錯誤!至少我可以驗證查詢是否擊中了正確的服務器! – joedotnot 2009-08-19 03:53:57

+0

好的,這是朝着正確方向邁出的一步。這告訴我們,我們正在訪問SQL Server,並且存儲過程沒有問題地運行(至少就SQL Server而言)。但是,由於某種原因,Access數據庫正在回滾事務。我從事訪問工作已經很長時間了。有沒有辦法將一些調試代碼放入任何正在調用SQL過程的地方,並查看是否看不到某行中的某個數組是否正在發生變化? – mrdenny 2009-08-19 05:29:32