Image enregistré dans access et recuperation des ces memes images
6 réponses
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 !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 !
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 !
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 !
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 ! |
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" <EddiGordo@fr.st> a écrit dans le message de news:mesnews.9b457d42.fe4b2fca.29.0@fr.st...
| "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 !
|
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 ! |
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
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 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
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 | |
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" <Chocker@free.fr> a écrit dans le message de news:ebxun$v9DHA.1472@TK2MSFTNGP11.phx.gbl...
| 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
|
|
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 | |
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 :)
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
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 :)
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 | |
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: #7x4Ydw9DHA.2472@TK2MSFTNGP10.phx.gbl...
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" <Chocker@free.fr> a écrit dans le message de
news:ebxun$v9DHA.1472@TK2MSFTNGP11.phx.gbl...
| 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
|
|
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 | |