Vous êtes sur la page 1sur 29

I N F O G E S T

PREMIERS
A
C C D E R A U X

PAS

ACCS
D

AUX DONNES
B A S E

D O N N E S L E S

'

U N E

ACCESS

E T

U T I L I S E R

Date dernire version: Avril 2003

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com Created by Neevia Personal Converter trial version

SOMMAIRE

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

PREMIERS PAS ACCS AUX DONNES


ACCDER AUX DONNES D'UNE BASE ACCESS ET LES UTILISER

SOMMAIRE
PRAMBULE
1 - OBJECTIF 2 - PR REQUIS 3 - CONVENTIONS 4 - ENVIRONNEMENT ET PRALABLES

SECTION 1 - UTILISATION D'UN DATACONTOL ADO


1 - PRSENTATION GNRALE 2 - RALISATION DE LA FENTRE 21 - MISE EN PLACE DE LA LISTE 22 - MISE EN PLACE DU DATACONTROL 23 - MISE EN PLACE DU DATACONTROL 24 - MISE EN PLACE DES BOUTONS DE COMMANDE 3 DFINITION DES PROPRITS DES COMPOSANTS 31 PROPRITS DE LA FEUILLE 32 PROPRITS DU DATACONTROL 33 PROPRITS DE LA DATALIST 34 PROPRIT DES TEXTBOX 35 PROPRITS DES BOUTONS DE COMMANDE 4 LE CODE DU FORMULAIRE 41 AU CHARGEMENT DE LA FEUILLE 42 LE CODE DE L'VNEMENT MOVECOMPLETE 43 LE CODE DES BOUTONS DE COMMANDE POUR LA NAVIGATION 44 LE CODE DE L'VNEMENT DOUBLE CLIC DE LA LISTE

SECTION 2 - UTILISATION D'UNE CHANE SQL


1 PETITE PRSENTATION DE SQL 2 DMARCHE GNRALE 3 LES MODIFICATIONS DU CODE _________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SOMMAIRE

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________ 31 LA SECTION DCLARATIONS 32 - L'VNEMENT FORM_LOAD (CHARGEMENT) 321 Alternative Consommateur/Fournisseur de donnes: la collection Binding 33 LES AUTRES MODIFICATIONS

SECTION 3 - UTILISATION D'UN OBJET COMMAND


1 PRSENTATION 2 - CRATION D'UN OBJET COMMAND 21 - CRATION DE LA CONNEXION 22 CRATION DE L'OBJET COMMAND 3 LES MODIFICATIONS DES PROPRITS DES OBJETS DU FORULAIRE 31 PROPRITS MODIFIES DE LA DATALIST 32 PROPRITS MODIFIES DES TEXTBOX 4 LES MODIFICATIONS DU CODE 41 CODE DE L'OBJET COMMAND 42 LES AUTRES MODIFICATIONS DU CODE

SECTION 4 LA CERISE SUR LE GATEAU


1 - MODIFICATION DE LA PROCDURE DATALIST1_DBLCLICK 2 CRATION DE LA PROCDURE DATALIST1_MOUSEDOWN 3 CRATION DE LA PROCDURE TIMER1_TIMER

CONCLUSION
CONCLUSION

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

Created by Neevia Personal Converter trial version http://www.neevia.com

PRAMBULE

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

PRAMBULE
1 - OBJECTIF Ce didacticiel a pour objectif de vous faire dcouvrir et utiliser certaines procdures d'accs aux donnes. A notre habitude, si vous relevez ses erreurs, si vous vous heurtez quelque point pas assez bien expliqu, ou si vous avez des complments ou des amliorations proposer, n'hsitez pas utiliser la liste DidactVisualBasic pour nous en faire part et pour bnficier d'ventuels soutient de la communaut. L'adresse pour envoyer un message la liste est: mailto:jacma@redaction-developpez.com 2 - PR REQUIS Ce didacticiel est d'un niveau de connaissances que je qualifierais de "dbutant", tout au moins en ce qui concerne l'accs aux donnes. Il est toutefois souhaitable de savoir comment dmarrer un projet Visual Basic et construire un formulaire. La base de donnes Access tant prsente dans beaucoup de configuration, nous l'utiliserons tout au long du prsent didacticiel. Il est donc galement souhaitable de connatre les bases d'Access. Si vous pensez devoir vous mettre niveau en ce qui concerne Visual Basic, commencez par "Premiers pas avec Visual Basic" (pour dbutant). Pour progresser dans l'accs aux donnes, et notamment aborder les recordsets hirarchiques, ADO et DAO, consultez: Accs aux donnes avec DAO Accs aux donnes avec ADO Pour accder la liste de tous mes praticiels: Praticiels Visual Basic 3 - CONVENTIONS Quelques conventions concernant la prsentation du document: Cette icne annonce un point important. La teneur de ce point important est prsente en italique.

Cette icne annonce un rappel. La teneur de ce rappel est prsente en italique.

Cette icne annonce une remarque. La teneur de cette remarque est prsente en italique.

Cette icne renvoie une autre partie du document, ou une documentation externe, pour plus d'information. Il suffit souvent de cliquer sur l'adresse propose pour atteindre cette partie, si elle set incluse dans le document, voire dans certains cas ailleurs....

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

PRAMBULE

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

La combinaison de touches CTRL + ALT + S permet d'atteindre le sommaire. C'est pour cela que ce document est dot d'une macro-commande. Rassurez vous donc, pas de risque Dernier point: il peut tre ncessaire de cliquer sur une image de ce document afin de la faire apparatre. Ce nest pas ma faute, c'est WORD 4 - ENVIRONNEMENT ET PRALABLES Pour utiliser ADOX, il faut rfrencer une version de "Microsoft Ado Ext.2.x for DLL and Security", et comme nous manierons des objets Ado, il faut aussi "Microsoft ActiveX Data Objects 2.x Library". Nous utilisons ici les versions 2.7, mais une version prcdente fera tout aussi bien l'affaire.

Les composant autres que les composants par dfaut de Visual Basic seront indiqus au cours du didacticiel. Ce didacticiel utilise une conversion sous Access2002 de la base de donnes exemple Biblio fournie avec Visual Basic, version Access98. Cette base est aussi fournie avec Access. Outre ces deux possibilits, vous pouvez tlcharger cette base de donnes l'adresse suivante: http://fr.groups.yahoo.com/group/DidactVisualBasic/sfupld?path=/Base%20Access%20Biblio2000.mdb/ Nous vous conseillons cependant de convertir vous mme la base Biblio.mdb fournie avec VB et de placer la base Biblio2002 ainsi convertie dans le rpertoire contenant le projet du didacticiel.

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 1 - UTILISATION D'UN DATACONTROL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

