Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
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 08/07/2008, 11h49   #1
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 154
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 154
Points : 35
Points : 35
Par défaut Requete avec un ORDER BY qui ne trie pas

Bonjour, voila j'ai la requète suivante :
Code :
1
2
3
varSQL6 = "SELECT CODE,NAME,DIM1,DIM2,DIM3,ENABLED,ENABLED2,ENABLED3,EQUIPMEN,METHOD,VALUE,LIBELLE,VALMIN,VALMAX FROM PILCTRL WHERE PILCTRL.PIL = " & code & " AND PILCTRL.GROUP = " & rst3(0) & " ORDER BY PILCTRL.ORDER ASC;"
set rst6 = BD.Execute(varSQL6, , adExecuteNoRecords)
rst6.movefirst
Lorsque j'affiche à l'écran les valeurs, elles ne sont pas triées correctement. Le champ order et un champ texte. J'ai essayé de changer le tri en le metant sur le champ libelle, ca ne change rien, il ne trie pas non plus sur le libellé. J'ai plutôt l'impression qu'il trie sur le champ Group, pourtant je n'ai spécifié ceci nul part. Ce qui est bizare c'est que le champ groupe et de type numérique, qu'il y a un lien vers une autre table, et lorsque j'affiche toutes les valeurs c'est le nom du groupe qui est trié...
Par contre si je mets un ORDER BY PILCTRL.toto il plante donc le programme exécute bien le order by (enfin je pense!!)
Quelqu'un saurait il pourquoi le tri ne se fait pas correctement?
Merci
noakiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 13h26   #2
vva
Membre éclairé
 
Avatar de vva
 
Inscription : décembre 2004
Messages : 463
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : décembre 2004
Messages : 463
Points : 394
Points : 394
il me semble que la répétition du nom de ta base dans le order n'est pas utile et pour faire un order essaye que le nom de ton champ soit présent dans le select aussi
vva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 13h30   #3
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 154
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 154
Points : 35
Points : 35
Merci d'avoir répondu, j'ai testé en rajoutant ORDER dans le select mais ca ne marche pas non plus. Je suis obligé de mettre PILCTRL.ORDER car sinon il me met un message d'erreur, comme s'il interpretait le nom de mon champ comme un order by et il me dit que j'ai une erreur de syntaxe vu qu'il manque le by
noakiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 13h35   #4
vva
Membre éclairé
 
Avatar de vva
 
Inscription : décembre 2004
Messages : 463
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : décembre 2004
Messages : 463
Points : 394
Points : 394
effectivement ORDER est un mot réservé donc erreur de code si ORDER BY ORDER

sinon désolé mais je ne vois pas pour ton problème normalement le tri doit se faire

bon courage
vva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 13h37   #5
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 154
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 154
Points : 35
Points : 35
OK ben merci quand même.
noakiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 14h39   #6
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 154
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 154
Points : 35
Points : 35
J'ai trouvé d'où venait le problème mais je ne sais toujours pas le résoudre. En fait mon code est structuré comme cela :
J'ai simplifié mon code pour que ce soit plus lisible
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
varSQL3 = "SELECT Distinct GROUP FROM PILCTRL WHERE PIL = 58918"
Set rst3 = BD.Execute(varSQL3, , adExecuteNoRecords)
rst3.moveFirst
while not rst3.EOF
  response.write(" GROUP : " & rst3(0))
  varSQL6 = "SELECT PILCTRL.ORDER FROM PILCTRL WHERE PILCTRL.PIL = 58918 AND PILCTRL.GROUP = " & rst3(0) & " ORDER BY PILCTRL.ORDER ASC;"
  set rst6 = BD.Execute(varSQL6, , adExecuteNoRecords)
  rst6.movefirst
  while not rst6.EOF 
    response.write(" ORDER : " & rst6(0))
    rst6.movenext
  wend
  rst3.movenext
wend
Et en fait il trie bien mais comme il y a la requete varSQL3 il prend dans l'ordre des groupes.
J'ai donc essayé de changer mon code en :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
varSQL3 = "SELECT DISTINCT GROUP FROM PILCTRL WHERE PIL = 58918 ORDER BY PILCTRL.ORDER"
Set rst3 = BD.Execute(varSQL3, , adExecuteNoRecords)
rst3.moveFirst
while not rst3.EOF
   response.write(" GROUP : " & rst3(0))
   varSQL6 = "SELECT PILCTRL.ORDER FROM PILCTRL WHERE PILCTRL.PIL = 58918 AND PILCTRL.GROUP = " & rst3(0) & " ORDER BY PILCTRL.ORDER ASC;"
   set rst6 = BD.Execute(varSQL6, , adExecuteNoRecords)
   rst6.movefirst
   while not rst6.EOF 
      response.write(" ORDER : " & rst6(0))
      rst6.movenext
   wend
   rst3.movenext
wend
seulement jobtient l'erreur suivante :
Citation:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] ORDER BY clause (PILCTRL.ORDER) conflicts with DISTINCT.

