从GUI中的表单名称中分离查询条件的提示

时间:2011-07-25 15:44:03

标签: ms-access

我继承了一大堆Access前端。几乎所有查询都是使用图形QBE工具创建的,并且GUI元素是硬编码的。从概念上讲,查询可以是:

  SELECT * FROM myTable
  WHERE [Forms]![frm_Main]![frm_TabLine].[Form]![frm_YetAnotherForm].[Form]![SomeId]

将GUI元素与查询逻辑联系起来对我来说是错误的,当我必须在前端更改某些内容时,这是一种巨大的痛苦。您有什么建议将GUI与查询分开吗?特别是对于大型(可能是复杂的)遗留QBE查询。

1。对于新查询

没问题。查询是在VBA中动态创建的。可以使用搜索和替换来处理对GUI名称的任何更改。我发现这个SO thread很有帮助。

2。报告中的旧版查询

对于旧版报告,我删除了查询中的WHERE条件,并使用可选的whereCondition参数在VBA中指定它

DoCmd.OpenReport "SomeReport", acViewPreview, , "GroupNum = " & Me.comboBox1.Value

3。旧版查询

对于遗留查询,我删除了WHERE条件,然后在VBA中动态创建一个类似于此的查询。

SELECT * FROM LegacyQBEQueryNoConditions
WHERE  groupNum = Me.comboBox1.Value   

我还没有确定我是否在这方面受到了巨大的打击,但它仍然感觉像是一种肮脏的方式。

是否有人建议将表单中的业务逻辑与QBE查询分开,以便在最小的痛苦下更改GUI元素?或者,QBE查询中的硬编码路径只是我必须承担的责任?

1 个答案:

答案 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...