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

Bases de données Delphi Discussion :

[Firebird] Lire un champ BLOB en utilisant FireDAC


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 182
    Par défaut [Firebird] Lire un champ BLOB en utilisant FireDAC
    salut
    j'ai un champ de type Blob dans une base de données

    comment Lire l'image stocker dans le champ BLOB en utilisant FireDAC
    j' ai essai le code suivant et ne fonctionne pas

    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
     
    procedure Tform1.SpeedButton1Click(Sender: TObject);
    begin
    with FDQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('Select PHOTOS FROM clients where n_client=:client');
      ParamByName('client').value:=edit1.text;
      Open;
    end;
     
    dbimage1.Stretch:=true;
    //Les deux lignes suivantes ont été essayées individuellement
    DBImage1.Picture.LoadFromFile(FDQuery1.Fields[0].AsString); // L'exécution réussit mais ne fonctionne pas, si en clique sur SpeedButton1 Un message apparaît: (extention de fchier image inconnue)
     
    DBImage1.Picture.Bitmap.Assign(FDQuery1.Fields[0].AsString); // ne fonctionne pas Un message apparaît: E2010 Types incompatibles : 'TPersistent' et 'string'
     
    label1.caption:='voila l''image de client N°'+edit1.text;
    end;

    SGBD utilisé :firebird 2.5

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 942
    Billets dans le blog
    6
    Par défaut
    Si je comprends ce que vous écrivez, PHOTOS est un champ BLOB contenant un fichier image.
    Mais si je comprends bien vos essais, vous tâchez de l'utiliser comme une chaîne (AsString) contenant le chemin vers un fichier image. Si c'est bien le cas, le DBImage ne semble pas reconnaître son extension, et ce n'est pas un problème de BDD mais de TImage.
    Peut-être faudrait-il voir en debug ce que vaut le champ en AsString.
    Si c'est bien l'image elle-même qui est stockée dans un BLOB, pê faut-il passer par un stream intermédiaire ?
    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 !

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 182
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Si je comprends ce que vous écrivez, PHOTOS est un champ BLOB contenant un fichier image.
    oui et l'image elle-même qui est stockée dans un BLOB

    Je n'ai pas utilisé un chemin vers un fichier image
    Je ne sais pas comment utiliser un stream intermédiaire

    j 'ai stocker les photos des clients dans le champs photos avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    with FDQuery2 do
      begin
         Close;
         SQL.Clear;
         SQL.Text:='INSERT INTO clients (PHOTOS) VALUES (:PHOTOSparm)';
         ParamByName('PHOTOSparm').Assign(DBImage1.Picture.Bitmap);
    ExecSQL;
    end;
    end;

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 942
    Billets dans le blog
    6
    Par défaut
    Si c'est bien le Bitmap correspondant à l'image de format quelconque en entrée qui a été stocké, ce type de code trouvé sur StackOverFlow devrait le faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
      ms:tmemorystream;
    Begin  
      ms:=tmemorystream.create;
      ms.position:=0;
      with yourfield as tblobfield do
        savetostream(ms);
      ms.position:=0;
      image1.picture.bitmap.loadfromstream(ms);
      freeandnil(ms);
    end;
    Mais il y a sûrement moyen de le faire plus directement (composant DBImage, que je ne pratique pas...)
    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 !

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 182
    Par défaut
    MERCI
    Après avoir cherché
    Ce code fonctionne bien avec moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBImage1.Picture.Assign(TBlobField(FDQuery2.FieldByName('PHOTOS')));

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

Discussions similaires

  1. [Base de donnée] Écrire et Lire un champs BLOB dans MySQL
    Par DevMicroEtDB dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/11/2010, 03h37
  2. [MySQL] Lire / télécharger contenu PDF d'un champ BLOB
    Par domKr dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/06/2009, 16h36
  3. firebird + champ blob
    Par g0up1l dans le forum Hibernate
    Réponses: 1
    Dernier message: 08/06/2007, 00h39
  4. [SQLite] Comment lire un champ BLOB ?
    Par Pierre8r dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/06/2006, 11h20
  5. comment lire le champs BLOB
    Par simcity1969 dans le forum InterBase
    Réponses: 5
    Dernier message: 05/10/2005, 14h44

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