控制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
我对 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