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 :

TMemoryStream vers BLOB en utilisant l'API Mysql


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut TMemoryStream vers BLOB en utilisant l'API Mysql
    Salut à tous,

    Voilà une journée que j'essaye par tous les moyens de stocker une image bmp dans une base de donnée mysql en utilisant l'API Mysql et que je n'arrive à rien. Les données de mon image sont stockées dans un TMemoryStream et je ne vois pas comment construire ma requette pour aller l'écrire, ou le lire dans ma base de données.
    Je commence à désespérer alors je suis ouvert à toute proposition qui me ferai avancer d'un pas...

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Je ne suis pas sûr de comprendre ce que tu entends par API mySQL, mais au delà de tout middleware, la manipulation devrait se faire par le biais d'un champ de type TBLOBField, sur lequel existent les méthodes LoadFromStream et SaveToStream...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Pour moi l'API Mysql c'est le libmysql.dll que j'utilise avec mysql.pas...

  4. #4
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Peut-être alors en passant par un TFileStream et en y copiant le TMemoryStream, et après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE table
    SET blob_column=LOAD_FILE("lefichier")
    WHERE ...;

  5. #5
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    J'ai pas de solution à apporter, mais je trouve que c'est un peu de la bidouille de passer par un fichier.

  6. #6
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    euh... certes

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    De mon coté, j'arrive à passer mon stream en string pour l'inclure dans ma requête mais il doit me manquer une commande pour stocker la chaine en binaire dans la base de données

  8. #8
    Membre expérimenté
    Avatar de Harry
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 224
    Points : 1 331
    Points
    1 331
    Par défaut
    Voici un exemple que j'ai fait avec delphi7 - bdd firefird composants IB.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    myStream := TMemoryStream.Create;
            mybitmap := Tbitmap.Create;
     
            iml1.GetBitmap(lv1.Selected.ImageIndex,mybitmap);
            mybitmap.SaveToStream(myStream);
            dm1.lang001LG001FLAG.LoadFromStream(myStream);
    iml1 c'est une liste de bmp (imagelist) j'en met un dans mybitmap.

    Puis je fais un saveToStream de mon composant Tbitmap pour transférer l'image dans myStream puis j'affecte le stream à mon champ lang001LG001FLAG qui est de type blob contenant du binaire.

    Cette dernière partie pourra peut être t'aider

    Attention le .NET sur PDA peut causer des chutes de cheveux

  9. #9
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Harry
    Voici un exemple que j'ai fait avec delphi7 - bdd firefird composants IB.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    myStream := TMemoryStream.Create;
            mybitmap := Tbitmap.Create;
     
            iml1.GetBitmap(lv1.Selected.ImageIndex,mybitmap);
            mybitmap.SaveToStream(myStream);
            dm1.lang001LG001FLAG.LoadFromStream(myStream);
    iml1 c'est une liste de bmp (imagelist) j'en met un dans mybitmap.

    Puis je fais un saveToStream de mon composant Tbitmap pour transférer l'image dans myStream puis j'affecte le stream à mon champ lang001LG001FLAG qui est de type blob contenant du binaire.

    Cette dernière partie pourra peut être t'aider
    Harry, il utilise l'api MySQL et elle n'a pas de composant, c'est que de la programmation pour se connecter directement aux bases de données, faire des requetes etc..., il n'y a pas les mêmes possibilité qu'avec les bon composants Db, sinon je lui aurai montré ma QR sur le transfert de document vers une base de données
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  10. #10
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    il n'y a pas les mêmes possibilité qu'avec les bon composants Db


    OHHHHHHHHHHHHHHHH quand meme !!!!!!
    Il y a 99,99999999999 % de chance que ton composant soit basé sur la librairie de Mysql.

  11. #11
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par rvzip64
    OHHHHHHHHHHHHHHHH quand meme !!!!!!
    Il y a 99,99999999999 % de chance que ton composant soit basé sur la librairie de Mysql.
    Je parlais de composants style TxxxQuery, TxxxTable, etc ... chose que l'API MySQL ne fournit pas (MySQL.Pas c'est que de la programmation pour se connecter à MySQL).
    Tu ne peux pas te connecter avec un datasource et lier un dbgrid pour avoir le résultat en direct, tout obliger de faire à la mimine dans un dbgrid (A moins qu'elle est évoluée depuis ???)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  12. #12
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 902
    Points : 6 026
    Points
    6 026
    Par défaut
    J'ai chopé ce code en C# sur le net...

    Si ça peut vous donner des idées...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FileStream fs = (FileStream)opFileDg.OpenFile();
     
    byte[] myImageDB = new byte[fs.Length];
    fs.Read(myImageDB, 0, (int)fs.Length);
     
    MySqlCommand cmd = new MySqlCommand("insert into image values('"+ Path.GetFileName(opFileDg.FileName) + "',?paramImg)",con);
    MySqlParameter prm = new MySqlParameter();
    prm = cmd.Parameters.Add("paramImg", MySqlDbType.LongBlob, (int)fs.Length);
    prm.Value=myImageDB;
    prm.Direction = ParameterDirection.Input;			
    cmd.ExecuteNonQuery();
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  13. #13
    Candidat au Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Octobre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut retour sur le sujet
    Bonjour à tous

    après plusieurs années, j'ai exactement le même problème toujours en delphi 7, comment enregistrer un blob dans une BD Mysql avec mysql.pas, donc sans composant ?

  14. #14
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Tu as essayé ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TBlobField(SqlQuery.FieldByName('Image')).LoadFromStream(Stream);
    Sinon je pense pas que cela soit super d'enregistrer l'image dans la base, il faudrait plutôt une table qui contient le lien vers l'image.

  15. #15
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    Sinon je pense pas que cela soit super d'enregistrer l'image dans la base, il faudrait plutôt une table qui contient le lien vers l'image.
    Ah ... l'éternel débat qui revient sur le tapis

  16. #16
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    sinon, pour le LOAD_FILE il faut le \ comme séparateur dans le nom du fichier

  17. #17
    Candidat au Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Octobre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Oui Papy , l'éternel débat !

    en fait, non, il n'est pas judicieux d'enregistrer le lien dans une table et le fichier ailleurs surtout si on travail en client/serveur.
    et non TBlobField n'est pas une fonction connue de Mysql.pas.

  18. #18
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonjour à tous

    Je suis préocupé par la possibilité de manipuler des images liées à la table T_PRODUITS et sans êtres
    contenues dedans, inpendement de l'SGDB et de la structure réseau.

    Le dossier application contient le dossier images configuré ainsi une fois installé sur le PC SERVEUR.

    Images/Propriétés/Partage/Partage avancé/Partager ce dossier/Nom du partage ensuite j'ai selectionné
    Images et validé pour créer l'alias \\NomPCSERVEUR\Images.

    Les images sont nommées ainsi: 1-NomImage1, 2-NomImage2...

    Ensuite j'ai créé un fichier Config.INI contenant le Nom du PCSERVEUR.

    Var Str1,SERVEUR:AnsiString; f:TextFile; //variables globales.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TMD.DataModuleCreate(Sender: TObject);
    begin
       AssignFile(f,ExtractFilePath(Application.ExeName)+'Configuration\Config.ini');
          Reset(f);
        readln(f,Str1);
        SERVEUR:=Trim(Str1);
        CloseFile(f);
    end;
    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
    procedure TMD.T_PRODUITSAfterScroll(DataSet: TDataSet);
      var Str2:AnsiString;List:TStringList;
    begin
     
      list:= FindAllFiles('\\'+SERVEUR+'\'+'Images\',IntToStr(T_PRODUITS.FieldValues['ID_PRD_P'])+'-*.png',false); //connexion réseau.
      try
      Str2:=list.Strings[0];
      except
      list:= FindAllFiles(ExtractFilePath(Application.ExeName)+'Images\',IntToStr(T_PRODUITS.FieldValues['ID_PRD_P'])+'-*.png',false);// hors connexion.
      end;
     
      try
      Str2:=list.Strings[0];
      except
      try
      Str2:='\\'+SERVEUR+'\'+'Images\Vide.PNG' ;F_MAINFORM.Image1.Picture.LoadFromFile(Str2);Exit //connexion réseau. vide.PNG:image en instance.
      except
      Str2:=ExtractFilePath(Application.ExeName)+'Images\Vide.PNG';//hors connexion.
      end;
      end;
      F_MAINFORM.Image1.Picture.LoadFromFile(Str2)
    end;
    à vos critiques merci.

Discussions similaires

  1. Excel à Mysql Fly Job en utilisant l'API Java
    Par rdkhalil dans le forum Pentaho
    Réponses: 0
    Dernier message: 08/01/2010, 23h26
  2. Utilisation de l'API mySQL
    Par Eva01 dans le forum C++
    Réponses: 0
    Dernier message: 05/06/2008, 11h32
  3. Problème utilisation API MySQL
    Par naiko dans le forum C
    Réponses: 4
    Dernier message: 11/05/2006, 09h55
  4. (Problème) Utilisation de l'API mySQL [Delphi 2005 Perso]
    Par will-scs dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/08/2005, 18h26
  5. Utilisation des API MySQL // ADO ou BDE ? (sujet 2)
    Par rohstev dans le forum C++Builder
    Réponses: 8
    Dernier message: 07/11/2003, 10h50

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