[SQL] => Elle me soûle cette requête qui veut pô marcher !!!!!!

=> Elle me soûle cette requête qui veut pô marcher !!!!!! [SQL] - Programmation

Marsh Posté le 27-04-2001 à 12:13:22    

salut à tous,
 
voici ma requête qui foire, Access me retourne des jolies erreurs (voir ci-dessous) :
 
UPDATE Dossiers  
SET Dossiers.NumAR =
     (SELECT NumP  
      FROM Parametres  
      WHERE CodeParametre = 'NUMAR')  // retourne 631
FROM (SELECT d.NumDossier  
      FROM Dossiers d, Clients c  
      WHERE d.CodeClient = c.CodeClient  
      AND d.EditionAR <> 0  
      AND ISNULL(d.NumAR,0) = 0) AR   // retourne une table d'environ 200 enregistrements avec le champ NumDossier
WHERE Dossiers.NumDossier = AR.NumDossier
 
J'ai testé les 2 sous-requêtes séparément, aucun problème.
 
Voici les jolis messages retournés :
 
Une fenêtre d'erreur ODBC, en premier (l'erreur ne se situe pas là, c'est parfaitement configuré)
 
Ensuite, une deuxième fenêtre :
http://pentiore2000.free.fr/MessErr.JPG
 
Comme il est dit dans le message, on a plusieurs valeurs retournées dans la table AR, mais c'est obligé....
 
Vous avez une ch'tite solution ?!?
Merci
@+


---------------
Une Porsche sinon rien.
Reply

Marsh Posté le 27-04-2001 à 12:13:22   

Reply

Marsh Posté le 27-04-2001 à 12:25:15    

Je sais pas si c'est moi, mais je ne comprends pas la structure de ta requète :
Pour moi, un UPDATE c'est de la forme :  
UPDATE Table
SET Affectations
WHERE Condition
 
Dans la tienne, je vois :
UPDATE Table
SET Affectation
FROM ? ? ? ?
WHERE Condition
 
C'est quoi ce FROM ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 27-04-2001 à 12:54:22    

Dac avec Mara's dad

Reply

Marsh Posté le 27-04-2001 à 13:41:44    

juste un ptit coucou de compassion :)
 
Car moi aussi j'ai galéré pdt plus d deux semaines sur une requete (un select enplus :D )
 
Et j'ai posté sur le forum ki ma bie aidé.. MERCI a tous ceux ki mont répondu :jap:
 
P.S:  Met ton (select .. ) AR dans ton premier select (dans le from) et la condition Dossiers.NumDossier = AR.NumDossier dans le where du premier select aussi... ca devrai marcher. enfin jespere :D

 

[edit]--Message édité par wouatouwouatou--[/edit]


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 27-04-2001 à 14:04:55    

wouatouwouatou > merci je vais essayer....
 
Mara's Dad > j'ai regardé dans l'aide de SQL Server 2000, mais j'ai pas tout compris : en gros, c'est pour accéder à des informations dans des tables et lui donner comme critère (à la requête)


---------------
Une Porsche sinon rien.
Reply

Marsh Posté le 27-04-2001 à 14:11:32    

Oups. dsl mais javais pas bien regardé ton update :D
Essaie ca.. j'suis pas sur ke ca fonctionne mais ca devrai etre mieux :D:D
 

Code :
  1. UPDATE Dossiers 
  2. SET Dossiers.NumAR = (SELECT NumP FROM Parametres WHERE CodeParametre = 'NUMAR') WHERE Dossiers.NumDossier IN (SELECT d.NumDossier FROM Dossiers d, Clients c WHERE d.CodeClient = c.CodeClient AND d.EditionAR <> 0 AND ISNULL(d.NumAR,0) = 0)
 

[edit]--Message édité par wouatouwouatou--[/edit]


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 27-04-2001 à 14:17:11    

pentiore nous sort la zolie requête a écrit :

 

