2013-12-13 37 views
0

我試圖根據我在組合框中選擇的值和另一個文本框中的預先存在的值來設置文本框的值。這兩個控件都是在一個窗體中的連續子窗體中。一個關鍵是保存記錄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(實際上,不在數據庫中的任何地方使用)。任何想法,爲什麼我得到一個錯誤,即使它在工作嗎?

任何幫助,非常感謝。謝謝!

+0

另外我認爲實際的問題可能是你的骯髒的電話。數據在表單或控件中直接更改時發生髒。我會嘗試將Dirty事件更改爲「Me.Dirty = False」或將其全部刪除並在更新後添加保存。此外,爲什麼你循環更改多次文本框的值只有最後一個結果將堅持。 TextBox1上還有更新事件嗎? – engineersmnky

回答

1

首先,在BeforeUpdate之前調用Dirty,之前在AfterUpdate之前調用它,因此您不需要將記錄保存在Dirty和AfterUpdate中,因爲它不會真的添加任何東西。

嘗試:的

[Forms]![MainForm].[Subform].Form.TextBox1.Value = rs!d1 

代替

[Forms]![MainForm].[Subform].Form.TextBox1.SetFocus 
[Forms]![MainForm].[Subform].Form.TextBox1.Text = rs.Fields!d1 

此外,有沒有你在整個記錄循環只是一個設置文本框特別的原因?文本框是否有控制源? 將子窗體的記錄源更改爲rs會不會更容易?

+0

謝謝!這固定了它。 – tysonwright

相關問題