Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD75]Création de description de fichier HF à la volée

9 réponses
Avatar
elecoest
Bonjour,

Peut-on déclarer et utiliser un fichier HF décrit dynamiquement "à la
volée"?

En fonction du nom, du type, je souhaite créer dynamiquement un fichier HF
décrit à l'aide de la fonction HDécritFichier(). Les exemples montrent la
création de description dans le source... pas décrit à la volée.

Si vous avez des exemples je suis preneur.

--
Emmanuel

9 réponses

Avatar
farplus
elecoest a formulé ce samedi :
Bonjour,

Peut-on déclarer et utiliser un fichier HF décrit dynamiquement "à la
volée"?

En fonction du nom, du type, je souhaite créer dynamiquement un fichier HF
décrit à l'aide de la fonction HDécritFichier(). Les exemples montrent la
création de description dans le source... pas décrit à la volée.

Si vous avez des exemples je suis preneur.



si j'ai bien compris ton pb, je pense que j'ai quelque chose.
Peux-tu bien expliquer ce qui tu désires réellement et si tu es en 7.5
ou 8.
A+

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
farplus
farplus a exposé le 20/06/2004 :
elecoest a formulé ce samedi :
Bonjour,

Peut-on déclarer et utiliser un fichier HF décrit dynamiquement "à la
volée"?

En fonction du nom, du type, je souhaite créer dynamiquement un fichier HF
décrit à l'aide de la fonction HDécritFichier(). Les exemples montrent la
création de description dans le source... pas décrit à la volée.

Si vous avez des exemples je suis preneur.



si j'ai bien compris ton pb, je pense que j'ai quelque chose.
Peux-tu bien expliquer ce qui tu désires réellement et si tu es en 7.5 ou



Pardon, 7.5 mal lu l'entête :/
A+

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
elecoest
"farplus" a écrit dans le message de news:

elecoest a formulé ce samedi :
> Bonjour,
>
> Peut-on déclarer et utiliser un fichier HF décrit dynamiquement "à la
> volée"?
>
> En fonction du nom, du type, je souhaite créer dynamiquement un fichier


HF
> décrit à l'aide de la fonction HDécritFichier(). Les exemples montrent


la
> création de description dans le source... pas décrit à la volée.
>
> Si vous avez des exemples je suis preneur.

si j'ai bien compris ton pb, je pense que j'ai quelque chose.



Voici ce que je suis en train de mettre en place :

MonSource est une chaine

