【问题标题】:Unique Membership Number in Access DatabaseAccess 数据库中的唯一会员编号
【发布时间】:2016-07-26 23:46:20
【问题描述】:

我在 Access 2010 中有一个数据库,其中第一个字段是唯一的会员编号。该字段设置为索引,没有重复。如果在输入表单上输入了重复项,则不会显示错误消息,并且在输入唯一编号之前没有其他操作。我需要在数字字段失去焦点时捕获错误的代码,以便消息框告诉用户问题,然后将焦点设置回数字字段或让用户取消所有输入。 这就是我所拥有的,它会导致数据类型错误

Private Sub Grumpy_No_BeforeUpdate(Cancel As Integer)  
    If DLookup(Str("[Grumpy_No]"), "Grumpy", Str("[Grumpy_No]") = Me!Str(Grumpy_No)) Then   
    MsgBox "Number has already been entered in the database."   
    Cancel = True  
    Me!Grumpy_No.Undo   
    End If   
End Sub

非常感谢任何关于我哪里出错的线索

【问题讨论】:

  • 听起来你要的是TextBox.BeforeUpdate Event
  • 很抱歉,我对 Access 很陌生。我可以看到您对 BeforeUpdate 事件是正确的,但它似乎只想使用字符字段而不是整数。我尝试了 STR() 函数,但不断收到数据类型错误。我应该解释一下我的俱乐部是一个名为“Grumpy Old Bastards”的摩托车俱乐部,桌子是“Grumpy”,字段是“Grumpy_No”,它是一个整数。
  • 这就是我所拥有的:- Private Sub Grumpy_No_BeforeUpdate(Cancel As Integer) If DLookup(Str("[Grumpy_No]"), "Grumpy", Str("[Grumpy_No]") = Me! Str(Grumpy_No)) Then MsgBox "号码已经输入数据库。" Cancel = True Me!Grumpy_No.Undo End If End Sub 任何关于我哪里出错的线索将不胜感激。

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


【解决方案1】:

在我看来,您正朝着正确的方向前进,但您需要修复您的 DLookup 表达式。它的第三个参数必须是单个字符串。我不明白为什么Str() 有用 --- 只是构建一个字符串。实际上我会使用DCount 而不是DLookup,但同样的问题仍然适用。

Private Sub Grumpy_No_BeforeUpdate(Cancel As Integer)  
    If DCount("[Grumpy_No]", "Grumpy", "[Grumpy_No] = " & Me!Grumpy_No.Value) > 0 Then   
        MsgBox "Number has already been entered in the database."   
        Cancel = True  
        'Me!Grumpy_No.Undo '<- consider allowing the user to see the value which failed
    End If   
End Sub

请注意,如果您可以将 Grumpy_No 设为自动编号主键,Access 将自动提供唯一值,因此您不需要自己的代码来检查这些值。

【讨论】:

  • 正是我需要的 HansUp 我现在有这个 Private Sub Grumpy_No_BeforeUpdate(Cancel As Integer) Dim NewNum As String NewNum = Str(Me!Grumpy_No.Value) If Me!Grumpy_No.Value > 0 Then If DCount ("[Grumpy_No]", "Grumpy", "[Grumpy_No] = " & Me!Grumpy_No.Value) > 0 Then MsgBox "Grumpy Number " + NewNum + " 已经在数据库中输入了。"取消 = True Me!Grumpy_No.Undo ' End If End If End If End Sub
  • 现在唯一的麻烦是,在它运行例程之后(这正是我想要的方式),我现在收到一条访问错误消息,上面写着“值违反了字段或记录的验证规则”我认为这可能是表中没有重复项,所以我将其更改为重复项确定,但我仍然收到错误。我在其他任何地方都找不到任何验证规则。
  • 疯了!这是另一个问题,雷。而且我怀疑该问题与表单无关,因此在数据表视图中打开表时尝试向表中添加新行时会出现相同的错误。我认为您现在最好的做法是提交一个描述当前问题的新问题。
  • 好消息和坏消息。从表中删除“必需”可以解决它。现在,当他们单击“保存”按钮时,我必须捕获 Empty 字段。非常感谢您提供的所有帮助和建议。
猜你喜欢
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多