Affichage d'après un fichier

guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006 - 1 févr. 2006 à 15:20
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 - 3 févr. 2006 à 10:20
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

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
2 févr. 2006 à 14:04
@ 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
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 14:33
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
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 14:40
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
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
2 févr. 2006 à 14:43
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 14:55
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é?
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 14:56
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!
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 15:00
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
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
2 févr. 2006 à 15:04
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
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 15:07
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
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
2 févr. 2006 à 15:10
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
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 16:51
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?
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 17:21
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
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
3 févr. 2006 à 09:57
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
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
3 févr. 2006 à 10:20
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
0
Rejoignez-nous