Bonjour,
Voila je cherche à charger une image dans un champ TDBImage et l'enregistrer.
J'utilise Delphi 7 et la base de données et en access.
Merci de me guider.
PS : l'image représente la photo d'un client, elle doit être en Jpeg.
Bonjour,
Voila je cherche à charger une image dans un champ TDBImage et l'enregistrer.
J'utilise Delphi 7 et la base de données et en access.
Merci de me guider.
PS : l'image représente la photo d'un client, elle doit être en Jpeg.
je ne dirais que
ici
ou pour régler d'autres problèmes d'utiliser la fonction recherche du Forum
enfin pour ce qui est du Jpg il suffit d'indiquer dans la clause uses JPEG
Salut,
J'ai vu, mais ça ne répond pas à ce que je cherche,
voila j'ai réussi à chargé l'image mais je ne sais pas comment l'enregistrer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if OpenPictureDialog_Photo.Execute then Photo.Picture.LoadFromFile(OpenPictureDialog_Photo.FileName);
PS : j'ai ajouté Jpeg dans Uses biensur.
Dans le bouton Enregistrer Table.Post; ne fonctionne pas avec ce champ, il enregistre tous les autres champs non image, sauf celui là, c'est quoi la solution SVP.
Merci.
Salut,
Pour enregistrer une image dans une BD access il faut utiliser la procedure suivante :
Et dans un bouton en supposant que votre champ s'appele "Photo" il faut faire comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 procedure SaveJpegToTable(Table: TADOquery; PicField:TBlobField; sPicPath: string); var fS : TFileStream; begin fs:=TFileStream.Create(sPicPath, fmOpenRead); try Table.Insert;//ou table.edit; PicField.LoadFromStream(fs); Table.Post; finally fs.Free; end; end;
On peut même utiliser un ADOTABLE a la Place de TQuery;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.Button1Click(Sender: TObject); Var Chemin :String; begin Chemin:='c:\dossier\image.jpg'; SaveJpegToTable(Query1, Query1Photo, Chemin ); end;
Et lorsque vous voulez afficher l'image avec un DBImage et bien au lieu de l'mage ca vous affiche message :
Pour solutionner ca il faut deposer un TImage sur la form et faut utiliser la function suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Bitmap image is Not Valid
Et l'appeler ainsi par exemple dans un bouton ou dans le scroll de la query :
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 function JpegStartsInBlob (PicField:TBlobField):integer; var bS : TADOBlobStream; buffer : Word; hx : string; begin Result := -1; bS := TADOBlobStream.Create(PicField, bmRead); try while (Result = -1) and (bS.Position + 1 < bS.Size) do begin bS.ReadBuffer(buffer, 1); hx:=IntToHex(buffer, 2); if hx = 'FF' then begin bS.ReadBuffer(buffer, 1); hx:=IntToHex(buffer, 2); if hx = 'D8' then Result := bS.Position - 2 else if hx = 'FF' then bS.Position := bS.Position-1; end; //if end; //while finally bS.Free end; //try 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 TForm1.Button2Click(Sender: TObject); var bS : TADOBlobStream; Pic : TJpegImage; begin bS := TADOBlobStream.Create (Query1Photo, bmRead); try bS.Seek(JpegStartsInBlob(Query1Photo), soFromBeginning); Pic:=TJpegImage.Create; try Pic.LoadFromStream(bS); ADOImage.Picture.Graphic:=Pic; finally Pic.Free; end; finally bS.Free end; end;
Bonjour,
je vous remercie pour votre réponse, Mais j'ai pet être mal procédé, veuillez me guider.
Voila j'ai une base de données en Access comme j'ai cité en haut, la connexion à la base est via ADO,
Donc voila, j'ai ajouté un ADOquery (mais je ne l'ai relié à rien )
Ajouter un bouton pour enregistrer :
Voilama procedure SaveJpegToTable suivit du bouton d'enregistrement, dies moi où c'est faut SVP.
Info supplémentaire :
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 SaveJpegToTable(Table: TADOquery; PicField:TBlobField; sPicPath: string); var fS : TFileStream; begin fs:=TFileStream.Create(sPicPath, fmOpenRead); try DM_Location.ADOTable_Clients.Insert;//ou table.edit; DM_Location.ADOTable_ClientsPhotoduClient.LoadFromStream(fs); DM_Location.ADOTable_Clients.Post; finally fs.Free; end; end; procedure TForm_AjtClient.Button2Click(Sender: TObject); Var Chemin :String; begin Chemin:='D:\temp\image.jpg'; SaveJpegToTable(ADOQuery1, ADOQueryPhoto, Chemin ); end;
Table des clients : ADOTable_Clients
Table Name : CLIENTS
FieldName : PhotoduClient
Et je veux bien comprendre cette ligne : SaveJpegToTable(ADOQuery1, ADOQueryPhoto, Chemin )
Merci beaucoup.![]()
Salut,
1)-Vous devez affecter a la propriété connection de votre query le composant ADOConnection1.
2)-Faite un clic droit sur le composant query et cliquez sur editeur de champs pour recuperer le champ "PhotoduClient"
3)-Inserer la procedure SaveJpegToTable sous la partie Implementation de votre form .
Il est plus souple de passer en parametre SaveJpegToTable votre table au lieu de l'appeler dans cette procedure :
4)-Dans un bouton faite l'insertion de la photo en indiquant le chemin par un openDialog ou autre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 DM_Location.ADOTable_Clients
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 ................................... ................................... var Form1: TForm1; implementation procedure SaveJpegToTable(Table: TADOquery; PicField:TBlobField; sPicPath: string); var fS : TFileStream; begin fs:=TFileStream.Create(sPicPath, fmOpenRead); try Table.Insert;//ou table.edit; PicField.LoadFromStream(fs); Table.Post; finally fs.Free; end; end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); Var Chemin :String; begin Chemin:='c:\dossier\image.jpg'; SaveJpegToTable(ADOTable_Clients , DM_Location.ADOTable_ClientsPhotoduClient, Chemin ); end; end.
Cette ligne :
C'est l'appel de la procedure que vous faite dans le bouton avec comme paramètres :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SaveJpegToTable(ADOQuery1, ADOQueryPhoto, Chemin );
ADOTable_Clients (la table)
DM_Location.ADOTable_ClientsPhotoduClient (le champ photo)
Chemin (chemin de l'image)
ReSalut.
Quand je fais ce que vous m'avez demandé à la lettre, j'ai eu ça :
[Erreur] Unit_AjtClient.pas(145): Types incompatibles : 'TADOQuery' et 'TADOTable'
C'est logique puisque je lui demande d'executter la procdure(Paramètres : DM_Location.ADOTable_Clients, DM_Location.ADOTable_ClientsPhotoduClient, Chemin)
Code : Sélectionner tout - Visualiser dans une fenêtre à part SaveJpegToTable (DM_Location.ADOTable_Clients, DM_Location.ADOTable_ClientsPhotoduClient, Chemin )
Or qu'elle etait déclaré avec des paramèttres Query :
C'est quoi la solution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 implementation uses Unit_DM, Unit_GestionLocation; procedure SaveJpegToTable(Table: TADOquery; PicField:TBlobField; sPicPath: string);
À Noter que même si j'ajoute un TADOQuerry, je ne peux pas lui ajouter un champs puisqu'il dit que la propriété sql est vide.
Voila mes codes au complets :
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 implementation uses Unit_DM, Unit_GestionLocation; procedure SaveJpegToTable(Table: TADOquery; PicField:TBlobField; sPicPath: string); var fS : TFileStream; begin fs:=TFileStream.Create(sPicPath, fmOpenRead); try DM_Location.ADOTable_Clients.Insert;//ou table.edit; PicField.LoadFromStream(fs); DM_Location.ADOTable_Clients.Post; finally fs.Free; end; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure TForm_AjtClient.Button_EnregistrerPhotoClick(Sender: TObject); Var Chemin :String; begin Chemin:='D:\temp\image.jpg'; SaveJpegToTable(DM_Location.ADOTable_Clients, DM_Location.ADOTable_ClientsPhotoduClient, Chemin ); end;
Comme argument dans la procedure il faut mettre un TADOTable et laisser le code tel quel ne pas le moidifer pour mettre le : DM_Location.ADOTable_Clients.Insert; parce que votre table sera passée en parametre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 procedure SaveJpegToTable(Table: TADOTable; PicField:TBlobField; sPicPath: string); var fS : TFileStream; begin fs:=TFileStream.Create(sPicPath, fmOpenRead); try Table.Insert;//ou table.edit; PicField.LoadFromStream(fs); Table.Post; finally fs.Free; end; end;
Oui je l'avais fait, il m'affiche :
[Erreur fatale] Impossible de créer le fichier de sortie et il affiche le chemin de l'exécutable.
Même pas, à sa compilation.![]()
ca se compile pas, comment ca ?
Supprime ton exe et reconstruis le
Je l'ai supprimé, reconstruit, il affiche :
[Erreur fatale] Impossible de créer le fichier de sortie ....exe
Effectivement il y avait un petit soucis dans l'emplacement des fichiers.
Mais maintenant il affiche TADOTable non déclaré (il vise les paramètres de la procédure).
Bonjour,
Il faut ajouter les unités ADODB et DB dans la section :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Uses
Maintenant il affiche en ajoutant ADODB, DB dans uses :
[Erreur] WARNING. Duplicate resource(s):
[Erreur] Type 2 (BITMAP), ID CDROM:
[Erreur] File C:\...\Project.res resource kept; file d:\program files\borland\delphi7\Lib\FileCtrl.res resource discarded.![]()
il faut supprimer le fichier ressource .res se trouvant dans le dossier de l'application et va se recréer tout seul et ne pas supprimer celui afficher par le message
Je ne voix pas lequel.![]()
Ah ok, c'est fait, mais maintenant j'ai cette erreur : Impossible d'ouvrir le fichier "D:\temp\image.jpg" Le fichier spécifié est introuvable.![]()
Partager