Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2011, 18h23   #1
Membre régulier
 
Inscription : janvier 2011
Messages : 308
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 308
Points : 76
Points : 76
Par défaut Pb syntaxe requête une fois en vba

Bonjour à tous,

Suivant les conseils des pros de ce forum j'ai utilisé le mode SQL d'access pour faire une requête action, mais quand je l'insère en VBA la syntaxe est incorrecte :

Code :
DoCmd.RunSQL "UPDATE [Familles Produits / Prestations] SET WHERE ((([Familles Produits / Prestations].IdFamilleProduitPrestation)=[Formulaires]![Familles Produits / Prestations]![IdFamilleProduitPrestation]));"
D'autre part, peut on scinder la dite requête sur plusieurs lignes en VBA et si oui comment ?

Merci à tous
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 18h38   #2
Modérateur
 
Homme Daniel
Inscription : juillet 2006
Messages : 1 220
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Âge : 67
Localisation : France

Informations professionnelles :
Secteur : Services à domicile

Informations forums :
Inscription : juillet 2006
Messages : 1 220
Points : 1 631
Points : 1 631
bonsoir,
un peu de lecture :
http://ledzeppii.developpez.com/instrsqlvb/
LE VIEUX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 19h05   #3
Membre régulier
 
Inscription : janvier 2011
Messages : 308
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 308
Points : 76
Points : 76
Citation:
Envoyé par LE VIEUX Voir le message
bonsoir,
un peu de lecture :
http://ledzeppii.developpez.com/instrsqlvb/
merci pour la lecture mais j'ai besoin de l' expérience d'un pro qui puisse m'aiguiller car même en lisant je ferai des erreurs, pour l'instant VBA m'accepte :

Code :
1
2
DoCmd.RunSQL "UPDATE [Familles Produits / Prestations] SET " & _
"WHERE ((([Familles Produits / Prestations].IdFamilleProduitPrestation)=[Formulaires]![Familles Produits / Prestations]![IdFamilleProduitPrestation]));"
- Mais à l'éxécution "Erreur de syntaxe...", je pense qu'il faut transformer l'expression du critère mais comment ?

- Faut il garder le "SET" aussi ?

Merci
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 20h19   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
La méthode la moins frustrantre avec le SQL de Access c'est d'utiliser l'éditeur de requête. D'y composer ta requête via les icônes et le glisser-déplacer puis de basculer vers l'affichage en SQL.

Tu vas ainsi pouvoir voir ce que Access attend comme syntaxe et l'adapter à ton besoin.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 20h29   #5
Membre régulier
 
Inscription : janvier 2011
Messages : 308
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 308
Points : 76
Points : 76
Citation:
Envoyé par marot_r Voir le message
La méthode la moins frustrantre avec le SQL de Access c'est d'utiliser l'éditeur de requête. D'y composer ta requête via les icônes et le glisser-déplacer puis de basculer vers l'affichage en SQL.

Tu vas ainsi pouvoir voir ce que Access attend comme syntaxe et l'adapter à ton besoin.

A+
merci pour ta réponse mais c'est ce que j'ai exactement fait, mais une fois en VBA la syntaxe n'est plus correcte !!!
Donc j'en suis tjs au même point !
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 20h31   #6
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Peux-tu poster le SQL généré par Access ?

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 20h33   #7
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

marot_r a posté plus vite que moi

il s'agit d'une erreur de syntaxe SQL.
Derrière SET il manque une ou plusieurs affectations.
Liens sur le SQL d'Access : Un moyen simple pour avoir une idée du SQL dont on a besoin :
Créer une requête dans Access avec des valeurs littérales.
Passer en mode affichage SQL.
tu obtiens ton SQL.
A toi ensuite de le transposer en VBA, et de faire en sorte que les valeurs littérales puissent être remplacées par des éléments variables.

Autre chose : SQL utilise une notation anglo-saxonne.
[Formulaires] devient [Forms]
Comme devient Like
VraiFaux devient IIf
...
La liste est très longue.
Comme je l'ai dis plus haut, le mieux est de créer la requête avec Access et de passer à l'affichage SQL.
Tout sera traduit comme il faut.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 21h36   #8
Membre régulier
 
Inscription : janvier 2011
Messages : 308
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 308
Points : 76
Points : 76
Citation:
Envoyé par LedZeppII Voir le message
Bonsoir,