SECTION 1 UTILISATION D'UN DATACONTROL


1 PRSENTATION GNRALE Le moyen le plus simple pour accder aux donnes d'une base Access est probablement d'utiliser un DataControl. Ce composant est un des nombreux composants standards proposs par Visual Basic. Le DataControl utiliser avec ADO se nomme Adodc. C'est en fait un OCX qui a pour nom complet MSADODC.OCX et qui se trouve dans le dossier System32 de Windows. Nous tudierons par la suite comment le mettre en uvre. Nous allons raliser une feuille qui nous permettra d'afficher les valeurs de certains champs d'un enregistrement, enregistrement qui pourra tre slectionn en cliquant dur un item d'une liste, ou atteint en navigant par le biais du DataControl ou par le biais de boutons de commande (Premier, Prcdent, Suivant, Dernier). Ce formulaire se prsente comme ci-dessous.

Figure 1 La feuille en action

Observons la zone de liste, qui affiche les noms de tous les auteurs contenus dans le fichier Authors. Le nom de l'auteur de l'enregistrement en cours est slectionn dans la liste (en surbrillance), tandis que les valeurs des trois champs de la table Authors son affiches dans les TextBox. Nous avons galement un groupe de quatre boutons de commande pour la navigation et un DataControl Adodc1 qui, outre l'aspect connexion et recordset sous jacent, offre les mmes fonctionnalits que le groupe de boutons. Nous avons laiss ce DataControl visible, mais souvent il ne l'est pas. Naturellement, la liste, le DataControl et les TextBox sont synchroniss, tant des contrles dpendant lis une source, comme nous le dvelopperons par la suite. Cette fentre nous permet donc de parcourir les enregistrements d'un fichier, mais ne permet ni suppression, ni modification ni cration d'enregistrement. Nous verrons ultrieurement une fentre qui permettra ces fonctions. Mais, commenons par le commencement

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 1 - UTILISATION D'UN DATACONTROL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

2 RALISATION DE LA FENTRE Dans un premier temps, nous nous contenterons de dclarer et positionner les diffrents composants ncessaires. Le paramtrage des proprits de ces lment s'effectuera au chapitre suivant (3)
21 MISE EN PLACE DE LA LISTE

Cette liste est aussi un composant standard de Visual Basic. Il est ncessaire de dclarer ce composant dans le projet. Pour ce faire, il y a deux mthodes: utilisation du menu Projet/Composants, ou clic sur l'icne de la barre d'outils pour faire apparatre la boite outils, puis item Composants du menu contextuel de la boite outils. Dans la fentre qui s'ouvrent s'affichent alors tous les composants disponibles (oui, je sais, il y en a beaucoup). Slectionnez Microsoft ADO DataList Control 6.0 SP4 (OLEDB).

Figure 2 Slection du composant DataList

Vous pouvez maintenant placer une liste sur la feuille. Slectionnez la nouvelle icne qui est apparue dans la boite outils et positionnez la l'endroit voulu, en ajustant ses dimensions suivant le modle figure 1. Notez que la dclaration de MSDATLST a en fait ajout deux icnes: une icne pour la DataList dont nous nous allons nous servir, et une seconde icne pour une DataCombo, c'est--dire une liste droulante, que nous n'utiliserons pas ici. Dans la copie d'cran ci-contre, il apparat l'icne du composant MSADODC que nous allons placer ultrieurement.

Figure 3 Boite outils _________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 1 - UTILISATION D'UN DATACONTROL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

22 MISE EN PLACE DU DATACONTROL

Suivez la mme dmarche que prcdemment pour afficher la boite de slection des composants et slectionnez Microsoft ADO Data Control 6.0 (SP4)(OLEDB). Positionnez ADODB sur la feuille.

23 MISE EN PLACE DU DATACONTROL

Nous positionnons maintenant les trois TextBox, plus exactement un groupe de trois TextBox. Chaque boite de texte porte le mme nom, et est distingue par la valeur de la proprit Index. Prenez donc soin de nommer la premire boite de texte correctement, cela vous vitera ventuellement de modifier le nom de chacun des contrles du groupe si vous voulez leur donner ultrieurement un autre nom. Nous utilisons ici pour la proprit Name de ces boites de texte la valeur "txtBonnes". Pour crer ce groupe de contrles, placez le premier partir de la boite outils, puis effectuez des copies (Copier/Coller). A la premire copie, un message s'affiche vous demandant si vous voulez crer un groupe de contrles.Rpondez "Oui". Les copies suivantes (par Coller simplement) du contrle feront automatiquement partie du groupe et se verrons affectes d'un index correspondant l'ordre de leur cration. Positionnez les contrles comme indiqu figure1.
24 MISE EN PLACE DES BOUTONS DE COMMANDE

La dmarche est identique la cration des TextBox: cration d'un premier bouton de commande et un Copier/Coller pour les suivants, en rpondant oui au message qui demande si vous voulez crer un groupe de contrles. Positionnez les cinq contrles comme indiqu figure1. Pensez nommer le premier bouton de commande "cmdNavigation" avant de le copier.

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 1 - UTILISATION D'UN DATACONTROL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

3 DFINITION DES PROPRITS DES COMPOSANTS Maintenant que nos composants sont positionns, nous allons dfinir leurs proprits . Mais dans un premier temps, dfinissons d'abord celles de la feuille.
31 PROPRITS DE LA FEUILLE
1

Proprits Name BorderStyle Caption Height Left

Valeurs frmDonnes 3 - FixedDouble Lecture des enregistrements d'une base Access 5100 0

Proprits Moveable StartupPosition Top Width

Valeurs False 2 CenterScreen 0 7185

32 PROPRITS DU DATACONTROL

Pour dfinir les proprits du DataControl, nous utilisons la boite de dialogue Pages de proprits de ce composant. Pour y accder, vous pouvez cliquer sur les trois points de la proprit Personnalis de la fentre des proprits ou passer par le menu contextuel du composant (clic droit sur le control, puis item Proprits du contrle ADODC). Vous affichez les pages de proprits que vous renseignerez comme ci-aprs.

Nous dfinissons dans ce premier onglet la chane de connexion, c'est--dire le fournisseur qui va nous permettre d'tablir la connexion et le chemin de la base de donnes. Cliquez sur le bouton de commande Crer pour afficher la fentre des Proprits des liaisons de donnes ci aprs.

Seules les proprits pour lesquelles nous avons modifi les valeurs standard sont indiques.
INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

_________________________________________________________________________________________________________________

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 1 - UTILISATION D'UN DATACONTROL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

