如果记录存在加载现有记录并禁用某些控制

时间:2018-03-27 12:35:20

标签: access

我有一个用于将新记录输入数据库的表单。在将数据输入其中一个控件后,我想检查数据库中是否已存在包含该数据的记录。如果是,那么我想转移到现有记录并禁用上述metnioned控件的控制,因为不应在现有记录上编辑此字段的值。所有其他字段仍可以编辑。

现在我正在考虑使用OnExit事件,但我很难编写一个合适的宏来检查具有该值的记录是否已经存在,加载该现有记录并禁用所述控件。

我担心在Access中编写宏几乎没有任何经验。

1 个答案:

答案 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

澄清:

  • Klasifikacijska_številka是我在数据表中的唯一字段
  • TKlasifikacijska_številka是我独特的字段编辑框

可能不是最好的命名模式,将来会咬我。但目前最重要的是它起作用了。

哦至于我的问题的最后一部分(禁用对现有记录的编辑控制)我发现使用不同的事件更好,那就是形式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

我希望这对任何人都有用。