Leader2000
Messages postés187Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention28 août 2015
-
18 juin 2007 à 18:51
jelume
Messages postés120Date d'inscriptionmardi 3 avril 2007StatutMembreDernière intervention15 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?
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;
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20082 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.
deldoul35
Messages postés26Date d'inscriptionmardi 5 juin 2007StatutMembreDernière intervention26 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
jelume
Messages postés120Date d'inscriptionmardi 3 avril 2007StatutMembreDernière intervention15 novembre 20071 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é.
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;
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;