Comme nous utilisons une base de donnes Access, version 2002, nous allons dfinir le fournisseur ad hoc, en l'occurrence Microsoft Jet 4.0 OLE DB Provider. Si vous utilisez une base Access 98, ce pourrait tre la version 3.51 du mme fournisseur. Cliquez sur le bouton de commande Suivant, ou sur l'onglet Connexion pour dfinir la chane de connexion.

Utilisez le bouton de commande avec les trois points ( droite du champ) pour parcourir l'arborescence et slectionner la base de donnes recherche. En ce qui nous concerne, nous utilisons une base Access 2002 nomme Biblio2002.mdb situe dans le dossier DidactDB Nous considrons ici que votre base Access n'est pas scurise, donc ni nom d'utilisateur, mot de passe ne sont ncessaire. Vous pouvez maintenant tester la connexion (bouton de commande en bas), puis valider.

Avec ces fentre, nous avons dfini la chane de connexion, qui se prsente comme suit (en tout cas chez moi) dans le champs de l'onglet Gnral des pages de proprits: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DidactDB\Biblio2002.mdb;Persist Security Info=False Bien sur, le chemin de la base de donnes pourra tre autre en ce qui vous concerne. Cette chane de connexion sera a peu prs identique si nous passons par une requte SQL pour crer un recordset (jeu de donnes). Mais c'est une autre histoire, ou plutt une suite l'histoire en cours, que nous connatrons par la suite
_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 1 - UTILISATION D'UN DATACONTROL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

Voila, notre connexion est tablie, et notre DataControl sait maintenant o trouver la base de donnes voulue, et comment y accder. Mais il ne connat pas encore la table qu'il doit utiliser. Pour cela, il faut complter dans la page de proprits o nous somme revenu, l'onglet RecordSource.

Utilisez les listes droulantes pour dfinir le Type de commande, ici 2 AdCmdTable, et le nom de la table, en l'occurrence la table Authors. Vous avez sans doute vu dans la liste Type de commande que d'autres choix taient possibles. Pour mmoire, citons les ici: une instruction SQL ou une procdure stocke. Nous tudierons par la suite la procdure SQL. Voila maintenant notre DataControl oprationnel.

33 PROPRITS DE LA DATALIST

Proprits Name DataSource Height Left ListField

Valeurs DataList1 3375 300 Author

Proprits RowSource TabIndex Top Width

Valeurs Adodc1 3 300 2940

Notez que nous n'avons pas renseign la proprit DataSource, mais que nanmoins nous l'avons fait figurer dans le tableau. Cette proprit indique une valeur indiquant le DataControl (ce pourrait tre un autre objet d'ailleurs, tel qu'un objet Command, mais ne compliquons pas) auquel est lie la DataList. Pourquoi donc n'avons-nous pas renseign cette proprit, et pourquoi cela fonctionne-t-il quand mme? La proprit DataSource "renvoie ou dfinit une source de donnes au travers de laquelle un consommateur de donnes est li une base de donnes" (MSDN). Cette liaison implique que tout changement effectu travers la liste serait rpercut dans la base de donne source du DataControl. La proprit DataField va de paire avec la proprit DataSource, puisqu'elle "renvoie ou dfinit le nom d'un champ auquel un consommateur de donnes sera li" (toujours MSDN). Or cette liste n'est qu'une simple liste de choix, et non un contrle dpendant, et donc nous ne voulons pas qu'elle soit lie au DataControl, au risque de perturber notre code, voire la base de donnes elle-mme. Mais, comme nous voulons quand mme que la liste affiche le nom des auteurs, il nous faut quand mme lui indiquer o elle va les trouver. Ce sera l'affaire des proprits RowSource et ListField. La proprit RowSource va indiquer dans quel objet rcuprer ces noms (ici le DataControl), sans que cela n'implique aucune liaison de dpendance Quant la proprit ListField, son "alter ego", elle indiquera le champ dont les valeurs doivent tre affiches dans la liste, en l'occurrence donc, le champ Author.
34 PROPRIT DES TEXTBOX

Les TextBox sont aussi des contrles dpendants, c'est--dire comme nous l'avons vu 33 que nous pouvons les lier une colonne d'une table d'une base de donnes. Pour ce faire, il suffit de dfinir leurs proprits DataSource et DataField en consquence.
_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 1 - UTILISATION D'UN DATACONTROL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

Rappelons que nous avons cr un groupe de contrles, et donc les dits contrles ont tous le mme nom, et ne sont distingus que par leur index. Proprits Name Index DataField DataSource Height Left TabIndex Top Width Valeurs txtDonnes 1 Adodc1 315 0 525 4050 1 1050 2575 2 1575

0 AU_ID

35 PROPRITS DES BOUTONS DE COMMANDE

Nous avons cr cinq boutons de commande qui forment eux aussi un groupe de contrles. Proprits Name Index Caption Height Left TabIndex Top Width Valeurs cmdNavigation 1 2 3 Dernier Prcdent Suivant 315 5475 3975 5475 5 6 7 3075 1290

0 Premier 3975 4 2625

4 Fermer 3975 8 3225 2790

Pensez dfinir les proprits communes aux contrles d'un groupe ds la cration du premier contrle, avant de le copier/coller. Ceci vous vitera de saisir plusieurs fois les valeurs de ces proprits.

Voil notre feuille termine, tout au moins dans sa partie graphique et proprits de ses composants. Reste nous occuper du code. Mais vous pouvez d'ores et dj vrifier que votre liste affiche bien ce que vous avez dfini. 4 LE CODE DU FORMULAIRE
41 LE CODE DE L'VNEMENT FORM_LOAD

Ligne Code 1 Option Explicit 2 Private Sub Form_Load() 3 Adodc1.Recordset.MoveFirst 4 End Sub

Commentaires Pour mmoire (oblige la dclaration des variables). Se produit au chargement du formulaire. Se positionne sur le premier enregistrement du recordset sous jacent du DataControl.

Quand vous utilisez un DataControl, vous utilisez en fait, sans vous en rendre compte, un recordset sous jacent, c'est--dire un jeu d'enregistrements. C'est le jeu d'enregistrement qui contient tous les enregistrements de la table dfinie, et c'est sur ce jeu que nous travaillons. Nous aurons l'occasion de le constater de nouveau dans ce qui suit et notamment au cours du paragraphe traitant des boutons de navigation.
_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 1 - UTILISATION D'UN DATACONTROL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

42 LE CODE DE L'VNEMENT MOVECOMPLETE

Pour afficher correctement la dclaration de la procdure, n'essayez pas de la recopier, les erreurs sont aises faire et difficile rparer. Droulez plutt sur la liste droulante des objets, en haut gauche du module de code et slectionnez l'objet cmdNavigation. Puis dans la liste droulante de droite, slectionnez l'vnement voulu. Ligne Code 1 Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) 2 If Not Adodc1.Recordset.EOF And Not Adodc1.Recordset.BOF Then Commentaires Nous utilisons ici l'vnement MoveComplete du DataControl, pardon du recordset sous jacent du DataControl, vnement qui se produit aprs chaque dplacement dans le dit recordset.

DataList1.BoundText Adodc1.Recordset.Fields(1).Value

4 5

End If End Sub

Nous vrifions si nous sommes toujours dans les limites du recordset, donc si nous ne sommes pas BOF (avant le premier enregistrement) ni EOf (aprs le dernier enregistrement). Voyez l'explication ciaprs. = Dans l'affirmative, cette ligne de code s'excutera afin de mettre en surbrillance l'item de la liste correspondant l'enregistrement devenu en cours. Si nous tions hors limites du recordset, cette ligne de code gnrerait une erreur. Fin du test

Le code de la ligne 3 peut paratre assez abscond. Il s'claire quelque peu avec l'information suivante, issue de MSDN. La section "BoundText, proprit" de MSDN dit: "Le positionnement du contrle Data, spcifi par la proprit DataSource, un nouvel enregistrement, donne la proprit BoundText la valeur spcifie par la proprit DataField. Le contrle DataList ou DataCombo cherche ensuite dans la liste si la valeur de la proprit BoundText correspond la valeur du champ dans la proprit BoundColumn. Si oui, l'enregistrement est mis en surbrillance dans la liste ou plac dans la zone de texte du contrle DataCombo".

Bon, je vois, l'explication de MSDN est presque aussi absconde que l'est la ligne de code Voici ce que 2 j'en ai compris , et comment je l'ai interprt pour ce qui nous proccupe ici. Lorsque un enregistrement devient l'enregistrement en cours, la proprit BoundText prend pour valeur celle du champ dfini par la proprit DataField. Puis, la DataList recherche un item dont la valeur gale la valeur de DataField. Si elle trouve cette valeur dans la liste, l'item correspondant passe en surbrillance. Donc, j'en dduit que, quand la valeur d'un item de la liste gale celle d'un champ, ou d'ailleurs par extension une quelconque valeur dfinie, l'item passe en surbrillance. Vous me suivez jusque l? Bon, mais nous n'avons pas dfini la proprit DataField de la liste, et donc nous n'avons aucune valeur comparer. Qu' cela tienne, car nous avons notre disposition un autre moyen de dfinir la valeur d'un champ de l'enregistrement en cours: passer par le recordset sous jacent du DataControl. Dans notre cas, la liste affiche tous les auteurs de la table Authors. La colonne qui correspond est la colonne Author, qui fait partie de la collection Fields du recordset, et c'est le second item de la dite collection (seconde colonne de la table). Et comme les items d'une collection commencent 0, l'item correspondant la
2

Comme d'habitude, si vous relevez une quelconque erreur ou imprcision, ou si vous pouvez amliorer cette explication, faite m'en part par le biais de la liste DidactVisualBasic.
_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 1 - UTILISATION D'UN DATACONTROL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

colonne Author porte le numro 1. Donc, Adodc1.Recordset.Fields(1).Value contient le nom de l'auteur de l'enregistrement en cours. En consquence, dans le code DataList1.BoundText = Adodc1.Recordset.Fields(1).Value, nous affectons la valeur de la colonne Author de l'enregistrement en cours la proprit BoundText de la DataList, qui recherche alors l'item correspondant cette valeur et le met en surbrillance. Ouf! L'explication est difficile, pour une toute petite ligne de code, mais il est tout fait facile d'utiliser cette approche.
43 LE CODE DES BOUTONS DE COMMANDE POUR LA NAVIGATION

Nous avons un groupe de cinq boutons de commande.Quatre d'entre eux vont nous permettre de naviguer dans le recordset, le dernier permettant de fermer la feuille. Ligne Code Commentaires 1 Private Sub cmdNavigation_Click(Index As Procdure vnementielle clic sur un des boutons de commande. Index est l'index dans le groupe du Integer) bouton cliqu. Dbut d'un bloc With. Ainsi, il ne sera plus ncessaire 2 With Adodc1.Recordset d'utiliser Adodc1.Recordset pour chaque rfrence une proprit, mthode ou vnement concernant cet objet, l'intrieur du bloc (jusqu' End With). On teste la valeur du paramtre Index pass la 3 Select Case Index procdure. 4 Case 0 C'st le bouton de commande d'index 0 (Premier enregistrement) qui a t cliqu. 5 .MoveFirst On appelle la mthode MoveFirst du recordset sous jacent du DataControl pour afficher le premier enregistrement, ou plus exactement pour se positionner sur ce premier enregistrement. Remarquez le "." en tte de ligne. Nous sommes l'intrieur du bloc With, donc pas besoin de faire rfrence l'objet. 6 Case 1 Dernier enregistrement 7 .MoveLast Mthode MoveLast du recordset (toujours avec le seul point devant la mthode). 8 Case 2 Enregistrement prcdent. 9 .MovePrevious Mthode MovePrevious du recordset. 10 If .BOF Then On teste si on n'a pas dpass le dbut du recordset, afin d'viter une erreur. La proprit BOF du recordset renvoie True dans ce cas. Remarquez toujours le "." devant la proprit (bloc With). 11 MsgBox "Dbut du jeu On est out, donc on avertit l'utilisateur avec une boite d'enregistrement" de message 12 .MoveFirst et on revient au premier enregistrement. 13 End If 14 Case 3 15 .MoveNext Enregistrement suivant 16 If .EOF Then L, on tes EOF (dpassement de la fin du recordset). 17 MsgBox "Fin du jeu d'enregistrement" 18 .MoveLast On revient au dernier enregistrement. 19 End If 20 Case 4 Bouton Fermer.
_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 1 - UTILISATION D'UN DATACONTROL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

21 22 23 24

Unload Me End Select End With End Sub

Dcharge la feuille de la mmoire. Me est un mot cl qui fait implicitement rfrence la feuille en cours. Fin du bloc With.

44 LE CODE DE L'VNEMENT DOUBLE CLIC DE LA LISTE

