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 :

[DAO VBA] Récupérer une erreur de violation de clé


Sujet :

Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut [DAO VBA] Récupérer une erreur de violation de clé
    Bonsoir,

    Y a-t-il moyen de récupérer une erreur de violation de clé par le code?

    J'ai une fonction, dans un module standard, pour importer les données d'une ancienne application vers une nouvelle structure de DB.

    J'ai désactivé le Warning automatique d'Access (DoCmd.SetWarnings False)... et du coup, je n'ai pas plus de message de confirmation avant le insert (cool) que de message indiquant une violation de clé (oups).

    Des pistes où chercher?
    Je me suis déjà retrouver avec un problème semblable. J'avais alors utilisé un simple DLook pour voir si une violation s'était produite... Pour cette situation, il me semble que ce serait bien trop lourd de faire ça (insertion de temps en temps contre insertion massive pour ce problème-ci.)

    Merci!
    Caroline

  2. #2
    Faw
    Faw est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1 169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 169
    Points : 1 383
    Points
    1 383
    Par défaut
    Si cette erreur porte un numéro tu peux l'intercepter dans une gestion
    d'erreurs avec err.number du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    On error GoTo Err1
    ...
    ton traitement
    ....
    Exit_Err1:
        Exit Sub
    Err1:
            If Err.Number =  LaValeur Then 
                MsgBox Err.Description
            End If
        Resume Exit_Err1


  3. #3
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,
    As tu pensé à remettre
    juste avant le moment ou tu aurais besoin des messages d'erreurs ??

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut Ben oui :-)
    Merci pour vos réponses.

    Citation Envoyé par Kikof
    As tu pensé à remettre
    Oui bien sûr. Il y a deux messages d'avertissement standard qui est activé/désactivé en même temps. Le premier est une demande de confirmation (pour une insertion massive, c'est pas tellement viable. Il faut la désactiver). Le deuxième avertissement survient si l'enregistrement n'a pas été inséré. C'est celui là que j'aimerais bien récupérer...


    Citation Envoyé par Faw
    Si cette erreur porte un numéro
    ... mais il n'y a pas de numéro d'erreur dans le message. Je commence ma journée avec ça : voir si une gestion d'erreur n'intercepterait pas quand même "quelque chose".

    Caroline

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Caroline1
    voir si une gestion d'erreur n'intercepterait pas quand même "quelque chose".
    La réponse est non. :-/

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut Solution : db.Execute strSQl, dbFailOnError
    Solution trouvée :
    Utiliser la méthode Execute de Database plutôt que le RunSQL.
    • Les messages d'avertissements d'Access n'ont pas besoin d'être désactivés.
    • On peut savoir combien d'enregistrement ont pu être insérés/supprimés
    • L'option dbFailOnError de la méthode Execute permet de gérer les erreurs qui se produisent (en ajoutant un On Error bien standard).
    Code exemple :
    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
    18
    19
    20
    21
    22
    23
     
    Dim db As DAO.Database
    Dim strSQL as String
    On error goto ErrGestion
     
    strSQL = "INSERT INTO tblOrdinateurs(IDOrdinateur) VALUES('Test')"
    Set db = CurrentDb
    db.Execute strSQL, dbFailOnError
    Debug.Print db.RecordsAffected   'pour strSQL-> 0 ou 1
     
    Set db = nothing
     
    Exit Sub
    ErrGestion:
        Select Case err.Number
          Case 3022 'Violation de clé
               'Écrire dans le fichier log
                Debug.Print "L'ordinateur dont le numéro de série est «Test» " & _
                        "existe déjà dans le nouveau système."   '<- En attendant...
               Resume Next
          Case Else
               err.raised err.number 'Erreur non traitée
        End Select

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

Discussions similaires

  1. [AC-2000] Récupérer la ligne ou le code VBA d'une erreur
    Par isa911Bis dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/03/2010, 17h26
  2. Récupérer une erreur SQL avec TIBDataSet
    Par cgone dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/10/2006, 00h00
  3. Réponses: 4
    Dernier message: 09/08/2006, 22h28
  4. [C#] Récupérer une erreur OleDb
    Par iDaaX dans le forum Accès aux données
    Réponses: 2
    Dernier message: 10/11/2005, 16h28
  5. Réponses: 8
    Dernier message: 13/09/2005, 21h05

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