我正在开发旧版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次。 这是怎么发生的,为什么呢?如何解决此问题,以使查询仅触发一次。 这是正确的方法吗?还是有更好的方法可以做到这一点,以便我可以优化代码并提高性能。