Mon Timage est-il malade? Que faire?

Leader2000 Messages postés 187 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 28 août 2015 - 18 juin 2007 à 18:51
jelume Messages postés 120 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 15 novembre 2007 - 20 juin 2007 à 12:44
Mes grandes salutations à Tous!


J'ai une question. Mais curieusement, j'ai comme l'impression que cette question a été posée dans ce forum il y a de cela plusieurs mois. Malheureusement, sans reponse! Je n'avais pu repondre à cette dernière parce que j'en avais aucune notion pratique dessus.
Mais alors, je me rends compte que cette même préoccupation m'est aperçue dans mon travail.
La voici ma question:
J'ai une base de données, ayant trois champs: Nom, Fonction, Image
J'ai dû saisir trois enrenregistrements accompagnés de leurs fotos (passées par un scannage et ensuite importées dans mon Timage afin d'être enregistrées). Quand je defile dans ma Base de données, je me rends compte qu'aucune foto n'a été stockée.


Comme vous le voyez. Les codes ci-dessous me permette de faire ce processus. Ça marche "parfait". (juste pour l'importation dans le Timage). Après avoir saisi mes données et importer ma foto dans mon Timage, quand je clique sur mon Tbutton de sauvegarde. Je constate que l'enregistrement est fait seulement pour les champs: Nom, Fonction (mais aucune
image n'a été enregistrée pour ledit enregistrement). Que s'passe-t-il?


AdoVisGeral.FieldByName('movel').AsString:= maskedit2.text;
  AdoVisGeral.FieldByName('turma').AsString:= edit41.text;
  AdoVisGeral.FieldByName('periodo').AsString:= edit42.text;




procedure TVisGeral.BitBtn4Click(Sender: TObject);
begin
  if messageDlg('êtes-vous sûr de sauvegarder?', mtConfirmation, [mbYES, mbNO], 0) = mrYes then
  begin
  AdoVisGeral.Append;
  AdoVisGeral.FieldByName('nome').AsString:= edit1.Text;
  AdoVisGeral.FieldByName('fonction).AsString:= combobox2.Text;
  AdoVisGeral.FieldValues['foto]:= image1.AutoSize;//le probleme s'pose ici!  
  AdoVisGeral.Post;
  end else
  AdoVisGeral.Cancel;

Leader2000,
Merci d'avance.

5 réponses

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 2
18 juin 2007 à 20:47
Salut !

Ce qui se passe ? C'est simple: tu stockes une valeur dans ton champ 'foto' mais qui n'est qu'une propriété de ton TImage ! La propriété AutoSize en l'occurrence qui vaut True ou False.

Ce que tu dois faire, c'est sauvegarder l'image dans un flux image1.hraphic.savetostream(temp) où temp est un TMemoryStream ou TBlobStream. Et tu sauvegardes ce stream dans ta base de données.

As-tu compris ?

Flo
0
Leader2000 Messages postés 187 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 28 août 2015
19 juin 2007 à 17:40
Salut et merci de m'avoir repondu!


J'ai pu essayer le dit code : image1.hraphic.savetostream au de ceci comme avant: image1.AutoSize;

Mais il me fait un bugg.

Merci,
Leader2000


 
0
Leader2000 Messages postés 187 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 28 août 2015
19 juin 2007 à 17:40
Salut et merci de m'avoir repondu!


J'ai pu essayer le dit code : image1.hraphic.savetostream au lieu de ceci comme avant: image1.AutoSize;

Mais il me fait un bugg.

Merci,
Leader2000


 
0
deldoul35 Messages postés 26 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 26 juin 2007
20 juin 2007 à 11:28
bonjour
il vaut mieux d'utliser dbimage, mais tout d'abord il faut mettre le type de champ image à 'graph 'dans votre table, ensuite vous ecrivez votre programme
......
AdoVisGeral.Append;
  AdoVisGeral.FieldByName('nome').AsString:= edit1.Text;
  AdoVisGeral.FieldByName('fonction).AsString:= combobox2.Text;
pour le dbimage, la photo s'enregistre automatiquement sans faire une instruction

dalila
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jelume Messages postés 120 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 15 novembre 2007 1
20 juin 2007 à 12:44
Voilà un bout de code que j'ais écris récemment.
Il necessite une table avec une colonne pour stocker l'extension du fichier. En faisant ainsi, on peut utiliser un peu plus de formats d'image que ceux supportés par DBImage. Si ça peut vous aider ....
Il faut lui ajouter l'unité pngimage ( http://pngdelphi.sourceforge.net/ ) pour supporter les png.
On peut aussi utiliser graphicex mais il est buggé pour les png. Du coup je l'ai viré.

unit uImagesEtBD;


interface


uses ADODB, SysUtils, Graphics, classes, DB, jpeg, pngimage;


procedure ChargerImage(Conn: TADOConnection;
  NomTable, NomColID, NomColImage, NomColExtension: string;
  ValeurID: Integer;
  Image: TPicture);


procedure EnregistrerImage(Conn: TADOConnection;
  Fichier: TFileName;
  NomTable, NomColID, NomColImage, NomColExtension: string;
  ValeurID: Integer);overload;


procedure EnregistrerImage(Conn: TADOConnection;
  Image: TPicture; Extension: String;
  NomTable, NomColID, NomColImage, NomColExtension: string;
  ValeurID: Integer);overload;


implementation


procedure EnregistrerImage(Conn: TADOConnection;
  Image: TPicture; Extension: String;
  NomTable, NomColID, NomColImage, NomColExtension: string;
  ValeurID: Integer);overload;
const  REQ 'UPDATE %s set %s :P1, %s = :P2 WHERE %s = %d';
var
  St: TMemoryStream;
begin


  St := TMemoryStream.Create;


  try


    if Assigned(Image) then Image.Graphic.SaveToStream(St);
    St.Position := 0;


    with TADOQuery.Create(nil) do
    begin
      Connection := Conn;
      Close;
      SQL.Text := format(REQ, [NomTable, NomColImage, NomColExtension, NomColID, ValeurID]);
      ParamCheck := True;
      Parameters.ParamByName('P1').LoadFromStream(St, ftBlob);
      Parameters.ParamByName('P2').Value := Extension;
      try
        ExecSQL;
      except
        on E: Exception do
          Raise Exception.CreateFmt('Erreur lors de l''insertion de l''image dans la base de données : %s',
                                    [E.Message]);
      end;
    end;
  Finally
    St.Free;
  end;


end;


procedure EnregistrerImage(Conn: TADOConnection;
  Fichier: TFileName;
  NomTable, NomColID, NomColImage, NomColExtension: string;
  ValeurID: Integer);
const  REQ 'UPDATE %s set %s :P1, %s = :P2 WHERE %s = %d';
var
  St: TMemoryStream;
  Image: TPicture;
begin
  Image := TPicture.Create;
  St    := TMemoryStream.Create;
  try
    Image.LoadFromFile(Fichier);
    EnregistrerImage(Conn, Image, ExtractFileExt(Fichier), Nomtable, NomColID, NomColImage, NomColExtension, ValeurID);
  Finally
    Image.Free;
    St.Free;
  end;


end;


 


procedure ChargerImage(Conn: TADOConnection;
  NomTable, NomColID, NomColImage, NomColExtension: string;
  ValeurID: Integer;
  Image: TPicture);
var
  St: TMemoryStream;
begin


  St := TMemoryStream.Create;
  try
    with TADOTable.Create(nil) do
    begin
      Connection := Conn;
      TableName  := NomTable;
      Open;
      if FieldByName(NomColImage).IsNull then
        Image := nil
      else
      begin
        (FieldByName(NomColImage) as TBlobField).SaveToStream(St);
        St.Position := 0;
        St.SaveToFile('toto' + FieldByname(NomColExtension).AsString);
        Image.LoadFromFile('toto' + FieldByname(NomColExtension).AsString);
        DeleteFile('toto' + FieldByname(NomColExtension).AsString);
      end;


      Close;
      Free;
    end;
  Finally
    St.Free;
  end;
end;


end.
0