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

VBA Access Discussion :

on error sur requete SQL


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut on error sur requete SQL
    Bonjour,
    Je souhaiterais éviter l'affichage du message d'erreur d'Access quand l'utilisateur saisi une clé sur une table déjà connue en codant comme ceci :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    On Error GoTo err
     
    c3sql5 = "insert into [TAB_Act_Arch] ([Arch_Titre],[Arch_Nom],[Arch_Prenom],[Arch_Tel],[Num_UG])" & _
         "values ("
        c3sql5 = c3sql5 & Chr(34) & Me.Arch_Titre & Chr(34)
        c3sql5 = c3sql5 & ", " & Chr(34) & Me.Arch_Nom & Chr(34)
        c3sql5 = c3sql5 & ", " & Chr(34) & Me.Arch_Prenom & Chr(34)
       ' c3sql5 = c3sql5 & ", " & Chr(34) & Me.Arch_Tel & Chr(34)
        If IsNull(Me.Arch_Tel) Or Me.Arch_Tel = "" Then
          c3sql5 = c3sql5 & ", " & "Null"
            Else
          c3sql5 = c3sql5 & ", " & Chr(34) & Me.Arch_Tel & Chr(34)    'TEL
        End If
        If IsNull(Me.Num_UG3) Or Me.Num_UG3 = "" Then
         c3sql5 = c3sql5 & ", " & "Null"
            Else
          c3sql5 = c3sql5 & ", " & Chr(34) & Me.Num_UG3 & Chr(34) ' Num UG
        End If
     
       c3sql5 = c3sql5 & ");"
     
      DoCmd.RunSQL c3sql5
     
      Me.Arch_Titre = ""
      Me.Arch_Nom = ""
      Me.Arch_Prenom = ""
      Me.Arch_Tel = ""
      Me.Num_UG3 = ""
      Me.ContinuerAA.Visible = True
     
      Forms!F_SEC!Liste79.Requery
     
    fin:
      Exit Sub
    err:
      MsgBox "Attention Identifiant déjà connu ou UG non renseignée !!!", _
      vbOKOnly + vbExclamation, _
                      "Création Acteurs Archives "
      Me.Arch_Nom.SetFocus
    Le problème est que le message d'Access s'affiche toujours et avant mon message d'erreur personnalisé .
    Si quelqu'un a une solution Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Cmd est une commande Access pas vba! CurrentDb.execute Sql est une commande Vba.

    Mais vue que ta requête ne peut absolument pas fonctionner alors un message d'erreur est le bienvenu.

    N'utilises jamais on error!

    Code une erreur est là : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Num_UG])" & _
         "values ("
    CmdestunecommandeAccesspasvba!CurrentDb.executeSqlestunecommandeVba.

    Maisvuequetarequêtenepeutabsolumentpasfonctionneralorsunmessaged'erreurestlebienvenu.
    https://www.developpez.net/forums/d1...l/#post9140859
    Dernière modification par Invité ; 16/06/2017 à 07h54.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    Merci pour ton aide.
    J'ai pas tout compris sur ton message mais j'ai
    essayé de coder comme ça en tenant compte de tes indications :
    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
     
    Dim cnn As DAO.Database
     
    On Error GoTo err
     
    cnn.Execute "insert into [TAB_Act_Arch] ([Arch_Titre],[Arch_Nom],[Arch_Prenom],[Arch_Tel],[Num_UG])" & _
         "values (" & _
        " Me.Arch_Titre & Chr(34)" & _
          ", " & Chr(34) & Me.Arch_Nom & Chr(34) & _
         ", " & Chr(34) & Me.Arch_Prenom & Chr(34) & _
        ", " & Chr(34) & Me.Arch_Tel & Chr(34) & _
           ", " & Chr(34) & Me.Num_UG3 & Chr(34) & _
       ");"
     
    fin:
      Exit Sub
    err:
      MsgBox "Attention Identifiant déjà connu ou UG non renseignée !!!", _
      vbOKOnly + vbExclamation, _
                      "Création Acteurs Archives "
      Me.Arch_Nom.SetFocus
    Le problème est que maintenant quoique je saisisse il se dirige toujours sur le message d'erreur. Peut tu me m'aider un peu plus ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    il faut ajouter un espace en fin de cette ligne entre "...UG]) et " & _
    (...[Num_UG])UN_ESPACE_ICI" & _
    comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cnn.execute "insert into [TAB_Act_Arch] ([Arch_Titre],[Arch_Nom],[Arch_Prenom],[Arch_Tel],[Num_UG]) " & _
    car actuellement "...[Num_UG])" est collé à "values..." de la ligne suivante d'où une erreur levée

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    Citation Envoyé par galoir Voir le message
    Bonjour,

    il faut ajouter un espace en fin de cette ligne entre "...UG]) et " & _
    (...[Num_UG])UN_ESPACE_ICI" & _
    comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cnn.execute "insert into [TAB_Act_Arch] ([Arch_Titre],[Arch_Nom],[Arch_Prenom],[Arch_Tel],[Num_UG]) " & _
    car actuellement "...[Num_UG])" est collé à "values..." de la ligne suivante d'où une erreur levée
    **************************************
    Merci pour ton aide je viens de modifier la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     cnn.Execute "insert into [TAB_Act_Arch] ([Arch_Titre],[Arch_Nom],[Num_UG],[Arch_Prenom],[Arch_Tel],[Num_UG]) " & _
         "values (" & _
            Chr(34) & Me.Modifiable28 & Chr(34) & _
           ", " & Chr(34) & Me.Arch_Nom & Chr(34) & _
           ", " & Chr(34) & Me.Num_UG3 & Chr(34) & _
           ", " & Chr(34) & Me.Arch_Prenom & Chr(34) & _
           ", " & Chr(34) & Me.Arch_Tel & Chr(34) & _
           ", " & Chr(34) & Me.Num_UG3 & Chr(34) & _
       ");"
    et là j'ai l'erreur suivante :
    erreur 3063
    Destination de sortie "NUM_UG" répliquée
    SI tu peux m'aider merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    en effet, la colonne [Num_UG] apparaît deux fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cnn.Execute "insert into [TAB_Act_Arch] ([Arch_Titre],[Arch_Nom],[Num_UG],[Arch_Prenom],[Arch_Tel],[Num_UG]) " & _
         "values (" & _
            Chr(34) & Me.Modifiable28 & Chr(34) & _
           ", " & Chr(34) & Me.Arch_Nom & Chr(34) & _
           ", " & Chr(34) & Me.Num_UG3 & Chr(34) & _
           ", " & Chr(34) & Me.Arch_Prenom & Chr(34) & _
           ", " & Chr(34) & Me.Arch_Tel & Chr(34) & _
           ", " & Chr(34) & Me.Num_UG3 & Chr(34) & _
       ");"
    Correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    cnn.Execute "insert into [TAB_Act_Arch] ([Arch_Titre],[Arch_Nom],[Num_UG],[Arch_Prenom],[Arch_Tel]) " & _
         "values (" & _
            Chr(34) & Me.Modifiable28 & Chr(34) & _
           ", " & Chr(34) & Me.Arch_Nom & Chr(34) & _
           ", " & Chr(34) & Me.Num_UG3 & Chr(34) & _
           ", " & Chr(34) & Me.Arch_Prenom & Chr(34) & _
           ", " & Chr(34) & Me.Arch_Tel & Chr(34) & _
       ");"

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Enlève le on error et le message d'erreur te dira avec précision quel est le problème!

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    Enlève le on error et le message d'erreur te dira avec précision quel est le problème!
    *************************************
    Non,j'ai enlevé on error ça change rien: la reguete d'insertion fonctionne mais je n'ai pas de message d'erreur si je saisie un identifiant déjà connu et toujours pareil dans ce cas là l'insertion dans la table ne se fait pas.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    et comme ceci en utilisant l'artillerie lourde :
    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
     
    ...
    If DCount("*", "TAB_Act_Arch", "Arch_Nom=""" &  Me.Arch_Nom  & """") = 0 Then
             cnn.Execute "insert into [TAB_Act_Arch] ([Arch_Titre],[Arch_Nom],[Num_UG],[Arch_Prenom],[Arch_Tel]) " & _
               "values (" & _
             .....     
     
            Me.Arch_Titre = ""
            Me.Arch_Nom = ""
            Me.Arch_Prenom = ""
            Me.Arch_Tel = ""
            Me.Num_UG3 = ""
            Me.ContinuerAA.Visible = True
       Else
            MsgBox "Attention Identifiant déjà connu ou UG non renseignée !!!", _
               vbOKOnly + vbExclamation, "Création Acteurs Archives "
       End If
    ...
    Dernière modification par Invité ; 19/06/2017 à 21h37.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    Citation Envoyé par galoir Voir le message
    Bonjour,

    et comme ceci en utilisant l'artillerie lourde :
    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
     
    ...
    If DCount("*", "TAB_Act_Arch", "Arch_Nom=""" &  Me.Arch_Nom  & """") = 0 Then
             cnn.Execute "insert into [TAB_Act_Arch] ([Arch_Titre],[Arch_Nom],[Num_UG],[Arch_Prenom],[Arch_Tel]) " & _
               "values (" & _
             .....     
     
            Me.Arch_Titre = ""
            Me.Arch_Nom = ""
            Me.Arch_Prenom = ""
            Me.Arch_Tel = ""
            Me.Num_UG3 = ""
            Me.ContinuerAA.Visible = True
       Else
            MsgBox "Attention Identifiant déjà connu ou UG non renseignée !!!", _
               vbOKOnly + vbExclamation, "Création Acteurs Archives "
       End If
    ...
    ****************************
    Merci ça marche mais ça veut dire que l'on ne peut pas utiliser "on error" dans ce cas là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim bd As DAO.Database
    Set bd = CurrentDb
    bd.Execute "insert into [TAB_Act_Arch] ([Arch_Titre],[Arch_Nom],[Num_UG],[Arch_Prenom],[Arch_Tel]) " & _
         "values (" & _
            Chr(34) & Forms!SF_Act_Arch!Modifiable28 & Chr(34) & _
           ", " & Chr(34) & Forms!SF_Act_Arch!Arch_Nom & Chr(34) & _
           ", " & Chr(34) & Forms!SF_Act_Arch!Num_UG3 & Chr(34) & _
           ", " & Chr(34) & Forms!SF_Act_Arch!Arch_Prenom & Chr(34) & _
           ", " & Chr(34) & Forms!SF_Act_Arch!Arch_Tel & Chr(34) & _
       ");"
    Car moi je l'ai utilisé sur une autre application :
    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
     
    Private Sub Commande66_Click()
    On Error GoTo err
    DoCmd.RunCommand acCmdSaveRecord
    Me.RecordSource = Me.RecordSource
    Me.Sous_Formulaire_Insertions.Form.RecordSource = Me.Sous_Formulaire_Insertions.Form.RecordSource
    Texte35.Locked = True
    fin:
        Exit Sub
    err:
        MsgBox "Attention vous avez omis de saisir un carton ou ce Numéro d'Insertion existe déjà !", _
        vbOKOnly + vbExclamation, _
                      "Saisie Insertions !!! "
        Me.Texte27.SetFocus
        Resume fin
    End Sub
    Et là il fonctionne trés bien.
    Si tu as un retour sur ça merci de me tenir au courant
    Merci à toi pour ton aide

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    On error inhibe les messages d'erreurs, ça implique un gestions de ces erreurs pour informer ou pour effectuer des actions en fonction!

    Inhiber les messages d'erreur sens les gérer revient à dire fait ce que tu veut dangereux non?

    C'est pas par ce que tu as bonus de 50% a vie que tu conduis sens vigilance! Le on error c'est un ta police d'assurance (avec parcimonie).
    Dernière modification par Invité ; 20/06/2017 à 08h19.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    On error inhibe les messages d'erreurs, ça implique un gestions de ces erreurs pour informer ou pour effectuer des actions en fonction!

    Inhiber les messages d'erreur sens les gérer revient à dire fait ce que tu veut dangereux non?

    C'est pas par ce que tu as bonus de 50% a vie que tu conduis sens vigilance! Le on error c'est un ta police d'assurance (avec parcimonie).
    *********************************************************
    Ok mais tu ne réponds pas à ma question pourquoi avec ce code ça marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     
    Dim bd As DAO.Database
    Set bd = CurrentDb
    bd.Execute "insert into [TAB_Act_Arch] ([Arch_Titre],[Arch_Nom],[Num_UG],[Arch_Prenom],[Arch_Tel]) " & _
         "values (" & _
            Chr(34) & Forms!SF_Act_Arch!Modifiable28 & Chr(34) & _
           ", " & Chr(34) & Forms!SF_Act_Arch!Arch_Nom & Chr(34) & _
           ", " & Chr(34) & Forms!SF_Act_Arch!Num_UG3 & Chr(34) & _
           ", " & Chr(34) & Forms!SF_Act_Arch!Arch_Prenom & Chr(34) & _
           ", " & Chr(34) & Forms!SF_Act_Arch!Arch_Tel & Chr(34) & _
       ");"
    et pourquoi avec ce code ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Commande66_Click()
    On Error GoTo err
    DoCmd.RunCommand acCmdSaveRecord
    Me.RecordSource = Me.RecordSource
    Me.Sous_Formulaire_Insertions.Form.RecordSource = Me.Sous_Formulaire_Insertions.Form.RecordSource
    Texte35.Locked = True
    fin:
        Exit Sub
    err:
        MsgBox "Attention vous avez omis de saisir un carton ou ce Numéro d'Insertion existe déjà !", _
        vbOKOnly + vbExclamation, _
    Quand je dis "ça marche" c'est que le on error s'exécute bien si il y a erreur de saisie ici c'était le fait de ne pas saisir un numéro de carton, ou que le Numéro d'Insertion existait déjà
    Merci

  14. #14
    Invité
    Invité(e)
    Par défaut
    Je suis pas sur d'avoir compris!
    Tu savoir pourquoi on error fonctionne avec CurrentDb et pas avec docmd?

    Parce que CurrentDb est une commande vba et docmd un command Access!

    DoCmd.SetWarnings False
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    bd.Execute "insert into [TAB_Act_Arch] ([Arch_Titre],[Arch_Nom],[Num_UG],[Arch_Prenom],[Arch_Tel]) " & _
         "values ('" & Forms!SF_Act_Arch!Modifiable28 & _
           "', '" & Forms!SF_Act_Arch!Arch_Nom & _
           "','" &  Forms!SF_Act_Arch!Num_UG3 & _
           "','" & Forms!SF_Act_Arch!Arch_Prenom & _
           "','" & Forms!SF_Act_Arch!Arch_Tel &  _
       "');"
    Mais surmenants parce que le deuxième cas les données sont liés au formulaire lui même a la base et que l'insert 'update et le delete sont implicites et faire une requête insert par dessus génère invariablement un doublon!

    Mais pour être tout à fait franc les contrôles liés au UserRorm c'est pas vraiment ma tasse de thé même dans Access je ne fais jamais ça!

    Je gère des contrôles indépendant par requête Sql!
    Dernière modification par Invité ; 20/06/2017 à 23h08.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    Merci pour ta réponse, non c'est le contraire avec CurrentDb ça marche pas et avec docmd ça marche, mais enfin je retiens que CurrentDb est une commande vba et docmd un commande Access; ça veut dire que On Error est une commande Access ?
    Pour ce qui est des contrôles liés au Formulaire(UserForm) dans mon cas aussi ce sont des contrôles indépendants en effet je partage ton avis on est plus libre avec ce genre de contrôles .
    Merci pour ton aide

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Non c'est le contraire
    DoCmd.SetWarnings False est à Access ce que on error est à Vba!

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    OK merci à toi

Discussions similaires

  1. [MySQL]probleme introuvable sur requete sql
    Par SegmentationFault dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/11/2006, 00h12
  2. erreur sur requete sql
    Par boss_gama dans le forum ASP
    Réponses: 1
    Dernier message: 31/07/2006, 13h39
  3. [RegEx] regexp sur requete SQL
    Par wamania dans le forum Langage
    Réponses: 4
    Dernier message: 11/07/2006, 15h40
  4. doute sur requete SQL
    Par gwendk dans le forum ASP
    Réponses: 19
    Dernier message: 31/05/2006, 17h15
  5. Question performance sur requetes sql
    Par shinrei dans le forum ASP
    Réponses: 7
    Dernier message: 19/05/2006, 13h28

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