PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Etat et source de données
Etat et source de données
Débuté par eric.jeanneau, 12 jan. 2005 12:28 - 7 réponses
Posté le 12 janvier 2005 - 12:28
Bonjour,

Je souhaite que l'état "MonEtat" ait comme source de données le résultat de la requête "SELECT * FROM T_CDEL INNER JOIN T_CDEH ON (T_CDEL_LienCDEH = T_CDEH_Id) WHERE T_CDEH_Id = " + zID

Les 2 tables (T_CDEH et T_CDEL sont des fichiers HyperFile 7), et le critère zID est une variable.

Mes questions sont donc :

- quel type d'état choisir ? (sachant que l'option "issu d'une requête SQL" semble exiger une source ODBC, d'après mes nombreux tests)

- quel(s) objet(s) utiliser pour déclarer la requête et l'affecter à l'état ?

Tout exemple de code me sera utile. Merci par avance et bonne journée.

EJ
Posté le 12 janvier 2005 - 18:22
Eric a écrit :
Bonjour,

Je souhaite que l'état "MonEtat" ait comme source de données le résultat de la requête "SELECT * FROM T_CDEL INNER JOIN T_CDEH ON (T_CDEL_LienCDEH = T_CDEH_Id) WHERE T_CDEH_Id = " + zID

Les 2 tables (T_CDEH et T_CDEL sont des fichiers HyperFile 7), et le critère zID est une variable.

Mes questions sont donc :

- quel type d'état choisir ? (sachant que l'option "issu d'une requête SQL" semble exiger une source ODBC, d'après mes nombreux tests)

- quel(s) objet(s) utiliser pour déclarer la requête et l'affecter à l'état ?

Tout exemple de code me sera utile. Merci par avance et bonne journée.

EJ

Traité !
Etat sur une requete... définie sous l'éditeur acceptant des paramètres :
http://www.wdforge.org/modules/newbb/viewtopic.php…


++ R&B
Posté le 12 janvier 2005 - 22:46
Merci de cette précision.

Elle ne me permet cependant pas de résoudre mon cas de figure.

En effet, le code SQL est généré dynamiquement par l'application. Je pensait définir l'état en choisissant "les données à imprimer viennent <de la programmation>" (dernière option de la liste sous WD8), mais je n'ai pas trouvé d'exemple de code pour relier l'état à la source de données issue de cette requête.

Je suis donc toujours intéressé par une aide.

Eric
Posté le 13 janvier 2005 - 12:46
Eric a écrit :

Merci de cette précision.

Elle ne me permet cependant pas de résoudre mon cas de figure.

En effet, le code SQL est généré dynamiquement par l'application. Je pensait définir l'état en choisissant "les données à imprimer viennent <de la programmation>" (dernière option de la liste sous WD8), mais je n'ai pas trouvé d'exemple de code pour relier l'état à la source de données issue de cette requête.

Je suis donc toujours intéressé par une aide.

Eric




Dans l'initialisation de votre état, exécuter la requete
(hExecuteRequeteSQL) dans une source de donéne locale, et programmer son
parcours dans la partie 'Lecture de l'enregistrement' en pensant à
renvoyer Vrai pour que les lignes s'imprimer, faux sinon et annuler pour
finir l'impression.

++ R&B
Posté le 13 janvier 2005 - 20:49
Bonsoir,

Grâce à vos conseils, je progresse, mais bute encore sur des principes de base :

Appel de l'état : iImprimeEtat(MonEtat)


MonEtat :

OUVERTURE :
res est un booléen
rstEtat est une Source de Données
zID est un entier
zID 10
res=HExécuteRequêteSQL(rstEtat,"SELECT * FROM T_CDEL INNER JOIN T_CDEH ON (T_CDEL_LienCDEH = T_CDEH_Id) WHERE T_CDEL_LienCDEH = " + zID + "ORDER BY T_CDEL_LienCDEH")
HLitPremier(rstEtat)

LECTURE DES DONNEES :
TANTQUE PAS HEnDehors(rstEtat)
CLI_CdeFicheEtat.T_CDEH_Id=rstEtat.T_CDEL_LienCDEH
CLI_CdeFicheEtat.T_CDEL_CDEeanProduit=rstEtat.T_CDEL_CDEeanProduit
CLI_CdeFicheEtat.T_CDEL_ProduitIntitule=rstEtat.T_CDEL_ProduitIntitule
RENVOYER Vrai
HLitSuivant(rstEtat)
FIN


FILTRE + FERMETURE : vide

La requête retourne 3 enregistrements (testée sous WDSql), alors que l'état retourne quelques dizaines de pages, toutes es lignes étant identiques et valorisées avec le 1er enregistrement de la requête.

J'ai donc raté quelque chose, mais quoi ?

Merci encore de votre patience.

Eric
Posté le 17 janvier 2005 - 11:12
Eric a écrit :

Bonsoir,

Grâce à vos conseils, je progresse, mais bute encore sur des principes de base :

Appel de l'état : iImprimeEtat(MonEtat)


MonEtat :

OUVERTURE :
res est un booléen
rstEtat est une Source de Données
zID est un entier
zID 10
res=HExécuteRequêteSQL(rstEtat,"SELECT * FROM T_CDEL INNER JOIN T_CDEH ON (T_CDEL_LienCDEH = T_CDEH_Id) WHERE T_CDEL_LienCDEH = " + zID + "ORDER BY T_CDEL_LienCDEH")
HLitPremier(rstEtat)

LECTURE DES DONNEES :
TANTQUE PAS HEnDehors(rstEtat)
CLI_CdeFicheEtat.T_CDEH_Id=rstEtat.T_CDEL_LienCDEH
CLI_CdeFicheEtat.T_CDEL_CDEeanProduit=rstEtat.T_CDEL_CDEeanProduit
CLI_CdeFicheEtat.T_CDEL_ProduitIntitule=rstEtat.T_CDEL_ProduitIntitule
RENVOYER Vrai
HLitSuivant(rstEtat)
FIN


FILTRE + FERMETURE : vide

La requête retourne 3 enregistrements (testée sous WDSql), alors que l'état retourne quelques dizaines de pages, toutes es lignes étant identiques et valorisées avec le 1er enregistrement de la requête.

J'ai donc raté quelque chose, mais quoi ?

Merci encore de votre patience.

Eric


Bonjour, la lecture des données de l'état ne doit lire qu'une unique
ligne... pour afficher le corps correspondant.
Voici une petite modification à la volée donc à évaluer...
++ R&B de www.WDForge.org

//--OUVERTURE :
res est un booléen
rstEtat est une Source de Données
zID est un entier
zID 10
res=HExécuteRequêteSQL(rstEtat,"SELECT * FROM T_CDEL INNER JOIN T_CDEH
ON (T_CDEL_LienCDEH = T_CDEH_Id) WHERE T_CDEL_LienCDEH = " + zID +
"ORDER BY T_CDEL_LienCDEH")
// on ne fait pas le hlitpremier
bPremier est un booleen = vrai


//-- LECTURE DES DONNEES :
SI bPremier ALORS
hlitPremier(rstEtat)
SINON
hlitSuivant(rstEtat)
FIN
SI PAS HEnDehors(rstEtat)
bPremier=faux
CLI_CdeFicheEtat.T_CDEH_Id=rstEtat.T_CDEL_LienCDEH
CLI_CdeFicheEtat.T_CDEL_CDEeanProduit=rstEtat.T_CDEL_CDEeanProduit
CLI_CdeFicheEtat.T_CDEL_ProduitIntitule=rstEtat.T_CDEL_ProduitIntitule
RENVOYER Vrai
SINON
RENVOYER Annuler
FIN
Posté le 19 janvier 2005 - 17:29
Bonjour,

Effectivement, ce code est parfait.

La question du jour : comment programmer les ruptures, puisqu'il n'est pas possible à l'éditeur de proposer des champs (quel code dans quels blocs, là encore la doc ne me permet pas d'avancer).

Merci d'avance.

EricJ
Posté le 19 janvier 2005 - 17:37
Eric a écrit :
Bonjour,

Effectivement, ce code est parfait.

La question du jour : comment programmer les ruptures, puisqu'il n'est pas possible à l'éditeur de proposer des champs (quel code dans quels blocs, là encore la doc ne me permet pas d'avancer).

Merci d'avance.

EricJ



re, re, re ... 8->
Ajouter au progamme une rupture programmée qui lancera une procédure
locale de l'état, laquelle devra retourner vrai pour les enregistrements
et faut pour déclencher la rupture...

++ R&B de www.WDForge.org