Nous utilisons un double clic et non un clic simple, car, comme vous le constaterez, nous avons un MoveFirst dans la procdure vnementielle. Or, cette mthode MoveFirst a pour effet de gnrer l'vnement Clic de la liste, par l'intermdiaire de l'vnement MoveComplete du recordset, et nous aurions ainsi une boucle sans fin. En effet, rappelez vous qu l'vnement MoveComplete du recordset slectionne un item de la liste, ce qui est quivalent un clic (voir 42). Si vous voulez tester avec un simple clic, mettez un stop dans votre procdure afin de pouvoir l'arrter. Ligne Code 1 Private Sub DataList1_DblClick() 2 Dim strAuthor As String 3 strAuthor = DataList1.Text 4 5 With Adodc1.Recordset .MoveFirst Commentaires Procdure vnementielle double clic de la liste. Dclaration d'une variable de type chane de caractres qui contiendra la valeur de l'item slectionn dans la liste. Dbut d'un bloc With. On se positionne sur le premier enregistrement du recordset. Ainsi, la recherche dbutera au dbut, portera sur tout le recordset, et finira la fin du dit recordset. On recherche un enregistrement dont la colonne Author contiendra la valeur contenue dans la variable strAuthor, donc correspondant la valeur de l'item slectionn dans la liste. Fin du bloc With

.Find "Author = '" & strAuthor & "' "

7 8

End With End Sub

45 LE CODE DES BOITES DE TEXTE

Il n'y en a pas Vous vous attendiez peut-tre un code compliqu pour maintenir synchronises les valeurs contenues dans les TextBox avec l'enregistrement en cours du DataControl et/ou l'item slectionn dans la liste. Pas besoin, car rappelez vous que ces TextBox sont des contrles dpendants et que nous avons dfinit leurs proprits DataSource et DataField respectivement sur le Adodc1 (le DataControl, donc en fait le jeu d'enregistrement) et le champ voulu (voir 34). Donc, les boites de texte reflteront exactement les valeurs des champs dfinis de l'enregistrement en cours. Cela tombe bien, car j'avais hte de terminer cette premire section ;).

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 2 - UTILISATION D'UNE CHANE SQL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

SECTION 2 UTILISATION D'UNE CHANE SQL


PRALABLE Comme nous aurons choisir entre plusieurs formulaires pour l'excution, pensez modifier le champ Objet de dmarrage dans la boite de dialogue Proprits du projet (menu Projet/Proprits). Vous pouvez aussi utiliser le formulaire d'accueil (MDIAccueil) dont la barre d'outils et le menu permettent de passer d'un formulaire l'autre. Dans ce cas, n'oubliez pas de dfinir la proprit MDIChild True pour chacune des feuilles. Vous trouverez en annexe le code de la feuille MDI et les explications y affrant. 1 PETITE PRSENTATION DE SQL SQL (Structure Query Language) est un langage d'interrogation des bases de donnes. Mais, aucune comparaison avec un langage comme Visual Basic par exemple, SQL ne disposant d'aucune syntaxe de programmation "classique". Ce serait donc plutt un "sous langage" spcifique la gestion de bases de donnes, qui ne peut s'utiliser que dans le cadre d'un langage "gnral". Bien que SQL soit devenu une norme ANSI, il existe certaines diffrences entre les nombreuses versions, notamment avec le moteur Jet (pour bases Access) pour ce qui nous concerne ici. SQL permet l'extraction et la lecture d'enregistrements, leur mise jour et leur suppression et permet aussi la cration de requtes dynamiques (paramtres). Il fait tout cela avec seulement une trentaines d'instructions, ce qui permet de s"approprier assez facilement son usage. 2 DMARCHE GNRALE Nous avons vu section 1 qu'un DataControl gnrait en fait un recordset (un jeu d'enregistrements) sous jacent, et que c'est sur ce recordset que nous travaillions. tant donn que nous n'allons plus utiliser de DataControl dans cette section, il va nous falloir "reproduire" toutes les actions ralises par le DataControl manuellement, c'est--dire tablir la connexion avec la base de donnes voulue, dfinir la table atteindre, ventuellement dfinir les colonnes de la table que nous utiliserons, puis crer et utiliser le recordset qui en rsultera. Nous allons copier frmDonnes, nommer cette copie frmSQL. Pour ce faire, crez un nouveau formulaire, slectionnez tous les contrles de frmDonnes, faites un Copier de ces lments et un Coller sur le nouveau formulaire. Supprimer le DataControl, puisque nous ne nous en servirons pas. Copiez galement le code de frmDonnes. 3 LES MODIFICATIONS DU CODE
31 LA SECTION DCLARATIONS

Ligne Code 1 Option Explicit 2 Dim cn As ADODB.Connection

Commentaires Force la dclaration des variables Dclaration d'une variable objet pour la connexion

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 2 - UTILISATION D'UNE CHANE SQL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

Private WithEvents ADODB.Recordset

rsAuthors

As Dclaration d'une variable objet pour le recordset

Les variables dclares dans la section dclaration d'un module de code d'une form ont une porte sur toute la form, c'est--dire qu'ils sont lisibles depuis toutes les procdures du dit module. Vous avez sans doute not que nous avons dclar la variable objet rsAuthors avec WithEvents. Cela signifie que cette variable pourra rpondre aux vnements dclanchs par le recordset auquel elle se rfre. Ainsi, elle pourra rpondre notamment l'vnement MoveComplete du dit recordset. Essayez d'omettre WithEvents dans la dclaration, et vous constaterez que la variable ne figure plus dans la zone de liste des objets du module, et donc qu'aucun vnement relatif cette variable ne figure dans la zone de liste des vnements.
32 - L'VNEMENT FORM_LOAD (CHARGEMENT)

L'vnement Form_Load est notablement plus toff que le mme vnement de frmDonnes. En effet, il va falloir suppler l'absence du DataControl, donc tablir dans cette procdure la connexion ainsi que crer le recordset, toutes choses que faisait automatiquement le contrle data. Ligne Code 1 Private Sub Form_Load() 2 Dim SQL As String 3 Dim strConnex As String 4 Dim i As Integer 5 Set cn = New ADODB.Connection 6 Commentaires

9 10

11

Pour la chane SQL Pour la chane de connexion Pour les boucles On affecte la variable objet cn dclare dans la section dclarations du module un objet connexion. Set rsAuthors = New ADODB.Recordset On affecte la variable objet rsAuthors, elle aussi dclare dans la section dclarations du module, un objet recordset. strConnex = On dfinit ici la chane de connexion elle-mme. Le "Provider=Microsoft.Jet.OLEDB.4.0;Data provider pourrait ventuellement tre Jet 3.51. A vous Source=c:\DidactDB\Biblio2002.mdb" aussi d'adapter le chemin de la base de donnes le cas chant. Dfinition de la chane SQL. L'toile (*) signifie que SQL = "SELECT * FROM Authors" nous incluons toutes les colonnes de la table dfinie, ici la table Authors. cn.Open strConnex On ouvre la connexion suivant la chane contenue dans strConnex. rsAuthors.CursorLocation = adUseClient Dfinition de la position du curseur pour le recordset (voir rappel ci-dessous) Ici, le curseur est ct client (adUseClient), ce qui permet d'avoir accs aux cureurs fournis par une bibliothque locale, gnralement mieux dots en fonctions que des curseurs externes. rsAuthors.Open SQL, cn, adOpenDynamic, Ouverture du recordset (cration) d'aprs les adLockOptimistic, adCmdText paramtres dfinis pralablement concernant les chanes de connexion et SQL. Pour plus d'explications sur les paramtres, regardez dans MSDN: Mthode Open (objet Record set d'ADO), Proprit CursorType, Proprit LockType, Proprit CommandType).

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 2 - UTILISATION D'UNE CHANE SQL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