marot_r a posté plus vite que moi

il s'agit d'une erreur de syntaxe SQL.
Derrière SET il manque une ou plusieurs affectations.
Liens sur le SQL d'Access : Un moyen simple pour avoir une idée du SQL dont on a besoin :
Créer une requête dans Access avec des valeurs littérales.
Passer en mode affichage SQL.
tu obtiens ton SQL.
A toi ensuite de le transposer en VBA, et de faire en sorte que les valeurs littérales puissent être remplacées par des éléments variables.

Autre chose : SQL utilise une notation anglo-saxonne.
[Formulaires] devient [Forms]
Comme devient Like
VraiFaux devient IIf
...
La liste est très longue.
Comme je l'ai dis plus haut, le mieux est de créer la requête avec Access et de passer à l'affichage SQL.
Tout sera traduit comme il faut.

A+
Bonsoir les pros,

On dirait que vous avez mal lu ce que j'ai écrit plus haut :

Je vous ai mis le SQL d' Access dans mon premier message, or évidement il n'est pas accepté tel quel ...

Donc comment le mettre en forme ?
J'ai besoin d'un coup de pouce pour ne pas y passer encore des heures !

J'ai mis un exemple simple avec une seule condition ...

Merci
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 21h41   #9
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Peux-tu poster le SQL générer par Access pour la requête qui te pose le problème ? S'il elle contient 3 conditions, fait une requête avec 3 conditions. Une fois que j'aurais le SQL je vais pouvoir te le 'convertir' en syntaxe VBA valide.

Le SQL dans le code c'est TRÈS frustrant mais on fini par y arriver.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 23h09   #10
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Citation:
Envoyé par clickandgo Voir le message
Bonsoir les pros,

On dirait que vous avez mal lu ce que j'ai écrit plus haut :

Je vous ai mis le SQL d' Access dans mon premier message, or évidement il n'est pas accepté tel quel ...
Ta requête n'est pas complète.
Si tu essaie de l'exécuter (je dis bien exécuter, pas afficher), Access te dira qu'il doit y avoir au moins un champ de destination.
Tu n'a rien mis dans la ligne "mise à jour".

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 00h37   #11
Membre régulier
 
Inscription : janvier 2011
Messages : 308
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 308
Points : 76
Points : 76
Citation:
Envoyé par LedZeppII Voir le message
Ta requête n'est pas complète.
Si tu essaie de l'exécuter (je dis bien exécuter, pas afficher), Access te dira qu'il doit y avoir au moins un champ de destination.
Tu n'a rien mis dans la ligne "mise à jour".

A+
Merci d'avoir répondu,

Le SQL était malheuresement tronqué dans mon premier message, le voici :

UPDATE [Familles Produits / Prestations] SET [Familles Produits / Prestations].Famille = [Formulaires]![Familles Produits / Prestations]![Famille], [Familles Produits / Prestations].Type = [Formulaires]![Familles Produits / Prestations]![Type], [Familles Produits / Prestations].Description = [Formulaires]![Familles Produits / Prestations]![Description]
WHERE ((([Familles Produits / Prestations].IdFamilleProduitPrestation)=[Formulaires]![Familles Produits / Prestations]![IdFamilleProduitPrestation]));

Venant tel quel d' access ...

Ce que je recherche c'est qu'il m'actualise 3 champs d'un formulaire indépendant (Famille,type,description) avec comme critère la référence à la clé principale qui devrait permettre de distinguer l'enregistrement.
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h36   #12
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Code :
1
2
3
4
5
6
7
8
9
dim sql as string
sql = "UPDATE [Familles Produits / Prestations] SET [Familles Produits / Prestations].Famille = "
sql = sql & [Forms]![Familles Produits / Prestations]![Famille]
sql = sql & ", [Familles Produits / Prestations].Type = "
sql = sql & [Forms]![Familles Produits / Prestations]![Type]
sql = sql & ", [Familles Produits / Prestations].Description = """
sql = sql & [Forms]![Familles Produits / Prestations]![Description] & """"
sql = sql & "WHERE ((([Familles Produits / Prestations].IdFamilleProduitPrestation)= "
sql = sql & [Forms]![Familles Produits / Prestations]![IdFamilleProduitPrestation] & "));"
Si Type est du texte il faut mettre

Code :
1
2
3
sql = sql & ", [Familles Produits / Prestations].Type = """
sql = sql & [Forms]![Familles Produits / Prestations]![Type]
sql = sql & """, [Familles Produits / Prestations].Description = """
J'ai découpé à la hache mais on pourrait organiser le code pour que chaque élément logique soit sur une ligne, cela rendrait la lecture et la modification plus facile.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 20h25   #13
Membre régulier
 
Inscription : janvier 2011
Messages : 308
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 308
Points : 76
Points : 76
Citation:
Envoyé par marot_r Voir le message
Code :
1
2
3
4
5
6
7
8
9
dim sql as string
sql = "UPDATE [Familles Produits / Prestations] SET [Familles Produits / Prestations].Famille = "
sql = sql & [Forms]![Familles Produits / Prestations]![Famille]
sql = sql & ", [Familles Produits / Prestations].Type = "
sql = sql & [Forms]![Familles Produits / Prestations]![Type]
sql = sql & ", [Familles Produits / Prestations].Description = """
sql = sql & [Forms]![Familles Produits / Prestations]![Description] & """"
sql = sql & "WHERE ((([Familles Produits / Prestations].IdFamilleProduitPrestation)= "
sql = sql & [Forms]![Familles Produits / Prestations]![IdFamilleProduitPrestation] & "));"
Si Type est du texte il faut mettre

Code :
1
2
3
sql = sql & ", [Familles Produits / Prestations].Type = """
sql = sql & [Forms]![Familles Produits / Prestations]![Type]
sql = sql & """, [Familles Produits / Prestations].Description = """
J'ai découpé à la hache mais on pourrait organiser le code pour que chaque élément logique soit sur une ligne, cela rendrait la lecture et la modification plus facile.

A+
Merci beaucoup pour tout ce travail

Il me reste une question, comment déclencher la requête ? On ne peut plus utiliser "RunSQL" ?

Merci
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 21h54   #14
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Tu mets simplement En le construisant dans une chaîne de caractère à part, il est plus facile d'examiner la syntaxe, et éventuellement de l'altérer, que directement dans le RunSQL mais le résultat est le même.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 14h21   #15
Membre régulier
 
Inscription : janvier 2011
Messages : 308
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 308
Points : 76
Points : 76
Citation:
Envoyé par marot_r Voir le message
Tu mets simplement En le construisant dans une chaîne de caractère à part, il est plus facile d'examiner la syntaxe, et éventuellement de l'altérer, que directement dans le RunSQL mais le résultat est le même.

A+
Bonjour à tous,

Je viens de me rendre compte que la version 2010 d' access accepte la syntaxe des requêtes générées tel quel :

Il m'a suffit de mettre dans le code " & _" pour sauter une ligne à chaque fois et rajouter un guillemet à chaque début de ligne et le tour était joué !!!

Il serait peut être bon d'en informer les autres utilisateurs qui continuent à appliquer l'ancienne méthode ...

En tous cas merci beaucoup pour votre aide, chapeau !
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 15h11   #16
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
ce n'est pas une nouveauté de 2010, cela existe depuis au moins la version 2.0 :o). Tu peux le faire avec n'importe quelle instruction.

Par exemple :

Il y a une contraite sur le nombre de _ qu'on peut utiliser. Je crois que c'est une dizaine.

Personnellement je trouve aussi que cela rend plus dificille à lire et plus difficile à débugger. Le seul endroit ou je m'en sert c'est pour les signatures de fonction qui comportent beaucoup de paramêtres.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 14h42   #17
Membre régulier
 
Inscription : janvier 2011
Messages : 308
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 308
Points : 76
Points : 76
Citation:
Envoyé par marot_r Voir le message
ce n'est pas une nouveauté de 2010, cela existe depuis au moins la version 2.0 :o). Tu peux le faire avec n'importe quelle instruction.

Par exemple :

Il y a une contraite sur le nombre de _ qu'on peut utiliser. Je crois que c'est une dizaine.

Personnellement je trouve aussi que cela rend plus dificille à lire et plus difficile à débugger. Le seul endroit ou je m'en sert c'est pour les signatures de fonction qui comportent beaucoup de paramêtres.

A+
Oui mais ce qui est chouette c'est qu'on gagne beaucoup de temps et qu'il n'y avait pas besoin de se compliquer tant la vie ! (voir les réponses de ce post ...)
clickandgo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h51.


 
 
 
 
Partenaires

Hébergement Web