我继承了一大堆Access前端。几乎所有查询都是使用图形QBE工具创建的,并且GUI元素是硬编码的。从概念上讲,查询可以是:
SELECT * FROM myTable
WHERE [Forms]![frm_Main]![frm_TabLine].[Form]![frm_YetAnotherForm].[Form]![SomeId]
将GUI元素与查询逻辑联系起来对我来说是错误的,当我必须在前端更改某些内容时,这是一种巨大的痛苦。您有什么建议将GUI与查询分开吗?特别是对于大型(可能是复杂的)遗留QBE查询。
没问题。查询是在VBA中动态创建的。可以使用搜索和替换来处理对GUI名称的任何更改。我发现这个SO thread很有帮助。
对于旧版报告,我删除了查询中的WHERE条件,并使用可选的whereCondition参数在VBA中指定它
DoCmd.OpenReport "SomeReport", acViewPreview, , "GroupNum = " & Me.comboBox1.Value
对于遗留查询,我删除了WHERE条件,然后在VBA中动态创建一个类似于此的查询。
SELECT * FROM LegacyQBEQueryNoConditions
WHERE groupNum = Me.comboBox1.Value
我还没有确定我是否在这方面受到了巨大的打击,但它仍然感觉像是一种肮脏的方式。
是否有人建议将表单中的业务逻辑与QBE查询分开,以便在最小的痛苦下更改GUI元素?或者,QBE查询中的硬编码路径只是我必须承担的责任?
答案 0 :(得分:0)
在这种情况下,最好的方法是迁移到类型化的查询参数,如MSDN article中所述 因此,您的查询将如下所示:
PARAMETERS [Employee Title] CHAR;
SELECT LastName, FirstName, EmployeeID
FROM Employees
WHERE Title =[EmployeeTitle];
和VBA一起运行它:
Set qdf = dbs.QueryDefs("Find Employees")
qdf![EmployeeTitle] = "Sales Manager"
qfd.OpenRecordset...