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 24/05/2011, 14h16   #1
Membre du Club
 
Homme hadrien
Apprenti Ingénieur
Inscription : mars 2011
Messages : 86
Détails du profil
Informations personnelles :
Nom : Homme hadrien
Localisation : France

Informations professionnelles :
Activité : Apprenti Ingénieur
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : mars 2011
Messages : 86
Points : 56
Points : 56
Par défaut Erreur synthaxe ORDER BY SUBSTRING

Bonjour à tous,
J'ai un problème avec une requête qui doit me trier des "string" avec l'avant dernier caractère (lettre) et le dernier (nombre). Genre

110 AB 1 A2
110 AB 1 C1
110 AB 1 A1
110 AB 1 F1

doit devenir

110 AB 1 A1
110 AB 1 A2
110 AB 1 C1
110 AB 1 F1

Et encore, je ne veux même pas qu'il soit classé par lettre, mais que les code avec la même lettre soient côte à côte. Donc même ceci serai bien :

110 AB 1 C1
110 AB 1 A1
110 AB 1 A2
110 AB 1 F1

On m'a conseillé ce code :

Code :
CurrentDb.CreateQueryDef "strQRYd", "SELECT * FROM tblPrlv WHERE ([fldRefDosEss_tblPrlv]= " & Chr(34) & valDos & Chr(34) & ") ORDER BY substring ([fldRefDosEss_tblPrlv], from 10 to 10);"
Mais il me renvoi :Message erreur 3075, "Erreur de synthaxe, opérateur absent dans l'expression " substring ([fldRefDosEss_tblPrlv], from 10 to 10);".

Merci pour votre aide

Hadrien
FtF Nemesis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 15h31   #2
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 805
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 805
Points : 3 003
Points : 3 003
Bonjour,

Et avec la fonction Mid() à la place de substring() ?
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 16h15   #3
Membre du Club
 
Homme hadrien
Apprenti Ingénieur
Inscription : mars 2011
Messages : 86
Détails du profil
Informations personnelles :
Nom : Homme hadrien
Localisation : France

Informations professionnelles :
Activité : Apprenti Ingénieur
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : mars 2011
Messages : 86
Points : 56
Points : 56
Non, ça ne marche pas. Je pense que SQL ne reconnait pas Mid().
FtF Nemesis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 16h33   #4
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 805
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 805
Points : 3 003
Points : 3 003
Re,

Peux-tu nous montrer ce que tu as essayé ?
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 16h39   #5
Membre du Club
 
Homme hadrien
Apprenti Ingénieur
Inscription : mars 2011
Messages : 86
Détails du profil
Informations personnelles :
Nom : Homme hadrien
Localisation : France

Informations professionnelles :
Activité : Apprenti Ingénieur
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : mars 2011
Messages : 86
Points : 56
Points : 56
Voilà, les code en vert ne fonctionnent pas :

Code :
1
2
3
4
5
6
CurrentDb.CreateQueryDef "strQRYd", "SELECT * FROM tblPrlv WHERE ([fldRefDosEss_tblPrlv]= " & Chr(34) & valDos & Chr(34) & ");"
'CurrentDb.CreateQueryDef "strQRYd", "SELECT * FROM tblPrlv WHERE ([fldRefDosEss_tblPrlv]= " & Chr(34) & valDos & Chr(34) & ") ORDER BY SUBSTRING(fldRefDosEss_tblPrlv from 10 to 10); "
'CurrentDb.CreateQueryDef "strQRYd", "SELECT * FROM tblPrlv WHERE ([fldRefDosEss_tblPrlv]= " & Chr(34) & valDos & Chr(34) & ") ORDER BY MID(fldRefDosEss_tblPrlv,9,2); "
 
Set adoQryTri = CurrentDb.QueryDefs("strQRYd")
Set adoFindAll = adoQryTri.OpenRecordset
Merci pour ton aide, la syntaxe du lien SQL/VBA est vraiment insupportable.
FtF Nemesis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 19h59   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour à tous,

Citation:
Envoyé par FtF Nemesis
.../... la syntaxe du lien SQL/VBA est vraiment insupportable.
==> Suggestion :
  1. travailler avec l'assistant pour mettre la requête au point (sans variable) ;
  2. créer un champ calculé pour isoler ton critère de tri ;
  3. récupérer le code généré (mode SQL) dans VBA.
