IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

supprimer un record dans un fichier


Sujet :

Delphi

  1. #1
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut supprimer un record dans un fichier
    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

  2. #2
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut
    salut,
    Je ne pense pas qu'ont pourrait t'aider, avec si peu de renseignements, voir
    version delphi, sgbd, et type de tables ?

  3. #3
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    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

  4. #4
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    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 .....

  5. #5
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    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) :
    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, 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 supprimes le fichier original (toutes tes données sont en mémoire, hein !)
    2) tu créés le nouveau fichier, sans ce record
    Soit façon Microsoft :
    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

  6. #6
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    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?

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    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

  8. #8
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    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?

  9. #9
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 865
    Points : 11 331
    Points
    11 331
    Billets dans le blog
    6
    Par défaut
    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 !

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 945
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 945
    Points : 5 659
    Points
    5 659
    Par défaut
    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.

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    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

Discussions similaires

  1. Supprimer les guillemets dans un fichier après écriture
    Par soulryo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/03/2005, 11h39
  2. Réponses: 3
    Dernier message: 27/01/2004, 18h46
  3. [LG]supprimer un enregistrement dans un fichier
    Par Marcus2211 dans le forum Langage
    Réponses: 10
    Dernier message: 17/11/2003, 00h59
  4. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30
  5. Stocker un record dans un fichier
    Par ushu dans le forum Langage
    Réponses: 7
    Dernier message: 13/12/2002, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo