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

Image enregistré dans access et recuperation des ces memes images

6 réponses
Avatar
Chocker
Salut Les Gens :D

Alors un petit peu d'aide serait la bienvenue ... voila mon probleme, je
dois faire une chtite appli qui permet d'enregistrer des images dans une
base de données Access (connection DAO)

Bon rien de compliquer jusque la, j'utilise un champ de type OLE pour y
stocker l'image ...

pour info voici le code pour enregistrer l'image que j'utilise :

...
lgfic = FreeFile
'pic= chemin + image
Open pic For Binary As lgfic
rs.AddNew
rs!Picture = InputB(LOF(lgfic), lgfic)
rs.Update
...

et dans ma base access je vois bien dans mon champs picture que j'ai des
données binaires.

La ou ca se corse et C pour ca je viens quérir votre aide, C qd je veux
recupérer cette image, ou pluto la recreer en tant que fichier ...

tmp = rs!Picture
lgfic = FreeFile
'tmppic=nom temporaire de mon image
Open tmppic For Binary As lgfic
Put lgfic, , tmp
Close lgfic
Picture.Picture = LoadPicture(App.path & "\" & tmppic)

Alors la en fait ca marche ca me réécris un fichier, mais probleme VB
n'arrive pas a l'ouvrir alors k'un viewer d'image y arrive, apparement ce
serait un probleme d'encapsulation a cause de L'OLE ... donc si quelqu'un
savait comment proceder je lui en serait tres reconnaissant

Merci d'avance de votre aide

Pour tout infos supllémentaire hésitez pas a demander !

6 réponses

Avatar
EddiGordo
"Chocker" a écrit :
Salut Les Gens :D

Alors un petit peu d'aide serait la bienvenue ... voila mon probleme, je
dois faire une chtite appli qui permet d'enregistrer des images dans une
base de données Access (connection DAO)

Bon rien de compliquer jusque la, j'utilise un champ de type OLE pour y
stocker l'image ...

pour info voici le code pour enregistrer l'image que j'utilise :

...
lgfic = FreeFile
'pic= chemin + image
Open pic For Binary As lgfic
rs.AddNew
rs!Picture = InputB(LOF(lgfic), lgfic)
rs.Update
...

et dans ma base access je vois bien dans mon champs picture que j'ai des
données binaires.

La ou ca se corse et C pour ca je viens quérir votre aide, C qd je veux
recupérer cette image, ou pluto la recreer en tant que fichier ...

tmp = rs!Picture
lgfic = FreeFile
'tmppic=nom temporaire de mon image
Open tmppic For Binary As lgfic
Put lgfic, , tmp
Close lgfic
Picture.Picture = LoadPicture(App.path & "" & tmppic)

Alors la en fait ca marche ca me réécris un fichier, mais probleme VB
n'arrive pas a l'ouvrir alors k'un viewer d'image y arrive, apparement ce
serait un probleme d'encapsulation a cause de L'OLE ... donc si quelqu'un
savait comment proceder je lui en serait tres reconnaissant

Merci d'avance de votre aide

Pour tout infos supllémentaire hésitez pas a demander !


Bonjour

Essaie *Set* Picture.Picture = LoadPicture(App.path & "" & tmppic)



--
Enjoy !
Avatar
Pascal B.
Bonjour Eddi,

Remplace ton champs OLE par un champs Memo.

Attention, pour que cela fonction, ton image ne peut pas dépasser les 64 k qui est la limite de stoquage des champs Access.
Pour des images supérieures à 64K, il faut travailler avec GetChunk et AppendChunk.

Pascal



"EddiGordo" a écrit dans le message de news:
| "Chocker" a écrit :
| > Salut Les Gens :D
| >
| > Alors un petit peu d'aide serait la bienvenue ... voila mon probleme, je
| > dois faire une chtite appli qui permet d'enregistrer des images dans une
| > base de données Access (connection DAO)
| >
| > Bon rien de compliquer jusque la, j'utilise un champ de type OLE pour y
| > stocker l'image ...
| >
| > pour info voici le code pour enregistrer l'image que j'utilise :
| >
| > ...
| > lgfic = FreeFile
| > 'pic= chemin + image
| > Open pic For Binary As lgfic
| > rs.AddNew
| > rs!Picture = InputB(LOF(lgfic), lgfic)
| > rs.Update
| > ...
| >
| > et dans ma base access je vois bien dans mon champs picture que j'ai des
| > données binaires.
| >
| > La ou ca se corse et C pour ca je viens quérir votre aide, C qd je veux
| > recupérer cette image, ou pluto la recreer en tant que fichier ...
| >
| > tmp = rs!Picture
| > lgfic = FreeFile
| > 'tmppic=nom temporaire de mon image
| > Open tmppic For Binary As lgfic
| > Put lgfic, , tmp
| > Close lgfic
| > Picture.Picture = LoadPicture(App.path & "" & tmppic)
| >
| > Alors la en fait ca marche ca me réécris un fichier, mais probleme VB
| > n'arrive pas a l'ouvrir alors k'un viewer d'image y arrive, apparement ce
| > serait un probleme d'encapsulation a cause de L'OLE ... donc si quelqu'un
| > savait comment proceder je lui en serait tres reconnaissant
| >
| > Merci d'avance de votre aide
| >
| > Pour tout infos supllémentaire hésitez pas a demander !
| Bonjour
|
| Essaie *Set* Picture.Picture = LoadPicture(App.path & "" & tmppic)
|
|
|
| --
| Enjoy !
|
Avatar
Chocker
Merci Eddi et Pascal de votre reponse, je vais essayer ca plutard ...

Par contre Pascal, j'aimerais si possible que tu m'expliques ou que tu
m'envoies un bout de code d'un exemple avec getchunk et appendchunk, peut
les utiliser en connection DAO aussi ?

Merci d'avance
Avatar
Pascal B.
Salut,

Voici 2 fonctions: Une pour récupérer (LoadFldPicture), l'autre pour enregistrer (SaveFldPicture) une image.
Attention: Bien que j'ai nommé mon paramètre OLEField, il s'agit d'un champ de type MEMO !
(Ces fonctions sont prévues pour du DAO et permettent de travailler avec de très grandes images >64K)

Public Function LoadFldPicture(OLEField As Field) As Picture
Const ChunkSize As Long = 65536
Dim Fil As Integer, FileName As String
Dim NumChunks As Long, TotalSize As Long
Dim ii As Long
Set LoadFldPicture = LoadPicture()
Fil = FreeFile
FileName = App.Path & "Picture.$$$"
Open FileName For Output As Fil
TotalSize = OLEField.FieldSize
If TotalSize <= ChunkSize Then
Print #Fil, OLEField.Value;
Else
NumChunks = TotalSize ChunkSize - (TotalSize Mod ChunkSize <> 0)
For ii = 1 To NumChunks
Print #Fil, OLEField.GetChunk((ii - 1) * ChunkSize, ChunkSize);
Next ii
End If
Close Fil
On Error Resume Next
Set LoadFldPicture = LoadPicture(FileName)
Kill FileName
End Function

Public Sub SaveFldPicture(Picture As Picture, OLEField As Field)
Const ChunkSize As Long = 65536
Dim Fil As Integer, FileName As String
Dim NumChunks As Long, TotalSize As Long
Dim ii As Long
Fil = FreeFile
FileName = App.Path & "Picture.$$$"
SavePicture Picture, FileName
Open FileName For Binary As Fil
TotalSize = LOF(Fil)
If TotalSize <= ChunkSize Then
OLEField.AppendChunk Input(TotalSize, Fil)
Else
NumChunks = TotalSize ChunkSize
For ii = 1 To NumChunks
OLEField.AppendChunk Input(ChunkSize, Fil)
Next ii
OLEField.AppendChunk Input(TotalSize Mod ChunkSize, Fil)
End If
Close Fil
Kill FileName
End Sub

Pascal




"Chocker" a écrit dans le message de news:ebxun$
| Merci Eddi et Pascal de votre reponse, je vais essayer ca plutard ...
|
| Par contre Pascal, j'aimerais si possible que tu m'expliques ou que tu
| m'envoies un bout de code d'un exemple avec getchunk et appendchunk, peut
| les utiliser en connection DAO aussi ?
|
| Merci d'avance
|
|
Avatar
Chocker
Merci bcp, j'av reussi a me debrouiller finallement avec la methode Mémo,
mais bon il est tjs utile d'avoir une solution plus aproprié, merci encore

Tchao les Gens :)
Avatar
Christophe
Bonsoir,
Je vais peut-être me faire jetter, mais: pourquoi stocker des images dans
une base de donnée ??? (et pas juste leur chemin)

