J'ai eu pour une de mes applications le même problème que toi. En surfant sur le net, j'ai trouvé des codes permettant de mettre dans une base de données type access des images. Il faut que dans une table, tu crées un champs du type "Objet OLE". Pour ma part j'utilise l'activex ADO (DAO360.dll) qui permet d'avoir un meilleur controle sur les bases de données. L'achtuce que j'utilise est de passer par un fichier temporaire pour stocker l'image à sauvegarder dans la base de données ou à extraire de la base de données. Il n'empèche qu'utiliser DAO ou ADO revient grosso modo au même hors mis que ADO est peut être un peu moins boggé....
Quoi qu'il en soit, voila le code que j'utilise (et qui n'est pas de moi) mais qui me donne pleine satisfaction. Avec la taille des images que j'utilise, on remarque à peine qu'elles viennent de la base de données.
Bon allez fini les blabla, voila le code: (à placer dans un module)
Public Function SavePictureToDB(PictControl As Image, RS As Object, FieldName As String) As Boolean
'PictControl est le controle contenant l'image à sauvegarder
'RS est le recordset que j'utilise pour balayer la base de données
'FieldName le champs ou stocker l'image
Dim oPict As Image
Dim sDir As String
Dim iFileNum As Integer
Dim lFileLength As Long
Dim abBytes() As Byte
Dim iCtr As Integer
Dim sTempFile As String
On Error GoTo ErrorHandler
Set oPict = PictControl
If oPict Is Nothing Then Exit Function
'Save picture to temp file
sDir = Utils.Get_TEMP_Directory
If sDir = "" Then sDir = "C:\"
sTempFile = sDir & "0X2341KLZX.dat"
Reset
SavePicture oPict.Picture, sTempFile
'read file contents to byte array
iFileNum = FreeFile
Open sTempFile For Binary Access Read As #iFileNum
lFileLength = LOF(iFileNum)
ReDim abBytes(lFileLength)
Get #iFileNum, , abBytes()
'put byte array contents into db field
RS.Fields(FieldName) = abBytes()
Close #iFileNum
'Don't return false if file can't be deleted
On Error Resume Next
Reset
Kill sTempFile
SavePictureToDB = True
ErrorHandler:
End Function
Public Function LoadPictureFromDB(PictControl As Object, RS As Object, FieldName As String) As Boolean
'PictControl Controle contenant l'image à sauvegarder
'RS le recordset utilisé pour balayer la base de données
'FieldName le nom du champs où stocker l'image
Dim oPict As StdPicture
Dim sDir As String
Dim sTempFile As String
Dim iFileNum As Integer
Dim lFileLength As Long
Dim abBytes() As Byte
Dim iCtr As Integer
sDir = Utils.Get_TEMP_Directory
Set PictControl.Picture = Nothing
If sDir = "" Then sDir = "C:\"
sTempFile = sDir & "0X2341KLZX.dat"
If FS.FileExists(sTempFile) Then FS.DeleteFile sTempFile, True
On Error GoTo ErrorHandler
iFileNum = FreeFile
Open sTempFile For Binary As #iFileNum
lFileLength = LenB(RS.Fields(FieldName))
abBytes = RS.Fields(FieldName).GetChunk(0, lFileLength)
Put #iFileNum, , abBytes()
Close #iFileNum
Set PictControl.Picture = LoadPicture(sTempFile)
PictControl.Refresh
Kill sTempFile
LoadPictureFromDB = True
ErrorHandler:
Reset
End Function
Pour information, ma base de données contient près de 350images (150x150 environ) et pèse 53Mb mais il y a également le texte, ...
J'espère que vous trouverez du bonheur dans ma tartine!
Bon amusement.