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

Parcours un fichier selon un critere

17 réponses
Avatar
Questionneur
Bonjour, encore moi.

J'aimerai faire un truc simple:
parcours tous les enregistrement d'un article d'une marque d=E9termin=E9e
XX

Je le fais comme cela:

SI HlitRecherchePremier(ARTICLE,CODE_MARQUE,"XX") ALORS
TANTQUE HTrouve(ARTICLE)
Trace(ARTICLE.CODE_ARTICLE)
HLitSuivant(ARTICLE)
FIN
FIN

ce code marche sauf que la liste des articles n'est pas parcouru en
ordre alphab=E9tique des CODE_ARTICLES.

D'o=F9 ma question: suis-je oblig=E9 de pass=E9 par une requ=EAte ou une vu=
e?

Merci d'avance

10 réponses

1 2
Avatar
Firetox
Bonjour,

SI HlitRecherchePremier(ARTICLE,CODE_ARTICLE,caract(0),caract(255),
"CODE_MARQUE='XX'") ALORS
TANTQUE HTrouve(ARTICLE)
Trace(ARTICLE.CODE_ARTICLE)
HLitSuivant(ARTICLE)
FIN
FIN

devrait le faire
Avatar
VPSoft
Salut !

La rubrique "CODE_MARQUE" est-elle une clé ?

Si non, c'est normal car hLitSuivant lit dans l'ordre des Nos
d'enregistrement (C.f; doc)
Si oui, il faudrait essayer en ajoutant la rubrique à utiliser dans le
hLitSuivant :
HLitSuivant(ARTICLE , CODE_MARQUE)
Dernier point : j'aurais utilisé hEnDehors() au lieu de hTrouve()

Victor


"Questionneur" a écrit dans le message de news:

Bonjour, encore moi.

J'aimerai faire un truc simple:
parcours tous les enregistrement d'un article d'une marque déterminée
XX

Je le fais comme cela:

SI HlitRecherchePremier(ARTICLE,CODE_MARQUE,"XX") ALORS
TANTQUE HTrouve(ARTICLE)
Trace(ARTICLE.CODE_ARTICLE)
HLitSuivant(ARTICLE)
FIN
FIN

ce code marche sauf que la liste des articles n'est pas parcouru en
ordre alphabétique des CODE_ARTICLES.

D'où ma question: suis-je obligé de passé par une requête ou une vue?

Merci d'avance
Avatar
Questionneur
On 11 mai, 20:18, "VPSoft" wrote:
Salut !

La rubrique "CODE_MARQUE" est-elle une clé ?

Si non, c'est normal car hLitSuivant lit dans l'ordre des Nos
d'enregistrement (C.f; doc)
Si oui, il faudrait essayer en ajoutant la rubrique à utiliser dans le
hLitSuivant :
        HLitSuivant(ARTICLE , CODE_MARQUE)
Dernier point : j'aurais utilisé hEnDehors() au lieu de hTrouve()

Victor

"Questionneur" a écrit dans le message de news :

Bonjour, encore moi.

J'aimerai faire un truc simple:
parcours tous les enregistrement d'un article d'une marque déterminée
XX

Je le fais comme cela:

SI HlitRecherchePremier(ARTICLE,CODE_MARQUE,"XX") ALORS
  TANTQUE HTrouve(ARTICLE)
            Trace(ARTICLE.CODE_ARTICLE)
            HLitSuivant(ARTICLE)
  FIN
FIN

ce code marche sauf que la liste des articles n'est pas parcouru en
ordre alphabétique des CODE_ARTICLES.

D'où ma question: suis-je obligé de passé par une requête ou une vue?

Merci d'avance



STP, Pourquoi utiliser HEnDehors serait plus fiable que d'utiliser
HTrouve?
Avatar
Questionneur
On 11 mai, 16:59, "Firetox" wrote:
Bonjour,

SI HlitRecherchePremier(ARTICLE,CODE_ARTICLE,caract(0),caract(255),
"CODE_MARQUE='XX'") ALORS
  TANTQUE HTrouve(ARTICLE)
            Trace(ARTICLE.CODE_ARTICLE)
            HLitSuivant(ARTICLE)
  FIN
FIN

devrait le faire



HLitRecherchePremier n'accepte pas de tes paramètres.
Avatar
Firetox
bonjour,

alors fait un hfiltre (qui lui accept)

cordialement

"Questionneur" a écrit dans le message de
news:
On 11 mai, 16:59, "Firetox" wrote:
Bonjour,

