Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Stocker des images dans des champs memo, sans utiliser les objets OLE

2 réponses
Avatar
Phil
Sauver des images dans des champs memo grossit très rapidement la base de
données.
Ne stocker que l'adresse du fichier, c'est bien, mais dans ce cas, les
images ne sont pas dans la base de données.
Et pour moi, ce serai bien qu'elles y soient.
Pourquoi ne pas créer une routine qui copie une image par paquets de 32000
octets dans des champs mémo d'une table annexe.
Exemple.
Je veux créer une base de données de DVD avec la photo du dvd.
Chauqe DVD porte un identificateur unique 'id_film'.
Je crée une deuxième table appelée 'memo_images', avec un champ 'id_film',
et une routine crée autant de lignes qu'il est nécessaire pour stocker toute
l'image. Evidemment, chacune des lignes se voit attriubuer la même valeur
pour id_film. Ainsi à chaque film correspondent plusieurs lignes de memo qui
sont des morceaux de l'image.

Evidemment, if faut faire ensuite le chemin inverse, c'est-à-dire
reconstruire l'image dans un fichier 'xxx.jpg' à partir des lignes de la
table 'memo_images'. Et c'est là que pour moi ça bloque. L'image
reconstruite est déformée, comme si des octets s'étaient perdu en route.
Mais c'est preque ça.

Je suis sûr que quelqu'un a déjuà pensé à faire ça. POURRIEZ-VOUS ME
BRANCHER SUR QUELQUE CHOSE QUI EXISTE DEJA ?

En tout cas voici les premières lignes que j'ai écrites pour exploiter cette
idée, qui permet de stocker une image dans une base de données sans subir
les goglement exagérés de la base de données avec les objets OLE.

Dans les lignes qui suivent, j'essaie simplement de réaliser cette idée avec
une seule image et des champs mémo, sans tenir compte de la table des films.
J'utilise simplement une table avec un bête champ mémo appelé 'data_memo'.
Voici les lignes du programme :

Sub essai()
Debug.Print mets_image_dans_memo("images", "c:\bergues.jpg")
Debug.Print crée_fichier_image_from_memo("images", "c:\essai2.jpg")
End Sub

Function mets_image_dans_memo(nomDB_image As String, nomFileImageWithChemin
As String) As String
Dim rec As Recordset
DoCmd.RunSQL "DELETE * FROM images"
Set rec = CurrentDb.OpenRecordset(nomDB_image, dbOpenDynaset)
Dim lFile1 As Long
Dim Temp1 As String * 32000

lFile1 = FreeFile
Open nomFileImageWithChemin For Binary As #lFile1 Len = 32000

Do While Not EOF(lFile1)
Get #lFile1, , Temp1
rec.AddNew
rec("data_memo") = Temp1
rec.Update
Loop
Close #lFile1

End Function

Function crée_fichier_image_from_memo(nomDB_image As String,
nomFileImageWithChemin As String) As String
Dim rec As Recordset
Set rec = CurrentDb.OpenRecordset("SELECT * FROM " & nomDB_image & "
ORDER BY id_image", dbOpenSnapshot)
Dim lFile1 As Long
Dim Temp1

If Dir(nomFileImageWithChemin) <> "" Then Kill nomFileImageWithChemin
lFile1 = FreeFile
Open nomFileImageWithChemin For Binary As #lFile1 Len = 32000

rec.MoveFirst
Do While Not rec.EOF
Temp1 = rec("data_memo")
Put #lFile1, , Temp1
rec.MoveNext
Loop
Close #lFile1
End Function

QUELQU'UN POURRAIT-IL ME DIRE OU EST-CE QUE CA CLOCHE, ET POURQUOI L'IMAGE
RECONSTRUITE DANS LE FICHIER 'essai2.jpg' EST ABIMEE ?

Merci de bien vouloir m'aider.

2 réponses

Avatar
3stone
Salut,

"Phil"
| Sauver des images dans des champs memo grossit très rapidement la base de
| données.
| Ne stocker que l'adresse du fichier, c'est bien, mais dans ce cas, les
| images ne sont pas dans la base de données.
| Et pour moi, ce serai bien qu'elles y soient.
| Pourquoi ne pas créer une routine qui copie une image par paquets de 32000
| octets dans des champs mémo d'une table annexe.
<snip>


Regarde ceci :
http://minilien.com/?1bTwDtDBUF


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
Phil
Merci infiniment de votre aide.
Je me mets tout de suite au travail...


"3stone" a écrit dans le message de news:

Salut,

"Phil"
| Sauver des images dans des champs memo grossit très rapidement la base
de
| données.
| Ne stocker que l'adresse du fichier, c'est bien, mais dans ce cas, les
| images ne sont pas dans la base de données.
| Et pour moi, ce serai bien qu'elles y soient.
| Pourquoi ne pas créer une routine qui copie une image par paquets de
32000
| octets dans des champs mémo d'une table annexe.
<snip>


Regarde ceci :
http://minilien.com/?1bTwDtDBUF


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/