Vous êtes sur la page 1sur 7

ACCESS : Crez des formulaires

sans tableavec le Data Shaping ADO

par Thierry GASPERMENT (arkham46.developpez.com/)


Date de publication : 22/12/08
Dernire mise jour : 03/02/09

Dcouvrez l'utilisation du Data Shaping dans un formulaire Access.


Commentez cet article :

ACCESS : Crez des formulaires sans tableavec le Data Shaping ADO par Thierry GASPERMENT (arkham46.developpez.com/)

I - Introduction..............................................................................................................................................................3
II - Limitation................................................................................................................................................................ 3
III - Affichage des proprits de la base de donnes dans un formulaire.................................................................. 3
III-A - Cration du formulaire................................................................................................................................. 3
III-B - Cration du jeu d'enregistrements ADO...................................................................................................... 3
III-C - Mise jour des champs source des contrles............................................................................................5
III-D - Affectation du jeu d'enregistrements au formulaire..................................................................................... 5
III-E - Ajout de donnes dans le jeu d'enregistrements........................................................................................ 5
III-F - Erreur sur tris et filtres................................................................................................................................. 6
III-G - Tlchargement........................................................................................................................................... 6
IV - Exemple : un explorateur de fichiers....................................................................................................................6
V - Conclusion............................................................................................................................................................. 7

-2Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de
ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2008 - Thierry GASPERMENT. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de
l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents
accords developpez LLC.

ACCESS : Crez des formulaires sans tableavec le Data Shaping ADO par Thierry GASPERMENT (arkham46.developpez.com/)

I - Introduction
Nous allons au cours de ce tutoriel crer un formulaire sans table.
Un jeu d'enregistrements ADO sera gnr en VBA puis affect un formulaire.
On peut ainsi, dans un formulaire, afficher des donnes sans ncessairement les stocker dans une table.
Les bases de donnes de ce tutoriel ont t cres avec Access 2003, et enregistres au format Access 2000.
Le Data Shaping utilise MDAC qui devrait normalement tre install sur tout PC avec Office.
Consultez la documentation sur Msdn

II - Limitation
Vous devez possder une version d'Access 2000 ou suprieure.
Les donnes ne sont pas directement modifiables dans un formulaire utilisant cette technique.
Il n'est pas possible de lier un jeu d'enregistrements ADO dans un tat (sauf dans un projet ADP).

III - Affichage des proprits de la base de donnes dans un formulaire


Pour l'exemple nous allons crer un petit formulaire qui contient la liste des proprits de la base de donnes courante.
On pourrait simplement ajouter chaque proprit dans une table puis afficher cette table dans un formulaire.
Si on souhaite se passer d'une table, il existe une solution en utilisant le Data Shaping.

III-A - Cration du formulaire


Crez un nouveau formulaire.
Nous souhaitons afficher une liste d'enregistrements et viter qu'Access n'ajuste la taille une seule section.
Modifiez donc dans les proprits du formulaire (Affichage => Proprits) :
Dans l'onglet Format :
- Affichage par dfaut = Formulaires continus
- Taille ajuste = non
Nous ne dfinissons pas de source du formulaire, elle sera dfinie dans le code VBA.
Crez dans la section dtail deux zones de texte pour recevoir les donnes :
- une zone nomme txtnom
- une zone nomme txtvaleur

III-B - Cration du jeu d'enregistrements ADO


Afficher le code du formulaire : Affichage => Code.
Nous allons utiliser ADO, il faut donc ajouter la rfrence correspondante.
Dans le menu Outils => Rfrence, cochez la version la plus rcente de la librairie Microsoft ActiveX Data Objects
x.x Library.
En tte de module, dclarez le jeu d'enregistrements ADO qui servira de source de donnes du formulaire.
En-tte de module
Private oRs As ADODB.Recordset ' Recordset Source du formulaire

Il est important que le jeu d'enregistrements soit dclar en en-tte de module car l'objet doit tre utilisable tant que
le formulaire est ouvert.
Ensuite nous devons le crer au chargement du formulaire.
Le code de cration de ce jeu d'enregistrements est crit dans l'vnement Sur chargement du formulaire.

-3Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de
ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2008 - Thierry GASPERMENT. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de
l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents
accords developpez LLC.

