2009-07-16 61 views
0

有些人可以看看下面的我和建議我做錯了什麼。我想根據從組合框窗體上選擇的數據,其結果在連接到主窗體什麼事件處理Microsoft Access 2003中窗體上的所有控件?

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個控件更新子窗體中生成運行SQL查詢,沒有任何反應在附加的子表單中,告訴我我可能在錯誤的事件中輸入了這段代碼。 你能幫忙嗎?

+0

這是Access嗎?如果是這樣,什麼版本?否則,請說出這是什麼。 – 2009-07-16 17:20:10

+0

抱歉應該提到。這是Access '03。謝謝 – TT1611 2009-07-16 17:21:42

回答

0

如果我正確地回憶起如果表單沒有綁定,那就是表單記錄源屬性中沒有表或查詢,則表單的AfterUpdate事件不會被觸發。因此,您應該從三個組合框AfterUpdate事件中的每一個調用相同的代碼。

如果您更改控件記錄源,則可能不需要重新查詢。我不能馬上回憶起來,所以先嚐試一下沒有重新查詢。

如果你創建你的子作爲一個函數,你可以選擇你想要它運行的控件並粘貼=事件文本框中的MyFunction(),而不必在VBA中編寫代碼。

OnwDay當添加上面的段落。我永遠不會這麼做,因爲這樣做不經常發生,而且當你看VBA時,一點也​​不明顯。

0

你的代碼是有點我不清楚,但我會用一個類似語法

Form_ReportSubForm.form.RecordSource = "datamanager" 

如果Form_ReportSubForm是在主窗體的子窗體對象。

相關問題