控制Access数据库中的重复键

Controlling duplicate key in Access DataBase

我对 Access DB 和 VB6 有疑问。

我有一个制作发票的程序,发票号是唯一键。 问题是当两个人在引入发票的网络中同时工作时。 我需要检查他们每个人输入的发票号码是否存在以避免重复。

Private Sub GuardarFactura()

If InvoiceNumberExist Then
    MessageBox UserControl.hWnd, "Invoice number duplicate", "Control de errores", vbExclamation
    Exit Sub
End If

On Error GoTo ErrorGuardar

Dim HayTrans As Boolean

AreaDeTrabajo.BeginTrans
HayTrans = True

Screen.MousePointer = vbHourglass

With recFrasEmi
    .AddNew
    !Numero = teInvoiceNumber
    !Fecha = CDate(teFecha)
    !TotalEuros = Format(CDbl(teTotal), FormatoImporte)
    .Update
    .Move 0, .LastModified
End With

AreaDeTrabajo.CommitTrans
HayTrans = False

DoEvents

Screen.MousePointer = vbDefault

Exit Sub

ErrorGuardar:

    If HayTrans Then AreaDeTrabajo.Rollback
    Screen.MousePointer = vbDefault

    MessageBox UserControl.hWnd, Err.Number & ": " & Err.Description, "Control de errores", vbExclamation

End Sub

function InvoiceNumberExist

    dim RS as recordset

    Sql "Select * From Facturas Where Numero='" & teInvoiceNumber & "'"

    Set RS = BD.OpenRecordset(Sql)
    If Not (RS.EOF And RS.BOF) Then
        InvoiceNumberExist=true
    else
        InvoiceNumberExist=false
    End If

end function

如果用户同时工作,InvoiceNumberExist 并不总是有效, 我知道我可以使用 "if Err=3022 then ...." 但有可能在错误之前找到重复的数字吗?

谢谢

谢谢,那么我认为唯一的解决办法是使用错误转到:

Private Sub GuardarFactura()

On Error GoTo ErrorGuardar

Dim HayTrans As Boolean

AreaDeTrabajo.BeginTrans
HayTrans = True

Screen.MousePointer = vbHourglass

With recFrasEmi
.AddNew
!Numero = teInvoiceNumber
!Fecha = CDate(teFecha)
!TotalEuros = Format(CDbl(teTotal), FormatoImporte)
.Update
.Move 0, .LastModified
End With

AreaDeTrabajo.CommitTrans
HayTrans = False

DoEvents

Screen.MousePointer = vbDefault

Exit Sub

ErrorGuardar:

If HayTrans Then AreaDeTrabajo.Rollback
Screen.MousePointer = vbDefault

If Err=3022 Then
   MessageBox UserControl.hWnd, "Invoice number duplicate", "Control de errores", vbExclamation
Else
   MessageBox UserControl.hWnd, Err.Number & ": " & Err.Description, "Control de errores", vbExclamation
End If

End Sub