Code :
  1. UPDATE Dossiers
  2. SET Dossiers.NumAR =
  3.      (SELECT NumP
  4.       FROM Parametres
  5.       WHERE CodeParametre = 'NUMAR')  // retourne 631
  6. FROM (SELECT d.NumDossier
  7.       FROM Dossiers d, Clients c
  8.       WHERE d.CodeClient = c.CodeClient
  9.       AND d.EditionAR <> 0
  10.       AND ISNULL(d.NumAR,0) = 0) AR   // retourne une table d'environ 200 enregistrements avec le champ NumDossier
  11. WHERE Dossiers.NumDossier = AR.NumDossier






 
Ce que je ne comprends pas dans ta requête, c'est pourquoi tu as une sous-requête dans la partie FROM.
 
Franchement, j'ai jamais vu ça...
 
Classiquement, j'ai des update du type :

Code :
  1. update toto
  2. set    toto.champ1 = titi.champ3,
  3.        toto.champ2 = tata.champ4
  4. from
  5.        titi,
  6.        tata,
  7.        tutu
  8. where
  9. /* cuisine entre titi, tata et tutu, mais c'est interdit aux mineurs */


 
Pour moi, un FROM doit contenir une liste de tables ET CAI TOUT.
 
Maintenant, je ne connais pas Access mais le SQL standard... Access permet-il des trucs aussi tordus?

Reply

Marsh Posté le 27-04-2001 à 14:18:13    

wouatouwouatou a écrit a écrit :

Oups. dsl mais javais pas bien regardé ton update :D
Essaie ca.. j'suis pas sur ke ca fonctionne mais ca devrai etre mieux :D:D
 

Code :
  1. UPDATE Dossiers 
  2. SET Dossiers.NumAR = (SELECT NumP FROM Parametres WHERE CodeParametre = 'NUMAR') WHERE Dossiers.NumDossier IN (SELECT d.NumDossier FROM Dossiers d, Clients c WHERE d.CodeClient = c.CodeClient AND d.EditionAR <> 0 AND ISNULL(d.NumAR,0) = 0)


 
 




 
Chuis nettement plus d'accord avec ça!!!

Reply

Marsh Posté le 27-04-2001 à 14:28:01    

Moi zossi !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 27-04-2001 à 14:31:00    

Haaaaa il nous fait des progrès de géant notre petit waoutou :D

Reply

Marsh Posté le 27-04-2001 à 14:31:00   

Reply

Marsh Posté le 27-04-2001 à 14:34:30    

Je vous rassure, c'est pas moi qui ai pondu une merde pareille, mais ma mission, si je l'accepte (de toute façon je n'ai pas le choix  :fou: ), c'est de la faire tourner !!!
 
Voici une nouvelle version de "Requête qui pue v1.2" :
 
UPDATE Dossiers  
SET Dossiers.NumAR =  
     (SELECT NumP
      FROM Parametres
      WHERE CodeParametre = 'NUMAR')
 
WHERE NumDossier IN  
  (SELECT d.NumDossier  
  FROM Dossiers d, Clients c
  WHERE d.CodeClient = c.CodeClient
         AND d.EditionAR <> 0  
         AND ISNULL(d.NumAR,0) = 0)
 
 
Apparemment, c'est la même que toi watouatoutoutoua (au passage merci pour l'intéressement que tu me portes !)
mais ça plante toujours, avec le même message
aaaaarrrrrrrgggghhhh  :gun:  
 
d'autres idées ?
je cherche, je cherche


---------------
Une Porsche sinon rien.
Reply

Marsh Posté le 27-04-2001 à 14:38:58    

je viens de m'apercevoir d'une incohérence qui fait que c'est obligé que ça plante :
 
la sous-requête à l'intérieur du WHERE retourne plus de 200 enregistrements, alors qu'il doit trouver qu'un seul NumDossier
 
 
faut que je résolve cela....


---------------
Une Porsche sinon rien.
Reply

Marsh Posté le 27-04-2001 à 14:39:16    

Es-tu certain que  
SELECT NumP FROM Parametres WHERE CodeParametre = 'NUMAR'
ne retourne qu'une seule valeur ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 27-04-2001 à 14:42:29    

A bon, alors c'est un SELECT DISTINCT qu'il de te faut, dans le IN...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 27-04-2001 à 14:43:04    

oui, oui, bien sûr, je l'ai testée à part, elle marche nickel cette requête


