Sommaire
- Formulaires : Initiation à l'insertion d'une image par enregistrement à l'aide d'un objet OLE
- Objets OLE : Comparaisons avec le type de données Lien Hypertexte
- Formulaires : Insertion d'une image pour un seul enregistrement : cas concret
- Objets OLE : Gestion de la taille et de l'alignement des images
- Objets OLE : Il est possible d'insérer autre chose que des images
- Objets OLE : Gestion de la taille des objets autres que des images
- Objets OLE : Modification dynamique du contenu d'un objet OLE
- Objets OLE dans les formulaires : Subtilités d'affichage de l'objet en tant que tel
- Objets OLE : Différence entre Intégration et Liaison : Bug !
Formulaires : Initiation à l'insertion d'une image par enregistrement à l'aide d'un objet OLE
Placer un logo, c'est bien joli, mais est-il possible d'afficher la photo de chaque client ?
Oui mais la démarche est différente : comme la photo doit changer à chaque enregistrement, on ne peut pas se contenter, de placer la photo en mode création du formulaire : en effet, la photo de qui placerait on ? On ne peut pas le savoir. Ce sera dont en mode SAISIE DE DONNEES que ça va se passer.Mais attention : On ne peut pas faire ça comme ça ! Il faut que la photo puisse être STOCKEE dans la table sous-jacente ! Je vous rappelle que les formulaires ne contiennent PAS de donnée. Alors, oui, ils peuvent contenir un logo, parce que c'est le même à chaque enregistrement, il ne change pas ! Il fait partie intégrante de la structure du formulaire lui-même... Mais PAS les photos des clients ! Elles, elles changent à CHAQUE client ! Il FAUT qu'on prépare le terrain dans la table T_Celebrite !
Concrètement ?
Avant de créer quoi que ce soit dans le formulaire, allez dans la table T_Celebrite en mode création, et ajoutez un nouveau champ que nous appellerons Photo, et qui sera défini en Objet OLE :
C'est quoi "Objet OLE" ?
Ca veut dire que ce champ très particulier ne va pas contenir des données telles que du texte ou du chiffre, mais va intégrer un objet. Un objet, au sens d'Access, ce n'est pas un lampadaire ou un canapé, non !Un objet, au sens informatique du terme, c'est un fichier qui a été créé avec un autre programme : Un dessin créé avec Paint est un objet. Un classeur Excel est un objet. Un document Word, est un objet. Ce sont chaque fois des fichiers qui viennent "d'ailleurs".
OLE Sont les intitiales en anglais de Object Linking and Embedding, je vous traduit en français par : "Liaison (Linking) et Incorportation (Embedding) d'objet". Donc, ce champ, à partir du moment qu'il est défini en Objet OLE, va pouvoir contenir aussi bien une feuille Excel, qu'un document Word, un dessin Corel Draw, ou une image. Dans notre cas, il va s'agir d'une image JPEG(Une photo en fait), qui sera donc simplement un fichier à l'extension .JPG.
Le type de champ Objet OLE, est exactement le "pendant" du lien hypertexte : avec le lien hypertexte, vous précisez par exemple un site Web, ou un fichier, mais il fallait cliquer dessus pour Y ALLER.
Ce n'était en quelque sorte qu'un "panneau indicateur" qui disait OU est situé physiquement le fichier. Le type Objet OLE, fait largement plus : En effet, il va CARREMENT chercher le fichier que vous voulez, et il l'importe physiquement dans votre base de données. Je vous recommande très très chaudement de revoir la leçon 10, traitant des liens hypertextes afin qu'il ne subsiste pas de confusion dans votre esprit !
Objets OLE : Comparaisons avec le type de données Lien Hypertexte
Donc, logiquement, les champs OLE prennent énormément plus de place que les liens hypertextes !
C'est parfaitement ça !...Mais l'avantage est qu'on ne doive pas cliquer sur le lien hypertexte pour voir le document correspondant, cette fois, il s'affiche instantanément !
Oui, tout à fait ! Votre remarque prouve que vous avez très bien compris.Bon, vous avez votre nouveau champ Photo (Photo n'est pas un nom spécial... J'aurais pu l'appeler ImageClient, TeteDuClient ou LaPhoto).
En mode saisie de données de votre table, vous n'allez pas pouvoir faire grand chose : essayez : lancez la table en mode saisie de données, et essayez de cliquer dans le champ Photo.
En effet : ça met simplement la cellule avec une toute petite bordure grise, mais on ne peut rien y écrire.
C'est normal. En fait, c'est seulement dans les formulaires (et dans les états, mais on y reviendra) qu'on arrive à VOIR le contenu de votre champ Photo.Maintenant, vous allez fermer la table, et créer un nouveau formulaire en mode création, basé sur T_Celebrite. Donnez lui cette apparence approximativement:

Formulaires : Insertion d'une image pour un seul enregistrement : Cas concret
Lancez le formulaire en mode saisie de données, et allez sur Georges Brassens.
Voici une photo de Georges Brassens que vous allez enregistrer sur votre disque dur :

Vous êtes donc sur l'enregistrement "Brassens Georges", et vous avez enregistré la photo de Georges Brassens sur votre ordinateur en tant que brassens (En fait brassens.jpg, mais vous ne voyez peut-être pas le .JPG, mais là n'est pas notre propos).
Cliquez avec le bouton droit de votre souris au milieu du champ Photo, et choisissez "Insérer un objet" :

