Problème, requête SQL compliquée

[Résolu]
Signaler
Messages postés
16
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
21 mai 2007
-
Messages postés
16
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
21 mai 2007
-
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

Messages postés
687
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
3
Pourquoi ne pas faire tout simplement 2 temps
en 1 - requete select permettant de selectionner la valeur desirée
en 2 - requete update
+
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
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
*/
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
Ha, du Access... il faut vérifier le support de la clause FROM sur les instructions UPDATE du coup...

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
16
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
21 mai 2007

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.
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
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
*/
Messages postés
687
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
3
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)

++
Messages postés
16
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
21 mai 2007

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 !
Messages postés
16
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
21 mai 2007

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ààààà...