Bonjour à tous,
Je viens vers vous car les informations que je trouve sur le net à ce sujet sont floues voir fausses...
Je suis débutant en Delphi et en MySQL et je dois stocker des images dans ma BDD.
On m'a conseillé d'utiliser le format de données appelé "Blob".
J'ai donc créé la BDD et jusque là, pas de souci.
Seulement, je dois développer un gestionnaire de BDD en Delphi et j'ai donc besoin de gérer les Blobs.
Pour cela, j'ai utilisé une méthode trouvé sur le net à base de "Stream" :
Avec la fonction "ExecuteRequete" ci dessous :
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 function TGestBDD_FDS.AjoutImage(pNom, pAdresse: string): boolean; var lStream: TStream; lJpg: TJpegImage; begin Result := False; try Result := ExecuteRequete(['INSERT INTO ' + TABLE_IMAGE, ' (' + FIELD_IMAGE_NOM + ')' + ' VALUES (' + QuotedStr(pNom) + ')']); finally FCnx.Close; end; lJpg := TJpegImage.Create; lJpg.LoadFromFile(pAdresse); try if ExecuteRequete(['SELECT * FROM ' + TABLE_IMAGE, 'WHERE (' + FIELD_IMAGE_NOM + ' = ' + QuotedStr(pNom) + ')']) then begin FQry.Edit; lStream := FQry.CreateBlobStream(FQry.FieldByName(FIELD_IMAGE_IMAGE), bmWrite); try lJpg.SaveToStream(lStream); FQry.ExecSQL; finally lStream.Free; end; end; finally lJpg.Free; end; end;
Seulement, j'ai l'impression que mon Blob ne s'est pas sauvegardé car j'ai toujours la valeur "Null" associé à mon champ LongBlob.
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
36
37
38
39 function TGestBDD.ExecuteRequete(pLignes: array of string): Boolean; var i : Shortint; begin ConnectMySQL; // fermeture de la requête FQry.Close; // initialisation du SQL FQry.SQL.Clear; // remplissage de la requête for i := 0 to (Length(pLignes) - 1) do FQry.SQL.Add(pLignes[i]); try // si la requête est un select ou show if (Pos('SELECT', FQry.SQL[0]) > 0) or (Pos('SHOW' , FQry.SQL[0]) > 0) then begin // ouverture de la requête FQry.Open; // on se place sur le premier enregistrement FQry.First; end // sinon exécution de la requête else FQry.ExecSQL; Result := True; except on E: Exception do begin MessageBox(Application.Handle, PChar(E.Message + #13 + #13 + FQry.SQL.Text), PChar('Erreur SQL'), MB_ICONERROR); FQry.SQL.SaveToFile('SQL.txt'); Result := False; end; end; end;
Mes connaissances en Delphi étant limitées, il m'est compliqué de débuger seul ce problème..
Merci beaucoup pour vos futures réponses et désolé pour cette question de débutant.
Bien cordialement,
William Durand.
Partager