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 :

[D7] Timage32/Stream -> Ecrire et lire un flux dans une base


Sujet :

Delphi

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut [D7] Timage32/Stream -> Ecrire et lire un flux dans une base
    Bonjour à tous,

    J'essaye de sauvegarder un tImage32 dans un champ "mémo" (equivalent de blob je pense) d'une table Access.

    Je procède comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    imgTmp := TBitmap32.Create();
    imgTmp.LoadFromFile(opdMain.FileName);
    monFlux := TMemoryStream.Create();
    imgTmp.SaveToStream(monFlux);
    monFlux.Position := 0;
    TBlobField(adoqTemplate.FieldByName('impImg')).LoadFromStream(monFlux);
    imgTmp.Free;
    monFlux.free;
    Bon, ca a l'air de marcher (même si je m'étonne que dans mon champ, il n'y ai que: "BM¦?" pour une image, mais je me dis qu'il doit y avoir des caractères invisibles ou cachés).

    Seulement, je ne sais pas comment recharger mon flux... Comment remettre la valeur de ce champ dans un nouveau flux.

    Pouvez vous m'aider ?

    Merci d'avance.
    David.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Malatar a écrit une QR à ce sujet.
    Comment insérer et récupérer un fichier dans un champ de type BLOB ?

    C'est justement avec des compos ADO. Est-ce que cela répond à ta question?

    @+ Claudius

  3. #3
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour Cl@udius,

    J'avais vu cette page, mais elle ne semblait pas répondre à mon cas de figure, car lors de lé récupération, un fichier est créé.

    Je veux que tout se passe en mémoire.

    J'utilise des flux car tout ce que j'ai trouvé pour le moment semblait s'y orienter, mais pourquoi pas un tBitmap directement...
    Seulement, je ne sais pas comment le charger depuis la table.
    David.

  4. #4
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Je viens de faire l'exemple afinde tester, et le fichier (test.bmp) créé sur le disque n'est pas une image, en fait, quand je l'ouvre avec l'éditeur de texte, c'est juste un fichier qui contient la chaine texte qu'il y avait dans le champ de ma table (BMÊ/).

    Est ce que je l'aurais mal enregistré ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    img := TBitmap.Create();
    img.LoadFromFile(opdMain.FileName);
    ...
    adoqTemplate.Append;
    adoqTemplate.FieldByName('impImg').Assign(img);
    adoqTemplate.Post;
    ...
    TBlobField(adoqTemplate.FieldByName('impimg')).SaveToFile(ExtractFilePath(Application.ExeName)+'test.bmp');
    David.

  5. #5
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Je ne connais pas le type TBlobField mais à la lecture de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TBlobField(FieldByName('Fichier')).SaveToFile(sPath);
    Je me dis qu'il existe peut-être une méthode SaveToStream pour TBlobField
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  6. #6
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Oui, mais du coup, afin de tester l'exemple de la FAQ, je me suis réorienté vers une image.
    David.

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Essaye ceci. Je lis le contenu du blob et l'assigne à un TImage.

    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
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
      monFlux: TStream;
      imgTmp: TBitmap;
    begin
      imgTmp := TBitmap.Create;
      monFlux := ADOQuery1.CreateBlobStream(ADOQuery1.FieldByName('Image'), bmRead);
      try
        monFlux.Seek(0, 0);
        imgTmp.LoadFromStream(monFlux);
        Image1.Picture.Assign(imgTmp);
      finally
        monFlux.Free;
        imgTmp.Free;
      end;
    end;
    PS: Le champ Image de ma table est de type 'Objet OLE' et non mémo (le champ Mémo sous Access correspond à un BLOB TEXT).

    @+ Claudius

  8. #8
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Je suis sous access et j'ai utilisé un champ de type: Memo.

    Je suis bon ?

    Oups, je viens de voir ton post... J'ai été trop vite.
    David.

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    D'un autre côté pourquoi tu n'utilises pas le compo TDBImage. (Mais je crois qu'on te l'a dèjà suggéré côté BDD, vilain !! )

    @+

  10. #10
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Excellent, ca marche plutot bien, j'ai chargé un grosse image et aucun pb.

    J'essaye un autre truc avant de mettre résolu.

    Je ne passe pas par TDBImage car tout est créé dynamiquement, ce sont N calques que je dépose sur un tImageView32.

    Merci à vous tous.

    [EDIT]: http://www.developpez.net/forums/sho...64#post1689064
    David.

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

Discussions similaires

  1. Lire et ecrire dans une base de registre
    Par sakli dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 22/10/2008, 11h03
  2. Lire dans un Fichier Excel et Ecrire dans une base Access
    Par tarik75 dans le forum Modélisation
    Réponses: 1
    Dernier message: 03/09/2008, 21h10
  3. Réponses: 5
    Dernier message: 10/05/2008, 17h26
  4. Réponses: 7
    Dernier message: 26/05/2007, 15h14
  5. Réponses: 3
    Dernier message: 12/11/2003, 00h34

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