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

Requêtes et SQL. Discussion :

Pb requete sql 'Erreur de syntaxe'


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 20
    Points
    20
    Par défaut Pb requete sql 'Erreur de syntaxe'
    Bonjour, je tourne en rond depuis un bon moment donc je m'en remet à vous.

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub ListeBoitier_AfterUpdate() 'Le texte de listebox est chargé'
     
    Dim odb as DAO.Database
    Dim oRst as DAO.Recordset
     
    Dim description as string
    description = ListeBoitier.Text 'Valeur 125 par défault
     
    Set odb = CurrentDb<div style="margin-left:40px">Set oRst = odb.recordset("SELECT des_boitier,pn_boitier FROM boitier_electrique WHERE pn_boitier=" & description
    msgbox(oRst.Fields(0))</div>end sub
    J'obtiens le message (Erreur d'exécution, (opérateur absent) dans l'expression "pn_boitier=125"

    Si j'écris ceci, pas de problème, la requête me renvoit la description souhaitée du boitier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRst = odb.recordset("SELECT des_boitier,pn_boitier FROM boitier_electrique WHERE pn_boitier='125'"

    Pouvez-vous m'indiquer ce que je dois modifier pour mettre une variable dans ma requete.

    Merci de votre aide;

  2. #2
    Membre actif
    Inscrit en
    Juin 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 150
    Points : 210
    Points
    210
    Par défaut
    As-tu inséré un
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Debug.Print ListeBoitier.Text
    avant la ligne d'erreur pour vérifier la valeur exacte de ce que tu passes en argument?

    Si ta liste boitier est une liste et non une liste déroulante, il faut préciser quelle ligne tu veux prendre en compte (j'ai déjà eu le cas, listBox.Text ne retourne rien, mais listbox.ItemData(0).Text retourne bien la première valeur).

    Si c'est une liste déroulante, Me.ListeBoitier (sans.Text) suffit aussi.

    Que te retourne le Debug.Print?

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Salut et merci de ton aide.

    Bon effectivement j'ai pensé à un problème de variable retournée par ma liste déroulante.

    Elle me retourne la valeur 125, ce qui est bon.

    J'ai même tenté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim description as string
    description=125
     
    Set odb = CurrentDb<blockquote>Set oRst = odb.recordset("SELECT des_boitier,pn_boitier FROM boitier_electrique WHERE pn_boitier=" & description
    msgbox(oRst.Fields(0))

    J'obtiens la même erreur.

  4. #4
    Membre actif
    Inscrit en
    Juin 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 150
    Points : 210
    Points
    210
    Par défaut
    il est vrai que par cette méthode, j'ai souvent eu des soucis aussi, vis-à-vis de la requête SQL, j'ai donc opté pour une autre solution, où la requête est créé dans la base, puis le code VBA va la chercher:
    Code vb : 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
     
    Sub MergeBM()
    'Définitions
        Dim sql As String
        Dim database As DAO.database
        Dim qry As DAO.QueryDef
        Dim rs As DAO.Recordset
    'Implémentations
        Set database = Application.CurrentDb
        Set qry = database.QueryDefs("RequêteTypePassage")
        qry.Parameters("PARAM_NUM").Value = Forms!CréationConvention!Modifiable27
        Set rs = qry.OpenRecordset
    'Conditions
        Select Case rs.Fields(0)
            Case "façade"
                Call MergeFacade
            Case "surplomb"
                Call MergeSurplomb
        Case Else
            MsgBox ("Pas de trame type définie pour ce type de passage : " & Chr(34) & Forms!CréationConvention!SubChercheFiche!TypePassage & Chr(34))
        End Select
    End Sub
    avec un paramètre dans la requête:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PARAMETERS PARAM_NUM Long;
    SELECT Convention.TypePassage
    FROM Convention INNER JOIN Signature ON Convention.N°Convention=Signature.N°Convention
    WHERE Signature.N°Propriétaire=PARAM_NUM;

    ça change ta manière de faire, mais de mon point de vue, c'est plus simple à gérer, je peux tester le code d'un côté, et la requête de l'autre.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Merci, vu que je débute, j'aurais pas de soucis à changer les habitudes

    Je teste de suite cette manière.

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 756
    Points : 57 605
    Points
    57 605
    Billets dans le blog
    42
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRst = odb.recordset("SELECT des_boitier,pn_boitier FROM boitier_electrique WHERE pn_boitier=" & description
    Problème de méthode non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRst = odb.OpenRecordset(…)

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Problème résolu.

    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
    Public Sub ListeBoitier_AfterUpdate()
    ListePeigne.Requery
    
    
    'Définitions
        Dim sql As String
        Dim database As DAO.database
        Dim qry As DAO.QueryDef
        Dim rs As DAO.Recordset
        'Implémentations
        Set database = Application.CurrentDb
        Set qry = database.QueryDefs("desboitiersurboitier") 'Nom de la requête
        qry.Parameters("PARAM").Value = ListeBoitier 'Nom du paramètre de la requête
        Set rs = qry.OpenRecordset
        
        MsgBox (rs.Fields(1))
    Code Sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT boitier_electrique.pn_boitier,boitier_electrique.des_boitier
    FROM boitier_electrique
    WHERE (((boitier_electrique.pn_boitier)=[PARAM]));

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRst = odb.recordset("SELECT des_boitier,pn_boitier FROM boitier_electrique WHERE pn_boitier=" & description
    Problème de méthode non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRst = odb.OpenRecordset(…)


    Oui j'avais mal écrit mais j'avais bien noté openrecordset dans mon appli.

    Pour autant çà ne marchait pas

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

Discussions similaires

  1. [SQL] Erreur de syntaxe sur requete complexe
    Par tiger33 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/11/2006, 09h54
  2. [SQL] erreur de syntaxe dans une requete
    Par einsteineuzzz dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 15/06/2006, 09h24
  3. instruction SQL : erreur de syntaxe
    Par Skizo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/05/2006, 10h54
  4. [sql] erreur de syntaxe
    Par cmoa59 dans le forum JDBC
    Réponses: 14
    Dernier message: 03/05/2005, 11h41
  5. PHP SQL =>erreur de syntaxe (operateur absent)
    Par snipes dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 14h09

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