Problème, requête SQL compliquée

Résolu
dread_loque Messages postés 16 Date d'inscription mercredi 11 avril 2007 Statut Membre Dernière intervention 21 mai 2007 - 18 mai 2007 à 14:58
dread_loque Messages postés 16 Date d'inscription mercredi 11 avril 2007 Statut Membre Dernière intervention 21 mai 2007 - 21 mai 2007 à 10:25
Bonjour tout le monde,

Aujourd'hui un autre problème (non, je ne me suis pas fixé un objectif "un jour, un problème" mais bon...).

Voilà, j'ai cette requête qui ne fonctionne pas, mais l'idée est là, et j'aimerais savoir s'il est possible de faire en gros s'que j'veux faire avec cette requete mais en différent ^^

Voici la requete :

                //Requete de mise à jour des données dans la base
                m_sSQLRequest = "UPDATE Variables AS v1 "+                                "SET v1.ValOffset(SELECT v2.LngVariable FROM Variables AS v2                                              WHERE v2.NumOrdreVariable v1.NumOrdreVariable - 1) "+
                                "WHERE v1.IdStructure = "    + identStruct +" "+
                                "AND v1.NumOrdreVariable > 1";

Merci d'avance pour vos réponses éclairées ^^

8 réponses

romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
19 mai 2007 à 19:40
Pourquoi ne pas faire tout simplement 2 temps
en 1 - requete select permettant de selectionner la valeur desirée
en 2 - requete update
+
3
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
18 mai 2007 à 15:38
Salut,

Si tu disais ce qu'elle doit faire au juste parce que là c'est pas évident (du moins pour moi).
Enfin là à vue de nez je dirais que tu devrais regarder du côté de la clause FROM si tes données doivent venir d'une autre table (http://msdn2.microsoft.com/en-us/library/aa260662(SQL.80).aspx).
Sinon les requêtes paramétrées c'est pas mal au lieu de concaténer, à moins d'aimer avoir un problème de sécurité par injection SQL.

/*
coq
MVP Visual C#
CoqBlog
*/
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
18 mai 2007 à 15:39
Ha, du Access... il faut vérifier le support de la clause FROM sur les instructions UPDATE du coup...

/*
coq
MVP Visual C#
CoqBlog
*/
0
dread_loque Messages postés 16 Date d'inscription mercredi 11 avril 2007 Statut Membre Dernière intervention 21 mai 2007
18 mai 2007 à 15:49
Au niveau de l'injection je m'en fou un peu, puisque c'est une application dévellopée dans mon service, POUR mon service ^^ Ils ne gagneraient pas grand chose à faire de l'injection à part foiré leur base de données ^^

Sinon en fait le truc important c'est ça :

//Requete de mise à jour des données dans la base
                m_sSQLRequest = "UPDATE Variables AS v1 "+
   
           "SET v1.ValOffset = (SELECT v2.LngVariable
FROM Variables AS v2                                              WHERE
v2.NumOrdreVariable = v1.NumOrdreVariable - 1) "+
                                "WHERE v1.IdStructure = "    + identStruct +" "+
                                "AND v1.NumOrdreVariable > 1";

Je cherche à récupérer la taille de la variable qui est juste avant celle que je suis en train de manipuler (d'où le -1)...

J'éspère que c'est plus clair et que vous pourrez m'aider.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
18 mai 2007 à 16:53
Ha bon, les attaquants opérant de l'intérieur ne sont pas à prendre en compte ? J'espère que tu ne tombera jamais sur un futur ex-employé mécontent qui voudra partir sur un coup d'éclat. Sans parler des fausses manips involontaires...

Pour la requête je vois à peu prêt la logique mais sous Access...
Tu devrais plutot poser la question sur SQLFr.

/*
coq
MVP Visual C#
CoqBlog
*/
0
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
19 mai 2007 à 19:53
tiens j'ai essyé parce que ca m'interessait
et OUI on peut parfaitement integré des sous-requetes dans une requete update

moi j'ai testé la requete suivante et ca marche
update

Contact
set

contactName
= (select

ContactName
from Contact
where ContactID
=1
)where

ContactID
=10

donc pour toi cela devrait donner ...

UPDATE

Variables
set

v1
.ValOffset
=(

select v2
.LngVariable
from variables
where v1
.IdStructure
= " + identStruct +"
AND v1
.NumOrdreVariable
> 1
) where

v1
.ValOffset
=tavaleur

derniere clause where a ajouter pour dire quand appliquer la valeur
un conseil utiliser les requetes parametrées
(je crois qu'il va falloir faire un petit tuto sur les requetes parametrées vu le nb de personnes qui en auraient besoin)

++
0
dread_loque Messages postés 16 Date d'inscription mercredi 11 avril 2007 Statut Membre Dernière intervention 21 mai 2007
21 mai 2007 à 10:22
Merci pour vos réponses

Je sais bien qu'il faut que j'utilise les requêtes paramétrées, j'essaie de me justifier mais en fait j'ai juste la flemme !
Parce que ça va me forcer à reprendre toutes les requêtes de mon code (et y'en a une tripottée) et que j'ai la cagne

Mais bon...

Encore merci, et à bientôt !
0
dread_loque Messages postés 16 Date d'inscription mercredi 11 avril 2007 Statut Membre Dernière intervention 21 mai 2007
21 mai 2007 à 10:25
Au fait, j'ai oublié de vous dire mais je m'en suis sorti finalement en faisant 2 requêtes au lieu d'une.

Foilààààà...
0