PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → [URGENT] Etat sur table dynamique
[URGENT] Etat sur table dynamique
Débuté par Nicolas B, 07 juin 2005 14:07 - 13 réponses
Posté le 07 juin 2005 - 14:07
Bonjour,

Je souhaite créer un état à partir d'une table créée elle-même dynamiquement (nombre de colonnes et intitulés des colonnes différents a chaque fois).

J'obtient bien ma table à partir de ma requête dynamique mais je n'arrive pas à créer l'état à partir de ma table...

Voici mon code (Au clic sur mon bouton permettant d'ouvrir l'etat) :

iAperçu(100)
iImprimeEtat(Etat_Resultat_requete)

J'ajoute que l'état contient le bon nombre de lignes (mais elles sont vides) mais pas le bon nombre de colonnes.

Merci de vos réponses.

Nicolas B
Posté le 07 juin 2005 - 15:02
Bonjour,

ne dois-tu pas lancer la requête (hexecuterequete(Marequete)) juste avant iaperçu()

salutations

Cécile
Posté le 07 juin 2005 - 15:46
Merci de votre réponse mais le problème est que ma requête est elle aussi dynamique.

En fait, ma requête est sous forme de chaine de caractères et je construit ma table avec la fonction ConstruitTableFichier(...).

Je ne peux donc pas appeler la fonction hExecuteRequete avec comme paramètre une chaîne de caractères.

Avez-vous une autre idée?

Merci beaucoup d'avoir répondu...

Nicolas B
Posté le 07 juin 2005 - 16:03
Non, alors là je vois pas... mais votre requête vous la lancez bien quelque part. De quelle façon la déclarez vous ?
Posté le 07 juin 2005 - 16:36
Voila mon code pour remplir la table avec la requete sous forme de chaine de caractères :

résultat est un booléen
v_Requete est une Source de Données

SI ReqSQL <> "" ALORS

résultat = HExécuteRequêteSQL(v_Requete, hRequêteInterruptible, ReqSQL)
SI résultat = Vrai ALORS
ConstruitTableFichier(NomTable,v_Requete,taAvecIdAuto)
FichierVersTableMémoire(NomTable,v_Requete)
FIN
HAnnuleDéclaration(v_Requete)
FIN
Posté le 07 juin 2005 - 16:51
Ne croyez-vous pas qu'il faille enlever la ligne HAnnuleDéclaration(...) qui libére les ressources de cette requête et par là même vide le résultat de ses données ?

Cécile
Posté le 07 juin 2005 - 17:30
je viens d 'essayer mais ceci ne change en rien mon résultat (bon nombre de ligne mais vides et toujours une seule colonne)

Nicolas
Posté le 07 juin 2005 - 19:17
Bonjour,

1 - Comment déclarez-vous la variable ReqSQL ?
Est-ce c’est a peux près ça :
ReqSQL est une chaîne = "select * from MonFichier" ?

2 – comment avez-vous créez votre état, quelle source de données… ?

---------
//**//
Posté le 07 juin 2005 - 20:05
Bonjour,

Effectivement, j'ai déclaré ma requête comme ceci. Ce code me permet de remplir ma table de resultat. Mon but étant maintenant d'intégrer cette table résultat dans mon état.
Voici mon code :

ReqSQL est une chaîne = "select * from MonFichier"
résultat est un booléen
v_Requete est une Source de Données

SI ReqSQL <> "" ALORS
// Initialisation de la requête
résultat = HExécuteRequêteSQL(v_Requete, hRequêteInterruptible, ReqSQL)
SI résultat = Vrai ALORS
ConstruitTableFichier(NomTable,v_Requete,taAvecIdAuto)
FichierVersTableMémoire(NomTable,v_Requete)
FIN
HAnnuleDéclaration(v_Requete)
FIN

Et mon état est créé a l'aide de l'outil "Créer un état pour la table" dans l'onglet "Atelier"

Merci de votre réponse

Nicolas B
Posté le 07 juin 2005 - 20:48
Rebonjour,

