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 :

Problème lancement requete via VBA [AC-2010]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut Problème lancement requete via VBA
    Bonsoir à tous,

    Voila, j'ai un problème d'execution de requête SQL via VBA. Lorsque l'evenement clic du bouton est enclenché, j'ai l'erreur d'execution 3142 : Caractères trouvés après la fin de l'instruction SQL.

    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
     
    Private Sub Execution_Click()
         'Definition
         Dim rs As Recordset
         Dim rsc As Recordset
         Dim sqlcom As String
         Dim sqlcnt As String
         Dim sqlb As String
         Dim nbContact As Integer
         Dim nbContrat As Integer
         'Affectation
         Set rs = CurrentDb.OpenRecordset("DCom", dbOpenSnapshot)
         sqlcnt = "SELECT COUNT(I.Cial) FROM [Informations Sources] AS I WHERE I.Cial LIKE "
         sqlb = "SELECT COUNT(I.Nom) FROM [Informations Sources] AS I WHERE VENTE IS NOT NULL AND I.Cial LIKE "
         'Traitement
         With rs
            Do Until .EOF
                'rsc => nb contact + contrats pour un commercial
                sqlcnt = sqlcnt & "'" & rs("Nom").Value & "'" & " ;" & vbCrLf
                Set rsc = CurrentDb.OpenRecordset(sqlcnt, dbOpenDynaset)
                nbContact = rsc.RecordCount
                rsc.Close
                sqlb = sqlb & "'" & rs("Nom").Value & "'" & " ;" & vbCrLf
                Set rsc = CurrentDb.OpenRecordset(sqlb, dbOpenDynaset)
                nbContrat = rsc.RecordCount
                rsc.Close
                'Insertion des valeurs
                sqlb = "INSERT INTO Commercial(nbcontact, nbcontrat)  SELECT " & nbContact & ", " & nbContrat & " FROM Commercial AS c WHERE c.Nom = " & "'" & rs("Nom").Value & "'" & " ;" & vbCrLf
                DoCmd.RunSQL (sqlb)
                .MoveNext
            Loop
         End With
         rs.Close
    End Sub
    L'erreur se produit lorsque le recordset tente d'ouvrir la requete à la ligne 20 du code. Et j'imagine que pour la ligne 23, je devrais avoir le même problème.

    VBA Access est un nouveau langage pour moi et j'ai beau faire des recherches sur le net, je n'ai pas trouvé ou était mon erreur...

    Merci d'avance pour vos réponses !

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 146
    Par défaut
    Bonjour,

    Aucun caractères après la fin de la requete.

    La fin de la requete est déterminée par le point virgule.

    Supprime tes vbcrlf qui sont totalement inutiles.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pourquoi les vbCrLf

    Philippe

  4. #4
    Membre averti
    Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut
    Tout d'abord merci pour vos réponses !

    J'ai fait le test sans les vbcrlf, j'ai la même erreur !

    Pour les vbcrlf, je ne serais pas dire, j'ai vu cela sur un tuto sur le net... :p

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 283
    Billets dans le blog
    48
    Par défaut
    bonsoir,

    insère un debug.print sqlcnt pour voir la tête de la chaîne de caractères SQL dans la fenêtre d’exécution (CTR+G dans l'éditeur VBE).

    Malgré tout j’ai l’impression qu’on se complique un peu avec du procédural alors qu’avec SQL…

    Deux requêtes à tester au préalable :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT I.Cial, count(*) as nbcontact
    FROM [Informations Sources] as I
    INNER JOIN DCom as D
    ON I.Cial=D.Nom
    GROUP BY I.Cial;


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT I.Cial, count(I.Nom) as nbcontrat
    FROM [Informations Sources] AS I 
    INNER JOIN DCom as D
    ON I.Cial=D.Nom
    WHERE VENTE IS NOT NULL
    GROUP BY I.Cial;

    Si j’ai bien compris, ces deux requêtes doivent renvoyer les nbcontact et nbcontrat pour chaque commercial dont le nom figure dans DCom.
    Qu’en est-il ?

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 283
    Billets dans le blog
    48
    Par défaut
    tu as peut-être aussi des noms de commerciaux avec des apostrophes qui fichent la pagaille dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlb = sqlb & "'" & rs("Nom").Value & "'" & " ;" & vbCrLf
    Essaye avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlb = sqlb & chr(34) & rs("Nom").Value & chr(34) & " ;"

  7. #7
    Membre averti
    Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut
    Bonsoir,

    Merci pour tes réponses f-leb.

    J'ai tester les 2 requêtes et les résultats sont corrects. Ces deux requêtes doivent effectivement renvoyer les nbcontact et nbcontrat pour chaque commercial dont le nom figure dans DCom.

    J'ai mis à jour le code comme tu me l'as dit mais j'ai toujours la même erreur :

    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
     
    Private Sub Execution_Click()
         'Definition
         Dim rs As Recordset
         Dim rsc As Recordset
         Dim sqlcom As String
         Dim sqlcnt As String
         Dim sqlb As String
         Dim nbContact As Integer
         Dim nbContrat As Integer
         'Affectation
         Set rs = CurrentDb.OpenRecordset("DCom", dbOpenSnapshot)
         sqlcnt = "SELECT COUNT(I.Cial) FROM [Informations Sources] AS I WHERE I.Cial LIKE "
         sqlb = "SELECT COUNT(I.Nom) FROM [Informations Sources] AS I WHERE VENTE IS NOT NULL AND I.Cial LIKE "
         'Traitement
         With rs
            Do Until .EOF
                'rsc => nb contact + contrats pour un commercial
                sqlcnt = sqlcnt & Chr(34) & rs("Nom").Value & Chr(34) & " ;"
                Set rsc = CurrentDb.OpenRecordset(sqlcnt, dbOpenDynaset)
                Debug.Print sqlcnt
                nbContact = rsc.RecordCount
                rsc.Close
                sqlb = sqlb & Chr(34) & rs("Nom").Value & Chr(34) & " ;"
                Set rsc = CurrentDb.OpenRecordset(sqlb, dbOpenDynaset)
                nbContrat = rsc.RecordCount
                rsc.Close
                'Insertion des valeurs
                sqlb = "INSERT INTO Commercial(nbcontact, nbcontrat)  SELECT " & nbContact & ", " & nbContrat & " FROM Commercial AS c WHERE c.Nom = " & Chr(34) & rs("Nom").Value & Chr(34) & " ;"
                DoCmd.RunSQL (sqlb)
                .MoveNext
            Loop
         End With
         rs.Close
    End Sub
    Voici le résultat du debug.print : SELECT COUNT(I.Cial) FROM [Informations Sources] AS I WHERE I.Cial LIKE "A. F." ;

    Merci encore à tous pour votre aide !

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

Discussions similaires

  1. [AC-2003] Exécuter une requete via VBA
    Par rch05 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/07/2010, 12h38
  2. problème lancement requete sql
    Par skanderb dans le forum JSF
    Réponses: 4
    Dernier message: 02/05/2007, 17h46
  3. Problème sous powerpoint via VBA
    Par seb_de_quimper dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 02/04/2007, 15h58
  4. requete via VBA sur different schema oracle
    Par FO dans le forum Access
    Réponses: 3
    Dernier message: 19/01/2006, 16h40
  5. Réponses: 2
    Dernier message: 24/11/2005, 12h46

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