dma*_*rra 6 ms-access vba ms-access-2007 access-vba
这是我在MS Access中看到的一个陌生问题.我以连续的形式提供以下代码:
Private Sub thisForm_BeforeUpdate(Cancel As Integer)
If Not Cancel Then
Debug.Print "pre-logging data changes..."
' here we need to doublecheck to see if any values changed.
' we simply iterate through the whole list, re-setting oldValue
' and newValue.
For Each control In thisForm.Section(acDetail).controls
If control.ControlType = acTextBox Or _
control.ControlType = acComboBox Or _
control.ControlType = acListBox Or _
control.ControlType = acOptionGroup Or _
control.ControlType = acCheckBox Then
Debug.Print control.Name
oldValues(control.Name) = control.oldValue
newValues(control.Name) = control.value
End If
Next
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
oldValues和newValues是Dictionary对象(尽管可能与该问题无关).
我的表单有3个文本框控件和一个复选框控件.其中一个文本框控件被禁用,并通过简单内部联接的结果填充(以获取与外键关联的人类可读名称).数据源来自表单的记录源(没有DLookup或任何使用的东西).
如果我编辑其他两个文本框控件之一,此代码运行绝对正常.但是,如果我切换窗体上的复选框,我会收到运行时错误3251.在监视窗口中,当我尝试查看"控件"的属性时,我再次收到错误.它将禁用控件的oldValue值显示为"Reserved Error".
如果它始终这样做,我认为这是由于控制被禁用; 但是,当其他文本框接收编辑时,它可以正常工作,并且仅在切换复选框时中断; 我很难过.我几乎倾向于相信我发现了访问中的错误,但我可以使用一些额外的输入.
每个人都遇到过这样的问题吗?
编辑:在进一步挖掘时,我发现实际上只有3个可编辑字段中的一个不会触发此错误.它包含字符串数据.其他两个控件包含日期值和是/否值.现在我更加困惑.
小智 1
对于这个问题我有两个想法。
第一个:如果表单的 RecordSource 是链接到 SQL Server 的 ODBC 表,那么您应该为 CheckBox-Column 设置标准值。否则,它将尝试将 NULL 设置为 False 并抛出错误,指出其他人编辑了当前记录。
第二个想法:有时 Access 在编译代码时会出现一点“问题”。您可以备份数据库,然后尝试使用"C:\Program Files\Microsoft Office 2007\Office12\MSACCESS.EXE" "C:\yourFolder\yourDatabase.accdb" /decompile“运行...”窗口对其进行反编译(当然,您必须插入计算机上的路径)。这通常有助于解决奇怪的问题。
| 归档时间: |
|
| 查看次数: |
2010 次 |
| 最近记录: |