---------------
Une Porsche sinon rien.
Reply

Marsh Posté le 27-04-2001 à 14:46:19    

Tu ne pourrais pas nous donner la structure des tables et une explication fonctionnelle de la requête???
 
Tip : utilise les balises [ code ] et [ /code ] (sans les espaces) pour écrire le code dans ton message.

Reply

Marsh Posté le 27-04-2001 à 15:15:54    

La requête en question déclenche des Triggers sur le serveur.
Je viens de faire quelques modifs au niveau du serveur : j'ai supprimé tous ces triggers et je les ai recréés
et là oh MAGIE de l'informatique incompréhensible, ça marche !!!!!! YOUHOUHOHUOUOUOU
 
pourquoi, ça je n'en sais rien...
 
En tout cas, Merci à tous pour votre aide !


---------------
Une Porsche sinon rien.
Reply

Marsh Posté le 27-04-2001 à 15:55:08    

Fred999 a écrit a écrit :

 
 
Ce que je ne comprends pas dans ta requête, c'est pourquoi tu as une sous-requête dans la partie FROM.
 
Franchement, j'ai jamais vu ça...
 
Classiquement, j'ai des update du type :

Code :
  1. update toto
  2. set    toto.champ1 = titi.champ3,
  3.        toto.champ2 = tata.champ4
  4. from
  5.        titi,
  6.        tata,
  7.        tutu
  8. where
  9. /* cuisine entre titi, tata et tutu, mais c'est interdit aux mineurs */


 
Pour moi, un FROM doit contenir une liste de tables ET CAI TOUT.
 
Maintenant, je ne connais pas Access mais le SQL standard... Access permet-il des trucs aussi tordus?




 
Pas du tout d'accord avec toi (pour une fois :) ):
1. C'est du SQL standard
2. C'est vachement utile sur les très grosses requêtes (quand t'as 25 tables à mettre dans ton from, c'est beaucoup plus pratique d'y aller par arborescence, en faisant au préalable par exemple l'arbre d'éxécution de la requête)
3. Par la suite, si la requête rame, ca permet de mettre en place de facon plus rapide un schéma d'indexation des tables, une politique de vues, tables temporaires, etc...
4. L'analyseur SQL de n'importe quel SGBD annalyse de facon similaire les deux syntaxes, donc exactement même plan d'éxécution et même performances

 

[edit]--Message édité par thegti--[/edit]

Reply

Marsh Posté le 27-04-2001 à 16:10:57    

Alors je viens d'apprendre quelque chose.
 
Merci :jap:  
 
En fait, on n'utilise nulle part ce genre de trucs sur mon projet, alors qu'on a 419 procs stockées à ce jour...

Reply

Marsh Posté le 27-04-2001 à 16:54:35    

hihihihi... J'ai finalement réussi a fire ma foutu requête moi aussi.. :D:D merci a vous tous :jap:
 
'ai utilisé ce genre de truc partout dans ma requete... les select dans les from.. C le bordel mais ca tourne, alors .. :D
 
P.S: He oui, petit wouatou deviendra grand :D ... de toute facon je peux plus retrecir au point ou j'en suis :D:D


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le 27-04-2001 à 17:15:20    

:eek2:
419 procédures stockées
Une stratégie particulière non ? du genre pas faire de requêtes dans l'appli, faire que des procédures stockées ?

Reply

Marsh Posté le 27-04-2001 à 17:47:39    

thegti a écrit a écrit :

:eek2:
419 procédures stockées
Une stratégie particulière non ? du genre pas faire de requêtes dans l'appli, faire que des procédures stockées ?




 
18 mois de développement, une équipe de 4 à 6 personnes, 150 utilisateurs quotidiens...
 
Et, effectivement, faire appel de préférence aux procédures stockées, nettement plus faciles à maintenir que la partie cliente.
Les tailles varient de 1ko à 66Ko (max autorisé par l'outil de codage SQL sous NT...), pour un total de 3.92Mo de code.

Reply

Marsh Posté le 27-04-2001 à 17:53:44    

Et dire ke ma requete fait 7ko a elle seule.. pfiou.. kel boulot :D:D:D


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed