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 :

Récupérer un Blob en Hexa.


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Points : 90
    Points
    90
    Par défaut Récupérer un Blob en Hexa.
    Bonjour,

    Je souhaiterais récupérer dans une variable le contenu d'un champ blob sous format hexadécimal.
    Est-ce possible ? Si oui, comment ?

    Merci.



    JJE

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Indiquer la BDD utilisée aurait été un plus , mais ce n'est pas une nécessité .
    il faut passer par un BlobStream .

    Suggestions de lecture : les FAQ Fichier dans un Blob
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Points : 90
    Points
    90
    Par défaut
    Il s'agit de MySQL.

    La question était mal posée sans doute. L'utilisation d'un TBlobStream ne me retourne pas la représentation hexadécimale du blob : si le champ blob contient un TRichEdit, par exemple, on reconnaitra dans le TBolbStream mon text ainsi que les caractères de contrôle inhérants au TRicheEdit. Or, ce que j'ai besoin de récupérer, c'est la représentation hexadécimale. Donc, je ne devrais voir apparaitre dans ma variable qu'une suite de caractères suivants : A..F et 0..9.

    La finalité est la suivante : je dois construire dynamiquement un query INSERT que j'exécuterai avec une commande ExecSQL et je dois passer dans la partie VALUES le contenu d'un blob issu d'une autre table. Exemple de commande SQL à contruire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT MaTable (MaTableID, MonBloB)
    VALUES (23256975, #A0F9F45D709CD)
    En fait, dans la partie VALUES, j'ignore également comment faire comprendre à MYSQL que la valeur que je passe au champ blob est une valeur exprimée en hexadécimal.



    JJE

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut

    Dans la recherche, en mettant "BLOB HEXA" dans la section Delphi, tu trouves le sujet mettre image dans un 'INSERT TO', le but était de générer le SQL d'insert dans le BLOB !
    Exactement la même question ! Dingue !

    ce qui t'intéresse c'est l'utilisation BinToHex via un Blob et un Stream

    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
    function BlobToHexaString(BlobField: TBlobField): AnsiString;
    var
      MemoryStream: TMemoryStream;
    begin
      MemoryStream := TMemoryStream.Create();
      try
        BlobField.SaveToStream(MemoryStream);
        MemoryStream.Position := 0;
     
        SetLength(Result, FileStream.Size * 2);
        BinToHex(PAnsiChar(MemoryStream.Memory), PAnsiChar(Result), MemoryStream.Size);
      finally
        MemoryStream.Free;
      end;
    end;
    En MySQL, je connaissais 0x mais pas # : MySQL 5.0 Reference Manual :: 8 Language Structure :: 8.1 Literal Values :: 8.1.4 Hexadecimal Literals
    ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Points : 90
    Points
    90
    Par défaut
    Merci ShaiLeTroll, c'est exactement ce qu'il me fallait !
    Il s'agissait effectivement de 0x et non #.



    JJE

  6. #6
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Bonjour,

    Cette discution est résolu,mais j'ai également besoin d'aide sur le sujet.

    J'ai une base de données (qui n'est pas de moi) qui contient un champ appelé TVADoc en type Blob.

    Je tente de lire sont contenu grace à l'astuce de Shail.

    Déjà sur ta procédure Shail est-ce que cela est juste ?
    SetLength(Result, FileStream.Size * 2);
    car cela ne compile pas chez moi j'ai remplacé par
    SetLength(Result, MemoryStream.Size * 2);

    Bref lorsque je fais cela :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Cnx: TADOConnection;
        Button1: TButton;
        Qry: TADOQuery;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        function BlobToHexaString(BlobField: TBlobField): AnsiString;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      // affichage champ blob
      With Qry do
      begin
        SQL.Clear;
        SQL.Add('Select TVADoc From Devis ');
        SQL.Add('Where Devis.Code = :xCode');
        Parameters.ParamByName('xCode').Value := 'DV000002';
        Open;
        Memo1.Text := FieldByName('TVADoc').AsString;
     
        showmessage(
        BlobToHexaString(TBlobField(FieldByName('TVADoc')))+#13+#10+
     
        BlobToHexaString(FieldByName('TVADoc') as TBlobField)
        );
      end;
     
    end;
     
     
    function TForm1.BlobToHexaString(BlobField: TBlobField): AnsiString;
    var
      MemoryStream: TMemoryStream;
    begin
      MemoryStream := TMemoryStream.Create();
      try
        BlobField.SaveToStream(MemoryStream);
        MemoryStream.Position := 0;
     
        SetLength(Result, MemoryStream.Size * 2);
        BinToHex(PAnsiChar(MemoryStream.Memory), PAnsiChar(Result), MemoryStream.Size);
      finally
        MemoryStream.Free;
      end;
    end;
     
    end.
    Cela me retourne toujours '2000', alors je comprends pas...

    Je vous remercie de vos lumières.

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    Déjà sur ta procédure Shail est-ce que cela est juste ?
    La fonction a été tapé directement sur le forum pour le sujet mettre image dans un 'INSERT TO', effectivement, le code a évolué en fonction du sujet cité, a part les erreurs de syntaxe, ça doit fonctionner

    TVADoc est un BLOB, il fait quel taille normalement ?
    Memo1.Text contient le Blob entier ?
    Vérifie les paramètres de ta Db, tu as peut-etre une limitation de la connexion sur le Blob, c'est un classique !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Récupérer un Blob d'une BDD ?
    Par optibonus dans le forum Langage
    Réponses: 1
    Dernier message: 28/04/2008, 00h07
  2. Récupérer un blob
    Par identifiant_bidon dans le forum Services Web
    Réponses: 2
    Dernier message: 14/11/2007, 07h58
  3. [SQL] Récupérer un BLOB avec php
    Par identifiant_bidon dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 06/11/2007, 12h24
  4. Réponses: 1
    Dernier message: 13/04/2007, 08h48
  5. Récupérer un blob
    Par J-P-B dans le forum XMLRAD
    Réponses: 2
    Dernier message: 08/07/2005, 15h40

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