2017-06-07 99 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](如果你反正不加入这些表)。