SI HlitRecherchePremier(ARTICLE,CODE_ARTICLE,caract(0),caract(255),
"CODE_MARQUE='XX'") ALORS
TANTQUE HTrouve(ARTICLE)
Trace(ARTICLE.CODE_ARTICLE)
HLitSuivant(ARTICLE)
FIN
FIN

devrait le faire



HLitRecherchePremier n'accepte pas de tes paramètres.
Avatar
Romain PETIT
Questionneur a pensé très fort :
On 11 mai, 20:18, "VPSoft" wrote:

STP, Pourquoi utiliser HEnDehors serait plus fiable que d'utiliser
HTrouve?



Dans une recherche à l'identique (comme dans ton cas, HLRP option par
défaut), ce devrait être équivalent.

Mais voir l'aide à HLitRecherchePremier :

"
Recherche sur une rubrique clé ou non clé
La recherche peut être effectuée sur une rubrique clé ou non.
Si la recherche est effectuée sur une rubrique clé :

la recherche est rapide et le résultat est trié.

si le parcours est poursuivi avec la fonction HLitSuivant, les
enregistrements suivants correspondront aux valeurs supérieures ou
égales à la valeur recherchée. *Il faut dans ce cas tester la fonction
HEnDehors après chaque lecture, pour vérifier si la fin du fichier est
atteinte.*
"

A+

--
Romain PETIT
contact : rompetit chez free fr
+-+ posté sur Usenet avec MesNews et non depuis un forum web +-+
news:fr.comp.developpement.agl.windev
http://www.mesnews.net/
http://fr.wikipedia.org/wiki/Newsgroup
Avatar
Questionneur
On 12 mai, 12:37, Romain PETIT wrote:
Questionneur a pensé très fort :

> On 11 mai, 20:18, "VPSoft" wrote:
> STP, Pourquoi utiliser HEnDehors serait plus fiable que d'utiliser
> HTrouve?

Dans une recherche à l'identique (comme dans ton cas, HLRP option par
défaut), ce devrait être équivalent.

Mais voir l'aide à HLitRecherchePremier :

"
Recherche sur une rubrique clé ou non clé
La recherche peut être effectuée sur une rubrique clé ou non.
Si la recherche est effectuée sur une rubrique clé :

 la recherche est rapide et le résultat est trié.

 si le parcours est poursuivi avec la fonction HLitSuivant, les
enregistrements suivants correspondront aux valeurs supérieures ou
égales à la valeur recherchée. *Il faut dans ce cas tester la fonct ion
HEnDehors après chaque lecture, pour vérifier si la fin du fichier es t
atteinte.*
"

A+

--
Romain PETIT
contact : rompetit chez free fr
+-+ posté sur Usenet avec MesNews et non depuis un forum web +-+
news:fr.comp.developpement.agl.windevhttp://www.mesnews.net/http://fr.wik ipedia.org/wiki/Newsgroup



Sur le fichier ARTICLE:
CODE_ARTICLE est une clé.
CODE_MARQUE est une rubrique clé avec doublon.

HLitRecherchePremier(ARTICLE,CODE_MARQUE,'XX')
TANTQUE PAS HEnDehors()
HLitSuivant(ARTICLE)
FIN

mais les HLitSuivant(ARTICLE) prend le prochain enregistrement qui a
été inséré chrononologiquement après.
Donc le resultat n'est pas trié.

D'où ma question.
Avatar
Firetox
Bonjour,

Sur le fichier ARTICLE:
CODE_ARTICLE est une clé.
CODE_MARQUE est une rubrique clé avec doublon.


oui pas de problee mais au contraire des autre SGBD le fait qu'il y ai deux
index ne permet pas au serveur ou a la base de donnée de parcourir sur les 2
comme le ferait mySQL

HLitRecherchePremier(ARTICLE,CODE_MARQUE,'XX')
TANTQUE PAS HEnDehors()
HLitSuivant(ARTICLE)
FIN


la lecture est intialisée sur CODE_MARQUE donc la lecture du suivant sera
sur cette cle

mais les HLitSuivant(ARTICLE) prend le prochain enregistrement qui a
été inséré chrononologiquement après.



si mais sur la cle de lecture donc CODE_MARQUE
si la cle est identique dans l'ordre des numero d'enregistrement

Donc le resultat n'est pas trié.


