我試圖根據我在組合框中選擇的值和另一個文本框中的預先存在的值來設置文本框的值。這兩個控件都是在一個窗體中的連續子窗體中。一個關鍵是保存記錄OnDirty for Combo1,然後執行代碼更新TextBox1 AfterUpdate。一切正常,但我每次都收到以下錯誤消息我改變COMBO1值:以編程方式設置文本框的值,但返回運行時錯誤2115
Run-time error '2115':
The macro or function set to the BeforeUpdate or ValidationRule property for this field is preventing Database from saving the data in the field.
如果我點擊了錯誤信息「終結」,我沒事。對於連接到這些表單的任何表上的任何元素,我沒有驗證規則。我沒有使用窗體或子窗體上的BeforeUpdate或ValidationRule屬性。
現在,該代碼如下所示:
Private Sub Combo1_Dirty(Cancel As Integer)
DoCmd.RunCommand acCmdSaveRecord
End Sub
Private Sub Combo1_AfterUpdate()
DoCmd.RunCommand acCmdSaveRecord
Dim con As ADODB.Connection
Set con = Application.CurrentProject.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
ssql = "(SELECT TABLE1.DESCRIPTION As d1 " & _
"FROM TABLE1 " & _
"INNER JOIN TABLE2 ON " & _
"(TABLE1.CATEGORY = TABLE2.CATEGORY) " & _
"AND (TABLE1.LEVEL = TABLE2.LEVEL) " & _
"WHERE " & _
"(((TABLE1.LEVEL)= " & [Forms]![MainForm].[Subform].Form.Combo1.Value & ") " & _
"AND ((TABLE2.CATEGORY)= '" & [Forms]![MainForm].[Subform].Form.[CATEGORY].Value & "'));)"
rs.Open ssql, con
Do Until rs.EOF = True
[Forms]![MainForm].[Subform].Form.TextBox1.SetFocus
[Forms]![MainForm].[Subform].Form.TextBox1.Text = rs.Fields!d1
rs.MoveNext
Loop
End Sub
當我點擊「調試」,它強調了這行代碼:
[Forms]![MainForm].[Subform].Form.TextBox1.Text = rs.Fields!d1
再次,無論是TextBox1的控制或下方的數據元素它有任何驗證規則集,並且我的代碼沒有使用任何BeforeUpdate(實際上,不在數據庫中的任何地方使用)。任何想法,爲什麼我得到一個錯誤,即使它在工作嗎?
任何幫助,非常感謝。謝謝!
另外我認爲實際的問題可能是你的骯髒的電話。數據在表單或控件中直接更改時發生髒。我會嘗試將Dirty事件更改爲「Me.Dirty = False」或將其全部刪除並在更新後添加保存。此外,爲什麼你循環更改多次文本框的值只有最後一個結果將堅持。 TextBox1上還有更新事件嗎? – engineersmnky