12

13 14

15

16

17 18

Dfinition de la proprit RowSource de la DataList. Comme dj vu prcdemment ( 33 Proprits de la DataList), cette proprit spcifie o la liste va trouver les lments qu'elle doit afficher. Voir explication ci-dessous concernant la syntaxe (SET). DataList1.ListField = Dfinition de la colonne du recordset qui contient les rsAuthors.Fields(1).Name '"Author" lments afficher dans la liste. For i = 0 To 2 Cette boucle permet de parcourir le groupe des trois TextBox du formulaire. Rappelons que la proprit Index d'un groupe de control commence 0. Set txtDonnes(i).DataSource = rsAuthors Dfinition de la source du ime TextBox. Une TextBox est un consommateur de donnes et un recordset est un fournisseur de donnes. La TextBox (consommateur) est ainsi lie au recordset (fournisseur). txtDonnes(i).DataField = Dfinition du nom du champ qui contient les donnes rsAuthors.Fields(i).Name de la ime TextBox. La valeur contenue dans le dit champs sera affiche dans la TextBox. Le consommateur de donnes (TextBox) est li au fournisseur (champ). Next i End Sub Un curseur est un mcanisme qui retourne les enregistrements et dfinit comment l'ADO peut accder et utiliser ces enregistrements. Les curseurs commandent la navigation travers les enregistrements, la possibilit de mise jour des donnes, et la visibilit des modifications de la base de donnes effectues par d'autres utilisateurs. (MSDN).

Set DataList1.RowSource = rsAuthors

Dans le code ligne 12 ci-dessus, nous avons attribuons une rfrence la proprit RowSource de la liste. En effet une simple affectation avec "=" ne suffirait pas, car cette proprit n'est pas disponible au moment de l'excution. L'attribution d'une rfrence d'objet une variable ou une proprit doit se faire avec l'instruction Set.
321 ALTERNATIVE CONSOMMATEUR/FOURNISSEUR DE DONNES: LA COLLECTION BINDING

L'affectation d'une source de donnes pour caque TextBox du formulaire peut vite s'affrer fastidieuse si les dites TextBox ne sont pas organises en groupe de contrles. Certes, on pourrait lors parcourir la collection des contrles, mais alors, il faudrait tester le type de chaque contrle pour dtecter si c'est bien une TextBox. Et puis, il pourrit y avoir des TextBox non dpendantes; bref, l'enfer Heureusement, nous pouvons utiliser une collection Binding qui permet de lier trs facilement une source de donnes des TextBox, et plus gnralement de lier un fournisseur de donnes un consommateur de donnes. Pour ce faire, il convient dans un premier temps de dclarer la collection Binding. Ajoutez cette ligne de code dans la section dclarations du module: Dim bndAuthors As BindingCollection. Puis, ajoutez les 3 lignes de code suivantes aprs avoir supprim (ou plutt mis en commentaires ) les lignes 14 17 du code prcdent.

C'est d'ailleurs ce que nous avons fait dans le projet VB. Les lignes concernant la collection Binding sont en commentaires.
_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 2 - UTILISATION D'UNE CHANE SQL

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

Ligne 14

Commentaires Dfinit le jeu d'enregistrements comme source de donnes (DataSource) de la collection Bindings. 15 'With bndAuthors Dbut d'un bloc With 16 .Add txtDonnes(0), "Text", "Au_ID", , "ID" Utilisation de la mthode Add de la collection bndAuthors pour ajouter un membre (un objet Binding) la collection. Ici, on tablit une liaison entre la TextBox d'index 0 (dans le groupe de contrles) et l'objet Binding. Pour plus d'informations sur les diffrents paramtres, reportez vous MSDN, rubrique "Add, mthode (BindingCollection). 17 .Add txtDonnes(1), "Text", "Author", , Ajout d'un second membre la collection Binding pour tablir la liaison entre txtDonnes(1) et la colonne "Nom" "Author" du recordset rsAuthors (la source de donnes dfinie ligne 14). 17 bis .Add txtDonnes(2), "Text", "Year Born", , Troisime membre de la collection, pour la liaison entre txtDonnes(2) et la colonne Year Born du "Date de naissance" recordset source de donnes. 17 ter End With Fin du bloc With A oui, j'oubliais: pour pouvoir utiliser la collection Binding, il convient de dclarer une rfrence Microsoft Data Binding Collection pour le projet (menu Projet/Rfrence).
33 LES AUTRES MODIFICATIONS

Code Set bndAuthors.DataSource = rsAuthors

Aucune difficult notable en ce qui concerne les autres modifications apporter au code. Il suffit de remplacer toutes les occurrences de "Adodc1.Recordset" par "rsAuthors". Aidez vous de Chercher/Remplacer (Menu Edition/Rechercher). En cas de difficult, reportez vous au code du projet VB. Une indication particulire en ce qui concerne la dclaration de l'vnement MoveComplete. Avec le contrle data, nous avons utilis (Section 1 - 42) l'vnement du dit contrle data, qui s'adressait en fait au recordset sous jacent de celui-ci, alors qu'ici, nous utilisons directement l'vnement MoveComplete du recordset rsAuthors. La dclaration de la procdure vnementielle devient donc: Private Sub rsAuthors_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 3 - UTILISATION D'UN OBJET COMMAND

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

SECTION 3 UTILISATION D'UN OBJET COMMAND


