我正在研究传统的MS访问应用程序以提高性能,我对ms访问应用程序非常新 . 我需要在加载时以表格形式显示数据 . 表单的记录源设置为“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 - 使用传递查询将数据附加到TableDetails - “CurrentTableDetails” .

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次 . 这是怎么回事以及为什么会这样 . 如何解决这个问题,以便只触发一次查询 . 这是正确的方法吗?或者有更好的方法来做到这一点,以便我可以优化我的代码并提高性能 .