PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Pbm Description dynamique d'une table dans l'analyse
Pbm Description dynamique d'une table dans l'analyse
Débuté par THEWORLDASGARP, 22 déc. 2016 10:53 - 1 réponse
Membre enregistré
91 messages
Popularité : +1 (1 vote)
Posté le 22 décembre 2016 - 10:53
Bonjour,


Je travaille sur un composant qui est amené à manipulé des tables qui ne sont pas déclarés dans l'analyse du composant.

Ce composant possède sa propre analyse et effectue des requêtes SQL sur les tables inscrites dynamiquement.

Nous utilisons une base DB2/400 (AS400).

Dans ce composant, je dois inscrire dynamiquement la table à traiter.

Je bute sur un soucis :
> Mon code fonctionne lorsque je teste le projet du composant.

> Dés lors que je l'intègre dans un projet hôte, les requêtes SQL se plantent ( message "Source de données MaSourceDonnées non initialisée" )

Dans l'exemple de code ci dessous, je manipule une table et son schéma reçu en paramètre respectivement dans les variables "P_CHR_SCHEMA" et "P_CHR_TABLE" .

Le traitement de description des rubriques et de descrption de la table se passe bien. J'utilise la table système "Qadbifld" de qsys pour extraire les informations de la table à decrire dans l'analyse :

// <><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
// { Construction Dynamique description table dans Analyse - D E B U T }
// <><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
L_DescTbl_Table est une Description de Fichier
L_DescRub_Rubrique est une Description de Rubrique
SLANGUP est une Source de Données

// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// { Description de la table reçues en paramètre }
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
L_DescTbl_Table..Nom = "SLANGUP"
L_DescTbl_Table..Type = hFichierAS400
L_DescTbl_Table..CryptageFic = hCryptageStandard

// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// { Description des rubriques dans l'analyse }
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// [ Extraction des propriétées de la table depuis qsys.QADBIFLD ]
POUR TOUT Qadbifld AVEC "dbilib = '"+P_CHR_SCHEMA+"' et dbifil = '"+P_CHR_TABLE+"'"

// [ Nom de la rubrique ]
L_DescRub_Rubrique..Nom = Qadbifld.DBILFL

// [ Type de rubrique ]
SELON Qadbifld.DBITYP
// ( Chargement du type de la zone )
CAS "CHAR"
L_DescRub_Rubrique..Type = hRubCaractère

CAS "DATE"
L_DescRub_Rubrique..Type = hRubDate8

CAS "TIME"
L_DescRub_Rubrique..Type = hRubHeure

CAS "TIMESTMP"
L_DescRub_Rubrique..Type = hRubDateHeure

CAS "DECIMAL"
L_DescRub_Rubrique..Type = hRubNumérique

CAS "SMALLINT","INTEGER"
L_DescRub_Rubrique..Type = hRubEntier1

AUTRE CAS
L_DescRub_Rubrique..Type = hRubCaractère
FIN

// [ Taille de la rubrique ]
L_DescRub_Rubrique..Taille = Qadbifld.DBIILN

// [ type clé ]
L_DescRub_Rubrique..TypeClé = hCléDoublon

// [ Inscription ]
HDécritRubrique (L_DescTbl_Table, L_DescRub_Rubrique)


FIN

// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// { Valide la description du fichier de données }
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
soit L_Bool_WrtAna = HDécritFichier(L_DescTbl_Table)



Dans une autre méthode du composant, j'effectue des requêtes SQL sur la table décrite dans l'analyse.

Lorsque je teste le projet du composant, le code fonctionne bien.

Dés que j'intègre le composant ( qui a sa propre analyse ) dans un projet hôte, le code se plante :
la méthode du composant chargée d'effectuer la requête SQL ne trouve pas la table décrite plus haut et provoque une erreur du type "Source de données MaSourceDonnées non initialisée"


Si quelqu'un a une idée, ou une piste ?


JC
Posté le 23 décembre 2016 - 09:34
Le 22/12/2016 à 09:53, THEWORLDASGARP a écrit :
Bonjour,

Je travaille sur un composant qui est amené à manipulé des tables
qui ne sont pas déclarés dans l'analyse du composant.

Ce composant possède sa propre analyse et effectue des requêtes SQL
sur les tables inscrites dynamiquement.

Nous utilisons une base DB2/400 (AS400).

Dans ce composant, je dois inscrire dynamiquement la table à traiter.

Je bute sur un soucis : > Mon code fonctionne lorsque je teste le
projet du composant.
> Dés lors que je l'intègre dans un projet hôte, les requêtes SQL se
plantent ( message "Source de données MaSourceDonnées non initialisée" )

Dans l'exemple de code ci dessous, je manipule une table et son schéma
reçu en paramètre respectivement dans les variables "P_CHR_SCHEMA" et
"P_CHR_TABLE" .
Le traitement de description des rubriques et de descrption de la table
se passe bien. J'utilise la table système "Qadbifld" de qsys pour
extraire les informations de la table à decrire dans l'analyse :
// <><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
// { Construction Dynamique description table dans Analyse - D E B U T }
// <><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
L_DescTbl_Table est une Description de Fichier
L_DescRub_Rubrique est une Description de Rubrique
SLANGUP est une Source de Données
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// { Description de la table reçues en paramètre }
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
L_DescTbl_Table..Nom = "SLANGUP"
L_DescTbl_Table..Type = hFichierAS400
L_DescTbl_Table..CryptageFic = hCryptageStandard

// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// { Description des rubriques dans l'analyse }
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// [ Extraction des propriétées de la table depuis qsys.QADBIFLD ] POUR
TOUT Qadbifld AVEC "dbilib = '"+P_CHR_SCHEMA+"' et dbifil =
'"+P_CHR_TABLE+"'"
// [ Nom de la rubrique ]
L_DescRub_Rubrique..Nom = Qadbifld.DBILFL
// [ Type de rubrique ]
SELON Qadbifld.DBITYP
// ( Chargement du type de la zone )
CAS "CHAR"
L_DescRub_Rubrique..Type = hRubCaractère

CAS "DATE"
L_DescRub_Rubrique..Type = hRubDate8

CAS "TIME"
L_DescRub_Rubrique..Type = hRubHeure

CAS "TIMESTMP"
L_DescRub_Rubrique..Type = hRubDateHeure

CAS "DECIMAL"
L_DescRub_Rubrique..Type = hRubNumérique

CAS "SMALLINT","INTEGER"
L_DescRub_Rubrique..Type = hRubEntier1

AUTRE CAS
L_DescRub_Rubrique..Type = hRubCaractère
FIN

// [ Taille de la rubrique ]
L_DescRub_Rubrique..Taille = Qadbifld.DBIILN

// [ type clé ]
L_DescRub_Rubrique..TypeClé = hCléDoublon

// [ Inscription ]
HDécritRubrique (L_DescTbl_Table, L_DescRub_Rubrique)


FIN

// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// { Valide la description du fichier de données }
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
soit L_Bool_WrtAna = HDécritFichier(L_DescTbl_Table)



Dans une autre méthode du composant, j'effectue des requêtes SQL sur la
table décrite dans l'analyse.

Lorsque je teste le projet du composant, le code fonctionne bien.

Dés que j'intègre le composant ( qui a sa propre analyse ) dans un
projet hôte, le code se plante : la méthode du composant chargée
d'effectuer la requête SQL ne trouve pas la table décrite plus haut et
provoque une erreur du type "Source de données MaSourceDonnées non
initialisée"


Si quelqu'un a une idée, ou une piste ?


JC


Bonjour.
penses bien à "attacher" tes tables externes à ta connexion avec un
hchangeconnexion. Pour cela, dans ton composant, prevois une option pour
changer les tables de connexion ( en passant en paramètre la connexion
existante.), voire même ouvrir la connexion si ce n'est pas fait dans le
projet hôte...