---Soumis par Dev Ashish---
Détecte si c'est un nouvel enregistrement.
(Q) Comment savoir si l'usager possède un nouvel enregistrement après avoir appuyé sur le bouton Next, par exemple, alors qu'il était déjà sur le dernier enregistrement?
(A) Sous Access 97/95, vous pouvez utiliser NewRecord pour détecter si l'enregistrement actuel est nouveau ou non. Directement du fichier d'aide Access, voici un exemple.
Sub NewRecordMark(frm As Form) Dim intnewrec As Integer intnewrec = frm.NewRecord If intnewrec = True Then MsgBox "Vous êtes sur un nouvel enregistrement." _ & "@Désirez-vous ajouter un nouvel enregistrement?" _ & "@Si non, naviguer vers un enregistrement existant." End If End Sub
Voici une fonction qui vous dira également si vous êtes sur un nouvel enregistrement, ou pas: (Lire les commentaires d'Allen Browne et d'Andy Baron.)
Function AtNewRecord(frm as Form)
Dim varTemp as Variant
On Error Resume Next
varTemp = frm.Bookmark
AtNewRecord = (Err <> 0)
On Error Goto 0
End Function
Ceci fonctionne car essayer de lire le signet (bookmark)d'un nouvel enregistrement génère une erreur.
De Andy Baron:
Essayer d'obtenir le signet d'un formulaire pour déterminer si on est à un nouvel enregistrement est tout à fait sécuritaire en autant que vous vous limitiez à utiliser cette technique à l'intérieur de la procédure événementielle Current du formulaire.
De Allen Browne:
Ce code (AtNewRecord) est non sécuritaire. Il ne retourne pas de résultat concluant sous quelques versions d'Access que ce soit. Access retourne, par erreur, le signet du dernier enregistrement alors que vous êtes sur un nouvel enregistrement, dans certaines circonstances. Ce code devrait fonctionner, et je considère que c'est un bug sérieux d'Access.
Démonstration du bug: suivre les étapes suivantes.
1. Ajout d'un bouton sur le formulaire, insertion du
code sous sa procédure Click.
2. Ouverture du formulaire.
3. Naviguer sur le dernier, ou l'avant-dernier,
enregistrement.
4. Demander l'ajout d'un nouveau record (bouton de
navigation).
5. Écrire quelque chose, mais ne pas sauvegarder
l'enregistrement.
6. Cliquer sur le bouton ajouté.
Vous remarquerez que la propriété NewRecord fonctionne correctement, mais que le signet existe.
Le signet est erroné, il vous fournit celui du dernier enregistrement visité.
Morale: ne jamais se fier au signet, à moins d'avoir testé NewRecord au préalable.
Évidemment, le problème est sérieux sous Access 2 qui ne possède pas la propriété NewRecord .
'********* Code Start ********** Private Sub cmdCheckIt_Click() On Error GoTo Err_cmdCheckIt_Click Dim sBM As String Debug.Print "Nouvel enregistrement " & Me.NewRecord; sBM = Me.Bookmark Debug.Print " Le signet est " & Len(sBM) & " caractères de long." Exit_cmdCheckIt_Click: Exit Sub Err_cmdCheckIt_Click: Debug.Print " Error detected: " & Err.Number & " - " & Err.Description Resume Exit_cmdCheckIt_Click End Sub '********* Code End **********