/saisiepils/test.asp, line 9
J'ai donc essayé ceci et la ca marche :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
varSQL3 = "SELECT GROUP FROM PILCTRL WHERE PIL = 58918 ORDER BY PILCTRL.ORDER"
Set rst3 = BD.Execute(varSQL3, , adExecuteNoRecords)
rst3.moveFirst
while not rst3.EOF
  response.write(" GROUP : " & rst3(0))
  varSQL6 = "SELECT PILCTRL.ORDER FROM PILCTRL WHERE PILCTRL.PIL = 58918 AND PILCTRL.GROUP = " & rst3(0) & " ORDER BY PILCTRL.ORDER ASC;"
  set rst6 = BD.Execute(varSQL6, , adExecuteNoRecords)
  rst6.movefirst
  while not rst6.EOF 
    response.write(" ORDER : " & rst6(0))
    rst6.movenext
  wend
  rst3.movenext
wend
Quelqu'un saurait il comment combiner un DISTINCT et un ORDER BY?
Merci
noakiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 15h42   #7
vva
Membre éclairé
 
Avatar de vva
 
Inscription : décembre 2004
Messages : 463
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : décembre 2004
Messages : 463
Points : 394
Points : 394
ben justement il me semble que c'est ma première réponse, quand tu utilises des trim, sum, distinct, le nom du champ doit se toruver dasn le select et dasn l'order comme ceci

select distinct(mon champ) from mabase where ma condition orderby mon champ asc
vva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 16h56   #8
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 154
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 154
Points : 35
Points : 35
Ben justement c'est ce que j'ai fais et ca ne fonctionne pas, il met met une erreur en disant que DISTINCT et ORDER BY sont incompatible

Citation:
varSQL3 = "SELECT DISTINCT GROUP FROM PILCTRL WHERE PIL = 58918 ORDER BY PILCTRL.ORDER"
Set rst3 = BD.Execute(varSQL3, , adExecuteNoRecords)
noakiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 20h59   #9
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 862
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 862
Points : 5 982
Points : 5 982
Salut,
  1. GROUP est un mot reservé de SQL il faut éventuellement le mettre entre crochets
  2. On ne peut pas faire de DISTINCT sur un champ ntext
  3. Ensuite, il faut construire la requete SQL dans un concepteur de vue. Si la requete passe la recopier tel quelle dans la page ASP.
A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 07h39   #10
vva
Membre éclairé
 
Avatar de vva
 
Inscription : décembre 2004
Messages : 463
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : décembre 2004
Messages : 463
Points : 394
Points : 394
essaye ceci

il faut des () pour le distinct j'ai ajouté le asc pour préciser le sens du tri

varSQL3 = "SELECT DISTINCT(GROUP) FROM PILCTRL WHERE PIL = 58918 ORDER BY PILCTRL.ORDER ASC"

tiens nous au courant
vva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 08h50   #11
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 154
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 154
Points : 35
Points : 35
vva, J'ai essayé avec ta requète, j'obtien encore la meme erreur c'est à dire :
Citation:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] ORDER BY clause (PILCTRL.ORDER) conflicts with DISTINCT.

/saisiepils/test.asp, line 9
Immobilis,
En mettant GROUP entre crochet ou en mettant PILCTRL.GROUP, j'obtien encore la meme erreur.
Comment ca on ne peut pas faire un distinct sur un champ texte?le champ GROUP est de type numérique, c'est le champ ORDER qui est de type texte, donc dans mon cas ca ne pose pas de souci je pense.
Ce que tu appels concepteur de vue, c'est quoi? Genre dans access y'a une partie requète, et faire ma requète la dedans?

Merci pour vos réponses
noakiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 08h55   #12
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 154
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 154
Points : 35
Points : 35
Je viens de tester sous Access, si je mets :

Code :
1
2
3
SELECT DISTINCT GROUP
FROM PILCTRL
WHERE PILCTRL.PIL=58918;
Aucun souci il trie correctement mais si je rajoute à la fin
J'ai le meme message :
Citation:
ORDER BY close (PILCTRL.ORDER) conflicts whith distinct
noakiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 09h07   #13
vva
Membre éclairé
 
Avatar de vva
 
Inscription : décembre 2004
Messages : 463
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : décembre 2004
Messages : 463
Points : 394
Points : 394
honnêtement essaye de modifier le nom de tes champs car order et group sont réservés donc sujet à confusion pour l'exécution de ta requête et pour la lecture
vva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 09h13   #14
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 154
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 154
Points : 35
Points : 35
Oui je comprend seulement j'utilise une base de données qui existe déjà, ce n'est pas moi qui l'ai créée et c'est vrai qu'elle est assez mal conçue, seulement je ne pas pas modifier les entêtes de colonne, de plus j'ai essayé avec d'autres champs exemple :
Code :
1
2
varSQL3 = "SELECT DISTINCT[PILCTRL.NAME] FROM PILCTRL WHERE PIL = 58918 ORDER BY PILCTRL.LIBELLE ASC"
Set rst3 = BD.Execute(varSQL3, , adExecuteNoRecords)
et j'obtien exactement la meme erreur, je pense que le problème c'est qu'il doit être impossible de combiner la clause DISTINCT et la clause ORDER BY...
noakiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 09h31   #15
vva
Membre éclairé
 
