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 :

Problème de syntaxe sur ma première requête


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif
    Avatar de Golard
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 281
    Points : 289
    Points
    289
    Par défaut Problème de syntaxe sur ma première requête
    Bonjour,

    Je reprends une application Access dans un environnement Access 2007 (développée initialement en Access 2000).

    L'ensemble de l'application a été développée "graphiquement" et il n'y a quasiment pas de code VBA.

    Je souhaite lancer ma première requête VBA et je n'arrive pas à trouver l'erreur de syntaxe...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim strRequete As String
     
    strRequete = "UPDATE Table_A " _
                & "INNER JOIN Table_B INNER JOIN (Table_C INNER JOIN Table_A ON Table_C.Champs_ID = Table_A.Champs_ID) ON Table_B.Champs_Type = Table_A.Champs_Type " _
                & "SET Champs_Statut = \'Réalisée\' " _
                & "WHERE ((Table_A.Champs_ID)=[Formulaires]![Formulaire_Ident]![ZoneListeDeroulante_Nom]) AND ((Table_A.Champs_Type) Like \'*\' & [Formulaires]![Formulaire_Ident]![SousFormulaire_Action].[Form]![ZoneListeDeroulante_Type] & \'*\');"
     
    DoCmd.SetWarnings False
    DoCmd.RunSQL (strRequete)
    DoCmd.SetWarnings True
    Pouvez-vous m'aidez ?

    [EDIT: Désolé, j'aurais peut-être du poser la question dans VBA Access ? Merci de déplacer le post si c'est le cas!]

    Développement VBNet sous Visual Studio Community 2013 (environnement Windows 10)

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Re-Bonjour,

    Comme tu es en VBA, il faut "sortir" tes paramètres de l'expression SQL (tous les contrôles de ton formulaire).
    De plus, je n'ai pas compris les \' que tu mets ?
    Tu devrais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim strRequete As String
     
    strRequete = "UPDATE Table_A " _
                & "INNER JOIN Table_B INNER JOIN (Table_C INNER JOIN Table_A ON Table_C.Champs_ID = Table_A.Champs_ID) ON Table_B.Champs_Type = Table_A.Champs_Type " _
                & "SET Champs_Statut = 'Réalisée' " _
                & "WHERE Table_A.Champs_ID=" & [Formulaires]![Formulaire_Ident]![ZoneListeDeroulante_Nom] & " AND ((Table_A.Champs_Type) Like '* " & [Formulaires]![Formulaire_Ident]![SousFormulaire_Action].[Form]![ZoneListeDeroulante_Type] & "*'"
     
    DoCmd.SetWarnings False
    DoCmd.RunSQL (strRequete)
    DoCmd.SetWarnings True
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Bonjour,

    madefemere a raison, c'est plus propre de sortir les références à tes formulaires de ta syntaxe SQL et de recréer ta chaine SQL avec le contenu de tes zones. Cependant tu peux aussi les laisser et cela marche aussi bien.

    Attention toutefois au pièges a éviter dans les deux cas .

    Première syntaxe, en laissant les références dans la syntaxe SQL, tu dois modifier [Formulaires] par le mot clé équivalent en anglais [Forms] sinon SQL ne reconnaitra pas la collection equivalente.
    Tu devras donc avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim strRequete As String
     
    strRequete = "UPDATE Table_A " _
                & "INNER JOIN Table_B INNER JOIN (Table_C INNER JOIN Table_A ON Table_C.Champs_ID = Table_A.Champs_ID) ON Table_B.Champs_Type = Table_A.Champs_Type " _
                & "SET Champs_Statut = 'Réalisée' " _
                & "WHERE Table_A.Champs_ID=[Forms]![Formulaire_Ident]![ZoneListeDeroulante_Nom] AND ((Table_A.Champs_Type) Like '*' & [Forms]![Formulaire_Ident]![SousFormulaire_Action].[Form]![ZoneListeDeroulante_Type] & '*' '"
     
    DoCmd.SetWarnings False
    DoCmd.RunSQL (strRequete)
    DoCmd.SetWarnings True
    De plus je te conseille a la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DoCmd.SetWarnings False
    DoCmd.RunSQL (strRequete)
    DoCmd.SetWarnings True
    [/CODE]

    D'utiliser seulement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Currentdb.execute strRequete
    Qui ne met pas de message et évite de modifier la valeur de SetWarnings

    Pour la deuxième syntaxe comme le propose madefemere, il faut bien penser à rajouter les cotes simple si le contenu de ton champ de ton formulaire est du texte
    Mais ici c'est un ID et donc du numérique je suppose
    @+


    Pensez au tag

  4. #4
    Membre actif
    Avatar de Golard
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 281
    Points : 289
    Points
    289
    Par défaut
    Merci à tous les deux pour vos conseils

    J'ai finalement abouti à:
    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
    Const cstStatutRealise As String = "Réalisée"
    Const cstStatutAFaire As String = "En cours"
    Dim strRequete As String
    Dim strType As String
     
    If IsNull(Me.ZoneListeDeroulante_Type) Then
        strType = "*"
    Else
        strType = Me.ZoneListeDeroulante_Type
    End If
     
    strRequete = "UPDATE Table_A" _
                & " SET Table_A.Champs_Statut='" & cstStatutRealise & "'" _
                & " WHERE (Table_A.Champs_Statut='" & cstStatutAFaire & "')" _
                & " AND (Table_A.Champs_Type Like '" & strType & "')" _
                & " AND (Table_A.Champs_ID=" & Formulaire_Ident.ZoneListeDeroulante_Nom & ")" _
                & " WITH OWNERACCESS OPTION;"
    Champs_ID est numérique donc pas de simple quotes.
    Champs_Type est de type numérique, mais je souhaite dans certain cas utiliser "*", donc j'ai maintenu le Like avec les simples quotes. La syntaxe originale était plutôt " AND (Table_A.Champs_Type Like '*" & strType & "*')", mais je ne vois pas trop l'intérêt...
    Par ailleurs, j'ai retiré les INNER JOIN (issus du SELECT généré par le générateur de requête Access) puisque tous les champs que j'ai à tester sont présents dans Table_A et que le champs à modifier n'est présent QUE dans Table_A. Je ne crois pas faire de bêtise.

    J'ai bien noté la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute strRequete
    que je vais préférer au RunSQL pour les raisons citées par Didier.

    Vous noterez que j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " WITH OWNERACCESS OPTION;"
    à la fin de la requête, pour d'accorder à l'utilisateur qui exécute cette requête les mêmes autorisations qu'au propriétaire de la requête (ref: tuto Le Langage SQL appliqué à Access par Alexandre le Grand)

    Est-ce nécessaire ?

    Je flague "Résolu", mais toute précision sera le bienvenu

    Développement VBNet sous Visual Studio Community 2013 (environnement Windows 10)

  5. #5
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Bonsoir,

    Vous noterez que j'ai ajouté
    " WITH OWNERACCESS OPTION;"
    à la fin de la requête, pour d'accorder à l'utilisateur qui exécute cette requête les mêmes autorisations qu'au propriétaire de la requête (ref: tuto Le Langage SQL appliqué à Access par Alexandre le Grand)

    Est-ce nécessaire ?
    Pas à ma conaissance.
    Je ne l'ai jamais utilisé.
    Mais je n'ai pas de recul pour savoir dans quel cas cela pourrait être util ou pas
    @+


    Pensez au tag

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/10/2008, 13h42
  2. Réponses: 7
    Dernier message: 24/06/2008, 16h31
  3. Problème de syntaxe sur UPDATE
    Par pgu64 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/04/2008, 19h26
  4. [MySQL] problème de syntaxe sur la récupération des données
    Par soshin dans le forum PHP & Base de données
    Réponses: 28
    Dernier message: 23/11/2006, 12h34
  5. problème de syntaxe delphi pour une requête sql
    Par socooooool dans le forum Bases de données
    Réponses: 12
    Dernier message: 07/07/2006, 16h53

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