maj structure fichiers temp. : stratégie...
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Bonjour,

il est possible de créer des fichier temporaire comme avec le code suivant :


FTMP est une Source de Données
descFic est une Description de Fichier
descRub est une Description de Rubrique
// libère les ressources
HAnnuleDéclaration(FTMP)
// Crée le fichier
descFic..Nom="FTMP" // même nom que la source...
descFic..NomPhysique="FTMP_"+cUser // cUser : utilisateur courant dans le groupware
descRub..Nom = "IDFTMP"
descRub..Type = hRubIdAuto
HDécritRubrique(descFic,descRub)
descRub..Nom = "CODE"
descRub..Type = F.F_CODE..Type // utilise des définitions de l'anlyse pour compatibilité des zones
descRub..Taille = F.F_CODE..Taille
descRub..TypeClé=hCléUnique
HDécritRubrique(descFic,descRub)
...
HAnnuleDéclaration("FTMP") // libere la source
HDécritFichier(descFic) // ajoute la description du fichier
HCréationSiInexistant(FTMP) // crée le fichier
// Ensuite utiliser la source pour exploiter le fichier


A partir de là, tout va bien, installation, utilisation ...

maintenant, j'ajoute une rubrique dans mon temporaire.
Je l'ajoute donc dans la déclaration... et hcreation si inexistant() car je ne veux pas perdre les données du fichier. je ne vais pas expliquer pourquoi mais cette condition est obligatoire !

au lancement du projet, le moteur HF de génère une belle erreur à l'éxécution de hcreationsiinexistant() car la structure est le fichier ne correspondent pas.

Conclusion : pour les fichiers décrits dans l'analyse on a wdconvert ou l'utilitaire de maj des structure... mais pour les fichier dynamique, comment fait-on ?

Un Trés Grand Merci à Celui Qui Trouvera...

Contribution le : 12/03/2003 14:55
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
extrait de l'aide

Attention : WDConver permet uniquement de convertir les données d'un fichier. Pour effectuer cette conversion, il est nécessaire de convertir au préalable la structure du fichier de données. Pour convertir la structure d'un fichier de données, sélectionnez l'option "Structure de fichiers .. Importer/Exporter des descriptions de fichiers/tables" depuis l'éditeur d'analyses de WinDev.


j'ai donc dans l'idée que je dois
- réaliser ma description de fichier
- tester l'existance du fichier
si existe
- créer un script de conversion ???
- utiliser wdconvert si mon fichier existe
sinon
- hcreation
fin

en attendant mieux, comment monter ce script...

Contribution le : 12/03/2003 15:39
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
la voie en cours
(pardonc je sis dans une classe, il se peut alors que des membres soit glissé dans le code..

en fait en cas d'erreur dans la structure, je pense ouvrir le fichier, faire un dump (export en txt), hcréer le fichier et récupérer les données (himportetexte)


QUAND EXCEPTION DANS
HCréationSiInexistant(cNomFic)
FAIRE
cFicPhys est une chaîne = :m_cRep+"\"+cNomFic+".fic"
ctxt est une chaîne = :m_cRep+"\"+cNomFic+".txt"
nfic est un entier
SI fRep(cFicPhys,frFichier)<>"" ALORS
Info("le fichier existe déja",HListeRubrique(cNomFic))
// DUMP le fichier dans un txt
Sablier
nfic=fOuvre(ctxt,foCréation+foLectureEcriture)
SI nfic<>-1 ALORS
POUR TOUT cNomFic
fEcritLigne(nfic,HRécupèreEnregistrement(cNomFic))
FIN
fFerme(nfic)
FIN
// crée avec nouvelle structure
HCréation(cNomFic)
// re-importe les données
HImporteTexte(cNomFic,ctxt,TAB+Caract(127)+""""+Caract(127)+RC,hImpSansDélimiteur)
HOuvre(cNomFic)
Sablier(Faux)
FIN
FIN


saut que je ne puis parcourir le fichier, il n'as pas la structure voulue...

J'ai trouvé une solution, mais cela soulève un autre cas qui sera une grosse surprise... les fichiers HF vont souffir

Contribution le : 13/03/2003 09:29
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...

Inscrit:
19/11/2002 12:20
Post(s): 390
Question bête...
Ca ne marche pas avec la commande:
"HVérifieStructure" passée à (on va dire) "permissif"...

Contribution le : 13/03/2003 10:00
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...

Inscrit:
19/11/2002 12:20
Post(s): 390
ARf oublié de me logguer...

Contribution le : 13/03/2003 10:07
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
salut lmame, zoli avatar...
t'as pas un code pour cette fonction (jamais vue...) ?

il semble en effet que ma soluce est là...
mais je ne parviens pas à comprendre le retour de cette fonction...

Contribution le : 13/03/2003 11:01
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
t'as vu j'ai affécté ton message... (tu progresseras plsu vite dans le nombre de posts...)

Contribution le : 13/03/2003 11:18
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...

Inscrit:
19/11/2002 12:20
Post(s): 390
lol :)

Merci ;)

J'ai un peu regardé Hvérifiestructure...
Il y a un problème, apparemment on ne peut bosser avec QUE si le fichier est décrit dans l'analyse, et pas avec hdeclareexterne ou une création en fichier temporaire...

Ce qui marche:

J'ai décrit au départ dans l'analyse un fichier comme suit:
test_fic avec comme rubriques:
IDtest_fic "clé unique auto"
ranga "chaine de longueur 30"

je génère l'analyse, je rentre quelques valeurs dans le fichier et je le renomme "physiquement" en test_fic_ex.fic et pareil pour le ndx...


Je retourne dans l'analyse et je change la structure du ficheir ne rajoutant 2 rubriques:
je touche pas à:
IDtest_fic "clé unique auto"
ranga "chaine de longueur 30"

Je rajoute:
rangb "chaine de longueur 30"
rangc "chaine de longueur 30"


Je génère l'analyse SANS modifier le fichier test_fic_ex.fic et .ndx).

Si je cherche à exécuter le code suivant:

HFerme(Fic_test) // on dit à WinDev de fermer le fichier physique correspondant au fichier logique "Fic_test", donc "Fic_test.fic")
HChangeNom(Fic_test,"Fic_test_ex") //on dit que le fichier pysique du nom logique test_fic est le fichier (qui n'est PLUS à jour) "Fic_test_ex.fic"
HOuvre(Fic_test) //on ouvre le fichier logique Fic_tet, qui pointe vers "Fic_test_ex.fic"
HLitPremier(Fic_test,IDFic_test) // on lit le premier record

Trace(Fic_test.IDFic_test) // la clé unique
Trace(Fic_test.ranga+"A") // la première rubrique (existe dans les deux fichiers physiques)
Trace(Fic_test.rangb+"B") // la 2è rubrique "Fic_test_ex.fic"
Trace(Fic_test.rangc+"C") // la 3è rubrique "Fic_test_ex.fic"

On se prends une erreur comme quoi le fichier physique "Fic_test_ex.fic" est différent de l'analyse de "Fic_test"

Maintenant si vous faites ce code:
HVérifieStructure("*",hSansContrôle)
HFerme(Fic_test)
HChangeNom(Fic_test,"Fic_test_ex")
HOuvre(Fic_test)
HLitPremier(Fic_test,IDFic_test)

Trace(Fic_test.IDFic_test)
Trace(Fic_test.ranga+" A")
Trace(Fic_test.rangb+" B")
Trace(Fic_test.rangc+" C")


Là pas d'erreurs et dans la fenêtre de trace on a:

1 (correspond à la clé unique)
coucouA (première valeur dans le fichier "Fic_test_ex.fic")
B (2è valeur qui n'existe pas dans le fichier "Fic_test_ex.fic")
C (3è valeur qui n'existe pas dans le fichier "Fic_test_ex.fic")


Bref, ça marche...

Contribution le : 13/03/2003 12:04
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
ouaip C'est bien gentil mais à supposer qu'on ai supprimé des rubriques entre temps, que va dire le programme qui écrit ?

bon j'ai trouvé une solution mais je ne parvien pas à créer le fichier à partir de la nouvelle description... hcreation me prend l'ancienne description et donc ma nouvelle rubrique n'est pas crée.

en revanche dump/import sont ok

faire sauter la dernière desc de rubrique, lancer une fois
re-activeer la dernier rubrique et relancer...


// Cre Fichier temporaition
PROCEDURE _FIC_Cree()
// Crée un fichier temporaire en dynamique
dFic est une Description Fichier
dRub est une Description Rubrique
Abv est une chaîne = "CG"
cNomFic est une chaîne = "FIC_"+Abv
m_cRep est une chaine =frepencours()

dFic..Nom = cNomFic
dFic..Répertoire = m_cRep
dFic..Type = hFichierNormal

dRub..Nom = "ID"+cNomFic
dRub..Type = hRubIdAuto4
HDécritRubrique(dFic,dRub)

dRub..Nom = Abv+"_NUMERO"
dRub..Type = hrubEntier4
dRub..Taille = 3
dRub..TypeClé = hCléDoublon
HDécritRubrique(dFic,dRub)

//----- rubrique à masquer pour la première execution
dRub..Nom = Abv+"_RUB_VERSION2"
dRub..Type = hrubtexte
dRub..Taille = 30
dRub..TypeClé = hCléDoublon
HDécritRubrique(dFic,dRub)
//fin de rubrique à masquer pour la première execution -----

// Annule la déclaration précedemment faite
SI PAS HAnnuleDéclaration(cNomFic) ALORS Erreur(HErreur())
// Décrit le fichier temporaire
HDécritFichier(dFic)
// Si le fichier temporaire n'existe pas, le crée à vide
//HCréationSiInexistant(cNomFic)
cFicPhys est une chaîne = m_cRep+"\"+cNomFic+".fic"
SI fRep(cFicPhys,frFichier)<>"" ALORS
HVérifieStructure(cNomFic,hIdentique)
QUAND EXCEPTION DANS
RENVOYER HOuvre(cNomFic)
FAIRE
SI ExceptionInfo(errCode)<>70016 ALORS EXCEPTION
FIN


cFicDel est une chaîne = m_cRep+"\"+cNomFic+".*"
ctxt est une chaîne = m_cRep+"\"+cNomFic+"_.txt"
nfic est un entier
ssrc est une source de données
hdeclareexterne(cficphys,"ssrc")
// DUMP le fichier dans un txt
Sablier
nfic=fOuvre(ctxt,foCréation+foLectureEcriture)
SI nfic<>-1 ALORS
POUR TOUT ssrc
fEcritLigne(nfic,HRécupèreEnregistrement(ssrc,";"))
FIN
fFerme(nfic)
FIN
HFerme(ssrc)
HAnnuleDéclaration(ssrc)
// supprime le fichier physique
fSupprime(cFicDel,frLectureSeule)
// crée le fichier avec nouvelle structure
// c la que ca merdoie

HCréation(cNomFic)
Info("nouvelle structure "+HListeRubrique(cNomFic))
// re-importe les données
HImporteTexte(cNomFic,ctxt,cListeRub,";"+Caract(127)+""""+Caract(127)+RC,hImpSansDélimiteur)
fSupprime(ctxt)
HOuvre(cNomFic)
Sablier(Faux)
RENVOYER Vrai
SINON
RENVOYER HCréationSiInexistant(cNomFic)
FIN


Contribution le : 13/03/2003 12:23
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...

Inscrit:
19/11/2002 12:20
Post(s): 390
Euh...
Ben je comprends pas, ça marche bien chez moi...
Il y a peut être un "effet d'affichage"...
Tu demandes d'afficher la structure "avant / Après" mais tu fais afficher toujours la NOUVELLE structure définie, et jamais l'ancienne, celle qui a posé problème...


Quand tu fais un:
Info("Structure d'un fichier sans l'analyse... "+HListeRubrique(cNomFic))

En fait tu demandes la structure DU NOUVEAU fichier...

Si tu veux afficher la structure du fichier qui "n'est pas au bon format", il faut faire:
APRES:
HDéclareExterne(cFicPhys,"ssrc")
cListeRub est une chaîne=HListeRubrique(ssrc)

Info(cListeRub)

...

Et là tu vois bien que le fichier physique a chnagé de structure entre ssrc et cNomFic ...

Contribution le : 13/03/2003 12:54
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
ben justement : je garde bien la même structure... et le hcreation crée un fichier avec l'ancienne...

c'est bète d'en resterr à 99.99 % de la solution...

Contribution le : 13/03/2003 13:54
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...

Inscrit:
19/11/2002 12:20
Post(s): 390
Ben non, il crée bien avec la nouvelle struture...

La meilleure preuve c'est que si tu fais l'affichage de l'ancienne, tu vois bien la différence...

La première fois, tu as:
la clé unique
la première rubrique

La nouvelle:
la clé unique
la première rubrique
la deuxième rubrique

Le coup d'après j'enlève la définition de la deuxième rubrique(pour forcer une erreur) et j'ai dans ce cas:
LA description de dernier fichier crée:
la clé unique
la première rubrique
la deuxième rubrique

La nouvelle description:
la clé unique
la première rubrique


Contribution le : 13/03/2003 14:38
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
effectivement : je testait avec une clé composée : invisible sous wdetat...

dire que j'ai le source final depuis 4 heures sous le nez...

@+ et merci lmame

Contribution le : 13/03/2003 14:49
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: maj structure fichiers temp. : stratégie...

Inscrit:
19/11/2002 12:20
Post(s): 390
Il faut dormir un peu ou prendre du café

En tous cas, bravo

Contribution le : 13/03/2003 14:55
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2