以编程方式设置文本框值但返回运行时错误 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 标题标签文本未使用情节提要或以编程方式更改