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 :

[Toujours Débutant] : Modifier un enregistrement dans un fichier typé


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Par défaut [Toujours Débutant] : Modifier un enregistrement dans un fichier typé
    Bonjour à tous (Ô Grands Manitous Delphinesques )
    Etant quelqu'un de tétu et chevronné je persiste dans mes fichiers typés pour gerer mes enregistrements

    Par contre un tout piti probleme : comment modifier un enregistrement ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    Procedure MajClient;
    var
      Client : TClient;
    begin
      AssignFile(fic_client, 'Fic_Client.dat');
      if fileexists ('fic_client.dat') then
      begin
        reset (fic_client);
        seek(fic_client,Client_Index);
      //  write(fic_Client);
      end
      else
      begin
      rewrite (fic_client);
      end;
      Client.Code := F_EcrPr.E_Cli_1.Text;
      Client.Nom := F_EcrPr.E_Cli_2.text;
      Client.Adresse1 := F_EcrPr.E_Cli_3.text;
      Client.adresse2 := F_EcrPr.E_Cli_4.text;
      Client.CP := F_EcrPr.E_Cli_5.text;
      Client.Ville := F_EcrPr.E_Cli_51.text;
      Client.Tel1 := F_EcrPr.E_Cli_6.text;
      Client.tel2 := F_EcrPr.E_Cli_7.text;
      Client.fax := F_EcrPr.E_Cli_52.text;
      Client.portable := F_EcrPr.E_Cli_53.Text;
      Client.mail := F_EcrPr.E_Cli_8.Text;
      Client.soc := F_EcrPr.E_Cli_9.Text;
      Client.Compta := F_EcrPr.E_Cli_54.Text;
      Client.APE := F_EcrPr.E_Cli_10.Text;
      Client.TVA := F_EcrPr.E_Cli_55.Text;
      Client.Activite := F_EcrPr.E_Cli_11.Text;
      Client.Remarque1 := F_EcrPr.E_Cli_12.Text;
      Client.Remarque2 := F_EcrPr.E_Cli_13.Text;
      Client.Remarque3 := F_EcrPr.E_Cli_14.Text;
      Client.Reglement := F_EcrPr.E_Cli_15.Text;
      Client.RIB := F_EcrPr.E_Cli_16.Text;
      Client.Banque := F_EcrPr.E_Cli_17.Text;
      Write(fic_Client, Client);
      CloseFile(fic_Client);
    end;
    Et là l'enregistrement s'insere à la bonne position mais décale la suite donc je me retrouve avec en position n mon enregistrement modifié et en n+1 l'enregistrement original - j'aurai aimé que l'enregistrement modifié ecrase l'original (je sais je sais c'est le principe de la mise à jour )..

    Merci à vous tous pour vos réponses et au temps que vous avez deja consacré à m'aider.... (je vous citerai comme co-auteurs si mon projet se finalise un jour ... )

  2. #2
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Bon je veux pas être sarcastique, mais là t'es buté!

    Mais là, bin tu tombes typiquement sur un problèmes largement résolu par une base (comme tu le soulignes...)

    Note toi sur un papier le temps que tu perds à essayer de résoudre un tel problème, alors que c'est déjà fait en BD.
    Et ce sera pas le dernier problème.
    Et quand tout marchera (car j'espère que ton prog aboutira), avec la masse de données que tu comptes mettre dedans, il sera inutilisable car trop lent...

    Et si tu ajoutes une informations, que tu changes un id, que tu suprrimes une infos... ?

    Tes recherches, tu va les faire séquentiellement à chaque fois ? vaut mieux pas s'appeler 'Zorglub'

    Enfin, sinon j'ai pas la réponse à ta question.

    mais je voulais insister encore une fois sur le fait que tu es en train d'utiliser un tournevis pour enfoncer un clou !...

    Bon courage !
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Par défaut
    Citation Envoyé par TicTacToe
    Bon je veux pas être sarcastique, mais là t'es buté!

    Bon courage !
    Je sais Je sais mais petite explication succinte sans forcement raconter ma vie...
    En fait je commercialise un programme de gestion depuis 6 ans (pas fait par moi ) qui fonctionne sur ce type de "base de données" -
    y compris formation parametrage et SAV...
    De grands editeurs (Sage pour ne pas le nommer) trouve le concept tres abouti non pas la gestion co (qui est limite) mais ce systeme de stockage de données car il est clair que tu fais une copie du dossier sur un portable ou une clef usb et ton appli est fonctionnelle,
    chose que tu n'as pas avec une base de donnée (tu prends une base access pour avoir à peine un peu de communication avec d'autres choses il te faut le moteur jet (ou si je me trompe c'est Que mon BTS info de gestion m'a servi à rien )
    Tu veux modifier la taille des champs à l'install avec ce systeme c'est tout simple

    Si tu veux un minimum de performance c'est clair il faut passer en sql : donc moteur sql sur les postes nomades, sur le serveur ...
    Et question sauvegarde : si tu veut etre fiable il te faut un logiciel de sauvegarde base ouverte en sql donc encore une fois tu sors l'artillerie lourde...

    Mon concept etant clair je veux m'adresser au magasin de fruits et legumes (c'est un exemple pour de donner la taille de la clientele visée)...
    avec de un à 5 postes en reseau
    une sauvegarde en .bat ... un truc simple en fait pour l'utilisateur lambda
    Et si un jour tu as un appel te disant que l'appli ne fonctionne plus (je ne me le souhaite pas mais cela arrive ) je ne veux pas au telephone verifier si les liens odbc sont correct, si le serveur sql est operationnel
    je veux etre autonome dans le fonctionnement

    Si tu as un probleme reseau un jour avec des simples copies sur les postes tu peux demarrer en mode hors connexion puis fonctionner comme ca ...
    sans te soucier de savoir si le poste a ete reformaté par son cousin qui est ingenieur en informatique mais qui a oublié de reinstaller les pilotes odbc... (c'est du vecu ca...) donc toi tu es en deplacement et tu as un magasin totalment planté a l'autre bout de la france..

    enfin tout cela quoi mais me trompes je peut etre?

    En tout cas mon experience personnelle m'a mis sur cette voie (de garage peut etre)...
    Mais c'est clair que si j'arrive à mener a bien mon projet j'ai deja une clientèle de preneurs...
    Et cela me permettra peut etre de pouvoir faire travailler un developpeur chevronné comme toi pour faire le portage sous BDD et me prouver que j'avais tord...

    Voili voila toute l'histoire....
    Merci qd meme de tes reponses et conseils

  4. #4
    Membre émérite
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Par défaut
    ok tu insistes, alors j'insiste moi aussi

    avec mybase tu devrai pouvoir enregistrer tes données comme tu le souhaite, et pour le déploiement il te suffit d'inclure la dll midas.dll, ou alors tu peut même l'inclure dans ton exe, et bénéficier des facilités du fichier typé, mais aussi de celle de la base de données.
    http://jmcarayon.developpez.com/mybase/

    je viens de faire un test et effectivement même sans la dll ça fonctionne très bien

    bon courage pour trouver un contre-exemple

  5. #5
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut


    Il est certains qu'une base de ce type à des avantages.
    à contrebalancer avec les inconvénients (comme toujours )

    Mais les arguments que tu avances ne sont pas tout à fait corrects.
    Je me permets de donner mon point de vue.

    De grands editeurs (Sage pour ne pas le nommer) trouve le concept tres abouti non pas la gestion co (qui est limite) mais ce systeme de stockage de données car il est clair que tu fais une copie du dossier sur un portable ou une clef usb et ton appli est fonctionnelle,
    chose que tu n'as pas avec une base de donnée (tu prends une base access pour avoir à peine un peu de communication avec d'autres choses il te faut le moteur jet (ou si je me trompe c'est Que mon BTS info de gestion m'a servi à rien )
    C'est vrai que le stockage est simple.
    Mais une BD n'est pas forcément un client/serveur dans son intégralité (lourd à installer en général effectivement).
    Comme j'utilise Paradox, je parle de cette BD que je connais. Elle est légère et simple. Un serveur de fichier suffit.
    --> Les données + le prog sur une clef USB peut parfaitement fonctionner. Il y a un prog client BD à installer, léger et simple qui peut d'ailleurs être facilement intégrer à l'install de ton propre logiciel (et encore, MFDev à une solution très sympa pour ne même pas installer le moteur de données (BDE) donc cela est transparent pour le user).
    Donc argument non valable pour certaines BD.

    Tu veux modifier la taille des champs à l'install avec ce systeme c'est tout simple
    C'est à dire ? décider que la désignation doit faire 30 au lieu de 40 car ? dans ce cas tu es aussi embeté qu'un autre prog. Car soit tu dois modifier tes contraintes dans le prog (donc recompiler ton prog...), soit changer un fichier de description (et là, c'est intégré dans un descriptif BD de la même manière). Mais je concois que cela peut être plus simple dans certains cas.
    Allez, argument semi-valide on va dire

    Si tu veux un minimum de performance c'est clair il faut passer en sql : donc moteur sql sur les postes nomades, sur le serveur ...
    Totalement faux. La base Paradox n'a pas besoin d'un programme serveur. La base est utilisée uniquement en serveur de fichiers. Quant au SQL il est absolument pas indispensable, même au contraire si tu veux atteindre de bonne performances. Quant à parler de performance par rapport à des fichier texte... ce sera surement plus rapide avec un très faible volume, la limite sera franchie très rapidement quand le volume augmentera amha
    Je parle toujours de Paradox car je la connais, mais d'autres bases plus récentes existes de la même manière.

    Et question sauvegarde : si tu veut etre fiable il te faut un logiciel de sauvegarde base ouverte en sql donc encore une fois tu sors l'artillerie lourde...
    La sauvegarder est des plus simple à réaliser, puisqu'il il suffit de sauver le dossier ou sont tes fichiers BD.
    Par contre effectivement, il est impératif de fermer les bases pour les sauver. On ne peut pas sauver la base pendant qu'elle est utilisée.
    C'est une contrainte... Mais même en fichier texte, si tu sauves ta base pendant l'utilisation, tu risques d'avoir des surprises et des dé-synchronisations sur des liaisons...

    Mon concept etant clair je veux m'adresser au magasin de fruits et legumes (c'est un exemple pour de donner la taille de la clientele visée)...
    avec de un à 5 postes en reseau
    Comment gère tu tes verrouillages réseau avec des fichiers texte ? Le style de base que j'ai cité est l'idéal pour de petits réseau.

    une sauvegarde en .bat ... un truc simple en fait pour l'utilisateur lambda
    Oui, le même .bat avec la base stockée dans un dossier BD...

    Et si un jour tu as un appel te disant que l'appli ne fonctionne plus (je ne me le souhaite pas mais cela arrive ) je ne veux pas au telephone verifier si les liens odbc sont correct, si le serveur sql est operationnel
    je veux etre autonome dans le fonctionnement
    Pas de serveur SQL dans notre cas...
    L'appli ne fonctionne plus... cela peut venir de X raisons. Mais avec des fichiers texte comme avec une base, cela peut être compliqué et nécessiter ton intervention. Il te faudra redev. des outils pour réparer une base éventuellement endommagée... qui existe déjà en BD. Si tu dis au User 'recopier juste le fichier clients.txt' dans ce dossier, tu risques effectivement de ne pas avoir d'erreur de contrôle au niveau BD (géré par toi) mais d'être dans une situation incohérente au niveau des liens de tes fichiers.

    Si tu as un probleme reseau un jour avec des simples copies sur les postes tu peux demarrer en mode hors connexion puis fonctionner comme ca ...
    sans te soucier de savoir si le poste a ete reformaté par son cousin qui est ingenieur en informatique mais qui a oublié de reinstaller les pilotes odbc... (c'est du vecu ca...) donc toi tu es en deplacement et tu as un magasin totalment planté a l'autre bout de la france..
    Que ce soit des fichiers texte ou de la BD Paradox, le problème sera le même, il faudra recopier prog+datas autre part, éventuellement indiquer au prog ou sont les Datas. donc kif-kif.

    En tout cas mon experience personnelle m'a mis sur cette voie (de garage peut etre)...
    Mais c'est clair que si j'arrive à mener a bien mon projet j'ai deja une clientèle de preneurs...
    Et cela me permettra peut etre de pouvoir faire travailler un developpeur chevronné comme toi pour faire le portage sous BDD et me prouver que j'avais tord
    Je ne prétends pas être spécialement chevronné, bien que ce soit sympa , mais je voulais simplement te faire partager mon expèrience et te signaler que bon nombre des tes arguments sont erronés par manque de connaissance sur les BD je pense.

    L'avantage que tu vois je pense, c'est qu'en cas d'anomalie, il n'y aura pas de moteur de données qui bloquera à cause d'un problème d'incohérence. Mais le problème sera là !
    Alors que vaut-il mieux ?
    - être bloqué par le moteur BD qui vérifie la cohérence, et réparer de suite ?
    ou
    - ne pas être bloqué par une incohérence non décelée, croire que tout est OK, travailer 2 semaines dessus et s'apercevoir au bout de 2 semaines de saisie que tout est à ressaisir à cause d'une anomalie de départ ?

    Enfin, sinon, développer un moteur de BD (car c'est de cela qu'il s'agit), doit être super interessant en expèrience, et tout n'est pas à faire puisque c'est dédié à ton utilisation, donc c'est possible.
    Mais c'est pas le meilleur rendement !

    Bon courage en tout cas

    PS: je me suis laché là
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Il me semble quil'y a un problème lié au rewrite lorsque le fichier n'existe pas : il faudrait écrire "Client_index-1" records.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      ...
      else  begin
             rewrite (fic_client);
             for i:=0 to Client_Index-1 do write(fic_Client);
             end;
    ....
    Sans préjuger du bien fondé du choix de fichiers records, je te conseillerais de définir des procédures de gestions de fichiers records communes à l'ensemble des tables avec un objet Table qui proposerait des methodes comme :
    - Open(file_name,size_of_record,force_create_if_non_existent)
    - Read/write(Table_Index,Record_Pointer)
    - ...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Par défaut
    Est on obligé de marquer le problème avant de se suicider ?
    C'est decidé je bascule tout le toutim sous MyBase
    je vais donc me mettre à potasser cet outil...
    je pense que je ne vais pas manquer de vous enquiquiner avec d'autres questions stupides
    Par contre vous avez interet à me repondre
    Un site sur Mybase la comme ca????????

    et hop je marque comme résolu mais c'est vraiment pour vous faire plaisir!!!!

    Merci à tous mais ce n'est qu'un debut
    -------> Alex <--------
    PS Si ma femme divorce car je passe des nuits a tout refaire je vous en tiendré comme principaux responsables

  8. #8
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    lol

    MyBase je connaissais pas, et semble être à mis chemin (plutot coté BD qd même) des fichiers textes.

    le lien de Developpez cité par Denokan donne une bonne impression.

    Mais ou alors j'ai mal compris, mais la base est chargée totalement en mémoire et tous les traitements BD sont fait en mémoire ??? donc dans ce cas là c'est une base exclusivement mono-poste ?

    Sinon, il y a Paradox (évidemment je cite) mais base un peu vieille maintenant mais toujours performante et simple pour de petit réseaux.
    Sinon DBExpress, son remplacant... a creuser, je connais pas bien.

    Choisi la bonne base, adapté à ton besoin.
    Vérifie que MyBase peut être utilisée en réseau (vu que tu veux l'installer pour 5 postes par exemple).

    Enfin,... je pense que tu as raison de t'orienter vers une BD. Même si ca fait 3 heures que je dis que le fichier texte c'est le top... non je déconne
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/09/2008, 14h17
  2. Modifier un enregistrement dans un fichier texte
    Par Ludo75 dans le forum Langage
    Réponses: 4
    Dernier message: 10/05/2008, 00h05
  3. Modifier un enregistrement dans un fichier
    Par zykiel dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 07/02/2007, 22h23
  4. Réponses: 3
    Dernier message: 08/08/2006, 16h49
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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