pour cela il faut une cle composée (CODE_MARQ§UE+CODE_ARTICLE)
et a ce moment la la lecture sera trie sur marque, article HF lit suivant
les index qu'il a et un seul car c'est un SGBD sequentiel, pour lui specifié
un parcours sur un ensemble d'index il faut qu'il existe dans le fichier
(d'ou le fait que HF creer physiquement une colonne avec les 2 colonne quand
on cree une cle composée alors que tous les autre SGBD R eux crée siplement
un index

dexueime solution que j'ai ennoncée : passer par un filtre qui isolera les
enregistrement par la MARQUE mais lira suivant le CODE_ARTICLE


D'où ma question.
Avatar
Romain PETIT
Questionneur avait prétendu :
mais les HLitSuivant(ARTICLE) prend le prochain enregistrement qui a
été inséré chrononologiquement après.
Donc le resultat n'est pas trié.

D'où ma question.



D'abord il est préférable de précisier dans le HLitSuivant la clé
utilisée par HLRP.

Ensuite, avec HLRP, le tri se fait sur la clé de recherche.
Donc, comme le dit Firetox, il faut prendre la clé CODE_ARTICLE avec un
filtre sur CODE_MARQUE.
Il est préférable d'utiliser/vérifier la clé donnée par HFiltre pour le
HLRP sinon risque de dégradation de perf.
Enfin, il faut préciser l'option hRespecteFiltre dans le HLRP.

sClé est une chaine
sClé = HFiltre(ARTICLE, CODE_ARTICLE, hValMin(), hValMax(),
"CODE_MARQUE = 'XXXXX'")

SI sClé~="CODE_ARTICLE" ALORS
SI HLitRecherchePremier(ARTICLE,sCléh, hRespecteFiltre) ALORS
TANTQUE PAS HEnDehors()
// blabla
HLitSuivant(ARTICLE,sClé)
FIN
FIN
FIN


mais en fin de compte, tu devrais plutôt utiliser une requete SQL...

sCodeSQL est une chaine
sdReq est une Source de données
sCodeSQL = [
SELECT
CODE_ARTICLE, CODE_MARQUE
FROM
ARTICLE
WHERE
CODE_MARQUE = '%1'
ORDER BY
CODE_ARTICLE ASC
]

sCodeSQL = ChaineConstruit(sCodeSQL, "XXX")

SI HExecuteREqueteSQL(sdReq, sCodeSQL) ALORS
HLitPremier(sdReq)
TANTQUE PAS HEnDehors(sdReq)
Trace(sdReq.CODE_ARTICLE + TAB + sdReq.CODE_MARQUE)
HLitSuivant(sdReq)
FIN
FIN

A+

--
Romain PETIT
contact : rompetit chez free fr
+-+ posté sur Usenet avec MesNews et non depuis un forum web +-+
news:fr.comp.developpement.agl.windev
http://www.mesnews.net/
http://fr.wikipedia.org/wiki/Newsgroup
Avatar
VPSoft
"Romain PETIT" a écrit dans le message de news:

Questionneur avait prétendu :
mais les HLitSuivant(ARTICLE) prend le prochain enregistrement qui a
été inséré chrononologiquement après.
Donc le resultat n'est pas trié.

D'où ma question.



D'abord il est préférable de précisier dans le HLitSuivant la clé utilisée
par HLRP.

Ensuite, avec HLRP, le tri se fait sur la clé de recherche.
Donc, comme le dit Firetox, il faut prendre la clé CODE_ARTICLE avec un
filtre sur CODE_MARQUE.
Il est préférable d'utiliser/vérifier la clé donnée par HFiltre pour le
HLRP sinon risque de dégradation de perf.
Enfin, il faut préciser l'option hRespecteFiltre dans le HLRP.

sClé est une chaine
sClé = HFiltre(ARTICLE, CODE_ARTICLE, hValMin(), hValMax(), "CODE_MARQUE =
'XXXXX'")

SI sClé~="CODE_ARTICLE" ALORS
SI HLitRecherchePremier(ARTICLE,sCléh, hRespecteFiltre) ALORS
TANTQUE PAS HEnDehors()
// blabla
HLitSuivant(ARTICLE,sClé)
FIN
FIN
FIN




Salut,
... ou alors utiliser l'autre syntaxe de hFiltre pour indiquer la clé qu'on
VEUT utiliser :

HFiltre(ARTICLE, CODE_ARTICLE, hValMin(), hValMax(), "CODE_MARQUE =
'XXXXX'")

Dans ce cas, pas besoin de SI sClé~="CODE_ARTICLE" ALORS
et pas besoin de hRespecteFiltre
Ceci dit, c'est vrai que pour faire "propre" dans une classe ou une proc
globale, il faut faire comme indiqué par Romain PETIT.

Attention au piège : vu que tu ne connais peut être pas encore hFiltre, je
te signale que la valeur de la marque (XXXX) doit être entre simples quotes
(touche à droite du caractère Guillemet).

Victor
1 2