PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Libérer une requête de type requête SQL
Libérer une requête de type requête SQL
Débuté par Juju, 10 sep. 2019 18:00 - 7 réponses
Membre enregistré
87 messages
Popularité : +4 (4 votes)
Posté le 10 septembre 2019 - 18:00
Bonjour,

Je cherche à faire successivement plusieurs requêtes. Est ce qu'il existe une syntaxe pour libérer la requête et la réutiliser?

// Mise à jour de AN_PLATEFORME
reqUpdatePlateforme est une Requête SQL = [

UPDATE T_TEST SET AN_PLATEFORME = '3' WHERE AN_A= 'OUI' AND AN_L='';
]
HExécuteRequête(reqUpdatePlateforme)


reqUpdatePlateforme2 est une Requête SQL = [

UPDATE T_TEST SET AN_PLATEFORME = '2' WHERE AN_A= '' AND AN_L= 'OUI';
]
HExécuteRequête(reqUpdatePlateforme2)


J'ai essayé avec HLibèreRequête mais cela ne fonctionne pas ... du coup j'ai déclaré 2 requêtes ...

Mais il y a sûrement mieux ...

Merci d'avance
Membre enregistré
79 messages
Popularité : +4 (4 votes)
Posté le 11 septembre 2019 - 05:52
Bonjour

Et avec HAnnuleDéclaration ?
Cordialement.
Membre enregistré
87 messages
Popularité : +4 (4 votes)
Posté le 11 septembre 2019 - 09:23
Bonjour,

Non j'ai une erreur "Un élément de type 'chaine ANSI' ne peut pas être converti vers le type 'requête'".
Tant pis je vais faire plusieurs requêtes :) merci bien
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 11 septembre 2019 - 10:14
Bonjour,

De la manière dont tu l'utilises non La variable "Requête SQL" est considérée comme un objet et ne peut être modifié après sa déclaration.

Dans le cas précis que tu cites, il te suffit de passer des paramètres:
// Mise à jour de AN_PLATEFORME
reqUpdatePlateforme est une Requête SQL = [

UPDATE T_TEST SET AN_PLATEFORME = {pPlateforme} WHERE AN_A= {pANA} AND AN_L={pANL};
]
reqUpdatePlateforme.pPlateforme = "3"
...
HExécuteRequête(reqUpdatePlateforme)


Si cela ne convient pas, il reste la solution des HexecuteRequêteSQL().

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
182 messages
Popularité : +10 (10 votes)
Posté le 11 septembre 2019 - 10:54
Hello,
Dans le cas d'un UPDATE ou d'un INSERT, il n'y a pas besoin de libérer les requêtes.
C'est surtout sur un SELECT qu'il faut le faire.
Par contre, si vous souhaitez faire en une seule requête le traitement, vous pouvez utiliser cette syntaxe :

UPDATE T_TEST SET AN_PLATEFORME = (CASE WHEN AN_A = 'OUI' AND AN_L ='' THEN '3' WHEN AN_A = '' AND AN_L = 'OUI' THEN '2' END)
Membre enregistré
324 messages
Popularité : +21 (51 votes)
Posté le 11 septembre 2019 - 14:32
Bonjour

Une variable, peut importe son type, quand elle est déclaré de manière locale dans une fonction. Elle n'existe que si la fonction est exécuté, dès lors que la fonction est terminé toutes les variables sont "tués", incluant bien sur les sources de données et requête SQL. C'est pour cela qu'on a des variables globales ^_^

// Mise à jour de AN_PLATEFORME
reqUpdatePlateforme est une Requête SQL = [
UPDATE T_TEST SET AN_PLATEFORME = {pPlateforme} WHERE AN_A= {pANA} AND AN_L={pANL};
]


Vous mettez dans une procédure local ou vous passez en paramètre les 3 params, un petit remplace dans le texte de la requete sql ,et vous executez la procédure autant de fois que requis, et là pas besoin de vider quoi ce que soit celà se fait tout seul ;)
Membre enregistré
87 messages
Popularité : +4 (4 votes)
Posté le 11 septembre 2019 - 15:11
Du coup j'ai écris mon code de cette manière :

HExécuteRequêteSQL(REQ,hRequêteDéfaut,"UPDATE T_TEST SET AN_PLATEFORME = '3' WHERE (AN_PLATEFORME = 0 OR AN_PLATEFORME IS NULL OR AN_PLATEFORME = '') AND AN_A = 'OUI' AND AN_L =''")
HExécuteRequêteSQL(REQ,hRequêteDéfaut,"UPDATE T_TEST SET AN_PLATEFORME = '2' WHERE (AN_PLATEFORME = 0 OR AN_PLATEFORME = NULL OR AN_PLATEFORME = '') AND AN_A = '' AND AN_L = 'OUI'")
HExécuteRequêteSQL(REQ,hRequêteDéfaut,"UPDATE T_TEST SET AN_PLATEFORME = '5' WHERE (AN_PLATEFORME = 0 OR AN_PLATEFORME = NULL OR AN_PLATEFORME = '') AND AN_A = 'OUI' AND AN_L = 'OUI'")
HExécuteRequêteSQL(REQ,hRequêteDéfaut,"UPDATE T_TEST SET AN_PLATEFORME = '3' WHERE (AN_PLATEFORME = 0 OR AN_PLATEFORME = NULL OR AN_PLATEFORME = '') AND AN_A = 'OUI' AND AN_L = 'NON'")
HExécuteRequêteSQL(REQ,hRequêteDéfaut,"UPDATE T_TEST SET AN_PLATEFORME = '2' WHERE (AN_PLATEFORME = 0 OR AN_PLATEFORME = NULL OR AN_PLATEFORME = '') AND AN_A = 'NON' AND AN_L = 'OUI'")
Membre enregistré
79 messages
Popularité : +4 (4 votes)
Posté le 12 septembre 2019 - 06:20
Juju a écrit :
Bonjour,

Non j'ai une erreur "Un élément de type 'chaine ANSI' ne peut pas être converti vers le type 'requête'".

Ah, ok.
Perso je n'utilise pas cette syntaxe.
Je déclare une Source de données et en fin de traitement je libère les ressources avec HAnnuleDéclaration.
Désolé.
Bonne journée.