我需要为用户提供一种方法,让他们从表中选择要显示的列。用户在表单中有一个组合框的列名,他们可以选择其中一个,然后点击一个打开报告的按钮。我写了一些代码,它根据用户的输入创建一个SQL查询,但它没有被调用。我已经尝试插入MsgBox
语句,断言等,但它永远不会被调用。如果我使用宏代替,那将会运行,但不会运行...
Private Sub Report_Open(Cancel As Integer)
Dim field As String
Dim sqlQuery As String
Dim ctl As Control
ctl = "Forms![RuleGroupForm]![selectRuleFieldCombo]"
field = "rules.[" & ctl & "]"
' E.g. if the field was "Source File", the final query should look like this:
'SELECT overview.ID, relationship.rulesID, rules.[Source File], overview.[Rule Group], rules.RulegroupID
'FROM (overview INNER JOIN relationship ON overview.id=relationship.id)
'INNER JOIN rules ON relationship.rulesID=rules.ID
'WHERE rules.[Source File] IS NOT NULL;
sqlQuery = "SELECT overview.ID, relationship.rulesID, " & field
sqlQuery = sqlQuery & ", overview.[Rule Group], rules.RulegroupID"
sqlQuery = sqlQuery & "FROM (overview INNER JOIN relationship ON overview.id=relationship.id) "
sqlQuery = sqlQuery & "INNER JOIN rules ON relationship.rulesID=rules.ID"
sqlQuery = sqlQuery & "WHERE " & field & " IS NOT NULL;"
Me.RecordSource = sqlQuery
Requery
debugText = "New SQL Query = " & sqlQuery
End Sub
感谢。
编辑:已解决,不知道如何回答自己的问题...
答案 0 :(得分:1)
除了关闭和打开之外,还有一些事情需要检查,当你在Access中遇到奇怪的行为时。一种方法是查看表单或报表的属性表上的事件,在这种情况下Open
是否仍然包含[Event Procedure]
- 有时表单或报表可以包含代码,但事件未标记。在开发时,即添加表单,报告和代码时,定期运行Compact和Repair是个好主意,这也意味着定期备份 - 简单的复制可以节省很多麻烦。最后,开发相当规则的Decompiles是个好主意。我保留了一个小脚本,我可以删除Access文件来运行反编译。