MonSource=""
MonSource=MonSource+"TableDesc est une description de fichier"+RC
MonSource=MonSource+"ItemDesc est une description de rubrique"+RC
MonSource=MonSource+"REQUETE"+requestNumber+" est une source de données"+RC
MonSource=MonSource+"// description du fichier"+RC
MonSource=MonSource+"TableDesc..Nom = ""REQUETE"+requestNumber+""""+RC
MonSource=MonSource+"TableDesc..Type = hFichierNormal"+RC
MonSource=MonSource+"TableDesc..CryptageFic = hCryptageStandard"+RC

POUR i=1 A NumFields(requestNumber)
MonSource=MonSource+"// description de la rubrique PRENOM"+RC
MonSource=MonSource+"ItemDesc..Nom = """+ColName(requestNumber,i)+""""+RC
SELON ColType(requestNumber,i)
CAS 1 : //chaine
MonSource=MonSource+"ItemDesc..Type = hRubTexte"+RC
MonSource=MonSource+"ItemDesc..Taille = "+ColLength(requestNumber,i)+RC
CAS 2 : //numérique
MonSource=MonSource+"ItemDesc..Type = hRubRéel4"+RC
CAS 12: //date heure
MonSource=MonSource+"ItemDesc..Type = hRubTexte"+RC
MonSource=MonSource+"ItemDesc..Taille = 20"
FIN
MonSource=MonSource+"HDécritRubrique( TableDesc, ItemDesc )"+RC
FIN
MonSource=MonSource+"// valide la description du fichier"+RC
MonSource=MonSource+"HDécritFichier(TableDesc)"+RC
MonSource=MonSource+"HCréation(REQUETE"+requestNumber+")"+RC
MonSource=MonSource+"renvoyer (0)"

// Source : champ dans lequel est saisi le code de procédure
sResultat est une chaîne
sResultatCompile est une chaîne
sResultatCompile = Compile("Proc_dynamique", MonSource)
SELON sResultatCompile
CAS "" : sResultat = ExécuteTraitement("Proc_dynamique", trtProcédure)
CAS "ERR" : sResultat = "Compilation impossible. "+RC+ErreurInfo()
AUTRE CAS : sResultat = sResultatCompile
FIN
RENVOYER sResultat

Peux-tu bien expliquer ce qui tu désires réellement et si tu es en 7.5



Ce que je veux c'est utiliser la puissance HF (Hlitxxx) pour optimiser le
parcours dans une requete (non HF). A chaque HLitSuivant, je stocke l'enreg
dans un fichier HF et si je fais un précédent au lieu d'aller en base, je
fais un HLitPrecedent dans ce fichier HF temporaire. Inconvénient au début :
il faut pouvoir créer dynamiquement ce fichier HF (Description) en fonction
des éléments de la requete, puis de faire des HAjoute. Voilà vous savez
tout.

Merci pour ton aide.

--
Emmanuel
Avatar
farplus
elecoest a pensé très fort :
"farplus" a écrit dans le message de news:

elecoest a formulé ce samedi :
Bonjour,

Peut-on déclarer et utiliser un fichier HF décrit dynamiquement "à la
volée"?

En fonction du nom, du type, je souhaite créer dynamiquement un fichier HF
décrit à l'aide de la fonction HDécritFichier(). Les exemples montrent la
création de description dans le source... pas décrit à la volée.

Si vous avez des exemples je suis preneur.



si j'ai bien compris ton pb, je pense que j'ai quelque chose.



Voici ce que je suis en train de mettre en place :

MonSource est une chaine

MonSource=""
MonSource=MonSource+"TableDesc est une description de fichier"+RC
MonSource=MonSource+"ItemDesc est une description de rubrique"+RC
MonSource=MonSource+"REQUETE"+requestNumber+" est une source de données"+RC
MonSource=MonSource+"// description du fichier"+RC
MonSource=MonSource+"TableDesc..Nom = ""REQUETE"+requestNumber+""""+RC
MonSource=MonSource+"TableDesc..Type = hFichierNormal"+RC
MonSource=MonSource+"TableDesc..CryptageFic = hCryptageStandard"+RC

