Tenho uma tabela de cadastro com a chave primária numérica (campo CodigoReq) e sendo formada no evento "antes de atualizar" do botão gravar, conforme abaixo. O CodigoReq é o último gravado na tabela + 1. Porém, num dado momento, o sistema não detecta mais o último código gravado e por isso ocorre a duplicidade não permitindo, assim, a gravação do novo registro.
Private Sub CmdGravar_Click()
On Error Resume Next
DoCmd.RunCommand acCmdSaveRecord
Call Bloqueiabotoes
CmdAlterar.Enabled = True
CmdNovo.Enabled = True
cboListaReq.Enabled = True
Me.Refresh
Me.txtBairro = ""
Me.txtCidade = ""
Me.txtUF = ""
Me.txtCEP = ""
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error Resume Next
Dim strMsg As String
Dim strTitle As String
Dim IntRetVal As Integer
Dim strRegistro As String
Dim numUltCodigoReq As Integer
Dim numCodForm As Integer
Dim db As Database
Dim t As Recordset
Set db = DBEngine(0)(0)
Set db = CurrentDb
Set t = db.OpenRecordset("CadastroReq", dbOpenTable)
If Me.Dirty Then
If Me.NewRecord Then
strMsg = "Confirma a inserção deste registro?"
strTitle = "Inserindo Novo"
IntRetVal = MsgBox(strMsg, vbExclamation + vbYesNo, strTitle)
If IsNull([CodigoReq]) Then
If t.BOF = True And t.EOF = True Then
[CodigoReq] = 1
Else
t.MoveLast
numUltCodigoReq = t![CodigoReq]
[CodigoReq] = numUltCodigoReq + 1
End If
End If
Else
strMsg = "Confirma a alteracao do registro?"
strTitle = "Alterando registro"
IntRetVal = MsgBox(strMsg, vbExclamation + vbYesNo, strTitle)
End If
Select Case IntRetVal
Case vbNo
Me.Undo
End Select
Else
DoCmd.CancelEvent
Me.Undo
End If
t.Close
db.Close
End Sub
Private Sub CmdGravar_Click()
On Error Resume Next
DoCmd.RunCommand acCmdSaveRecord
Call Bloqueiabotoes
CmdAlterar.Enabled = True
CmdNovo.Enabled = True
cboListaReq.Enabled = True
Me.Refresh
Me.txtBairro = ""
Me.txtCidade = ""
Me.txtUF = ""
Me.txtCEP = ""
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error Resume Next
Dim strMsg As String
Dim strTitle As String
Dim IntRetVal As Integer
Dim strRegistro As String
Dim numUltCodigoReq As Integer
Dim numCodForm As Integer
Dim db As Database
Dim t As Recordset
Set db = DBEngine(0)(0)
Set db = CurrentDb
Set t = db.OpenRecordset("CadastroReq", dbOpenTable)
If Me.Dirty Then
If Me.NewRecord Then
strMsg = "Confirma a inserção deste registro?"
strTitle = "Inserindo Novo"
IntRetVal = MsgBox(strMsg, vbExclamation + vbYesNo, strTitle)
If IsNull([CodigoReq]) Then
If t.BOF = True And t.EOF = True Then
[CodigoReq] = 1
Else
t.MoveLast
numUltCodigoReq = t![CodigoReq]
[CodigoReq] = numUltCodigoReq + 1
End If
End If
Else
strMsg = "Confirma a alteracao do registro?"
strTitle = "Alterando registro"
IntRetVal = MsgBox(strMsg, vbExclamation + vbYesNo, strTitle)
End If
Select Case IntRetVal
Case vbNo
Me.Undo
End Select
Else
DoCmd.CancelEvent
Me.Undo
End If
t.Close
db.Close
End Sub