Avatar de vva
 
Inscription : décembre 2004
Messages : 463
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : décembre 2004
Messages : 463
Points : 394
Points : 394
regardes je viens de faire la même chose de mon côté
SELECT DISTINCT(SBUSRCRE), SBMNTECO FROM INTF1_COR.SE0000F GROUP BY SBUSRCRE, SBMNTECO ORDER BY SBUSRCRE ASC, SBMNTECO DESC

et j'obtiens une liste groupée par utilisateur avec le montant pour chacun d'eux en ordre décroissant essayes de ton côté
vva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 09h47   #16
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 154
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 154
Points : 35
Points : 35
Je viens d'essayer ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
varSQL3 = "SELECT DISTINCT(PILCTRL.GROUP), PILCTRL.ORDER FROM PILCTRL WHERE PIL = 58918 GROUP BY PILCTRL.GROUP, PILCTRL.ORDER ORDER BY PILCTRL.ORDER ASC"
Set rst3 = BD.Execute(varSQL3, , adExecuteNoRecords)
rst3.moveFirst
while not rst3.EOF
   response.write(" GROUP : " & rst3(0))
   varSQL6 = "SELECT PILCTRL.ORDER FROM PILCTRL WHERE PILCTRL.PIL = 58918 AND PILCTRL.GROUP = " & rst3(0) & " ORDER BY PILCTRL.ORDER ASC;"
   set rst6 = BD.Execute(varSQL6, , adExecuteNoRecords)
   rst6.movefirst
   while not rst6.EOF 
      response.write(" ORDER : " & rst6(0))
      rst6.movenext
   wend
   rst3.movenext
wend
et j'obtien le résultat suivant :
Citation:
GROUP : 254892 ORDER : 10 GROUP : 254891 ORDER : 20 GROUP : 254898 ORDER : 40 ORDER : 45 GROUP : 254898 ORDER : 40 ORDER : 45 GROUP : 254895 ORDER : 70 GROUP : 254896 ORDER : 72 GROUP : 254897 ORDER : 75 GROUP : 254893 ORDER : 80
Ce qui n'est pas correcte car il écrit deux fois le groupe 254898 avec les deux ORDER dedans il faudrait qu'ils s'écrivent une seule fois..
noakiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 09h53   #17
vva
Membre éclairé
 
Avatar de vva
 
Inscription : décembre 2004
Messages : 463
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : décembre 2004
Messages : 463
Points : 394
Points : 394
désolé mais je ne comprends pas bien pourquoi tu as besoin de ces deux SQL imbriqués, ne peux tu pas les fusionner ? ton problème vient peut être de là
vva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 11h14   #18
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 154
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 154
Points : 35
Points : 35
Heu ouè mais ca me demande un travail énorme car mon code et long (en meme temps je suis la pour ca). Par contre si je le fesais concrétement ca changerait quoi à mon problème?
Puisque le problème viens de la première requete si je fusionne les deux le problème sera toujours la..
noakiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 11h45   #19
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 154
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 154
Points : 35
Points : 35
En refaisant des test, j'ai trouvé l'erreur, tu avais raison depuis le début c'est à cause du ORDER que tout plante!!
En mettant :
Code :
varSQL3 = "SELECT DISTINCT(PILCTRL.GROUP), [PILCTRL.ORDER] FROM PILCTRL WHERE PIL = 58918 ORDER BY [PILCTRL.ORDER] ASC"
Il m'affiche deux fois les groupes qui ont deux lignes et en mettant :
Code :
varSQL3 = "SELECT DISTINCT(PILCTRL.GROUP), PILCTRL.LIBELLE FROM PILCTRL WHERE PIL = 58918 ORDER BY PILCTRL.LIBELLE ASC"
Il m'affiche correctement.
Donc voilà l'erreur est isolé maintenant comment la résoudre : deux solutions
- Modifier le nom du champ (étant donné que plusieurs applications tournent sur cette base il faudrait changer tous les programmes, je ne pense pas que ce soit faisable)
- Au lieu d'utiliser le nom du champ utiliser un numéro. Par exemple dans une requete si je fais un
Code :
SELECT truc, machin FROM...
si je fais rst(1) il va y avoir l'info de machin, cela est il possible dans le select? Genre écrire
Code :
select field(0), field(3) FROM ...
Bien sur il y aurait le cas mais je n'ai pas besoin de tous selectionner.
noakiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 11h58   #20
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 154
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2008
Messages : 154
Points : 35
Points : 35
J'ai vu dans les tuto de SQL qu'il fallait entouré de double quote, comme ma requète est déja entouré de double quote, si j'en remet erreur, j'ai essayé avec des simples quotes ca ne passe pas, les crochets comme me l'avait conseillé immobilis non plus
noakiss 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 04h12.


 
 
 
 
Partenaires

Hébergement Web