什么事件处理Microsoft Access 2003中窗体上的所有控件?

时间:2009-07-16 16:59:31

标签: sql ms-access events controls

有些人可以为我看下面的内容,并告诉我我做错了什么。我试图根据从表单上的组合框中选择的数据运行SQL查询,其结果是在附加到主表单的子表单中生成的

Private Sub Form_AfterUpdate()
Dim LSQL As String
Dim cmb As ComboBox
Dim txt As TextBox
Dim chk As CheckBox

For Each Control In Me.Controls
If IsNull(cmb.Value) Then
Form_ReportSubForm.RecordSource = "datamanager"
requerysubform

Else
If IsNull(txt.Value) Then
Form_ReportSubForm.RecordSource = "datamanager"
requerysubform

Else
If chk.Value = False Then
Form_ReportSubForm.RecordSource = "datamanager"
requerysubform

Else
LSQL = "SELECT * from datamanager"
LSQL = LSQL & " WHERE engineerid = cmbengid AND membername = cmbtm AND department = cmbdept"
Form_ReportSubForm.RecordSource = LSQL
    requerysubform

    End If
    End If
    End If
    Next

End Sub

当表单上的3个控件更新时,附加的子表单中没有任何操作,它告诉我我可能在错误的事件中输入了此代码。 你能帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

如果我核心地知道表单是否未绑定,即表单Record Source属性中没有表或查询,则表单的AfterUpdate事件不会被触发。因此,您应该从三个组合框AfterUpdate事件中调用相同的代码。

如果更改控制记录源,则可能不需要重新查询。我无法回想起手边所以在没有重新查询的情况下尝试它。

如果您将sub创建为Function,您只需选择要运行它的控件并将= MyFunction()粘贴到事件文本框中,而不必在VBA中对其进行编码。

OnwDay当添加上面的段落时。我永远不会这样做,因为这不是经常做的,而且当你看VBA时,一切都不明显。

答案 1 :(得分:0)

我的代码有点不清楚,但我会使用类似

的语法
Form_ReportSubForm.form.RecordSource = "datamanager"

如果Form_ReportSubForm是主窗体中的子窗体对象。