以编程方式设置文本框值但返回运行时错误 2115

Posted

技术标签:

【中文标题】以编程方式设置文本框值但返回运行时错误 2115【英文标题】:Programmatically setting textbox value but returning run-time error 2115 【发布时间】:2013-12-13 15:03:02 【问题描述】:

我正在尝试根据我在组合框中选择的值和另一个文本框中的预先存在的值来设置文本框的值。这两个控件都位于表单内的连续子表单中。一个关键是保存 Combo1 的 OnDirty 记录,然后执行更新 TextBox1 AfterUpdate 的代码。一切正常,除了每次更改 Combo1 中的值时都会收到以下错误消息:

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 上也有更新事件吗? 【参考方案1】:

首先Dirty在BeforeUpdate之前调用,在AfterUpdate之前调用, 所以你不需要在 Dirty 和 AfterUpdate 中保存记录,我会完全放弃 Dirty 的代码,因为它并没有真正添加任何东西。

试试:

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

而不是

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

另外,您循环整个记录集只是为了设置一个文本框是否有特殊原因?文本框是否有控制源? 把subform的recordsource改成rs不是更方便吗?

【讨论】:

谢谢!这解决了它。

以上是关于以编程方式设置文本框值但返回运行时错误 2115的主要内容,如果未能解决你的问题,请参考以下文章

下次运行应用程序时保存文本框值

以编程方式使用 UIPickerView 文本设置 UITextField 文本

UIButton 标题标签文本未使用情节提要或以编程方式更改

以编程方式设置时不显示 UITextView selectedRange

在jquery中更改另一个文本框时动态设置一个文本框值

以编程方式设置 MaxItemsInObjectGraph