Access 2010 VBA手动保存记录

时间:2013-07-11 15:31:27

标签: vba access-vba ms-access-2010

这次是一个Access问题。我有一个绑定到某个表的表单,我希望此表单只允许通过单击“保存”按钮添加新条目(不编辑或删除)。第一个问题是在编辑文本框时更新了记录。我的解决方案有几个问题

Option Compare Database
Option Explicit

Private bSaveRecord As Boolean

Private Sub btCreateRecord_Click()
   bSaveRecord = True
   Me.tblUMgmtUser_UserDetailsID.Value = Me.tblUMgmtUserDetails_UserDetailsID.Value
   Me.tbSetUserHashPW = "12312"
   Me.cbSetInitPW = True
   DoCmd.GoToRecord , , acNext
End Sub

Private Sub btResetRecord_Click()
    ResetRecord
End Sub

Private Sub Form_AfterUpdate()
    bSaveRecord = False
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Not bSaveRecord Then
        Cancel = True
        Me.Undo
    End If
 End Sub

Private Sub Form_Load()
    Me.Username.SetFocus
    DoCmd.GoToRecord , , acNewRec
    bSaveRecord = False
End Sub

 Private Sub ResetRecord()
    Dim cControl As Control

    bSaveRecord = False
    For Each cControl In Me.Controls
        If cControl.Name Like "Text*" Then cControl = vbNullString
    Next
    Me.cbResponsible.Value = False
    Me.Undo
End Sub

问题1:我必须添加隐藏的文本框,以便将值保存到我想自动生成的记录中

问题2:每次打开表单时ID列都会计数,即使我之前没有添加过记录

一般来说,我的解决方案不会感觉非常健壮和优雅。任何建议都非常感谢

非常感谢 乔恩

2 个答案:

答案 0 :(得分:1)

您将数据输入表单直接绑定到目标表。因此,当用户输入数据时,他们直接编辑表格,包括创建新记录。这就是ID自动递增的原因(因为用户正在立即创建新记录)。您当前的部分解决方法是使用隐藏的文本框来存储值。

您的数据输入表单的目标听起来像是常见的情况。试试这个:

  1. 首先,不要将目标表设置为表单的源。暂时将源保留为空白,并且所有字段都未绑定。由于它们现在是分开的,因此用户无法仅通过输入数据来编辑现有记录或添加新记录。实际上,如果用户只输入数据然后关闭表单,则不会发生任何事情。

  2. 继续并按下“保存”按钮。此按钮将验证数据以确保它是您想要的,然后创建并执行SQL Insert查询以将数据添加到目标表。

答案 1 :(得分:1)

这不是我的解决方案,但它允许您使用绑定字段,同时防止它们自动更新。

http://bytes.com/topic/access/insights/891249-how-stop-bound-forms-updating-automatically