Forms: Détecte si c'est un nouvel enregistrement |
Author(s) 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 .
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
|