运行'acCmdSaveRecord'后,表单字段显示'#DELETED'

时间:2015-12-01 19:34:12

标签: vba ms-access access-vba

今天我遇到了一个问题,我的一个表单在保存记录后用“#DELETED”填充所有字段。这种情况在三个小时前没有发生,而且似乎已经开始,而我没有改变表格本身的任何内容。记录仍在保存,表中任何时候都没有“#DELETED”条目。我使用以下代码打开表单:

DoCmd.OpenForm "frmPoster", , , , acFormAdd

这是保存它的代码:

Call DoCmd.RunCommand(acCmdSaveRecord)

我正在使用Access2010与SQL Server和VB。正如我所说,真正令人困惑的部分是,似乎没有任何改变这种形式会导致这种情况。它有效,现在却没有。有什么想法吗?

另外,如果您想了解有关该问题的更多信息,我将很乐意提供。

2 个答案:

答案 0 :(得分:1)

我已经将SQL与Access一起使用并遇到了一些类似的问题,除非你已经确定在SQL数据中有一个时间戳字段,并且还要执行me.requery,否则我建议你这样做。在更新后的VBA中重新选择记录。

答案 1 :(得分:0)

昨天我遇到了同样的问题 - 一旦我尝试保存记录,所有字段都转到#Deleted。试图解决几个小时 - 没有运气。 我使用Access 10/2016和MySQL ODBC连接器5.3。 我把它缩小到一个13位数的特定字段。 该字段的数据类型是varchar。当我输入任何与所需格式不匹配的值(由VBA检查),然后删除或编辑它并移动到下一个字段时,表单拒绝在保存时创建UserID并给出#Deleted。 如果我在数据输入期间跳过此字段,则表单将创建UserID(主键)并保存。此外,如果我第一次输入与字段条件匹配的值,则表单将生成主键并保存。 正如我所建议的那样,我将数据类型更改为此字段的数字14,0。 这没有用。 我按照建议保存后尝试重新查询表单但是由于删除了记录,它只显示空白字段。 所以这是我的黑客: 1.在表单中第一个字段的“On Enter”事件中,运行代码以在每个必填字段中设置临时值,例如: 首先,我创建了一个默认值为“No”的未绑定隐藏字段。然后:

If Me.NewRecord=True and Me.FormPreppedYN="No" then
    Me.txtFirstName="Hello"
    Me.txtLastName="There"
    Me.IDNr=123
    Me.Ref="ABC"
    Me.Dirty=False
    Me.txtFirstName="" 
    Me.txtLastName=""
    Me.IDNr=Null
    Me.Ref=""
    Me.txtFirstName.SetFocus
    Me.FormPreppedYN="Yes"
End If

这会强制表单创建主键。这种情况发生得非常快,用户也没有注意到它。他们只输入数据。 这每次都可靠地工作。我仍然不知道导致错误的原因,但这解决了它。