Et si au pire je devais stocker les octets des images je ne stockerais que
la matrice de pixel, pas les entêtes.
dans une table je stocke les paramètres communs: type (BMP, jpg ..) , les
valeurs du bmiheader, un index sur une table qui contient les différentes
tables de couleurs possible. Et enfin la table qui contient les données
images avec la largeur et un champs memo contenant les octets de l'image.

Si tu as 2000 images en BMP 256 couleurs c'est pas trés utils de stocké 2000
définition toutes identiques.

Christophe Vergon


"Pascal B." <pascbr{_AROBASE_}hotmail{_POINT_}com> a écrit dans le message
de news: #
Salut,

Voici 2 fonctions: Une pour récupérer (LoadFldPicture), l'autre pour


enregistrer (SaveFldPicture) une image.
Attention: Bien que j'ai nommé mon paramètre OLEField, il s'agit d'un


champ de type MEMO !
(Ces fonctions sont prévues pour du DAO et permettent de travailler avec


de très grandes images >64K)

Public Function LoadFldPicture(OLEField As Field) As Picture
Const ChunkSize As Long = 65536
Dim Fil As Integer, FileName As String
Dim NumChunks As Long, TotalSize As Long
Dim ii As Long
Set LoadFldPicture = LoadPicture()
Fil = FreeFile
FileName = App.Path & "Picture.$$$"
Open FileName For Output As Fil
TotalSize = OLEField.FieldSize
If TotalSize <= ChunkSize Then
Print #Fil, OLEField.Value;
Else
NumChunks = TotalSize ChunkSize - (TotalSize Mod ChunkSize <> 0)
For ii = 1 To NumChunks
Print #Fil, OLEField.GetChunk((ii - 1) * ChunkSize, ChunkSize);
Next ii
End If
Close Fil
On Error Resume Next
Set LoadFldPicture = LoadPicture(FileName)
Kill FileName
End Function

Public Sub SaveFldPicture(Picture As Picture, OLEField As Field)
Const ChunkSize As Long = 65536
Dim Fil As Integer, FileName As String
Dim NumChunks As Long, TotalSize As Long
Dim ii As Long
Fil = FreeFile
FileName = App.Path & "Picture.$$$"
SavePicture Picture, FileName
Open FileName For Binary As Fil
TotalSize = LOF(Fil)
If TotalSize <= ChunkSize Then
OLEField.AppendChunk Input(TotalSize, Fil)
Else
NumChunks = TotalSize ChunkSize
For ii = 1 To NumChunks
OLEField.AppendChunk Input(ChunkSize, Fil)
Next ii
OLEField.AppendChunk Input(TotalSize Mod ChunkSize, Fil)
End If
Close Fil
Kill FileName
End Sub

Pascal




"Chocker" a écrit dans le message de


news:ebxun$
| Merci Eddi et Pascal de votre reponse, je vais essayer ca plutard ...
|
| Par contre Pascal, j'aimerais si possible que tu m'expliques ou que tu
| m'envoies un bout de code d'un exemple avec getchunk et appendchunk,


peut
| les utiliser en connection DAO aussi ?
|
| Merci d'avance
|
|