Quelques pistes (avec l'assistant) :
Code :
1
2
3
4
5
string          Expr1 : ExtracChaîne([string];10;1)
110 AB 1 A2     A
110 AB 1 C1     C
110 AB 1 A1     A
110 AB 1 F1     F
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/05/2011, 09h58   #7
Membre du Club
 
Homme hadrien
Apprenti Ingénieur
Inscription : mars 2011
Messages : 86
Détails du profil
Informations personnelles :
Nom : Homme hadrien
Localisation : France

Informations professionnelles :
Activité : Apprenti Ingénieur
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : mars 2011
Messages : 86
Points : 56
Points : 56
Merci pour votre aide,

Je viens d'essayer Mid ou extracChaîne :

Code :
1
2
3
4
5
CurrentDb.CreateQueryDef "strQRYd", "SELECT * FROM tblPrlv WHERE ([fldRefDosEss_tblPrlv]= " & Chr(34) & valDos & Chr(34) & ") ORDER BY ExtracChaîne(fldRefDosEss_tblPrlv;9;1);"
 
CurrentDb.CreateQueryDef "strQRYd", "SELECT * FROM tblPrlv WHERE ([fldRefDosEss_tblPrlv]= " & Chr(34) & valDos & Chr(34) & ") ORDER BY Mid(fldRefDosEss_tblPrlv;9;1);"
 
CurrentDb.CreateQueryDef "strQRYd", "SELECT * FROM tblPrlv WHERE ([fldRefDosEss_tblPrlv]= " & Chr(34) & valDos & Chr(34) & ") ORDER BY Expr1 : ExtracChaîne([fldRefDosEss_tblPrlv];9;1);"
Les trois ne fonctionnent pas. Le message d'erreur m'indique "erreur de synthaxe, opérateur manquant" dans la partie après ORDER BY. Il doit prendre le champ fldRefDosEss_tblPrlv pour une variable.
FtF Nemesis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 10h01   #8
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour FtF Nemesis,

As-tu
Citation:
Envoyé par Richard_35
  1. travailler avec l'assistant pour mettre la requête au point (sans variable) ;
  2. créer un champ calculé pour isoler ton critère de tri ;
?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 10h05   #9
Membre du Club
 
Homme hadrien
Apprenti Ingénieur
Inscription : mars 2011
Messages : 86
Détails du profil
Informations personnelles :
Nom : Homme hadrien
Localisation : France

Informations professionnelles :
Activité : Apprenti Ingénieur
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : mars 2011
Messages : 86
Points : 56
Points : 56
J'ai aussi essayé avec le nom de la table devant le champ:
Code :
CurrentDb.CreateQueryDef "strQRYd", "SELECT * FROM tblPrlv WHERE ([fldRefDosEss_tblPrlv]= " & Chr(34) & valDos & Chr(34) & ") ORDER BY ExtracChaîne(tblPrlv.fldRefDosEss_tblPrlv;9;1);"
en vain
FtF Nemesis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 10h06   #10
Membre du Club
 
Homme hadrien
Apprenti Ingénieur
Inscription : mars 2011
Messages : 86
Détails du profil
Informations personnelles :
Nom : Homme hadrien
Localisation : France

Informations professionnelles :
Activité : Apprenti Ingénieur
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : mars 2011
Messages : 86
Points : 56
Points : 56
Pardon j'avais pas vu le message, je le fait et je reviens vers toi
FtF Nemesis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 10h16   #11
Membre du Club
 
Homme hadrien
Apprenti Ingénieur
Inscription : mars 2011
Messages : 86
Détails du profil
Informations personnelles :
Nom : Homme hadrien
Localisation : France

Informations professionnelles :
Activité : Apprenti Ingénieur
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : mars 2011
Messages : 86
Points : 56
Points : 56
J'ai fait comme tu m'as dis, j'ai ajouté un champ supplémentaire avec la lettre du code dans ma table, et je tri par rapport à celui-ci et un autre (le numéro) qui existait déjà:

Code :
CurrentDb.CreateQueryDef "strQRYd", "SELECT * FROM tblPrlv WHERE ([fldRefDosEss_tblPrlv]= " & Chr(34) & valDos & Chr(34) & ") ORDER BY fldCodProd_tblPrlv,fldNumPrlv_tblPrlv;"
Merci beaucoup à vous pour votre aide

Hadrien
FtF Nemesis 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 14h14.


 
 
 
 
Partenaires

Hébergement Web