Dans ce cas, "Table", il faut savoir qu’un état sur table ne permet pas de modifier la source de données ni la structure de la table par programmation.
Il faut utiliser plutôt un état sur une source de données programmée.

Regardez "Etat sur une source de données programmée" dans l’aide de Windev.

Bonne chance
--------------
//**//
Posté le 08 juin 2005 - 15:30
"Nicolas B" <guest@newsgroup.fr> a écrit dans le message de news:
42a565ba$1@news.pcsoft.fr...

Bonjour,

Je souhaite créer un état à partir d'une table créée elle-même
dynamiquement (nombre de colonnes et intitulés des colonnes différents a
chaque fois).

J'obtient bien ma table à partir de ma requête dynamique mais je n'arrive
pas à créer l'état à partir de ma table...

Voici mon code (Au clic sur mon bouton permettant d'ouvrir l'etat) :

iAperçu(100)
iImprimeEtat(Etat_Resultat_requete)

J'ajoute que l'état contient le bon nombre de lignes (mais elles sont
vides) mais pas le bon nombre de colonnes.

Merci de vos réponses.

Nicolas B

bonjour
c'est exactement ce que fait un etat tableau croisé dynamique et j'aimerais
faire la même chose moi aussi
cdt JeAn-PhI
Posté le 23 juin 2005 - 15:24
Bonjour,

Je l'ai dejà fait de la manière suivante:
1) Remplissage de la table "source" avec le fonction ConstruitTableFichier
2) Création d'un état dont la source de données est un champ table
3) Insertion d'une table de N colonnes (Nombre maxi de colonnes qui seront éditées)
4) Puis dans le code d'uverture de l'état,
tu relies ta table à ton état avec NomEtat..NomSource = NomDeTable
tu relies tes colonnes de table résultat à celle de l'état avec NomColonneTableEtat..RubriqueAffichée = TableEnumèreColonne(NomDeTable, indiceColonne )
Tu masques ensuite les colonnes en trop

NomEtat = nom de ton état
NomDeTable = nom de ta table (avec les indirections car cette table est au moment d'exécution du code extérieure)
indiceColonne = indice de la colonne de NomDeTable à relier

Il y a certainement plus simple, mais je débute et j'ai donc fait ce que j'ai trouvé.
Posté le 23 juin 2005 - 16:45
"Catherine" <guerincatherine@wanadoo.fr> a écrit dans le message de news:
42ba917a$1@news.pcsoft.fr...

Bonjour,

Je l'ai dejà fait de la manière suivante:
1) Remplissage de la table "source" avec le fonction ConstruitTableFichier
2) Création d'un état dont la source de données est un champ table
3) Insertion d'une table de N colonnes (Nombre maxi de colonnes qui seront
éditées)
4) Puis dans le code d'uverture de l'état,
tu relies ta table à ton état avec NomEtat..NomSource = NomDeTable
tu relies tes colonnes de table résultat à celle de l'état avec
NomColonneTableEtat..RubriqueAffichée = TableEnumèreColonne(NomDeTable,
indiceColonne )
Tu masques ensuite les colonnes en trop

NomEtat = nom de ton état
NomDeTable = nom de ta table (avec les indirections car cette table est au
moment d'exécution du code extérieure)
indiceColonne = indice de la colonne de NomDeTable à relier

Il y a certainement plus simple, mais je débute et j'ai donc fait ce que
j'ai trouvé.


merci c'est un bon début pour moi je vais tester ça
cdt JeAn-PhI
Posté le 29 juin 2005 - 17:30
Peux-tu me dire comment utiliser les indirections pour pouvoir faire référence au nom de ma table au chargement d emon etat.

Voici mon message d'erreur :

Erreur à la ligne 2 du traitement Clic sur BTN_Imprimer.
Vous avez appelé la fonction iImprimeEtat.
La table, source de données de l'état, est introuvable.

Et voici mon code :

Etat_Stat_F3..NomSource = {"fnt_stat_F3.TableResultat"}

Merci d'avance.

Nico B