2017-06-07 139 views
0

我收到一個錯誤,試圖通過Excel中的VBA運行查詢。VBA Excel - 訪問查詢不可更新

錯誤:

Run-time error '3073': Operation must use an updateable query.

我有一個從一個表在Excel中獲取數據的查詢。

qryAllData:

SELECT ID, Field1 AS [Date], Field9 AS [Alarm Init], Field5 AS [Alarm End], CVDate(Field2) AS [Time] 
FROM [Jet Info] 
WHERE (Field3 LIKE 'ALARM' OR Field8 LIKE 'ALARM:') AND Field5 NOT LIKE 'Program' AND (Field9 NOT LIKE 'Program' OR ISNULL(Field9)); 

我本來已經直接引用在Excel中此查詢,但仍然得到上面的錯誤,所以我想引用查詢,而不是。

qrySelData:

SELECT DISTINCTROW TOP 1 a.* 
FROM [Process Info] AS a, [Complete Data] AS b 
WHERE (((a.Date) Not In (SELECT [Date] FROM [Complete Data])) AND ((a.[Start Time]) Not In (SELECT [Start Time] FROM [Complete Data]))); 

這裏是我的VBA代碼:

Private Sub CommandButton1_Click() 
    Refresh_Data 
    Dim objAccess As Object 

    Set objAccess = GetObject("C:\Users\******\Documents\Database21.accdb") 

    objAccess.Visible = False 

    objAccess.DoCmd.OpenQuery ("qrySelData") 

    objAccess.Quit 
    Set objAccess = Nothing 
End Sub 

在VBA運行子上objAccess.DoCmd.OpenQuery ("qrySelData")行拋出錯誤3072。

任何幫助將不勝感激 - 如果你需要更多的信息讓我知道。

+0

貌似問題是在加盟:https://stackoverflow.com/questions/170578/operation-must-use-an-updatable-query-error-3073-microsoft-access這裏的一些不同的建議 - 一個是插入到臨時表中,然後從中選擇。這似乎是對你有用。 –

+0

@JacobH因此而不是引用查詢的,我應該做一個假表'qryAllData'插入到,然後引用以'qrySelData'? – bcbrwk

+0

@JacobH我仍然有麻煩。所以我有一個正在被引用的臨時表;如何執行我用來將數據粘貼到臨時表中的查詢?這似乎是我的主要問題目前。 – bcbrwk

回答

0

第一個查詢不可更新,因爲您在選擇列表中使用了函數(cvdate)。刪除此列或功能,它應該工作。

第二個查詢(似乎完全不同)在[Process Info][Complete Data]之間缺少連接條件。這意味着Access試圖生產carthesian產品,只是沒有足夠的內存...

在第一次看,我會說在第二個查詢中,你應該從FROM子句中刪除[Complete Data](如果你反正不加入這些表)。