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 :

Question sur la sauvegarde de données


Sujet :

Delphi

  1. #41
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Finalement, malgré que le code de neilbgr est plus propre, j'ai décidé de continuer avec mon code car :
    • Le formulaire est super modulable -> J'ai ajouté une CheckBox, une TrackBar et une ComboBox sans rien modifier au code. Même la position de l'image dans la ScrollBox est enregistrée; C'était principalement ce que je recherchais avec WriteComponent.
    • Le n° des clients est conservé et n'est pas mis à jour lors d'une suppression d'une fiche entre 2 clients.
    • Je compte ajouter la compression / décompression des fichiers et les fonctions d'enregistrement / chargement au format CSV.

    Vous trouverez les mises à jour à cette adresse : datasave4.zip
    De retour parmis vous après 10 ans!!

  2. #42
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Yop !

    Un petit souci avec le code de Neilbqr :
    Je lance le bigniou, je remplis les champs de Client1, je clique sur Ajouter, et la fiche de Client2 contient déjà le téléphone de Client1 !
    Je valide et enregistre le fichier, je ferme, je relance, j'ouvre le fichier, y a pas téléphone, ni pour l'un ni pour l'autre client.

    Bon, c'est sûrement très simple mais aujourd'hui ch'suis pas en forme.
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #43
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Correction faite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TFrmPrincipale.actAjouterClientExecute(Sender: TObject);
    begin
      actValiderModifications.Execute; // <- Il manquait ceci
     ...
    end;
    Fichiers attachés Fichiers attachés
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  4. #44
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Correction faite.
    Pas vu de modif à l'exécution...

    Par contre, si je fais ça (je commence à me réveiller...), ça fonctionne nickel :
    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
    procedure TFrmPrincipale.MettreAJourFicheClient;
    begin
      pnlFicheClient.Visible := (tabCtrlClients.TabIndex <> -1);
     
      if tabCtrlClients.TabIndex = -1 then
        Exit;
     
      with ClientEnCours do
        begin
          edtNom.Text := Nom;
          edtPrenom.Text := Prenom;
          edtAdresse.Text := Adresse;
          edtTelephone.Text := Telephone;  // -------<<< Ajouter cette ligne
          mmTexte.Lines := Texte;
          imgImage.Picture := Image;
        end;
    end;
     
    procedure TFrmPrincipale.actValiderModificationsExecute(Sender: TObject);
    begin
      if tabCtrlClients.TabIndex = -1 then
        Exit;
     
      with ClientEnCours do
        begin
          Nom := edtNom.Text;
          Prenom := edtPrenom.Text;
          Adresse := edtAdresse.Text;
          Telephone := edtTelephone.Text;  // -------<<< Ajouter cette ligne
          Texte := mmTexte.Lines;
          Image := imgImage.Picture;
        end;
    end;
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #45
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    @Sub0 :
    C'est normal que tu aies mis "WantTabs" du memo M_Texte à True ? C'est pénible pour accéder au bouton Image...
    Aide D7 :
    Si WantTabs a la valeur true, les utilisateurs peuvent tabuler pour arriver dans le contrôle de saisie, mais ils ne peuvent en sortir avec la touche Tab.
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #46
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Yes! Je savais bien que tu serais bloqué dans le memo.
    C'est pénible nan ?
    De retour parmis vous après 10 ans!!

  7. #47
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    C'est pénible nan ?
    Yeeeeeeeees !
    Et c'est vrai que quand on a beaucoup de saisie à faire, et donc beaucoup les mains sur le clavier, c'est pénible d'être obligé de le lacher pour aller chercher la souris.
    Enfin, c'est mon point de vue.
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #48
    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
    Citation Envoyé par Sub0
    Je suis en train de programmer les fonctions de conversion csv et je voulais savoir quelle structure utiliser. Pour le moment, j'enregistre d'abord la taille des données puis les données pour chaque élément. En ce qui concerne les images, je sauvegarde le nom du fichier, l'en-tête puis les données au format données brutes (bitmap) dont chaque octet est converti en son code Ascii. Cela double la taille des données mais cela reste compatible texte... Finalement, je me retrouve avec des fichiers plus gros qu'avec le format dfm...

    Avez-vous des suggestions, mon choix d'enregistrement des données est-il bon ?
    Pour la représentation d'un Bitmap, j'utiliserais un sytème de compression de données non destructif (façon zip), et je restituerais les octets du binaire obtenu en une suite de de représentations héxa. Le problème de convertir directement un byte en ASCCI, c'est avec les caractères spéciaux #13, #10 , #0
    Bidouilleuse Delphi

  9. #49
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par waskol
    Le problème de convertir directement un byte en ASCCI, c'est avec les caractères spéciaux #13, #10 , #0
    Je convertis l'octet $13 en chaîne '13' et l'octet $0 en chaîne '00' ce qui fait qu'au final je n'ai que du texte... Le csv c'est du texte, non ?
    Pour la compression, je possède une unité de compression LHA. Mais de toutes façons, je serais obligé de convertir ces données en texte ASCII (2 caractères pour un octet) pour conserver le format csv.
    De retour parmis vous après 10 ans!!

  10. #50
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    http://sub0.developpez.com/delphi/datasave4.zip

    • J'ai ajouté le code pour pouvoir utiliser le format CSV. Bizarrement, le chargement des fichiers CSV est plus long que les fichiers DFM. J'ai pourtant essayé d'optimiser au maximum. Si vous avez des suggestions à ce sujet, je suis preneur.
    • Dans Unit2, il ya la directive "CSV_ASCII" qui permet de choisir le format des images (octet ou chaîne hexa). On augmente donc par 2 la taille des images avec les chaînes hexa, mais le fichier CSV est compatible texte.
    • J'ai ajouté le redimensionnement de la form. L'éditeur s'ajuste en fonction de l'espace disponible.
    • Reste maintenant à ajouter la compression / décompression des fichiers. Comme j'utilise une unité un peu spéciale et peu utiliser par les Delphistes, je ne l'ajouterai pas dans cette démo, à moins que cela vous intéresse et dans ce cas, dites-le moi.

    J'espère que cette démo servira aux membres du forum et en particulier à petitprince. En tous les cas, c'est ce code que j'utiliserai pour mes développements intégrant des fiches de saisie car le programme est très facilement modulable.
    De retour parmis vous après 10 ans!!

  11. #51
    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
    Citation Envoyé par Sub0
    [url]
    • Reste maintenant à ajouter la compression / décompression des fichiers. Comme j'utilise une unité un peu spéciale et peu utiliser par les Delphistes, je ne l'ajouterai pas dans cette démo, à moins que cela vous intéresse et dans ce cas, dites-le moi
    Personellement, j'utilise TBackupFile (ec-software), qui est freeware, hyper simple à utiliser et assez complet. Et toi ?
    Bidouilleuse Delphi

  12. #52
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    LZRW1/KH de Kurt HAENEN
    De retour parmis vous après 10 ans!!

  13. #53
    Membre actif Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Points : 267
    Points
    267
    Par défaut
    On est pas hors sujet là ? ........ lol
    Bon me revoilà après une période de 3 jours d'absence...
    Perso, j'ai utilisé la méthode de waskol ( y va etre content !!), mais hélas, elle ne permet pas de sauvegarder des images....
    Elle me sert donc dans certain cas....
    Pour le reste, je vais regarder les deux autre méthode de sub0 et de neilbgr.
    Voilà à plus

  14. #54
    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
    Citation Envoyé par Sub0
    J'ai téléchargé TBackupFile et il ya plein de fichiers OBJ dans l'archive... C'est justement ce que je cherche à éviter -> Ne pas disposer de toutes les sources du composant. En fait, j'ai l'impression que TBackupFile est basé sur LZRW1/KH. Il s'agit de 2 unités, fichiers PAS. Je n'ai pas encore trouvé de composant qui fournissait toutes ses sources à part celui-ci... Je compte essayer de récupérer le code de TBackupFile et de l'adapter pour qu'il utilise ces unités afin d'obtenir les mêmes fonctionalités tout en ayant les sources.
    Oui, c'est vrai que tous ces .obj, c'est un petit peu dommage, c'est sur.

    Dans le fichier d'aide, il est écrit :
    *.obj New compression/decompression routines by Jean-loup Gailly and Mark Adler. This libraries are the original units from the Delphi 3 C/S CD without any modifications. Version is 1.1.3 (defined by the constant zlib_version in backup.pas - newer versions should be compatible)
    Le truc, c'est qu'il est tout de même possible d'obtenir les sources C++ ici : http://www.zlib.net/

    Pour une adaptation éventuelle, il existe un portage qui à été fait pour Turbo Pascal 7.0/Delphi 3.02 : http://www.nomssi.de/paszlib/paszlib.html

    Et encore mieux, la dernière version (1.2.3) existe pour Delphi 5, 6, 7, 8, 2005, et 2006, elle date du 2 juin (donc très récente), elle se base sur les même fichiers obj : http://www.base2ti.com/zlib.htm
    - supporte les fichiers gzip simples
    - tu y trouveras tous les .obj en question dans leur mise à jour la plus récente. Il n'y pas d'incompatibilité avec TBackupFile.
    - il y a une classe qu'y m'a l'air pas mal là-dedans : ZCompressStreamWeb


    Avec tout ça, ce devrait être franchement faisable de pondre un composant 100% Delphi en portant le code C en Delphi pour s'affranchir des .obj
    Bidouilleuse Delphi

  15. #55
    Membre actif Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Points : 267
    Points
    267
    Par défaut
    Je reviens un peu tard, tout ca pour vous dire que j'ai réussi mes sauvegardes dans mon fichier propriétaire ( enfin presque... y a plus que les listes d'images que j'arrive pas à sauver, mais bon...)
    Pour ma part, je pense que la question est résolu, donc...chti Tag !
    Encore merci à tous pour vos réponses !!!

  16. #56
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par petitprince
    y a plus que les listes d'images que j'arrive pas à sauver, mais bon...
    Tu as vu que j'avais codé des fonctions de conversion BitmapToString et StringToBitmap ? Cela pourrait te permettre d'enregistrer tes images avec un type String, mais bon...
    à+
    De retour parmis vous après 10 ans!!

  17. #57
    Membre actif Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Points : 267
    Points
    267
    Par défaut
    Oui j'ai essayé, la première marche bien mais la seconde, StringToBitmap, ne me remet pas l'image.... Bizarre je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
    bmp:TBitmap;
    begin
    bmp:=TBitmap.Create;
    StringToBitmap(bmp,MaChaine);
    Image1.Picture.Bitmap:=bmp;
    bmp.Free
    MaChaine contien biensur l'image (en cvs apparement ?)
    Voili Voilou a+

  18. #58
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Voici un code d'exemple.
    Le paramètre ascii est un boolean selon si tu as enregistré l'image au format texte (hexa) ou au format binaire :
    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
    Var bmp: TBitmap;
        ascii: Boolean;
        machaine: String;
    Begin
      bmp := TBitmap.Create;
      ...
     
      Try
        StringToBitmap(bmp, machaine, ascii);
        Image1.Picture.Bitmap.Assign(bmp);
        Image1.Width := bmp.Width;
        Image1.Height := bmp.Height;
      Except
      End;
      bmp.Free;
    End;
    ps: Récupère la dernière version (code dans unit2.pas) : datasave4.zip
    De retour parmis vous après 10 ans!!

  19. #59
    Membre actif Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Points : 267
    Points
    267
    Par défaut
    Je vais essayer ca, merci sub0...

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/01/2011, 10h09
  2. Question sur la sélection de donnée dans une base
    Par Masmeta dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/04/2008, 16h16
  3. [SQL 2000] Question sur les types de données
    Par Angath dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/11/2006, 14h05
  4. [Délestage]question sur les sauvegardes
    Par stephan55 dans le forum Oracle
    Réponses: 12
    Dernier message: 14/06/2006, 14h50
  5. question sur le rafraichissement des données dans la base
    Par vbcasimir dans le forum Bases de données
    Réponses: 8
    Dernier message: 06/06/2005, 12h44

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