bonjour tout le monde
s'il vous plait est ce que vous pouvez m'aider à trouver la solution pour supprimer un enregistrement(record) dans un fichier
merci à vous
bonjour tout le monde
s'il vous plait est ce que vous pouvez m'aider à trouver la solution pour supprimer un enregistrement(record) dans un fichier
merci à vous
salut,
Je ne pense pas qu'ont pourrait t'aider, avec si peu de renseignements, voir
version delphi, sgbd, et type de tables ?
je vais vous expliquer plue
j'ai un fichier
client =record
Id:integer;
poids:integer;
end;
fichier :file of client;
et j'ai dans une autre form où l'utilisateur va choisir le numero de client qui veut supprimer et qui correspond au numero d'enregistrement dans le fichier
Salut :
A mon avis, il faudrait :
- charger ton fichier de Record dans une variable mémoire (Array ou Liste)
- Supprimer le record correspondant dans la variable
- Enregistrer à nouveau.
A+
On progresse .....
Pour faire simple :
Dans un fichier, on ne supprime jamais rien ! (je vous jure !)
Donc partant de ce constat :
Soit (si tu as beaucoup de données et que tu ne peux pas te permettre de les charger en mémoire) :
Soit, de façon un peu plus sauvage (tu as de la place en mémoire vive : il n'y a pas trop de données, quelques méga-octets) :1) tu créés un nouveau fichier, sans ce record, dans le répertoire temporaire de windows par exemple.
2)tu supprimes le fichier original
3) tu effectues une copie de ton fichier temporaire à la place du fichier original.
Soit façon Microsoft :1)tu supprimes le fichier original (toutes tes données sont en mémoire, hein !)
2) tu créés le nouveau fichier, sans ce record
Tu as pris soin d'avoir un champ dans ton record qui indiques si la données est "effacée" ou non, ou bien tu as mis la valeur -65000 (par exemple) dans ton champ ID)
En gros tu n'effaces jamais vraiment rien (comme dans un fichier excel, Word, etc...)
Ton fichier ne peux QUE grossir, mais au moins, une erreur est toujours récupérable![]()
Bidouilleuse Delphi
merci à vous tout le monde je veux vous proposer une solution
si je vais supprimer le record numéro i alors
je vais copier lesrecord à partir du numéro i+1 jusqu'au dernier et les copier à partir du record numéro i
enfin je fat truncate(filesize(fichier)) pour supprimer le derneir record qui sera inutile par ce qu'il était copié déjà
c'est bonne cette solution ou non?
Ta solution, c'est juste pour le plaisir de compliquer la tâche ?
La solution de Waskol me semble meilleure
1) tu créés un nouveau fichier, sans ce record, dans le répertoire temporaire de windows par exemple.
2) tu supprimes le fichier original
3) tu effectues une copie de ton fichier temporaire à la place du fichier original
mais pour copier le fichier sans le record y a -t- il une fonction ou procedure qui le fait ou je doit lire aprés ecrire les record?
c'est bien à toi de lire et réécrire... soit en conservant le file of soit en utilisant un stream (se positionner au début du record et copier du début de l'enregistrement suivant à la fin, puis diminuer la taille du stream d'un record)
Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
. Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !
Jei,
Tout ça dépend de ce que contient le champ id de ton type client.
Si c'est ce que je soupçonne, le n° du client, alors tu vas avoir des problèmes.
Et tu en auras peut-être aussi si c'est autre chose, si ce numéro client est référencé ailleurs : puisque tu accèdes aux données en fonction de ce numéro, supprimer un enregistrement amène à décaler le n° d'accès pour tous ceux qui suivent.
Dans ce cas, j'ai toujours utilisé la façon dite "Microsoft" par waskol : un enregistrement marqué comme libéré peut tout simplement être réutilisé lors de la création d'un nouveau client.
Si les cons volaient, il ferait nuit à midi.
moi je suis débutant hein^^
Je faisais :
1) j'ouvre en mode lecture, le fichier contenant les enregistrements.
2) lecture du fichier (tant que sa fin n'est pas atteinte) : chaque record lu est mis dans un tableau mémoire dont l'index est incrémenté chaque fois (normal^^).
3) je ferme le fichier, et je l'ouvre en mode "ecriture", j'y place tous les enregistrements du tableau de records, sauf celui que je voulais effacer.
4) je ferme le fichier.
Ha oui...et si t'a un trop gros fichier de records, ce qui est pas souhaitable, tu le divise en plusieurs fichiers, c'est le mieux, du style : un par ville, ou par région, ou autre, le plus pratique que tu pourras, ainsi en charger un en mémoire tableau ce sera pas difficile et pour la maintenance c'est mieux.
Cliquez ici et reprenez le pouvoir !
A bas IE !, Google, et le pistage du net, testons DuckDuckGo.com
Lords Of The Realm II Download : Lords of the realm 2
Infos en anglais :Ici
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager