PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → suppression dans base de donnée HP7
suppression dans base de donnée HP7
Iniciado por johann.riviere, 14,oct. 2004 14:54 - 6 respuestas
Publicado el 14,octubre 2004 - 14:54
bonjour,

j'ai un petit probleme pour une de mes application, en fait je ne sais pas comment faire pour supprimer deux données de la base de donnée...
Je vous donne le code, si quelqu'un pourrais me dire pourquoi rien ne se passe lorsqu'il s'execute, ca a l'air de tourner en boucle sans rien faire.

montant est un monétaire
libelle est un chaîne
date est une chaîne
resnumenr est un entier

HLitPremier(TXACH,BDC)
TANTQUE PAS HEnDehors()
montant = TXACH.MONTANT_A
montant = -montant
date = TXACH.DATE_A
libelle=TXACH.LIBELLE_A
resnumenr=HNumEnr(TXACH)
HLitRecherche(TXACH,MONTANT_A,montant)
SI HTrouve() ET date=TXACH.DATE_A ET libelle=TXACH.LIBELLE_A ALORS
HSupprime(TXACH)
HSupprime(TXACH,resnumenr)
FIN
HLitSuivant(TXACH,BDC)
FIN

je vous remerci d'avance.

Johann.
Publicado el 14,octubre 2004 - 15:36
Le fait que tu lises 2 fois le même fichier, tu es forcément dépositionné lorsque tu fais le hLitSuivant

Avant le HLitRecherche, fais un hSauvePosition puis un hRetourPosition avant de faire le hSupprime du premier enregistrement

Ensuite fais le hLitSuivant

Dis moi si ca marche mieux

Bye
Publicado el 14,octubre 2004 - 16:26
Salut,

Le fait de lire deux fois ton fichier dans une même boucle a pour effet d'affoler le compteur du fichier (c'est valable dans tous les langages).

La solution consiste en la création d'une ou plusieurs varaibles correspondant au(x) critère(s) de tri de l'élément à effacer, de préférence en début de boucle.

Ca peut être long à l'exécution si le nombre d'enregistrements est élevé, mais ça marche.

bon courage.
Publicado el 15,octubre 2004 - 00:48
Essais de relire ton enreg apres la suppression su premier, mais je pense
que ton parcours de fichier sera completement faussé.
Il faudrat certainement que tu sauve ta position en cours d eparcours pour
revenir au bon endroit.


HLitPremier(TXACH,BDC)
TANTQUE PAS HEnDehors()
montant = TXACH.MONTANT_A
montant = -montant
date = TXACH.DATE_A
libelle=TXACH.LIBELLE_A
resnumenr=HNumEnr(TXACH)
HLitRecherche(TXACH,MONTANT_A,montant)
SI HTrouve() ET date=TXACH.DATE_A ET libelle=TXACH.LIBELLE_A ALORS
HSupprime(TXACH)
HLit(TXACH,resnumenr)
HSupprime(TXACH)
FIN
HLitSuivant(TXACH,BDC)
FIN


johann wrote:
bonjour,

j'ai un petit probleme pour une de mes application, en fait je ne
sais pas comment faire pour supprimer deux données de la base de
donnée...
Je vous donne le code, si quelqu'un pourrais me dire pourquoi rien ne
se passe lorsqu'il s'execute, ca a l'air de tourner en boucle sans
rien faire.

montant est un monétaire
libelle est un chaîne
date est une chaîne
resnumenr est un entier

HLitPremier(TXACH,BDC)
TANTQUE PAS HEnDehors()
montant = TXACH.MONTANT_A
montant = -montant
date = TXACH.DATE_A
libelle=TXACH.LIBELLE_A
resnumenr=HNumEnr(TXACH)
HLitRecherche(TXACH,MONTANT_A,montant)
SI HTrouve() ET date=TXACH.DATE_A ET libelle=TXACH.LIBELLE_A ALORS
HSupprime(TXACH)
HSupprime(TXACH,resnumenr)
FIN
HLitSuivant(TXACH,BDC)
FIN

je vous remerci d'avance.

Johann.
Publicado el 15,octubre 2004 - 11:32
je vous remerci, mais rien ne fonctionne la, rien n'est supprimé de ma base de donnée, je vous donnes le code maintenant tel qu'il est aprés les modif :

montant est un monétaire
libelle est un chaîne
date est une chaîne
resnumenr est un entier

HLitPremier(TXACH,BDC)
TANTQUE PAS HEnDehors()
montant = TXACH.MONTANT_A
montant = -montant
date = TXACH.DATE_A
libelle=TXACH.LIBELLE_A
resnumenr=HSauvePosition(TXACH,BDC)
HLitRecherche(TXACH,MONTANT_A,montant)
SI HTrouve() ET date=TXACH.DATE_A ET libelle=TXACH.LIBELLE_A ALORS
HSupprime(TXACH)
HRetourPosition(resnumenr)
HSupprime(TXACH)
FIN
HLitSuivant(TXACH,BDC)
FIN


Voila, en esperant que quelqu'un pourra m'aider
Publicado el 15,octubre 2004 - 18:55
bonjour,

il faut tester le cas où tu ne rentres pas dans ta condition du hTrouve pour faire un hRetourPosition dans ce cas là également

Bye
Publicado el 18,octubre 2004 - 16:03
Merci a tous pour votre aide, j'ai enfin reussi a faire ce que je voulais, et ce grace a tous vos conseil, je depose le code au cas ou quelqu'un voudrais faire la meme chose ...

HLitPremier(TXACH,BDC)
TANTQUE PAS HEnDehors()
montant = TXACH.MONTANT_A
montant = -montant
date = TXACH.DATE_A
libelle=TXACH.BDC
resnumenr=HSauvePosition(TXACH,BDC)
HLitRecherche(TXACH,MONTANT_A,montant)
SI HTrouve() ET date=TXACH.DATE_A ET libelle=TXACH.BDC ALORS
HSupprime(TXACH)
croise=1
FIN
HRetourPosition(resnumenr)
SI croise = 1 ALORS
HSupprime(TXACH)
croise=0
FIN
HLitSuivant(TXACH,BDC)
FIN

il ne vous reste plus qu'a mettre les bon noms de fichier HP7 pour pouvoir l'utiliser.

encore merci.

Johann