IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Erreur 2108 ???


Sujet :

Access

  1. #1
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 319
    Points : 286
    Points
    286
    Par défaut Erreur 2108 ???
    Bonjour à tous

    Voici le code que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Private Sub C_OACI_BeforeUpdate(Cancel As Integer)
        If Not IsNull(C_OACI) And Trim(C_OACI) <> "" Then
            If Trt_Existe(C_OACI.Value) Then
                MsgBox "Ce code OACI existe déjà dans la table."
                Cancel = True
                C_OACI.SetFocus
            Else
                Cancel = False
            End If
        Else
            Cancel = True
            MsgBox ("Le champ 'Code OACI' ne peut pas être vide.")
            C_OACI.SetFocus
            Exit Sub
        End If
    End Sub
    Lorsque je saisis une donnée qui existe dans la table, Access me renvoie l'erreur 2108 : Vous devez enregistrer votre champs avant d'exécuter l'action AtteintreControle, la méthode GoToControle ou la méthode SetFocus.

    Je ne comprend pas du tout ce qu'il veux dire car, ce que je souhaite faire, c'est de remettre le curseur dans le champs en question lorsqu'une erreur est détectée (donnée existante ou champs vide ou null)

    Merci d'avance.
    Zeb'...

  2. #2
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Bonjour,

    En fait tu n'as pas besoin de remettre le focus sur le champ si tu fais un CANCEL=True. Le traitement reste sur le champ tant que tu ne l'a pas validé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Private Sub C_OACI_BeforeUpdate(Cancel As Integer)
        If Not IsNull(C_OACI) And Trim(C_OACI) <> "" Then
            If Trt_Existe(C_OACI.Value) Then
                MsgBox "Ce code OACI existe déjà dans la table."
                Cancel = True
            Else
                Cancel = False
            End If
        Else
            Cancel = True
            MsgBox ("Le champ 'Code OACI' ne peut pas être vide.")
            Exit Sub
        End If
    End Sub
    Salut,

  3. #3
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 319
    Points : 286
    Points
    286
    Par défaut
    Effectivement, ça fonctionne, merci...
    Mais par contre, maintenant, lorsque je saisis un code qui existe dans la table, j'ai bien mon message qui s'affiche mais ensuite j'ai un autre "gros" message venant d'Access qui dit :
    "La valeur du champ ou de l'enregistrement ne respecte pas la règle de validation pour l'enregistrement ou le champ. Vous avez peut-être modifié une règle de validation sans vérifier si les données existantes correspondent à la nouvelle règle de validation. Cliquez sur... etc, etc.."

    Je ne compred pas ce qu'il veux dire ; je n'ai modifié aucune règle dans le code ???

    Comment éviter ce message, sachant que dans le Form_Load, j'ai déjà mis un "DoCmd.SetWarnings false" ???
    Zeb'...

  4. #4
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Re,

    As-tu essayé de mettre le DoCmd.SetWarnings false dans la procédure en début.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub C_OACI_BeforeUpdate(Cancel As Integer)
     
      DoCmd.SetWarnings false
    .....

  5. #5
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 319
    Points : 286
    Points
    286
    Par défaut
    Yep, ca ne fonctionne pas ; j'ai toujours le même message.
    Zeb'...

  6. #6
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Bon ben y'a plus qu'à gérer l'événement 'Sur Erreur' de ton formulaire et tu places le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub Form_Error(DataErr As Integer, Response As Integer)
     
       '    MsgBox DataErr
      If DataErr = <code erreur> Then Response = acDataErrContinue
     
    End Sub
    La ligne avec le Msgbox permet de connaitre le <Code Erreur> correspondant. A retirer après utilisation

    Salut,

  7. #7
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 319
    Points : 286
    Points
    286
    Par défaut
    Ca fonctionne, merci beaucoup.
    Où est-ce que je peux trouver les autres variables du genre DataErr ?
    J'aimerai pour gérer certains codes erreur en fonction de certains champ (donc récupérer le nom du champ en cause) ???
    Zeb'...

  8. #8
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Le DataErr est équivalent à Err.Number.
    Si tu veux gérer plusieurs cas d'erreurs, utilises en Select Case
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub Form_Error(DataErr As Integer, Response As Integer)
     
      Select case DataErr
      Case 3501
          Response = acDataErrContinue
      Case 2702
          ' Ici tu peux placer des messages plus explicites....
           Response = acDataErrContinue
      case else
           msgbox "Err " & dataerr & " " & Error(dataerr)
      end select
     
    End Sub
    Sinon récupérer le champ en cause, on peut essayer avec ActiveControl.name par exemple.

    Sinon quand une erreur peut être provoquée par plusieurs champs, j'indique à l'utilisateur un message du style "Veuillez vérifier votre saisie sur les champs suivants......", ça répond à tout.
    Faut être près de l'utilisateur mais pas trop quand même

  9. #9
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 319
    Points : 286
    Points
    286
    Par défaut
    Merci beaucoup m'sieur...
    Zeb'...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Erreur 2108 et 2115
    Par Shankara dans le forum VBA Access
    Réponses: 3
    Dernier message: 29/12/2011, 15h12
  2. Erreur $2108 Interbase 6.5
    Par HASSIOMAR dans le forum Bases de données
    Réponses: 6
    Dernier message: 10/10/2011, 09h11
  3. [BDE] Erreur $2108
    Par jv2759 dans le forum Bases de données
    Réponses: 6
    Dernier message: 06/10/2007, 17h31
  4. Déploiement. Erreur $2108
    Par platoon64 dans le forum Bases de données
    Réponses: 4
    Dernier message: 10/05/2006, 14h14
  5. BDE erreur $2108
    Par gsmdu62 dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/05/2006, 21h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo