|
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
|
|
|
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
|
|
|
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
|
|
|
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
|
|
|
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
|
|
|
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
|
|
|
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
|
|
|
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
|
|
|
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
|
|
|
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
|
|
|
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
|
|
|
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
|
|
|
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
|
|
|
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
|
|
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.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|