ACCESS : Crez des formulaires sans tableavec le Data Shaping ADO par Thierry GASPERMENT (arkham46.developpez.com/)

Vous pouvez gnrer la procdure vnementielle en choisissant Form dans la liste droulante droite en haut du
module puis Load dans la liste de droite.
Code de la procdure de chargement du formulaire
Private Sub Form_Load()
End Sub

C'est l'intrieur de cette procdure Form_Load que la cration du jeu d'enregistrements sera programme.
Pour crer ce jeu d'enregistrements, nous avons besoin d'un objet Connection et d'une variable contenant la
commande SHAPE.
Dclarations dans Form_Load
Dim lShapeStr As String ' Commande
Dim oCn As ADODB.Connection ' Objet connection

Ouvrons la suite une connection.


Ouverture de la connection
' Nouvelle connection ADO
Set oCn = New ADODB.Connection
' Connection MSDataShape pour crer un recordset sans source de donnes
oCn.Open "Provider=MSDataShape;Data Provider=NONE;"

Le provider utilis est toujours MSDataShape pour ce type de recordset.


Pour terminer la cration du jeu d'enregistrements, il faut crire une commande dcrivant la structure.
Ecriture de la structure
' Commande Shape pour structure du recordset
lShapeStr = "SHAPE APPEND" & _
" NEW adVarWChar(255) AS nom," & _
" NEW adVarWChar(255) AS valeur"

Dtaillons cette commande :


- la commande commence par le mot-cl SHAPE.
- Ensuite le mot-cl APPEND indique qu'on va ajouter des champs (ces champs seront spars par des virgules)
- Pour chaque champ on utilise NEW pour spcifier la cration d'un nouveau champ
- Suit le type de champ (adVarWChar de taille 255)
- et enfin l'alias introduit par AS qui correspond au nom du champ
Vous trouverez les types de champs disponibles :
- Soit dans la documentation sur MSDN.
- Soit dans l'explorateur d'objets (Affichage => Explorateur d'objets) en recherchant DataTypeEnum dans la
librairie ADODB.
Ces types de champ sont des types de donnes ADO utilisables dans divers langages.
Il faut parfois faire quelques essais pour trouver le type qui correspond un type de donnes VBA.
Cette commande nous sert enfin crer l'objet Recordset avec la mthode Open.
Cration du jeu d'enregistrements
' Cre un nouvel objet recordset
Set oRs = New ADODB.Recordset
' Cre le recordset en fonction de la structure dfinie au dessus
oRs.Open lShapeStr, oCn, adOpenDynamic, adLockOptimistic, -1

-4Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de
ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2008 - Thierry GASPERMENT. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de
l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents
accords developpez LLC.

ACCESS : Crez des formulaires sans tableavec le Data Shaping ADO par Thierry GASPERMENT (arkham46.developpez.com/)

III-C - Mise jour des champs source des contrles


Lorsqu'on a cr les contrles, on ne leur a pas affect de source de donnes.
Maintenant qu'on a cr la structure du jeu d'enregistrements, on connait les noms des champs affecter aux
contrles.
Ce sont les alias dfinis dans la commande SHAPE.
Dans l'onglet Donnes des contrles, mettre dans la proprit Source Contrle :
- nom pour le contrle txtnom
- valeur pour le contrle txtvaleur
Vous remarquez qu'on ne peut pas choisir la source du contrle dans la liste droulante car elle est vide.
C'est tout fait normal, les noms des champs sont dfinis dynamiquement avec la commande SHAPE et ne sont
donc pas connus en mode cration.

III-D - Affectation du jeu d'enregistrements au formulaire


Une fois le jeu d'enregistrements cr, il suffit de l'affecter l'objet RecordSet du formulaire.
Affection du jeu d'enregistrements au formulaire
' Affecte le recordset au formulaire
Set Me.Recordset = oRs

Si on affiche le formulaire, il est vierge.


Ce qui est normal, on a juste cr la structure du jeu d'enregistrements, il faut maintenant le remplir.

III-E - Ajout de donnes dans le jeu d'enregistrements


L'ajout de donnes se fait comme pour n'importe quel autre jeu d'enregistrements ADO.
La mthode AddNew ajoute un nouvel enregistrement.
La mthode Update met jour l'enregistrement.
Pour l'exemple, on souhaitait afficher les proprits de la base de donnes.
Ces proprits sont stockes dans l'objet CurrentDB.
Ce sont des objets de type Property de la librairie DAO.
Ajoutez donc une rfrence la librairie Microsoft DAO x.x Object Library.
Pour parcourir les proprits, on a besoin de dclarer une variable de type DAO.Property.
Dclaration de l'objet Property au dbut de Form_Load
Dim lProp As DAO.Property ' Objet Proprit

Ensuite on parcourt les proprits de l'objet CurrentDb et on ajoute leur nom et leur valeur au jeu d'enregistrements.
On fait appel aux champs du jeu d'enregistrements comme pour n'importe quel autre type de recordset.
Parcours des proprits de la base de donnes
' Parcours les proprits de la base de donnes
For Each lProp In CurrentDb.Properties
' Nouveau Champ
oRs.AddNew
' Nom de la proprit
oRs!nom = lProp.Name
' Valeur de la proprit si lisible
If lProp.Type <> dbGUID And lProp.Type <> 0 Then
oRs!valeur = CStr(Nz(lProp.Value,"(Null)"))
Else
oRs!valeur = "(inconnu)"
End If
' Met jour le champ
-5Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de
ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2008 - Thierry GASPERMENT. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de
l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents
accords developpez LLC.

ACCESS : Crez des formulaires sans tableavec le Data Shaping ADO par Thierry GASPERMENT (arkham46.developpez.com/)

Parcours des proprits de la base de donnes


oRs.Update

Next

Petite remarque : les proprits de type gal dbGuid ou 0 provoquent des erreurs : on teste donc d'abord le type
avant d'affecter la valeur.
Le Nz est utilis en cas de valeur Null.
Ensuite on se dplace au dbut du jeu d'enregistrements, sinon on reste positionn sur le dernier lment ajout,
tout en bas du formulaire.
Dplacement en dbut de jeu d'enregistrements
' Se positionne au premier enregistrement (s'il y a au moins un enregistrement)
If oRs.RecordCount > 0 Then oRs.MoveFirst