La boîte de dialogue suivante apparaît :



Un élève m'a informé que ce problème est apparemment dû au fait que lors de l'installation d'Office, le logiciel de Microsoft "Photo Editor" a la particularité de permettre de visualiser les images correctement dans un champ OLE D'Access.
Beaucoup de gens installent d'autres programmes de visualisation d'images, tel que ACDSEE par exemple, APRES avoir installé Office. De par ce fait, le nouveau programme (tel que ACDSEE) Court-circuite en quelque sorte Photo Editor, et a pour conséquence fâcheuse d'interdire de visualiser les images au sein des champs OLE autrement que sous forme d'icônes.
Solution : Réinstaller Photo Editor (Nul besoin de désinstaller ACDSEE ou le programme de dessin qui peut entrer en conflit), et tout devrait rentrer dans l'ordre.
Vous allez maintenant pouvoir sélectionner votre fichier brassens.jpg que vous avez récupéré tout à l'heure


Et voilà le résultat : 

Ah oui, effectivement !
Maintenant, si vous descendez ou montez d'un enregistrement, HOP ! L'image disparait instantanément, ce qui est normal puisque c'est la photo de Georges Brassens et de personne d'autre !Dès que je reviens sur Brassens, il réapparait ! C'est génial !
... Contrairement au Logo de la leçon précédente qui restait affiché, quel que soit l'enregistrement !Objets OLE : Gestion de la taille et de l'alignement des images
Mais par contre, il est tout coupé... Puis tout collé à gauche !
C'est normal : La photo est verticale, et votre zone d'accueil (le champ Photo) est plutôt horizontale ! Ca ne vous rappelle rien ?C'est l'histoire du "Zoom" et "Echelle" !
Exactement. MAIS ATTENTION ! Cette fois, c'est en mode création que vous devez être pour changer les options d'affichage !!!! (Bon, si vous travaillez avec Access 2000/XP, vous pouvez demander les propriétés de la photo en mode saisie de données, mais disons pour être homogène que vous allez en mode création).Oui, mais en mode création, il n'y a plus d'image !
Ben non ! Puisque l'image change à chaque client ! La photo de qui devrait il afficher en mode création ???C'est juste ! Je n'ai rien dit ...
Demandez les propriétés de votre champ photo qui est donc vide (Vous savez : Bouton droit, propriétés). Dans l'onglet Format, vous demandez Mode d'affichage : Zoom (Pas échelle, pour éviter qu'il déforme la photo) : Relancez le formulaire en mode saisie de données, et cherchez à nouveau Brassens :
Il l'a rétrécie pour qu'elle entre dans la zone sans la déformer. On ne peut pas la mettre au milieu de la zone, et pas collée à gauche ?

On n'a qu'à redimensionner la zone du champ photo en vertical, comme ceci : 
Exactement. J'avais fait exprès de dimensionner la zone dans le mauvais sens pour que vous trouviez l'astuce vous-même. Bravo !Et en plus, dans les propriétés de l'image , vous demandez dans l'onglet format Mode d'affichage : Echelle, comme ça, on est bien certain que l'image va bien prendre la totalité de la zone de la photo, et comme cette zone est déjà verticale, les différentes photos des différentes personnes ne seront pas trop déformées. Essayez :

C'est impeccable comme ça !
Et comme la zone de la photo correspond à peu près aux photos originales, ça ne va pas trop mal. Comme exercice, vous allez ajouter la photo de Bill Clinton. La voici :
Ce n'est pas évident car il faut bien se rappeler de la marche à suivre, mais voilà le résultat : 
Objets OLE : Il est possible d'insérer autre chose que des images
Peut-on inclure autre chose que des photos ?
Oui, et c'est le plus intéressant : comme je vous l'ai précisé plus haut, le champ Photo, même s'il s'appelle physiquement "Photo", peut très bien accueillir d'autres genres de fichiers, comme par exemple un document Word : imaginez que notre table T_Celebrite est en fait une table de gens à la recherche d'un emploi, et que chaque personne a son CV sous forme d'un document Word : il va tout à fait être possible de le mettre A LA PLACE de sa photo !Et si je voulais sa photo ET son CV ?
Nous aurions alors dû créer non pas un, mais DEUX nouveaux champs de type Objet OLE : Un champ qui s'appelle "Photo" pour mettre la photo, et un champ "CV" qui serait aussi un champ Objet OLE, mais qui contiendrait le CV (fait avec Word): Le résultat serait éloquent :
Mais pour éviter de trop alourdir la base de données, pour vous simplifier la tâche, et aussi pour bien illustrer le fait qu'un champ OLE peut contenir indifféremment une image ou autre chose, nous n'allons PAS créer de nouveau champ dans la table.
Nous allons donc REMPLACER la photo de Bill Clinton par son CV. Pour ce faire, il vous faut un document Word qui va contenir son CV. Vous ne l'avez pas, le voici :
C'est comme pour le téléchargement d'une base de données, Je ne pense pas que ça devrait vous poser de problème. Evidemment il faut posséder Word, mais je suppose que vous en disposez. Placez ce fichier Word sur votre disque dur où vous voulez. Je vais supposer que vous le mettez dans C:\Mes Documents.
ATTENTION : Il est possible que le document s'ouvre automatiquement, sans que vous ayez besoin de le télécharger comme une base de données. Si c'est le cas, et qu'il s'ouvre automatiquement, vous allez directement dans le menu Fichier/Enregistrer Sous, et c'est là que vous précisez exactement ou vous voulez que ce document soit placé.
J'ai rapatrié le fichier cvclinton.doc, et je l'ai placé dans C:\Mes Documents. Ouf !
Bien. Lancez votre formulaire en mode saisie de données, et placez-vous sur Bill Clinton :
Comme quand on a mis sa photo ?
Objets OLE : Gestion de la taille des objets autres que des images
C'est ça. Et donc, vous suivez les mêmes étapes que tout à l'heure, mais cette fois, vous choisissez le document Word cvclinton.doc.. Vous devriez obtenir ce résultat :
Qu'est ce que c'est que cette saloperie ???
C'est votre CV fait par Word.Mais on arrive rien à lire !
Oui, pourquoi ?
Je n'en sais rien, moi...
Hum.. Ah OUIIIIIII ! Je sais : C'est parce qu'on a demandé un mode d'affichage "Echelle" pour que toute l'image soit compressée pour bien entrer dans le champ Photo, et il a fait la même chose avec notre document Word, évidemment !
Voilà. Alors, avec les images normales, ça se passe très bien, mais avec un document Word qui est manifestement trop grand pour entrer dans notre zone d'image, Access compresse ce fichier comme si c'était une image, mais on n'arrive plus rien à lire...Logique !
Eh oui. Donc, pas le choix : Si vous voulez lire votre CV correctement, il faut arrêter de demander un mode d'affichage Echelle, et demander "Découpage", et, bien sûr, agrandir la zone de manière à obtenir ce chouette résultat :
Je reviens en mode création, j'agrandis ma zone, je clique avec le bouton droit, je recherche le mode d'affichage que je met sur découpage, je relance le mode saisie de données, je regarde si ça va... Oui, oui, j'arrive a me débrouiller.
C'est fait ?
Exactement, j'ai la même chose que vous maintenant. Bon, évidemment, maintenant qu'on a changé les options d'affichage, quand on va sur quelqu'un qui a une photo, comme Brassens, la photo est à nouveau toute collée à droite :
!
Oui, c'est normal.Objets OLE : Modification dynamique du contenu d'un objet OLE
Oui. Et le CV de Bill Clinton, est-ce que je peux le modifier directement depuis Access si je veux ?
Oui ! Et ça, c'est génial ! Allez sur Bill Clinton, et double-cliquez sur son CV :

En fait, vous êtes dans une sorte de mini Word à l'intérieur d'Access : Regardez attentivement les menus : ce sont les menus de Word ! Les barres d'outils : ce sont les barres d'outils de Word ! Vous avez les règles horizontales et verticales de Word... Et pourtant c'est toujours indiqué Access dans la barre de titre tout au dessus ! :

Et là, maintenant, je peux ajouter par exemple l'adresse de Bill Clinton ?
Oui : Vous cliquez juste en dessous de prénom, et vous écrivez Adresse :, une tabulation


Et quand j'ai fini, comment fais-je pour revenir à mon formulaire Access ?
Il suffit bêtement de cliquer sur une partie de votre formulaire, n'importe laquelle, ici par exemple :
Objets OLE dans les formulaires : Subtilités d'affichage de l'objet en tant que tel
Il ne faut pas se tromper, parce que il y a 3 cas de figure :Le mode création | ![]() | Qui permet de demander par exemple le mode d'affichage avec Bouton droit de la souris, puis "propriétés" (Découpage, Echelle, Zoom), et qui permet également de redimensionner la zone. Les petits carrés sont là parce que j'ai cliqué une fois dessus pour le sélectionner |
Le mode saisie de données : | ![]() | Qui permet de visualiser simplement le contenu du champ, et qui permet d'insérer un nouvel objet avec bouton droit de la souris, puis "Insérer un objet". Les petits carrés sont là parce que j'ai cliqué une fois dessus pour le sélectionner, mais en mode saisie de données, je ne peux pas redimensionner la zone. |
Le mode modification du champ | ![]() | Qui permet de modifier carrément le contenu du fichier clinton.doc (comme par exemple ajouter l'adresse) Il y a aussi des petits carrés noirs sur les côtés et dans les coins avec une ligne épaisse grise foncée. Ce nous est pas utile ici. |
Objets OLE : Différence entre Intégration et Liaison : Bug !
Et il n'y a pas une option pour que justement quand on change dans Access, ça change VRAIMENT le fichier cvclinton.doc ?
Normalement oui, il y a une option : au moment ou vous demandez Bouton droit de la souris : Insérer un objet, A partir du fichier, vous avez une petite case à cocher : "Liaison" :
Si vous supprimez, changez de place ou renommez le fichier cvclinton.doc, la liaison sera cassée, par contre ça prendra moins de place dans la base de données. Vous suivez ? Non ? De toute façon, que vous ayez compris ou pas, c'est égal parce que cette fonction ne marche pas : Que vous mettiez la coche ou pas, de toute façon, le fichier sera incorporé (copié), et non pas attaché (lié). Et donc de toute façon votre base de données va bien grossir de par ce fait, et quand vous cliquerez 2 fois sur un fichier pour le modifier, ça ne modifiera QUE la copie dans Access... C'est comme ça. Que ce soit dans Access 97 ou 2000, c'est le même prix. Je ne sais pas si Microsoft à corrigé ce bug dans Access XP.
Mais pas toujours . Certains élèves m'ont écrit pour me dire que chez eux, cette liaosn fonctionne correctement... Je ne sais pas quoi vous dire de plus... Avec un peu de chance chez vous, ça marchera... Personnellement, je travaille maintenant avec Access XP, et ça al'air de se comporter correctement.
Et on ne peut vraiment pas remédier à ça ?
Pas facilement. seul du code Visual Basic assez complexe peut faire quelque chose. Mais nous débordons ici du sujet. Nous arrivons au terme de cette leçonFermez votre formulaire, et appelez-le F_CelebriteObjetOLE
Bon... Hem... On peut résumer ?
L'une des fantastiques possibilités d'Access est d'interagir étroitement avec d'autres fichiers tels que des images, des documents Word, des feuilles Excel, etc. Via un type de données qui est l'objet OLE (Object Linking and Embedding, soit "liaison et incorporation d'objet"). Nous avons vu comment faire pour que chaque enregistrement, chaque personne aie sa photo, ou son CV créé avec Word. Nous avons vu comment changer facilement d'objet en remplaçant une image par un document Word, et nous avons malheureusement constaté qu'il n'est possible que d'incorporer des objets par copie, sans possibilité de faire des liaisons simples, bien que cela paraisse possible. Nous avons vu que les modes d'affichage et la taille des champs sont déterminants pour obtenir un affichage lisible (Les documents Word supportent mal un mode d'affichage de type "Echelle", contrairement aux images) |
Avez-vous bien compris ?
|
Exercice
L'exercice consiste à créer une nouvelle base de données que vous appellerez PrestiVoiture.MDB. Dans cette base de données, vous allez créer une table T_Voiture qui va contenir des voitures. Chaque voiture devra avoir les renseignements suivants : Sa marque, son type, une photo, et ses caractéristiques techniques. Pour vous aider à remplir cette table, voici les données des 2 premières voitures :
![]() ![]() Réfléchissez bien à ce que vous allez faire avant de vous précipiter sur la solution... Téléchargez la solution de l'exercice ici |
0 commentaires:
Enregistrer un commentaire