POUR i=1 A NumFields(requestNumber)
MonSource=MonSource+"// description de la rubrique PRENOM"+RC
MonSource=MonSource+"ItemDesc..Nom = """+ColName(requestNumber,i)+""""+RC
SELON ColType(requestNumber,i)
CAS 1 : //chaine
MonSource=MonSource+"ItemDesc..Type = hRubTexte"+RC
MonSource=MonSource+"ItemDesc..Taille = "+ColLength(requestNumber,i)+RC
CAS 2 : //numérique
MonSource=MonSource+"ItemDesc..Type = hRubRéel4"+RC
CAS 12: //date heure
MonSource=MonSource+"ItemDesc..Type = hRubTexte"+RC
MonSource=MonSource+"ItemDesc..Taille = 20"
FIN
MonSource=MonSource+"HDécritRubrique( TableDesc, ItemDesc )"+RC
FIN
MonSource=MonSource+"// valide la description du fichier"+RC
MonSource=MonSource+"HDécritFichier(TableDesc)"+RC
MonSource=MonSource+"HCréation(REQUETE"+requestNumber+")"+RC
MonSource=MonSource+"renvoyer (0)"

// Source : champ dans lequel est saisi le code de procédure
sResultat est une chaîne
sResultatCompile est une chaîne
sResultatCompile = Compile("Proc_dynamique", MonSource)
SELON sResultatCompile
CAS "" : sResultat = ExécuteTraitement("Proc_dynamique", trtProcédure)
CAS "ERR" : sResultat = "Compilation impossible. "+RC+ErreurInfo()
AUTRE CAS : sResultat = sResultatCompile
FIN
RENVOYER sResultat

Peux-tu bien expliquer ce qui tu désires réellement et si tu es en 7.5



Ce que je veux c'est utiliser la puissance HF (Hlitxxx) pour optimiser le
parcours dans une requete (non HF). A chaque HLitSuivant, je stocke l'enreg
dans un fichier HF et si je fais un précédent au lieu d'aller en base, je
fais un HLitPrecedent dans ce fichier HF temporaire. Inconvénient au début :
il faut pouvoir créer dynamiquement ce fichier HF (Description) en fonction
des éléments de la requete, puis de faire des HAjoute. Voilà vous savez
tout.

Merci pour ton aide.



Le code ci-dessous est extrait d'un prog qui fonctionne très bien,
il faut juste l'adapter à tes besoins.
en cas de pb contacte-moi.
PROCEDURE ImportationX(repex)
//(repex est un répertoire éventuel)
//CONSTANT
// Quote= """"
//FIN
NumF1,NumF2,NumF3 sont des entiers
CleCompB est une chaîne
CleCompH est une chaîne
Lligne est une chaîne
rub est une chaîne
Resu est un booléen
sresultat est une chaîne
chchx est une chaîne="%1 est une Source de Données"+RC+"hcreation(%1)"
chch est une chaîne
chch1 est une chaîne
DetailRubriques est une chaîne
SI repex<>"" ALORS
chch1=RC+"si pas frep(frepencours()+"+Quote+ ...
""+repex+Quote+", frrepertoire)<>"+Quote+Quote+" alors"+RC+ ...
"frepcree(frepencours()+"+Quote+""+repex+Quote+")"+RC+"fin"+RC+"HSubstRep("+Quote+"?"+Quote+",
frepencours()+"+Quote+""+repex+Quote+")"
sresultat=Compile("Subst",chch1)
ExécuteTraitement("subst",trtProcédure)
FIN

Fexterne est une Description de Fichier
Frubrique est une Description de Rubrique
FLiaison est une Description de Liaison
Fmember est une Source de Données
idx est un entier
pour idx=1 a numfields(requestnumber) // selon tes explications
// HLitPremier(NomsFichiers,FileName)
//TANTQUE PAS HEnDehors(NomsFichiers)
//

// ici il faut changer selon tes besoins

Fexterne..Nom=NomsFichiers.FileName
CleCompB=HConstruitValClé(RubFichiers,FileNameSequentiel,NomsFichiers.FileName+hValMin)
CleCompH=HConstruitValClé(RubFichiers,FileNameSequentiel,NomsFichiers.FileName+hValMax)
HFiltre(RubFichiers,FileNameSequentiel,CleCompB,CleCompH)
HLitPremier(RubFichiers,FileNameSequentiel)
DetailRubriques=""
TANTQUE PAS HEnDehors(RubFichiers)
DetailRubriques+=RubFichiers.NomRubrique+TAB+RubFichiers.TypeHF+TAB+RubFichiers.IndiceRub+RC
Frubrique..Nom=RubFichiers.NomRubrique
SELON RubFichiers.RubCle
CAS 0
Frubrique..TypeClé=hCléDoublon
Frubrique..FormuleClé=RubFichiers.FormuleCle
CAS 1
Frubrique..TypeClé=hCléUnique
Frubrique..FormuleClé=RubFichiers.FormuleCle
FIN
SELON RubFichiers.TypeHF
CAS 1
Frubrique..Type=hRubIdAuto
CAS 2
Frubrique..Type=hRubTexte
CAS 3
Frubrique..Type=hRubEntier2
CAS 4
Frubrique..Type=hRubEntier1
CAS 5
Frubrique..Type=hRubEntier4
CAS 6
Frubrique..Type=hRubEntier4
CAS 7
Frubrique..Type=hRubRéel8
CAS 8
Frubrique..Type=hRubNumEnr
CAS 9
Frubrique..Type=hRubEntierNonSigné2
CAS 10
Frubrique..Type=hRubDate6
CAS 11
Frubrique..Type=hRubHeure
CAS 12
Frubrique..Type=hRubEntierNonSigné1
CAS 13
Frubrique..Type=hRubRéelTurbo
CAS 14
Frubrique..Type=hRubDate8
CAS 15
Frubrique..Type=hRubMémoTexte
CAS 16
Frubrique..Type=hRubMémoBinaire4
CAS 17
Frubrique..Type=hRubMonétaire
CAS 18
Frubrique..Type=hRubMémoBinaire
CAS 19
Frubrique..Type=hRubEntier8
CAS 20
Frubrique..Type=hRubEntierNonSigné8
CAS 21
Frubrique..Type=hRubImage
CAS 22
Frubrique..Type=hRubEntierNonSigné4
CAS 23
Frubrique..Type=hRubBinaire
CAS 24
Frubrique..Type=hRubDateHeure
CAS 25
Frubrique..Type=hRubDurée
CAS 26
Frubrique..Type=hRubCaractère
CAS 27
Frubrique..Type=hRubBooléen
CAS 28
Frubrique..Type=hRubIdAuto4
FIN
Frubrique..Taille=RubFichiers.TailleRub
Frubrique..NbElémentTableau=RubFichiers.IndiceRub
Resu=HDécritRubrique(Fexterne,Frubrique)
SI PAS Resu ALORS
HErreur(hErrEnCours)
RENVOYER Faux
FIN
HLitSuivant(RubFichiers,FileNameSequentiel)

FIN
chch=ChaîneConstruit(chchx,Fexterne..Nom)
HDécritFichier(Fexterne)
sresultat=Compile("Ouverture",chch)
ExécuteTraitement("ouverture",trtProcédure)
// ImporterFichier(NomsFichiers.FileName,DetailRubriques)
HLitSuivant(NomsFichiers,FileName)
FIN

A+

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
jacques trepp
elecoest wrote:
Bonjour,

Peut-on déclarer et utiliser un fichier HF décrit dynamiquement "à la
volée"?

En fonction du nom, du type, je souhaite créer dynamiquement un
fichier HF décrit à l'aide de la fonction HDécritFichier(). Les
exemples montrent la création de description dans le source... pas
décrit à la volée.

Si vous avez des exemples je suis preneur.



salut,
à mon avis, c'est pareil, en utilisant en plus la compilation dynamique.

--
Jacques TREPP
AlbyGest


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.708 / Virus Database: 464 - Release Date: 18/06/2004
Avatar
elecoest
Bon, je sais créer un fichier et l'alimenter, faire des ordres Hxx dessus.
Par contre comment récupérer les données dedans toujours via de la
compilation.

Voici ce que j'ai essayé vainement :

PROCEDURE PRIVÉE GetColFichier(requestNumber, numField)
MonSource est une chaîne
i est un entier

MonSource=""
MonSource=MonSource+"renvoyer
(""REQUETE"+requestNumber+"""."""+numField+""")"

// Source : champ dans lequel est saisi le code de procédure
sResultat est une chaîne
sResultatCompile est une chaîne
sResultatCompile = Compile("Proc_dynamique3", MonSource)
SELON sResultatCompile
CAS "" : sResultat = ExécuteTraitement("Proc_dynamique2", trtProcédure)
CAS "ERR" : sResultat = "Compilation impossible. "+RC+ErreurInfo()
AUTRE CAS : sResultat = sResultatCompile
FIN
RENVOYER sResultat

Je n'ai qu'un mot : HELP

--
Emmanuel
Avatar
farplus
Bonsoir
elecoest a pensé très fort :
Bon, je sais créer un fichier et l'alimenter, faire des ordres Hxx dessus.
Par contre comment récupérer les données dedans toujours via de la
compilation.

Voici ce que j'ai essayé vainement :

PROCEDURE PRIVÉE GetColFichier(requestNumber, numField)
MonSource est une chaîne
i est un entier