Vous pouvez maintenant afficher le formulaire et admirer le rsultat.


On a russi afficher un formulaire en mode continu sans aucune table ou requte.

III-F - Erreur sur tris et filtres


Si vous essayez de trier ou filtrer le formulaire, une erreur s'affiche.
Pourtant le tri ou le filtre s'effectue correctement.
Pour viter cette erreur, ajoutez ce code dans le module du formulaire :
Masque l'erreur lors d'un filtre ou d'un tri
' En cas d'erreur sur le formulaire
Private Sub Form_Error(DataErr As Integer, Response As Integer)
' Ignore le message "Instruction SQL non valide"
' Ce message apparat en cas de filtre, mais le filtre fonctionne quand mme
If DataErr = 3129 Then
Response = acDataErrContinue
End If
End Sub

III-G - Tlchargement
Tlcharger la base Access de ce tutoriel au format ACCESS 2000 (HTTP)

IV - Exemple : un explorateur de fichiers


Dans cet exemple, vous trouverez un petit explorateur de fichiers.
- Les dossiers sont parcourus avec la commande Dir.
- Aucune table ou requte n'est utilise pour stocker la liste des fichiers.
- Les couleurs diffrentes pour les disques, dossiers ou fichiers sont obtenues par mise en forme conditionnelle.

-6Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de
ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2008 - Thierry GASPERMENT. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de
l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents
accords developpez LLC.

ACCESS : Crez des formulaires sans tableavec le Data Shaping ADO par Thierry GASPERMENT (arkham46.developpez.com/)

Tlcharger l'exemple au format ACCESS 2000 (HTTP)

V - Conclusion
Cet article n'est qu'une introduction l'utilisation du Data Shaping dans Access.
Je vous invite lire la documentation sur MSDN pour en dcouvrir plus.
Merci l'quipe Office de developpez.com pour ses relectures, commentaires et encouragements!
Merci Vodiem pour ces remarques techniques.

-7Les sources prsentes sur cette pages sont libre de droits, et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de
ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2008 - Thierry GASPERMENT. Aucune reproduction,
mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de
l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents
accords developpez LLC.

Vous aimerez peut-être aussi