|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
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?
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 574 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:
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 ^_^
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. |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|