Image dans une base de donnée

Résolu
Signaler
Messages postés
131
Date d'inscription
lundi 20 novembre 2006
Statut
Membre
Dernière intervention
11 octobre 2010
-
 mouloud261 -
Salut tout le monde

comment enregistrer une image (Jpeg,bmp......) dans une base de données, c'est a dire avec un enregistrement et puis l'afficher dans un dbimage
  merci

28 réponses

Messages postés
131
Date d'inscription
lundi 20 novembre 2006
Statut
Membre
Dernière intervention
11 octobre 2010

Voila un bout de code que j'ai trouvé dans ce site et qui marche tres bien

pour enregistrer l'image dans la table voici le code
//ceici est la fonction de remplissage amélioté par F0xi
function WriteBlobFile(Table : Ttable; const Field, FileName : string) : boolean;
var blob,fs : Tstream;
begin
  table.edit;
  result := false;
  if (not FileExists(FileName)) or (not Assigned(Table)) then exit;
  blob := nil;
  fs   := nil;
  try
    blob := table.CreateBlobStream(table.FieldByName(Field),bmWrite);
    blob.Seek(0,soFromBeginning);
    try
      fs := Tfilestream.Create(FileName, fmOpenRead or fmShareDenyWrite);
      blob.CopyFrom(fs, fs.size);
  result := true;
    finally
      fs.Free;
    end;
  finally
    blob.Free;
    table.Refresh;
  end;
end;
/// ceci est la procedure à appeler lorsqu'on appui sur le bouton choix d'image!
procedure TAj_ele.OKClick(Sender: TObject);
Var fn:string;
begin
if Opd1.execute then
begin
    fn:=opd1.FileName;
   if not WriteBlobFile(eleve, 'ph', fn) then
      MessageDlg('Erreur d''ecriture du fichier dans la table...',mtWarning,[mbOk],0);
end;
image1.Picture.LoadFromFile(opd1.FileName);
end;
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Salut,

Quelle base de donnée utilise tu ?

Simon
Messages postés
131
Date d'inscription
lundi 20 novembre 2006
Statut
Membre
Dernière intervention
11 octobre 2010

J'utilise une base de donnée paradox  
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
il faut utiliser le type graphique "G" qui est en fait un blob..

cantador
Messages postés
131
Date d'inscription
lundi 20 novembre 2006
Statut
Membre
Dernière intervention
11 octobre 2010

J'ai utilisé le type graphique il m'a ecrit mais j'ai pas su comment l'utiliser par la suite   est ce que vous pouvez m'apporter encore un peut plus d'explication   

  merci
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Salut,
De mémoire, il me semble que tu peux faire :
MaTable.Append;
...
MaTableMonChampBLOB.Assign([image en BMP ou jpeg);
MaTable.Post;

Simon
Messages postés
131
Date d'inscription
lundi 20 novembre 2006
Statut
Membre
Dernière intervention
11 octobre 2010

ça ne veut pas marcher , est ce qu'il n yaurais pas une sourcee dans ce site ou il y a un exemple sur  sa ...   j'ai cherché mais rien trouvé

et est cec que je peux pas le faire a partir du module de base de donnée  
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
tu as un exemple dans la demo de borland (frame/DB/ je crois..)
merci de cliquer "reponse acceptée"

cantador
Messages postés
131
Date d'inscription
lundi 20 novembre 2006
Statut
Membre
Dernière intervention
11 octobre 2010

Ok j'ai vu l'exemple je vais essayer de le voir de plus pret  et le comprendre encore mieux
   merci     a bientot   
Messages postés
131
Date d'inscription
lundi 20 novembre 2006
Statut
Membre
Dernière intervention
11 octobre 2010

Je vais voir dabord l'exemple et le comprendre encore mieux pour cliquer sur reponse accepté     
Messages postés
637
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017

Bonjour,


En utilisant DBImage c'est plus simple pour les images bmp.


Une image prend becoups de place.


La base de donnée va grossir tres vite avec le nombre d'enregistrement.

Salutations

yvessimon
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Re salut,


Exemple d'enregistrement d'un bitmap dans un champ graphique

Ça marche... maintenant, les plus forts que moi te diront si c'est propre (mais ça c'est une autre histoire...)


Attention, ça ne marche que pour les BMP

cf -> aide delphi TBLOBTYPE ftGraphics


Si tu veux convertir un jpeg en bmp, tu as une function sur la JCL JPegToBitmap

(JCL et JVCL téléchargeable sur SourceForge)

Si c'est un autre format... je sais pas


procedure TFdepart.Button1Click(Sender: TObject);

var

   MyBMP : TBitmap;

begin

     MyBMP := TBitmap.Create;

     MyBMP.LoadFromFile( Nom du fichier bmp );

     TBL.Active : = True;

     TBL.Append;

     TBLnum.AsInteger := 1;

     TBLimg.Assign(MyBMP);

     TBL.Post;

     MyBMP.Free;

end;


Voilà

Si ça marche pas, merci de nous indiquer le message d'erreur, des fois ça peut aider...

Simon
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
LoadFromFile(Nom du fichier bmp);
c'est bien à condition d'avoir quelques images à montrer, mais si tu en as plusieurs centaines, là çà devient problématique de stoker tous les fichiers et autre argument, les BDD sont de plus en plus performantes et stockent de plus en plus de quantités impressionnates de données.

@bientôt

cantador
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
-> Cantador
J'ai pas tout compris... 
L'exemple montre comment enregistrer un bitmap dans une base de donnée paradox (je pense que ça marche également pour fb), ce qui répond à la question posée, non ? ()
Qu'entends-tu par des centaines de fichiers ?

Simon
Messages postés
131
Date d'inscription
lundi 20 novembre 2006
Statut
Membre
Dernière intervention
11 octobre 2010

///////////////////////   
    TBLnum.AsInteger := 1;
     TBLimg.Assign(MyBMP);
  //////////////////////////
  j'ai pas bien compris cette partie des instruction  que representent   tblnum et tblimg

   merci
Messages postés
131
Date d'inscription
lundi 20 novembre 2006
Statut
Membre
Dernière intervention
11 octobre 2010

Oui cantador a raison   

LoadFromFile(Nom du fichier bmp);
  tu ne vas pa a chaque fois changer le nom du bmp  si t'as beaucup d'images sa devient plus interessant la solution que tu proposes                       
 
Messages postés
131
Date d'inscription
lundi 20 novembre 2006
Statut
Membre
Dernière intervention
11 octobre 2010

J'ai toujours pas trouver de reponse a ma question   
Messages postés
637
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017

Bonjour,

Si l'image est enregistrée dans la base il est necessaire de la visualiser.


Aussi en utilisant dbimage il est possible de visualiser avant l'enregistrement. et après

Salutations

yvessimon
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
a Ali_usto


Sur :

TBLnum.AsInteger := 1;

TBLimg.Assign(MyBMP);

A priori, TBL c'est une table...

A priori, num c'est un champ integer

A priori, img c'est un champ graphique


A propos de mon code :

Ça explique comment faire entrer un bmp dans une table contenant un champ de type graphique. 
Pour l'exemple, j'ai choisi de créer un bmp avec un loadfromfile...
mais c'est un détail, ce qui est important, c'est la façon
d'enregistrer ce bmp dans la table ! (ce qui, je pense, répond à ta
question initiale). Après, si tu récupères une image autrement, c'est
une autre histoire...

Simon
Messages postés
131
Date d'inscription
lundi 20 novembre 2006
Statut
Membre
Dernière intervention
11 octobre 2010

Ok je vois j'ai saisi    je vais essayer ta methode  et voir si ça va marcher  
  merci