#1 Tue 03 February 2004 16:17
- Nicolas JANNIC
- Invité
access et les images
Bonjour a tous,
Je rencontre des difficultes dans la mise en place d'une base de donnees Access (a vocation de cartotheque) contenant des images de cartes.
Je cherche a integrer ou lier ces images en tant que valeur pour le champs d'une table (j'utilise le type de champs objet OLE ).
Pour des raisons liees au poid des fichiers, je pensais realiser ces images au format JPEG, or, il s'avere que seul le format BMP
permette d'obtenir un apercu automatique de ces images dans un formulaire.
Certains d'entre vous connaissent-ils des solutions pour :
- integrer ou lier des images dans une base de donnees Access ?
- permettre leur visualisation automatique dans un formulaire ?
le tout dans un format moins lourd quer le BMP.
Merci a tous pour votre aide.
Nicolas Jannic
PNR des Caps et Marais d'Opale
#2 Tue 03 February 2004 22:48
- Christophe
- Invité
Re: access et les images
Bonjour,
La solution d'integrer les images a la Base de donnee n'est pas la bonne.
Il vous faut stocker le chemin et le nom des fichiers images avec un index unique (clef primaire ) et leurs donnees de georeferencement.
les fichiers images proprement dit sont stockes sur Disque.
De plus l'utilisation d'objet OLE est a proscrire car ces objets a liaison tardives ralentissent considerablement les performances d'une application.
Les images : il vous faut gerer l'affichage de maniere separee et tout depend du langage dans le quel vous programmer et de l'utilisation.
En effet une des solutions pour obtenir un apercu des images consiste a stocke un jeu d'image separe concu a partir des images d'origine, solution retenue par IGN pour les orthophotos : un jeu normal avec une definition de 2 pixels par metre en X et Y 11 Mo par dalle de 1 km par 1 km.
et une solution a 0.1 pixel par metre donnant un apercu de 31 Ko. A noter que pour couvrir une bande de 100 km par 100 km on attient une capacite disque necessaire superieure a 100 Mo.
Cette solution est applicable avec des langages tel que VB (VBA exclu pour gestion affichage) et les API de la GDI windows et une gestion de compression d'image de l'ordre du tif. Une solution BMP est envisageable mais l'espace disque necessaire va croitre tres rapidement, dans le cas de gestion de l'image originale pour l'affichage de vignettes cela peut se reveler avantageux pour l'exemple precedent une dalle 10m en BMP (14+40+4*256+10000)=11058 octets.
Si vous programmez en C++ je vous conseille d'utiliser les SDK disponibles pour le format ECW.
(nb si qqun connait une dll utilisable avec VB je suis preneur, pas l'activeX, une SDK pour VB)
Salutations
Christophe Vergon
#3 Tue 03 February 2004 22:48
- Eve Ponts
- Invité
Re: access et les images
De: Eve
Utilise le format JPG quand meme, et ce qu'on stocke dans la base ce sera un hyperlien...
Tu pourrais alors les visualiser (et le cas echeant mettre a jour si tu utilises un formulaire) par l'intermediaire d'un navigateur Web (tout comme les autres donnees - alphanumeriques - que contient la base de donnees).
Tu peux trouver des exemples adequats sur la maniere de proceder sur www.phpbuilder.com
Bon courage,
#4 Wed 04 February 2004 10:59
- L Bretin
- Invité
Re: access et les images
De: Lionel Bretin
Bonjour
Il faut eviter de mettre les images dans le fichier MDB (trop de place, perte de performance).
Il faut regrouper des images (en JPG) dans un dossier unique sur le disque dur.
Ensuite il faut creer :
- 1 champ dans la table d'objet
- 1 controle dans le formulaire
- 1 dossier avec toutes les images
- 1 procedure evenementielle Sur activation du formulaire ( After update )
photo : controle du formulaire ou apparaitra la photographie = 1 image integree, sans reference a un fichier image existant
CHAMP_photo : champ de type Texte dans ma table d'objets = nom du fichier photo (sans l'extension .jpg )
album_photos : adresse abolue du chemin d'acces au dossier contenant les images
Voici maintenant le code a utiliser dans la procedure evenementielle :
Private Sub CHAMP_photo_AfterUpdate()
Dim strCHAMP_photo As String
Dim album_photos As String
album_photos = C:dossiers d'images
On Error Resume Next
If Me!CHAMP_photo = .jpg Or IsNull(Me!CHAMP_photo) Then
Me!photo.Picture =
Else: strCHAMP_photo = album_photos & & Me!CHAMP_photo
Me!photo.Picture = strCHAMP_photo
End If
End Sub
Bon courage
Lionel BRETIN
Charge d'Etudes
Agence de Developpement et d'Urbanisme du Pays de Montbeliard
#5 Wed 04 February 2004 11:00
- Frederic POUGET
- Invité
Re: access et les images
Bonjour
je ne comprends pas non plus...avec Access 97 les fichiers jpg sont
admis dans un formulaire et avec access 2000 seuls les bmp le sont !!
ou alors on ne sait pas y faire....
Bizarre !!
frederic POUGET
Universite de la Rochelle
#6 Thu 05 February 2004 11:00
- Info
- Invité
Re: access et les images
J'ai deja du aborder ce probleme lors de la realisation d'un logiciel. Le
stockage d'image dans une base de donnee est une tres mauvaise idee.
Les champs OLE sont des conteneurs d'application. C'est a dire que l'on
stocke dans ces champs le contenu de la zone memoire occupee par
l'application ayant ouvert l'image.
Il va sans dire que celle-ci y est representee non compressee, et parfois
meme representee en separation chromatique ce qui occupe encore plus de
memoire.
Une autre solution, pour autant que le systeme de base de donnee l'accepte
mais ce n'est pas le cas pour Access, est d'utiliser un champ de type BLOB
Le stockage dans un tel type de champ permet de conserver le format
d'origine.
Mais la memoire occupee par ce type de champ est allouee dans la DB par page
de taille fixe. Ce qui nous amene a deux inconvenients majeurs:
- Ces champs ne permettent pas toujours un acces direct a leur
contenu.
- La dernier page occupee par les donnees n'est que partiellement
remplie. Ce qui le rend deja moins economique.
Le seul champ compatible pour cela dans Access est le type MEMO,
initialement prevu pour les textes, mais peut aussi contenir des donnees
binaires (uniquement par programmation)
Une autre solution qui est, au point de vue de l'occupation de place, la
meilleur, consiste a stocke les images dans leur format natif dans un
repertoire annexe a la base de donnees et de placer dans celle-ci le nom du
fichier.
Dans mon application, j'ai un module d'importation qui stocke le ficher dans
le repertoire en le renommant avec la valeur de la clef primaire de
l'enregistrement auquel il correspond.
Voici un extrait du code pour visualiser les images
Soir une table avec un champ RefPhoto : AutoNumerotation, et un champ
SourceName: Texte(250), les autres champs sont sans importance
Un repertoire C:Images avec le fichier NoPhoto.JPG et des fichiers
Photo00001.JPG , Photo00002.JPG, Photo00003.JPG …… correspondant aux valeurs
de la RefPhoto
Un formulaire lie sur cette table avec un controle nomme ImagePhoto de
type Image (pas OLE)
le code suivant permet d'afficher l'image dans le controle a chaque
changement d'enregistrement
Public Const ImagePath= C: Image ;
Public Function GetImagePath(Id As Long) As String
Dim st As String
st = ImagePath & & Photo & Format(Id, 00000 ) & .JPG
GetImagePath = st
'Eventuellement la ligne suivante pour afficher une image par defaut en cas
d'erreur
' If Dir(st) = Then GetImagePath = ImagePath & NoPhoto.JPG
End Function
Private Sub Form_Current()
Dim FilePath As String
FilePath = GetImagePath(Me.RefPhoto)
Me.ImagePhoto.Picture = FilePath
End Sub
Voici un extrait du code pour ajouter un enregistrement
Public Sub AddRecord(FilePath)
Parametre: le chemin du fichier a copier dans le repertoire de la DB
Dim Rst As Recordset
Dim NewFileName As String
Set Rst = CurrentDb.OpenRecordset( TablePhoto , Db_OpenDynaset)
Rst.AddNew
Rst!SourceName = FilePath
' Ajoutez ici d'autre champs eventuels
NewFileName = Photo & Format(Rst!RefPhoto, 00000 ) & .JPG
Rst.Update
FileCopy FilePath, ImagePath & & NewFileName
End Sub
Voici un extrait du code pour supprimer un enregistrement et l'image
associee
Public Sub DeleteRecord(RefPhoto)
'Parametre: La clef de l'enregistrement a supprimer
Dim Rst As Recordset
Dim FilePath As String
Set Rst = CurrentDb.OpenRecordset( TablePhoto , Db_OpenDynaset)
Rst.FindFirst ( (RefPhoto)= & RefPhoto)
If Not Rst.NoMatch Then
FilePath = GetImagePath(Rst!RefPhoto)
Rst.Delete
Kill FilePath
End If
J'espere que cela pourra vous aider
@+
H.J.
#7 Thu 05 February 2004 11:01
- Geo Ch
- Invité
Re: access et les images
De: christophe
Bonjour,
Quel OS ?
Par le meme biais (OLE) ?
concernant les questions sur Access vous pouvez consulter le forum: microsoft.public.fr.access
ou par le lien suivant:
http://communities.microsoft.com/newsgr … lcid=fr-fr
les membres sauront vous repondre.
Salutations
Christophe Vergon