????

MonSource=""


???
MonSource=MonSource+"renvoyer


???
(""REQUETE"+requestNumber+"""."""+numField+""")"


en supposant que requestnumer=1 et numField=2
cela donne <Renvoyer("requete1"."2")>
est-ce bien ce que tu veux ?
si tu voulais <Renvoyer("requete1.2")> tu devrais coder
(""REQUETE"+requestNumber+"."+numField+""")"


// Source : champ dans lequel est saisi le code de procédure
sResultat est une chaîne
sResultatCompile est une chaîne
sResultatCompile = Compile("Proc_dynamique3", MonSource)


3 ici
SELON sResultatCompile
CAS "" : sResultat = ExécuteTraitement("Proc_dynamique2", trtProcédure)


2 ici
CAS "ERR" : sResultat = "Compilation impossible. "+RC+ErreurInfo()
AUTRE CAS : sResultat = sResultatCompile
FIN
RENVOYER sResultat

Je n'ai qu'un mot : HELP



A+

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
Manu
> > (""REQUETE"+requestNumber+"""."""+numField+""")"
en supposant que requestnumer=1 et numField=2
cela donne <Renvoyer("requete1"."2")>
est-ce bien ce que tu veux ?
si tu voulais <Renvoyer("requete1.2")> tu devrais coder
(""REQUETE"+requestNumber+"."+numField+""")"



En fait c'est ce que j'ai testé :-(

Ce soir j'essaie ta méthode qui a l'air mieux.

Merci
Avatar
elecoest
> en supposant que requestnumer=1 et numField=2
cela donne <Renvoyer("requete1"."2")>
est-ce bien ce que tu veux ?
si tu voulais <Renvoyer("requete1.2")> tu devrais coder
(""REQUETE"+requestNumber+"."+numField+""")"



Bon je l'ai refaite et elle marche :-) Merci à toi farplus

Pour info, c'est pour utiliser HF dans la gestion du précédent dans une
requete : à chaque fetch on sauvegarde l'enreg dans le fichier HF. En effet
certains sgbd ne font que des fetch :-)

Les temps de traitement ont l'air d'être au rendez-vous... Je vous tiendrez
au courant.

PROCEDURE PRIVÉE GetColFichier(requestNumber, numField)
MonSource est une chaîne

MonSource=""
MonSource=MonSource+"extern REQUETE"+requestNumber+RC+RC
MonSource=MonSource+"renvoyer
(""REQUETE"+requestNumber+"""."""+numField+""")"

// Source : champ dans lequel est saisi le code de procédure
sResultat est une chaîne
sResultatCompile est une chaîne
sResultatCompile = Compile("Proc_dynamique3", MonSource)
SELON sResultatCompile
CAS "" : sResultat = ExécuteTraitement("Proc_dynamique3", trtProcédure)
CAS "ERR" : sResultat = "Compilation impossible. "+RC+ErreurInfo()
AUTRE CAS : sResultat = sResultatCompile
FIN
RENVOYER sResultat

Sinon sa grande soeur (pour la postérité)

PROCEDURE PRIVÉE OrdreFichier(requestNumber, ordre)

MonSource est une chaîne

MonSource=""
MonSource=MonSource+"extern REQUETE"+requestNumber+RC
MonSource=MonSource+"retcode est un entier"+RC
MonSource=MonSource+"retcode=HLit"+ordre+"(REQUETE"+requestNumber+")"+RC
MonSource=MonSource+"renvoyer (HEnDehors)"

// Source : champ dans lequel est saisi le code de procédure
sResultat est une chaîne
sResultatCompile est une chaîne
sResultatCompile = Compile("Proc_dynamique2", MonSource)
SELON sResultatCompile
CAS "" : sResultat = ExécuteTraitement("Proc_dynamique2", trtProcédure)
CAS "ERR" : sResultat = "Compilation impossible. "+RC+ErreurInfo()
AUTRE CAS : sResultat = sResultatCompile
FIN
RENVOYER sResultat