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列都会计数,即使我之前没有添加过记录
一般来说,我的解决方案不会感觉非常健壮和优雅。任何建议都非常感谢
非常感谢 乔恩
答案 0 :(得分:1)
您将数据输入表单直接绑定到目标表。因此,当用户输入数据时,他们直接编辑表格,包括创建新记录。这就是ID自动递增的原因(因为用户正在立即创建新记录)。您当前的部分解决方法是使用隐藏的文本框来存储值。
您的数据输入表单的目标听起来像是常见的情况。试试这个:
首先,不要将目标表设置为表单的源。暂时将源保留为空白,并且所有字段都未绑定。由于它们现在是分开的,因此用户无法仅通过输入数据来编辑现有记录或添加新记录。实际上,如果用户只输入数据然后关闭表单,则不会发生任何事情。
继续并按下“保存”按钮。此按钮将验证数据以确保它是您想要的,然后创建并执行SQL Insert查询以将数据添加到目标表。
答案 1 :(得分:1)
这不是我的解决方案,但它允许您使用绑定字段,同时防止它们自动更新。
http://bytes.com/topic/access/insights/891249-how-stop-bound-forms-updating-automatically