我有一个用于将新记录输入数据库的表单。在将数据输入其中一个控件后,我想检查数据库中是否已存在包含该数据的记录。如果是,那么我想转移到现有记录并禁用上述metnioned控件的控制,因为不应在现有记录上编辑此字段的值。所有其他字段仍可以编辑。
现在我正在考虑使用OnExit事件,但我很难编写一个合适的宏来检查具有该值的记录是否已经存在,加载该现有记录并禁用所述控件。
我担心在Access中编写宏几乎没有任何经验。
答案 0 :(得分:0)
好消息我设法找到解决问题的方法。我是怎么做到的?
我第一次尝试解决问题的“记录存在”部分就是去计算满足特定条件的所有记录(它们的字段内容与该字段的输入框的内容相匹配。现在因为我有对VBA语法的了解很少我必须可耻地承认,我花了一整天的时间来实现它,但我做到了。
现在,这对我来说是更可耻的时刻。大约五分钟后,当我处理“转移到现有记录”部分问题时,我意识到我用最愚蠢的方法来解决我的拳头部分。
为什么我的问题的第一部分的上述解决方案是最愚蠢的方法? 那是因为我试图计算数据库中存在具有唯一字段值的记录的次数。这是愚蠢的,因为如果你有唯一的字段,那就意味着数据库中可以有一个或没有匹配的记录。
现在我没有使用DCount,而是使用了FindFirst。使用FindFirst的最大优点是它实际上同时解决了我的两个问题(记录是否存在并移动到它)。
所以我最终得到了这个简洁的代码
Private Sub TKlasifikacijska_številka_Exit(Cancel As Integer)
Set rst = Me.RecordsetClone
'Find existing record
rst.FindFirst "Klasifikacijska_številka = " & "'" & [TKlasifikacijska_številka] & "'"
'Recod found
If Not rst.NoMatch Then
'Undo last editing in order to avoid duplicates error after moving to existing record
Me.Undo
'Move to the existing record
Me.Bookmark = rst.Bookmark
'Record wasn't found
Else
'Don't do nothing - keep user editing new record
End If
End Sub
澄清:
可能不是最好的命名模式,将来会咬我。但目前最重要的是它起作用了。
哦至于我的问题的最后一部分(禁用对现有记录的编辑控制)我发现使用不同的事件更好,那就是形式OnCurrent事件。每次更改记录位置时都会触发该事件,您可以轻松检查记录是否已存储在数据库中,或者仍然是使用此简单代码的新记录。
Private Sub Form_Current()
'Existing record
If Not Me.NewRecord Then
'Disable the unique field edit box to prevent editing data of that field since
'such data should not be edited on existing records
Me.TKlasifikacijska_številka.Enabled = False
'Change header label caption to let user easily know that he is on an existing record
Me.Oznaka16.Caption = "Obstoječi zapis"
Else
'Enable the unique field edit box to enable user to enter data into it
Me.TKlasifikacijska_številka.Enabled = True
'Change header label caption to let user easily know that he is on a new record
Me.Oznaka16.Caption = "Nov zapis"
End If
End Sub
我希望这对任何人都有用。