如果Recordset更新成功,则为MessageBox

时间:2012-12-02 16:45:10

标签: validation vba ms-access ms-access-2007 recordset

在Access 2007中,我有一个表单可以向表中添加新联系人:

RecSet.AddNew
RecSet![Code_Personal] = Me.txtCodePersonal.Value
RecSet![FName] = Me.TxtFName.Value
RecSet![LName] = Me.txtLName.Value
RecSet![Tel Natel] = Me.txtNatTel.Value
RecSet![Tel Home] = Me.txtHomeTel.Value
RecSet![Email] = Me.txtEmail.Value
RecSet.Update

到目前为止,这已经成功,联系已经成功。但我有两个问题:

  1. 我想显示一个消息框,告诉用户已成功添加联系人
  2. 如果未成功添加联系人,因为
    1. 此名称的联系人已存在
    2. 另一个问题
      然后分别显示一个消息框“联系已存在”或“发生错误”。
  3. 我这样做的想法是:

    If recSet.Update = true Then
    MsgBox "Paolo Bernasconi was successfully added"
    Else if RecSet![FName] & RecSet![LName] 'already exist in table
    MsgBox "Contact already exists"
    Else 
    MsgBox "An unknown error occured"
    

    我知道这段代码是错的,显然不起作用,但它只是让你知道我想要实现的目标。提前感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

为您的程序添加错误处理程序。

On Error GoTo ErrorHandler

然后在更新记录集后立即向用户显示“成功”通知。

RecSet.Update
MsgBox RecSet![FName] & " " & RecSet![FName] & _
    " was successfully added"

如果更新尝试失败,则流量控制将传递到ErrorHandler部分。

ErrorHandler:
    MsgBox "Oops!"

毫无疑问,你想要的东西比“哎呀!”更精致!信息。一种灵巧的方法是使用Select Case块来根据错误号自定义响应。

在尝试添加联系人之前确定联系人是否已存在。

strCriteria = "Fname = '" & RecSet![FName] & "' AND LName = '" & _
    RecSet![LName] & "'"
Debug.Print strCriteria
If DCount("*", "YourTable", strCriteria) > 0 Then
    ' do not attempt to add it again
    MsgBox "Contact already exists"
Else
    RecSet.AddNew
    ' and so forth
End If

检查Debug.Print输出,以防我在构建strCriteria时出错。

这里的目的是避免重复错误条件...仅尝试添加不存在的联系人。因此错误不应该发生,任何其他错误都将由错误处理程序处理。