PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → [WD20] : Comment changer la liaison d'une table fichier
[WD20] : Comment changer la liaison d'une table fichier
Débuté par Daniel, 17 mar. 2017 14:08 - 9 réponses
Membre enregistré
71 messages
Posté le 17 mars 2017 - 14:08
Bonjour,

Je fais appel à vos lumières car je n'arrive pas à changer le fichier parcouru associé à une table.

En fait, je crée un alias d'un fichier, je change le répertoire ainsi que le nom physique (nom qui peut varier d'une exécution à l'autre). Je voudrais que la table qui est liée initialement au fichier original soit liée à l'alias que je viens de créer. Je n'y arrive pas. Je vous joins le code utilisé. Il y a des Info() qui traînent car c'est toujours en phase de développement.

La dernière ligne provoque l'erreur suivante "Erreur n°10085 : Le champ Table n'a pu s'initialiser, car il a rencontré l'erreur HFSQL suivante : L'élément '34T1' n'a pas été trouvé." '34T1' étant le nom physique donné à l'alias.

// Création d'un alias sur base de la structure du fichier LIVRACYL
SI HAlias(LIVRACYL,sdCylindreEncodage) ALORS
// Création d'un nom physique pour l'alias
HChangeNom(sdCylindreEncodage,SansEspace(SAI_LOTFAB))
// Changement du répertoire de travail
HChangeRep (sdCylindreEncodage,gsSmapTemp)
SINON
Erreur("Echec de la création de l'alias",HErreurInfo())
RETOUR
FIN

// Vérification de l'existence d'un fichier temporaire d'encodage
SI fFichierExiste(gsSmapTemp+SansEspace(SAI_LOTFAB)+".FIC") ALORS
Info("Le fichier existe déjà")
SINON
Info("Le fichier n'existe pas encore")
HCreation(sdCylindreEncodage)
FIN

REQ_CYLINDRESLOTFAB_SEL_V20.paramCléUniqueLOTFAB = SAI_LOCLEUNIK
HExécuteRequête(REQ_CYLINDRESLOTFAB_SEL_V20)
SI HNbEnr(REQ_CYLINDRESLOTFAB_SEL_V20)>0 ALORS
// Il existe déjà des cylindres pour le lot de fabrication sélectionné dans LIVRACYL
HLitPremier(REQ_CYLINDRESLOTFAB_SEL_V20)
TANTQUE PAS HEnDehors(REQ_CYLINDRESLOTFAB_SEL_V20)
SI HCopieEnreg(sdCylindreEncodage,REQ_CYLINDRESLOTFAB_SEL_V20,hCopieIdAuto) ALORS
HAjoute(sdCylindreEncodage,hFixeIdAuto)
SINON
Erreur("Copie d'enregistrement impossible.")
SORTIR
FIN
HLitSuivant(REQ_CYLINDRESLOTFAB_SEL_V20)
FIN
FIN
Info("Liaison initiale : "+TABLE..FichierParcouru)
TABLE..FichierParcouru = sdCylindreEncodage..NomPhysique
Info("Liaison initiale : "+TABLE..FichierParcouru)
TABLE.LIVRCYL_1..LiaisonFichier = {sdCylindreEncodage+".LIVRCYL"}


Merci d'avance pour votre aide.

Dan
Posté le 17 mars 2017 - 14:51
Bonjour Daniel

dans ton code, tu testes sur l'existence de
gsSmapTemp+SansEspace(SAI_LOTFAB)+".FIC"
et si ca n'existe pas, tu créé sdCylindreEncodage

C'est normal ca ? Ca ne devrait pas être le ichier que tu teste qui est
créé ?

Si c'est une erreur, ca expliquerait ton message d'erreur

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


Le 3/17/2017 à 8:08 AM, Daniel a écrit :
Bonjour,

Je fais appel à vos lumières car je n'arrive pas à changer le fichier
parcouru associé à une table.

En fait, je crée un alias d'un fichier, je change le répertoire ainsi
que le nom physique (nom qui peut varier d'une exécution à l'autre). Je
voudrais que la table qui est liée initialement au fichier original soit
liée à l'alias que je viens de créer. Je n'y arrive pas. Je vous joins
le code utilisé. Il y a des Info() qui traînent car c'est toujours en
phase de développement.

La dernière ligne provoque l'erreur suivante "Erreur n°10085 : Le champ
Table n'a pu s'initialiser, car il a rencontré l'erreur HFSQL suivante
: L'élément '34T1' n'a pas été trouvé." '34T1' étant le nom physique
donné à l'alias.
// Création d'un alias sur base de la structure du
fichier LIVRACYL
SI HAlias(LIVRACYL,sdCylindreEncodage) ALORS
// Création d'un nom physique pour l'alias
HChangeNom(sdCylindreEncodage,SansEspace(SAI_LOTFAB))
// Changement du répertoire de travail
HChangeRep (sdCylindreEncodage,gsSmapTemp)
SINON
Erreur("Echec de la création de l'alias",HErreurInfo())
RETOUR
FIN

// Vérification de l'existence d'un fichier temporaire
d'encodage
SI fFichierExiste(gsSmapTemp+SansEspace(SAI_LOTFAB)+".FIC") ALORS
Info("Le fichier existe déjà")
SINON
Info("Le fichier n'existe pas encore")
HCréation(sdCylindreEncodage)
FIN

REQ_CYLINDRESLOTFAB_SEL_V20.paramCléUniqueLOTFAB = SAI_LOCLEUNIK
HExécuteRequête(REQ_CYLINDRESLOTFAB_SEL_V20)
SI HNbEnr(REQ_CYLINDRESLOTFAB_SEL_V20)>0 ALORS
// Il existe déjà des cylindres pour le lot de fabrication
sélectionné dans LIVRACYL
HLitPremier(REQ_CYLINDRESLOTFAB_SEL_V20)
TANTQUE PAS HEnDehors(REQ_CYLINDRESLOTFAB_SEL_V20)
SI
HCopieEnreg(sdCylindreEncodage,REQ_CYLINDRESLOTFAB_SEL_V20,hCopieIdAuto)
ALORS
HAjoute(sdCylindreEncodage,hFixeIdAuto)
SINON
Erreur("Copie d'enregistrement impossible.")
SORTIR
FIN
HLitSuivant(REQ_CYLINDRESLOTFAB_SEL_V20)
FIN
FIN
Info("Liaison initiale : "+TABLE..FichierParcouru)
TABLE..FichierParcouru = sdCylindreEncodage..NomPhysique
Info("Liaison initiale : "+TABLE..FichierParcouru)
TABLE.LIVRCYL_1..LiaisonFichier = {sdCylindreEncodage+".LIVRCYL"}


Merci d'avance pour votre aide.

Dan
Membre enregistré
71 messages
Posté le 17 mars 2017 - 15:39
Bonjour Fabrice, et ravi de te revoir, ici du moins ;)

sdCylindreEncodage est déclaré comme une source de données. En fait, je crée le fichier "temporaire" avec le nom saisi en SAI_LOTFAB.

Mais je viens de trouver ce qui posait problème, la table fichier était en "programmation", je viens de la passer en "parcours automatique" et tout roule. J'ai juste du ajouter
TABLE..FichierParcouru = sdCylindreEncodage
à la place des Infos("Liaison initiale:"). A noter que ce code placé après le HChangeRep() provoquait déjà la création physique du fichier.

Il ne me reste plus qu'un petit problème, à l'initialisation de la fenêtre, la table est toujours associée au fichier de l'analyse et affiche tous les enregistrements, j'aimerais qu'elle reste vide tant que l'utilisateur n'a pas saisi quelque chose dans SAI_LOTFAB. Mais je ne vois pas comment faire, c'est vendredi ! :)
Posté le 17 mars 2017 - 19:04
Ca, c'est facile...

tu fais, dans le code d'INIT DE LA TABLE,
matable..FIchierparcouru=VarGlobaleVIDEaudepart

Ensuite,q uadn tu veux la remplir, tu mets le fichier à parcourir dans
VarGLobaleVideAUDepart et un tableaffiche en mode init

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


Le 3/17/2017 à 9:39 AM, Daniel a écrit :
Bonjour Fabrice, et ravi de te revoir, ici du moins ;)

sdCylindreEncodage est déclaré comme une source de données. En fait, je
crée le fichier "temporaire" avec le nom saisi en SAI_LOTFAB.

Mais je viens de trouver ce qui posait problème, la table fichier était
en "programmation", je viens de la passer en "parcours automatique" et
tout roule. J'ai juste du ajouter
TABLE..FichierParcouru =
sdCylindreEncodage
à la place des Infos("Liaison initiale:"). A
noter que ce code placé après le HChangeRep() provoquait déjà la
création physique du fichier.

Il ne me reste plus qu'un petit problème, à l'initialisation de la
fenêtre, la table est toujours associée au fichier de l'analyse et
affiche tous les enregistrements, j'aimerais qu'elle reste vide tant que
l'utilisateur n'a pas saisi quelque chose dans SAI_LOTFAB. Mais je ne
vois pas comment faire, c'est vendredi ! :)
Membre enregistré
71 messages
Posté le 20 mars 2017 - 06:27
Merci Fabrice,

C'est tellement simple que l'on a honte de ne pas y avoir pensé...

Dan
Membre enregistré
71 messages
Posté le 20 mars 2017 - 14:03
Bonjour à tous,

J'ai encore un petit problème.

Suite à la création de l'alias, la fenêtre appelle une fenêtre d'édition dont les champs sont liés au fichier de base LIVRACYL (celui qui est aliassé ci-dessus).

Comment dois-je m'y prendre pour lier les champs de cette fenêtre d'édition avec ma source de données sdCylindreEncodage au lieu de LIVRACYL.

En WD 5.5 (ben oui je suis vieux), je faisais ceci dans le code d'initialisation de la fenêtre d'édition :
// Changement de la liaison champs-fichier
// 1er champ de la fenêtre
IsChamp = EnumèreChamp(FenEnCours(),i)
TANTQUE IsChamp<>""
SI {IsChamp}..Type<>typBouton ALORS
// Si le champ n'est pas un bouton, changement de l'assignation
ChampAlias(IsChamp,"ALIAS=LIVRACYL")
FIN
// Champ suivant
i++
IsChamp = EnumèreChamp(FenEnCours(),i)
FIN


En WD20, je n'arrive pas à traduire cela, je dois m'embrouiller les pinceaux quelque part.
Membre enregistré
71 messages
Posté le 20 mars 2017 - 15:44
N'ayant pas trouver une manière générique de changer les liaisons fichier, je me les suis tapées en dur car la modification était assez urgente et le nombre limité de champs me le permettait. Toutefois, je suis preneur d'indications pour procéder de façon assez similaire au code 5.5 ci-dessus.

Merci.

Bonne journée.

Dan
Posté le 20 mars 2017 - 18:53
Bonjour

les fonctions enumxxx sont dipo pour lister les champs

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


Le 3/20/2017 à 9:44 AM, Daniel a écrit :
N'ayant pas trouver une manière générique de changer les liaisons
fichier, je me les suis tapées en dur car la modification était assez
urgente et le nombre limité de champs me le permettait. Toutefois, je
suis preneur d'indications pour procéder de façon assez similaire au
code 5.5 ci-dessus.

Merci.

Bonne journée.

Dan
Membre enregistré
71 messages
Posté le 21 mars 2017 - 15:31
Bonjour Fabrice,

Je m'en doute puisque c'est ce que j'ai utilisé en WD5.5 mais apparemment c'est l'assignation correspondant à l'ancien ChampAlias qui me pose des soucis.

Meilleurs sentiments,

Dan
Posté le 11 mars 2019 - 17:06
Bonjour,
je remonte un peu ce sujet car j'ai un peu le même problème
je change le nom d'un fichier de ma BDD : "Participants" que je renomme grâce à une combo.
Le nouveau fichier est bien créé.
Dans le Hmap je vois bien les données que j'y ai ajouté.
mais quand je veux charger ma table fichier ("Participants") rien ne se passe
j'ai ce code :
gsFichierAParcourir="Participants_"+COMBO_Animation..ValeurAffichée
TABLE_Participants..FichierParcouru=gsFichierAParcourir
TableAffiche(TABLE_Participants,taInit)

Comme Patrice l'indique, à la première lecture dans l'init de la table j' ai bien :*
TABLE_Participants..FichierParcouru=gsFichierAParcourir


si quelqu'un pouvait me dire ce qui ne va pas.
Merci
Cordialement,
YL