PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → WINDEV 21 : Erreur passage paramètre à une requête (IN clause)
WINDEV 21 : Erreur passage paramètre à une requête (IN clause)
Débuté par WaLinke, 24 oct. 2018 09:50 - 1 réponse
Membre enregistré
7 messages
Popularité : -1 (1 vote)
Posté le 24 octobre 2018 - 09:50
Bonjour à tous,

J'ai actuellement ce code erreur :

Le champ 'PLN_Filtre_SemaineSource' n'a pas pu s'initialiser, car il a rencontré l'erreur HFSQL suivante :
=============================
Erreur dans le code SQL de la requête <REQ_S_PlanifFiltree_Simple>. Initialisation de la requête impossible.
L'utilisation de paramètres n'est pas autorisée avec la fonction HExecuteRequêteSQL.
Erreur détectée ligne 5, colonne 71 :
Rhplan.Plcper > 0) ) ) AND ( >>>>{paramService}<<<< IN ( SELECT Svnsrv =============================

----- Informations techniques -----

Projet : DiliSched

Que s'est-il passé ?
Le champ 'PLN_Filtre_SemaineSource' n'a pas pu s'initialiser, car il a rencontré l'erreur HFSQL suivante :
=============================
Erreur dans le code SQL de la requête <REQ_S_PlanifFiltree_Simple>. Initialisation de la requête impossible.
L'utilisation de paramètres n'est pas autorisée avec la fonction HExecuteRequêteSQL.
Erreur détectée ligne 5, colonne 71 :
Rhplan.Plcper > 0) ) ) AND ( >>>>{paramService}<<<< IN ( SELECT Svnsrv =============================

Code erreur : 10085
Niveau : erreur fatale
Code erreur WD55 : 208

Dump de l'erreur du module 'wd210obj.dll' (21.0.430.20).
Identifiant des informations détaillées (.err) : 10085 Informations de débogage :
IEWD210SQL=1.7
Module=<WD210SQL>
Version=<21.0.78.0>
Informations supplémentaires :
EIT_POSITION_ERREUR : < >
EIT_LOGICALTABLENAME : <REQ_S_PlanifFiltree_Simple>

En fait, tout fonctionne parfaitement, ce qui fait planté ma requête, c'est ceci :

...
AND {paramService} IN (
SELECT Svnsrv
FROM Rhserv
INNER JOIN Rhgrpp ON Rhgrpp.Gpcsvc = Rhserv.Svcsvc INNER JOIN Rhpost ON Rhpost.Pocgrp = Rhgrpp.Gpcgrp INNER JOIN Rhplan ON Rhplan.Rlcpos = Rhpost.Pocpst INNER JOIN Rhpers ON Rhpers.Pecper = Rhplan.Plcper WHERE Rhpers.Pecper = RHP.Pecper AND Rhplan.Plddeb >= {Param_DateDebut} AND Rhplan.Pldfin <= {Param_DateFin}
)
ORDER by Penuni

Le problème, c'est le paramService. Si je remplace ce paramètre par sa valeur ( par exemple 'Employés' ) comme ceci :
...
AND 'Employés' IN (
SELECT Svnsrv
FROM Rhserv
INNER JOIN Rhgrpp ON Rhgrpp.Gpcsvc = Rhserv.Svcsvc INNER JOIN Rhpost ON Rhpost.Pocgrp = Rhgrpp.Gpcgrp INNER JOIN Rhplan ON Rhplan.Rlcpos = Rhpost.Pocpst INNER JOIN Rhpers ON Rhpers.Pecper = Rhplan.Plcper WHERE Rhpers.Pecper = RHP.Pecper AND Rhplan.Plddeb >= {Param_DateDebut} AND Rhplan.Pldfin <= {Param_DateFin}
)
ORDER BY Penuni


Alors ma requête fonctionne correctement.
Petit détail, la requête est liée à un planning (voir log de l'erreur plus haut).

Avez-vous une idée ?
Membre enregistré
299 messages
Popularité : +16 (16 votes)
Posté le 27 octobre 2018 - 11:05
Je ne suis pas fan des requêtes, je construis directement ma syntaxe dans le code.
Le paramètre est alphabétique. A votre place j'essaierais de placer les côtes dans la requête :
AND '{paramService}' IN (