【发布时间】: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 上也有更新事件吗?