Home
Home

---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 **********