Bonjour,
Après une petite "cessation d'activité" en Lazarus, je m'y recolle.
J'ai un problème toujours non résolu qui m'agace vraiment. Je stocke des images [png 24*24] dans ma base de données PostgreSQL distante. Le serveur est hébergé, ne dispose pas de ftp et évidemment aucun protocole SMB/CIFS n'est envisageable.
Les images de la table sont affichées dans des StringGrids. J'utilise les connecteurs natifs de Lazarus mais le problème serait identique en Zeos ou autre. L'insertion est classique :
La lecture l'est tout autant. Elle utilise également un Stream.
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 Strm := TMemoryStream.Create; imgSrc.Picture.SaveToStream(Strm); with pgQuery do try [...] with SQL, Params do begin Clear; SQL.Text := 'INSERT INTO test2013 '+ '(teid, tenom, teimage) '+ 'VALUES ' + '(:paID, :paNOM, :paIMAGE);'; ParamByName('paID').AsString := AleaString(); ParamByName('paNOM').AsString := 'TEST Numéro 1'; ParamByName('paIMAGE').LoadFromStream(Strm, ftBlob); end; ExecSQL; [...]
Pour le StringGrid, j'ai une méthode trop compliquée et visiblement mal adaptée.
J'aurais voulu dans un premier temps stocker le Stream dans une Cell[aImg, aRow] lors du chargement de la table. Mais c'est impossible car les Cells ne sont pas des strings mais des strings C (autrement dit le caractère Null équivaut à une fin de chaîne et le stream d'une image ne contient pas qu'un caractère Null...). J'ai pensé un moment utiliser un ImageList mais mes id ne sont pas numériques (mais alphanumériques) et donc les correspondances peu aisées... Les refresh des TStstingGrids sont assez "périlleux".
Bref, quelqu'un a-t-il une solution correcte à ce problème ?
Merci. Cordialement. Gilles
Partager