将数据追加到本地表时多次通过查询触发

时间:2018-12-10 10:13:41

标签: access-vba ms-access-2016

我正在开发旧版MS Access应用程序,以提高性能,而对于ms Access应用程序我还是一个新手。我需要在加载时以表格形式显示数据。表单的记录源设置为“ TableEntries”(选择查询) 查询看起来像-

    Select TableDetails.Col1,TableDetails.Col12,TableDetails.Col3,TableDetails.Col4,TableDetails.Col5
    From TableDetails
    Where TableDetails.Col1= [forms]![TableDisplay]![Criteria1])
    And 
    TableDetails.Col2= [forms]![TableDisplay]![Criteria2])

其中“ TableDetails”是MS Access本地表。

还有另一个附加查询-AppendTableDetails-使用传递查询-“ CurrentTableDetails”将数据附加到TableDetails。

AppendTableDetails:

    INSERT INTO TableDetails
    SELECT col1,col2,col3,col4,col5
    From CurrentTableDetails
    Where CurrentTableDetails.Id=DLookUp("[ID]","CurrentInfo"))
    And CurrentTableDetails.ParentId=DLookUp("[ParentId]","CurrentInfo"))

CurrentInfo是另一个本地表

CurrentTableDetails:

    Select * from [dbo].[GetTableDetails] where ItemId = 1234

在加载表单时,VBA代码查找项ID并设置CurrentTableDetails的查询定义,然后为AppendTableDetails调用OpenQuery,然后重新查询表对象。

代码:

    CurrentDb.QueryDefs("CurrentSIP_Detail").sql = "Select * from [dbo].[GetTableDetails] where ItemId = 1234"    
    DoCmd.OpenQuery "AppendTableDetails "
    Me.Child0.Requery

现在,我已打开SQL事件探查器以跟踪在表单加载时触发的查询。执行

DoCmd.OpenQuery "AppendTableDetails "

[dbo]。[GetTableDetails]被调用3次。 这是怎么发生的,为什么呢?如何解决此问题,以使查询仅触发一次。 这是正确的方法吗?还是有更好的方法可以做到这一点,以便我可以优化代码并提高性能。

0 个答案:

没有答案