1 PRSENTATION Un objet Command dfinit "des informations spcifiques et dtailles sur les donnes extraites d'une connexion une base de donnes" (MSDN). En d'autres termes, un tel objet permet de traiter des donnes dans le cadre d'une connexion tablie avec une base de donnes. En fait, dans l'expression la plus simple d'une commande (d'un objet Command), on trouvera une analogie certaine avec un contrle data, tant dans la cration de l'objet que dans son emploi Les objets Command sont des objets trs puissants, permettant d'tablir des relations afin de crer des recordsets hirarchiques, mais c'est une autre histoire qui fera sans doute l'objet d'un prochain didacticiel. Pour crer le formulaire frmCommand dans lequel nous utiliserons la commande, faites une copie du formulaire frmSQL. Les modifications apporter seront indiques au fur et mesure. 2 CRATION D'UN OBJET COMMAND Les objets command font partie d'un DataEnvironment. Pour crer un objet Command, cliquez avec le bouton droit de la souris dans la fentre de l'explorateur de projet afin d'accder au menu contextuel, cliquez sur l'item Ajouter et cliquez sur l'item DataEnvironment du sous menu (on peut galement utiliser le menu Projet/Ajouter DataEnvironment). La fentre ci-dessous s'affiche.

Nous garderons dans ce qui suit les noms proposs par dfaut, mais il est naturellement possible d'affecter ces objets d'autres noms plus significatifs.
21 - CRATION DE LA CONNEXION

Un objet Command ne peut fonctionner en dehors d'une connexion. La premire chose faire est donc de spcifier les lments qui permettront d'tablir cette connexion. Cliquez sur Connection1 avec le bouton droit de la souris pour afficher le menu contextuel, et slectionnez alors l'item Proprits. La fentre ci-dessous s'affiche, et cette fentre doit vous rappeler des souvenirs, non? Elle est en effet identique celle utilise section un pour dfinir la connexion du contrle data.

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 3 - UTILISATION D'UN OBJET COMMAND

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

Dfinissez le fournisseur comme tant Microsoft Jet 4.0 OLEDB.

Renseignez le chemin de la base de donnes. Vous pouvez parcourir l'arborescence du disque en cliquant sur le bouton de commande avec les trois points, mais c'est du dj vu Testez la connexion et validez.

22 CRATION DE L'OBJET COMMAND

Les lments de la connexion une fois dfinis, nous pouvons passer la cration de la commande ellemme. Pour ce faire, utilisez le menu contextuel de Connexion1, item Ajouter une commande, ou cliquez sur l'icne de la barre d'outils de la fentre DataEnvironment. Vous obtenez la fentre ci-dessous.

Dans le menu contextuel de Command1, affichez la fentre des proprits de l'objet.

Dans l'onglet Gnral, dfinissez le type d'objet de la base de donnes. Nous voulons rechercher les donnes dans une table, donc choisissez Table dans la liste droulante. Puis, prcisez le nom de la table dans le champ Nom de l'objet (liste droulante). Notez que nous aurions pu dfinir comme source de donnes une procdure SQL en slectionnant le bouton radio Instruction SQL.

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 3 - UTILISATION D'UN OBJET COMMAND

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

Maintenant, si vous droulez Command1 (clic sur le + du nud de l'arbre), vous constaterez que les champs de la table Authors s'affichent.

3 LES MODIFICATIONS DES PROPRITS DES OBJETS DU FORMULAIRE Toutes les modifications des proprits des objets du formulaire sont relatives la modification de la source de donnes. Les objets du formulaire concerns par ces modifications sont donc ceux qui ont besoin d'une source de donnes, soit donc la DataList et les TextBox. Nous allons utiliser deux nouvelles proprits, en plus des proprits dj connues des diffrents objets: la proprit RowMember pour la liste et la proprit DataMember pour les TextBox. Ces deux proprits servent prciser le "membre" du DataEnvironment, car ce dernier peut contenir plusieurs commandes (plusieurs membre). En fonction du membre dfini, nous aurons accs tel ou tel autre jeu de donnes, chacun ventuellement dfini dans une commande du DataEnvironment.
31 PROPRITS MODIFIES DE LA DATALIST

Dfinissez la proprit RowSource de DataList1 comme tant DataEnvironment1 et la proprit RowMember comme tant Command1. Vrifiez la proprit ListField dont la valeur doit tre Author. Aidez vous des listes droulantes pour ce faire. C'est tout
32 PROPRITS MODIFIES DES TEXTBOX

Dfinissez, pour chacune des trois TextBox, la proprit DataSource de DataList1 comme tant DataEnvironment1 et la proprit DataMember comme tant Command1. Vrifiez la proprit DataField de chaque TextBox. C'est encore tout Vraiment, c'est facile, n'est-ce pas? 4 LES MODIFICATIONS DU CODE L aussi, peu de modifications par rapport au code de frmDonnes (formulaire du contrle de donnes), mais une nouveaut importante: l'utilisation du code spcifique l'objet Command.
41 CODE DE L'OBJET COMMAND

L'objet Command est dot d'un module de code, tout comme un objet Form par exemple. Il est donc possible d'crire du code spcifique l'objet Command, et notamment du code relatif aux vnements de cet objet. Comme nous le constaterons, cela nous sera des plus utile.

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 3 - UTILISATION D'UN OBJET COMMAND

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

En effet, nous avons jusqu' maintenant utilis l'vnement MoveComplete du recordset sous jacent du contrle data (Section 1 42), ou directement le mme vnement du recordset cr avec SQL (Section 2 33). Mais, nous n'avons plus de contrle data, et le recordset que nous allons utilis est issu de l'objet Command, et n'est donc pas disponible dans la liste des objets du code de frmCommand. Vrifiez le dans la liste des objet de la feuille de code: aucun objet DataEnvironment, Command ou rsCommand n'y figure. Il n'est donc pas possible d'invoquer l'vnement MoveComplete partir de la feuille de code de frmCommand. Heureusement donc que, comme dit prcdemment, l'objet Command possde une feuille de code. Celleci est accessible par le biais du menu contextuel du dit objet. Cliquez donc sur l'item Afficher le code du menu contextuel.

Une feuille de code apparat alors, en tout point identique celle d'un formulaire. Et, eurka, nous avons une liste d'objets, parmi lesquels rsCommand1, et une liste d'vnements, parmi lesquels l'vnement MoveComplete de rsCommand1, comme ci-dessous..

Il ne nous en faut pas plus pour copier notre code correspondant dans la procdure vnementielle de rsCommand1. En cliquant sur MoveComplete de Command1, la dclaration de la procdure s'est faite automatiquement. Compltez comme suit. Ligne Code Commentaires 1 Private Sub Dclaration de la procdure vnementielle. rsCommand1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) 2 If Not rsCommand1.EOF And Not Notez que l'on travaille sur le recordset sous jacent de rsCommand1.BOF Then l'objet Command. 3 frmCommand.DataList1.BoundText = rsCommand1.Fields(1).Value 4 End If 5 End Sub
_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 3 - UTILISATION D'UN OBJET COMMAND

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

Une dernire chose: pensez supprimer la procdure MoveComplete de la feuille de code de frmCommand, ainsi que la dclaration "Private WithEvents rsAuthors As ADODB.Recordset" qui ne servent plus rien.
42 LES AUTRES MODIFICATIONS DU CODE

Comme dj dit, il convient de remplacer le nom du recordset issu de la requte SQL (rsAuthors) par le nom du recordset sous jacent de l'objet command (DataEnvironment1.rsCommand1). La rfrence DataEnvironment1 est ncessaire, sans quoi, VB ne saurait o trouver rsCommand1, car nous sommes dans la feuille de code du formulaire qui "ignore" l'objet DataEnvironment. Pour effectuer facilement ce remplacement, il suffit alors d'utiliser la boite de dialogue comme ci-dessous, accessible par le menu Edition/Remplacer.

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 4 LA CERISE SUR LE GATEAU

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

SECTION 4 LA CERISE SUR LE GATEAU


En guise de conclusion, un petit plus pour l'utilisateur de vos formulaire. Vous avez remarqu qu'un simple clic sur un item de la liste, dans chacun des formulaires, ne suffisait pas slectionner l'enregistrement correspondant l'item ainsi slectionn. Il y faut un double clic. Vous vous tes d'ailleurs certainement laiss prendre ce petit "pige" en slectionnant un item de la liste sans pour autant voir changer la valeur des TextBox, et ce malgr le label d'enregistrement situ au dessus de la dite liste, en rouge gras Je sais, je me suis moimme laiss prendre (; Aussi, pour alerter l'utilisateur, nous allons faire en sorte qu'un simple clic sur un des items de la liste fasse clignoter ce message d'avertissement, et que un double clic le fasse cesser. Le tout est assez facile raliser. Naturellement, il faudra complter tous les formulaire comme suit. Dans un premier temps, placez un contrle Timer sur le formulaire, de nom Timer1 (nom affect par dfaut par VB). Dterminez la proprit Enabled False et la proprit Interval 400. Puis compltez le code comme suit. La proprit Interval dfinit le nombre de millisecondes s'coulant entre deux appels de l'vnement Timer d'un contrle Timer Le principe est de dclencher l'action du Timer1 sur un simple clic, ou plutt de l'appuis sur la touche gauche de la souris. On inverse alors la proprit Visible du dit label pour obtenir l'effet de clignotement. 1 - MODIFICATION DE LA PROCDURE DATALIST1_DBLCLICK Ligne Code Private Sub DataList1_DblClick() Dim strAuthor As String strAuthor = DataList1.Text With Adodc1.Recordset .MoveFirst .Find "Author = '" & strAuthor & "' " End With Me.Timer1.Enabled = False Label1.Visible = True Commentaires Code existant.

1 2

End Sub

Annule l'action du Timer, donc, plus de clignotement. Rend le label visible. En effet, il se peut que le dit label soit dans une phase invisible du clignotement l'arrt de celui-ci. Code existant.

2 CRATION DE LA PROCDURE DATALIST1_MOUSEDOWN Ligne Code Commentaires 1 Private Sub DataList1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Dclenche l'action du premier timer. Le terme Me est 2 Me.Timer1.Enabled = True un mot cl qui se comporte comme une variable dclare implicitement et qui reprsente ici la feuille en cours. Il aurait pu tre omis. 3 End Sub
_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 4 LA CERISE SUR LE GATEAU

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

Vous vous posez peut-tre la question de l'utilisation de l'vnement MouseDown de la liste plutt que d'utiliser l'vnement Click. L'explication est que toute slection d'un nouvel item dans la liste dclenche un vnement Click, du fait de l'vnement MoveComplete gnr chaque dplacement dans le recordset, ce mouvement ayant pour effet de slectionner l'item correspondant au nouvel enregistrement (synchronisation de la liste). De ce fait, le dclenchement du clignotement aurait lieu ds l'ouverture du formulaire, et chaque utilisation des boutons de navigation, ce que nous ne souhaitons pas. Do l'utilisation de l'vnement MouseDown qui n'est pas gnr par un dplacement, et dont nous pouvons alors contrler troitement l'effet. CQFD 3 CRATION DE LA PROCDURE TIMER1_TIMER Ligne Code 1 Private Sub Timer1_Timer() 2 Label1.Visible = False 3 Timer1.Enabled = False 4 Timer2.Enabled = True 5 End Sub Voila... Commentaires Rend le label invisible --- puis inhibe le premier timer et active le second timer.

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com

Created by Neevia Personal Converter trial version http://www.neevia.com

SECTION 5 - CONCLUSION

PREMIERS PAS ACCS AUX DONNES

_____________________________________________________________________________________________________

CONCLUSION
L'initiation l'accs aux donnes est termine, et maintenant vous pouvez aller plus loin dans la matrise de l'accs aux donnes, tant en continuant avec d'autres praticiels et didacticiels qu'en volant de vos propres ailes. Pour notre part, nous vous conseillons vivement de mettre en uvre "grandeur nature", ce qui t expos ici. Lorsque vous pourrez sans trop de difficult et sans trop vous rfrer au prsent didacticiel, ou au projet Visual Basic qui l'accompagne, vous pourrez alors passer aux autres didacticiels de DidactVisualBasic traitant de ce sujet. Deux autres didacticiels peuvent actuellement complter votre approche sur ce sujet: Accs aux donnes ADO, utilisant un recordset hirarchique pour accder deux tables lies (enregistrements Parent/Enfant). Toutes les fonctionnalits de l'accs aux donnes sont accessibles par menu ou par barre d'outils (navigation, gestion des enregistrements, recherche). Les enregistrements sont affichs dans un formulaire, dans des TextBox pour ce qui est des enregistrements parents et dans une DataGrid pour ce qui est des enregistrements enfants. Les TextBox sont dpendantes par l'intermdiaire d'une collection Binding(Accs aux donnes avec ADO). Un didacticiel d'initiation portant sur l'utilisation des recordset hirarchiques est en prparation. Accs aux donnes DAO, sur la mme base que le prcdent, mais sans recordset hirarchique, ni collection Binding, ceux-ci n'tant pas disponibles sous ADO. On y utilise deux ControlData dfinis et synchroniss par une requte SQL, et la relation des TextBox avec la database est tablie au niveau de chaque contrle, comme nous l'avons fit dans ce prsent didacticiel.. (Accs aux donnes avec DAO) Vous pouvez galement trouver des didacticiels concernant d'autres thmes l'adresse Praticiels Visual Basic Pour finir, n'hsitez pas demander toute explication concernant ce praticiels (et les autres) directement l'adresse mailto:jacma@redaction-developpez.com Utilisez galement ce dernier lien pour signaler d'ventuelles erreurs ou omissions, ainsi que pour me faire parvenir vos commentaires dont je vous remercie par avance. Bon courage

_________________________________________________________________________________________________________________ INFOGEST - JACQUES MALATIER - Pour demander un renseignement sur ce didacticiel, envoyez un message mailto:jacma@redaction-developpez.com

Created by Neevia Personal Converter trial version http://www.neevia.com