Affichage d'après un fichier

Messages postés
113
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
16 avril 2006
-
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
-
bjr,
j'ai un fichier repertoire qui contient nom,prénom....
en cliquant sur le bouton afficher,toutes lé données s'affichent dans un listbox.
mais je n'arrive pas a faire que,sur le listboxClick, les données se réaffichent dans la zone de saisie.
comment faire?

34 réponses

Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
@ jlen :
ah, j'ignorai totalement cette information, bon ce n'est rien d'insurmontable. Comme tu le dis si bien il faudra gérer ce genre d'erreur soit même


@ guigui265
dit moi si tu peux t'en sortir avec ces informations supplémentaires où si c'est toujours encore insuffisant

@+

Cirec
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
encore que dans le cas de guigui le risque est faible:

1) les doublons n'étant pas souhaitables il vaut mieux faire un
indexof avant d'ajouter pour vérifier si l'enregistrement n'existe pas
déjà;

2) l'ajout se faisant obliagtoirement à le fin du fichier il y aura au
moins le numéro d'enregistrement qui différera et donc la chaine sera
obligatoirement différente



comme disait ma grand mère mieux vaut prévenir que guérir.



@+

jlen
Messages postés
113
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
16 avril 2006

j'avoue que je suis un peu perdu, mais je bosse dessus a fond
En fait, pour vous éclairer, je suis stagiaire dans une entreprise où j'ai pas mal 'applicatif à développer, donc une application qui permet de gérer les livres de leur bibliotheque. donc dans cette appli, je permet de saisir un nouvo livre,de le modifier pour corriger les éventuelles erreurs et de gérer le fait que le livre soi prété, en modifiant son statut(rendu ou pas), je permet également de faire la liste, de supprimer des items, et c'est donc avec ceci que vient le problemen vu que mon fichier est séquentiel, lorsque je supprime un enregistremen, l'index d l'item dans le listbox ne correspon plus et le soft n'a plus sa cohérence,de meme si je
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
Rien de tel que les méthodes de grand mère.
Par contre tu dis l'enregistrement se fait obligatoirement à la fin du fichier mais ce n'est pas forcément le cas moi j'ai fait un code similaire il y a longtemps déjà il me permettait de supprimer un enregistrement dans le fichier séquentiel et de le remplacer par un autre peut importe sa position dans le fichier ceci etant dit il est vrai que dans une utilisation normal l'ajout se fait en fin de fichier mais ce n'est pas obligatoire

@+
Cirec
Messages postés
113
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
16 avril 2006

a, j'oubliai, sur le click du bouton supprimer,en fait,je ne supprime pas physiquement l'enregistrement puisque l'on doit pouvoir lister les enrgistrement supprimer, je change donc l'étant supprimer comme suit:
seek(fbiblio,listbox.itemindex);
read(fbiblio,xbiblio);
xbiblio.supprime:='supprime';
seek(fbiblio,listbox.itemindex);
write(fbiblio,xbiblio);
le probleme est le meme, tjs un probleme d'index!
comment puis je corriger cette erreur d'un seul coup, simplemen? estce plus facil avec un fichier indexé?
Messages postés
113
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
16 avril 2006

et avec ta method cirec, c'est interessant mais comme je te l'ai dit,je ne supprime pas les enregistrement,je change leur état, mais sinon,dans ton cas,il aurai fallu gérer les espaces libre!
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
dans ce cas aussi cela fonctionne il suffit de détruire
l'enregistrement de la liste avant d'ajouter le nouveau ou de
surcharger simplement l'item et l'enregistrement et on n'a pas besoin
de faire addobject.

guigui--> pour garder la cohérence de ton fichier dans le cas d'une
suppression tu peux faire ce qu'on appelle une supression logique :
c'est à dire que quand tu supprime un enregistrement tu le marque
simplement comme effacé dans le fichier et dans tes listes
(quitte à te faire une liste des objet effacés) et c'est seulement
quand tu quittes le programme (dans l(évèment onclose ou onclosequery)
que tu mets à jour ton fichier disque (c'est le principe de la
corbeille de windows) En cas de plantage du systeme tu verifies au
chargement que l'enregistrement est valable.

une autre solution consisterait à recharger tes listes à chauqe
effacement mais ce serait beaucoup moins perforamnt en temps de réponses



@+

jlen
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
en fait c'est le même principe dans un fichier séquentiel tu ne supprimes pas physiquement l'enregistrement mais je le remplacais par : Ex. Nom = 'Guigui265' par Nom = 'X'
l'espace réservé à l'enregistrement est toujours la mais le 'X' m'indique qu'il est disponible pour un nouvel enregistrement donc avant d'ajouter en fin de fichier je comble d'abort les enregistrements qui ont un 'X'

@+
Cirec
Messages postés
113
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
16 avril 2006

mais dans mon cas,je ne supprime pas en fait, je change l'etat:
tout les champs restent identiques, sauf xbiblio.supprime qui change d'état, comme ca, je test sa valeur pour savoir si je doit l afficher ou pas, et j'ai toujours une trace de cet enregistrement pour lé archives, ou je fait le test inverse
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
C'est ce que je te disait dans mon poste précédent il n'est pas éffacé il est juste marqué comme tel

@+
Cirec
Messages postés
113
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
16 avril 2006

sur cet meme appli,je veux pouvoir effectuer une recherche où l'on saisie le numéro et ou l'on affiche le résultat dans la listbox, voici ma procédure vite faite:

procedure tfrm_principal.bt_rechClick();
var
trouve:boolean;
b:integer;
begin
listbox.clear;
b:=0;
trouve:=false;
while b<filesize(fbiblio) and trouve=false do
begin
seek(fbiblio,b);
read(fbiblio,xbiblio);
if (zs_num_rech=xbiblio.code) then
trouve:=true;
else;
b:=b+1;
end;
if trouve and (xbiblio.supprime<>'supprime' then
listbox.item.add(xbiblio.code+''+xbiblio.titre);
else
showmessage('pas de titre correspondant');
end.

est ce que ma procedure vous parait correcte et optimisée?
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
ea porcedure me parrait correcte quant au fonctionnement

pour l'optimisation

1) utiliser une listbox juste pour afficher un item est un peu
"sauvage" utilise plutot un Tedit si tu veux compléter uns saisie ou
un TLabel pour juste un affichage

2) plutot que

while b<filesize(fbiblio) and trouve=false do

mets plutot::

while not EOF(fbiblio) and not trouve do

3) puisque tu lis ton fichier en séquentiel l'instruction seek est
inutile puisque dans ce cas l'enreistrement lu sera l'enrgistrement N+1;

4) on peut remplacer b:=b+1 par inc(b)

5) si tu as besoin de connaitre le dernier enregistrement lu utilise la fonction filepos(fbiblio)

enfin pour des question de performance et comme tu as chargé ton
fichier au début tu devrais te faire des routines de recharche ou
d'extraction de données à partir de la memoire ou utiliser des listes
de reccords (les performamance peuvent varier de 1 à 1000);

@+

jlen
Messages postés
113
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
16 avril 2006

dacor, je note, mais pour l'affichage dans le listbox, je sais que c'est un peu barbar pour un enregistrement, mais je veu pouvoir bénéficier du listbox click, donc si je n'ai pas a réécrir lé procedure qui lui appartienne, je pense que je gagne en optimisation, non?
@++
guigs
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
exact; encore que tu puisses appler le onclick de la listbox par
le onclick du TEdit tout dépend du code qui est dedans . D'autre part
si tu as à réutiliser la listbox celà t'éviteras d'avoir à la recharger.

Si tu veux optimiser le code tu peux utiliser la listbox par contre si
tu veux optimiser les performances je pense qu'il est préférable de
passer par un edit ou un label quitte à appler la routine de la listbox
ou la réécrire partiellement



@+

jlen