Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#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

 

Pied de page des forums

Powered by FluxBB