Vous êtes sur la page 1sur 14

Visual Basic et les Bases de Donnes

(Rsum)

Le concept de Base de Donnes est largement utilis dans tous les domaines qui impliquent linformatique. Visual Basic est, par excellence, un langage qui facilite le travail avec ce concept. Avant de commencer prsenter les liaisons entre VB et les bases de donnes, faisons une brve introduction au concept de base de donnes. Une base de donnes est une structure spcialement conue pour la gestion de grandes quantits de donnes. Par gestion on comprend lajout, la suppression, la modification et lutilisation (calculs, manipulations, slections, affichage, etc..) de donnes de diffrents types. Dune base lautre, les types de donnes peuvent tre diffrents. Par exemple dans une base de type Access il existe le type boolen (par exemple Vrai/Faux ou Oui/Non, etc.) tandis que dans une base de type MSSQL ce type nexiste pas et, donc, il faudrait le remplacer par un autre char*1 ("V"/"F") ou mme entier (0/-1). La faon denregistrer les donnes ainsi que la faon de lire les donnes peut diffrer dun type de base lautre. cause des diffrences entre les bases de donnes, la manire avec laquelle on travaillera sera aussi diffrente. Dans ce texte, nous allons analyser les liaisons entre VB et les bases de donnes relationnelles. Parmi les bases de donnes relationnelles nous prendrons lexemple de Access.

La base BaseTP4.MDB
Cette base de donnes est constitue de 3 tables, trois ensembles de donnes regroupes, lune contenant les donnes sur les tudiants inscrits, une autre sur les dpartements dattache de ces tudiants et la dernire sur les groupes o sont classs les tudiants. La table IFT1175 : Nom du champ NOM CODEPERM GROUPE Num DEPT REMARQUE INTRA FINAL TP On notera que la fiche de ltudiant contient le numro du dpartement plutt que le nom du dpartement et le numro de groupe plutt que sa description. Notez aussi que le nom du champ Num Dept contient un espace, ce qui est permis en Access. IFT 1975 / E05 Page 1 ADO.NET, Module 4 3 donnes numriques (relles doubles) Type de donnes Texte (maximum 33 caractres) Texte (maximum 12 caractres) Octet Entier long (= entier en VB.NET) Texte (maximum 20 caractres)

La table Fac-Dept : Nom du champ NumDEPT DEPT La table Groupes : Nom du champ NumGroupe Description Type de donnes Entier long. Correspond au champ GROUPE de la table IFT1175 Texte (max. 20 caractres) dcrivant le groupe : ex. Mardi AM. Type de donnes NumroAuto. Correspond au champ Num Dept de la table IFT1175 Texte (max. 25 caractres) indiquant le nom du dpartement.

On pourra donc aller chercher des donnes soit dans une table (ex. Liste des nom des tudiants avec leur note de l'intra) ou dans plusieurs tables (ex. Liste des tudiants dont le nom du dpartement est "Chimie" ou bien Liste des tudiants (Nom et Code permanent) avec le nom de leur dpartement et l'horaire de leur cours.

Communication avec les bases de donnes


Afin dtablir la communication entre les applications et les bases de donnes, les langages de programmation mettent la disposition du programmeur, diffrents outils. VB est un langage qui offre plusieurs outils simples mais efficaces dans le but de faciliter la programmation et lutilisation de telles liaisons. Chaque type de base de donnes est associ un fournisseur, cest--dire un logiciel qui rpond aux requtes qui lui sont soumises en traitant la structure et le contenu de la base. Il existe diffrents fournisseurs daccs aux bases de donnes. La liaison avec une base de donnes de type Access se fait laide du moteur de recherche Microsoft Jet OLE DB Provider qui gre les bases Access. Ceci nest pas laiss au choix de lusager car le type de connexion et le langage de requtes dpendent du type de base quon utilise. Ainsi, les fichiers Access 2003 (version 11) utilisent la version Jet 4.0 alors que les bases de Access 97 (version 8) utilisent la version 3.51 du Jet. Pour tablir des connections avec des bases de donnes, VB nous offre une large varit de contrles graphiques ainsi que des classes d'objets non graphiques. Certains de ces contrles ont t crs spcifiquement pour grer ces liaisons. Dautres sont des contrles que vous connaissez dj et qui contiennent simplement des proprits qui facilitent la liaison avec les donnes qui proviennent dune base de donnes.

DAO, ADO et ADO.NET


Les versions 5 et antrieures de VB utilisaient des outils de connexion rassembls sous le vocable de DAO (Data Access Objects) alors que la version 6 offrait des outils plus performants regroups utilisant la technologie OleDb et regroups sous le vocable ADO (ActiveX Data Objects). VB.NET ne supporte plus le DAO mais continue de supporter le ADO pour fins de continuit. Mais l'accent pour les nouvelles applications est mis sur une IFT 1975 / E05 Page 2 ADO.NET, Module 4

version mise jour (amliore) de ADO : les outils ADO.NET qui peuvent grer les types de bases les plus varies, incluant mme des fichiers texte, Excel, Serveurs SQL, pages Web, intranets, banques dimages, etc. Microsoft recommande donc dutiliser le modle ADO.NET puisque les outils ADO seront abandonns ventuellement. Ceci dit, toute la structure de ces objets est bicphale : la partie OleDb pour la plupart des fournisseurs de donnes actuels et la partie SQLClient spcialise pour la gestion des bases fournies par la version 7 (et ultrieure) du serveur SQL de Microsoft. Tous les outils de traitement des donnes sont contenus dans l'espace de nom System.Data qui apparat par dfaut dans les rfrences de dpart. Pour accder aux outils OleDb, il suffit de mentionner au dbut d'un module : Imports System.Data.OleDb

Classes OleDb
L'ensemble de la technologie OLE DB, intgre au FrameWork.NET, permet au programmeur de crer des commandes qui sont indpendantes des bases de donnes utilises en passant par les diffrents objets intermdiaires qui servent alors d'interface. On change de base ? On ajuste les interfaces et on n'a pas modifier le programme.

Classe OleDbConnection
Un objet de cette classe possde une proprit fondamentale de type String, la ConnectionString qui dcrit la fois le type de liaison (le moteur de recherche et le fichier ou base ouvrir). Supposons que la variable String contient un texte adquat, alors on peut crire
Dim UneConn As OleDbConnection UneConn = New OleDbConnection UneConn.ConnectionString = UneChaine UneConn.Open() ' Mthode qui ouvre la connexion.

ou, plus brivement, en utilisant le constructeur New


Dim UneConn As OleDbConnection = New OleDbConnection(UneChaine) UneConn.Open() ' Mthode qui ouvre la connexion.

qui ouvrira alors la connexion. En cas d'erreur dans la chane de correction, il y aura interruption du programme avec un message de VB. partir de ce moment, on peut utiliser deux ou trois classes d'objets pour, ou bien lire les donnes de la base, ou bien les modifier et les mettre jour. Aprs la lecture des donnes, on peut bien sr fermer la connexion avec
UneConn.Close()

Proprit ConnectionString
Si on ne connat pas le libell de la chane de connexion adquate, on peut utiliser un outil dvelopp en VB6 pour la dfinir facilement : le fichier XXX.udl. Un fichier de type Universal Data Link contient une chane de connexion qui peut tre modifie par un diteur Assistant des liaisons de donnes. IFT 1975 / E05 Page 3 ADO.NET, Module 4

On peut crer une liaison en suivant ces tapes : 1. On cre (bouton droit de la souris) un Nouveau / Document texte qui portera le nom Nouveau document texte.txt. 2. On renomme le fichier, UnNom.udl pour en faire un fichier de liaison vide. 3. On double-clique sur le fichier pour lancer l'diteur de liaison de donnes. 4. Dans la bote de dialogue, deux onglets dfinissent le moteur de recherche (onglet Fournisseur et le fichier lui-mme (onglet Connection.

5. Selon le type de base, les autres onglets serviront dfinir l'environnement de l'accs, comme le mot de passe, les permissions partages, etc. Dans le cas d'une simple base Access, les deux premiers onglets peuvent suffire. 6. Dans l'onglet Fournisseur, on slectionne Microsoft Jet xx OLE DB Provider. 7. Dans l'onglet Connexion, on peut taper le nom de la base ou bien naviguer sur l'ordinateur (bouton [...]) pour localiser la base. Si on dsire que le fichier soit en adressage relatif, il faut supprimer le chemin pour ne laisser que le nom. 8. Aprs avoir ferm l'application, il suffit d'ouvrir le fichier avec WordPad, NotePad ou tout autre diteur de texte et vous y trouverez la chane de connexion qu'il suffira de Copier/Coller dans votre programme VB :
[OleDb] ; Everything after this line is an OLE DB initstring Provider=Microsoft.Jet.OleDb.4.0;Data Source=BaseTP4.mdb;Persist Security Info=False

Vous noterez que le nom du fichier peut varier d'une application l'autre. C'est pourquoi on peut sparer la chane en trois sections : le nom de la base, la partie qui le prcde et la partie qui le suit. On peut alors reconstituer la chane en concatnant les trois parties avant de l'utiliser.

IFT 1975 / E05

Page 4

ADO.NET, Module 4

Classe OleDbCommand
Une base de donnes, par dfinition, contient de nombreuses donnes de sorte qu'une interrogation consiste soumettre une requte spcifiant les informations dsires. Le langage standard d'interrogation des bases de donnes remonte aux annes 70 et continue de dominer le march des SGBD (systme de gestion de bases de donnes). Il s'agit du SQL (Structured Query Language ou Langage de requtes structur). Une requte SQL est une chane de caractres (ex. SELECT * FROM XXX o XXX est le nom d'une table de la base voir plus haut). Si on prsume que la chane UneReqSQL contient une requte valide en fonction de la base de donnes vise par la commande, un objet de la classe OleDbCommand peut associer cette requte SQL un objet OleDbConnection comme suit :
Dim UneCommande As OleDbCommand UneCommande = New OleDbCommand UneCommande.Connection = UneConn UneCommande.CommandText = UneReqSQL

ou, plus brivement, en utilisant le constructeur New


Dim UneCommande As New OleDbCommand(UneReqSQL, UneConn)

Une fois que la commande est dfinie (requte plus connexion), on doit appeler une mthode (parmi plusieurs) permettant de lancer (excuter) cette requte en vue de recevoir les rsultats demands.

Classe OleDbDataReader
L'objet de classe OleDbDataReader est une interface vers les donnes permettant d'accder squentiellement aux donnes obtenues partir de l'objet prcdent, de classe OleDbCommand. Il s'utilise avec une requte dont l'effet est de ramener un jeu d'enregistrements, c'est--dire une squence de lignes d'une table dont les colonnes sont les champs de la base de donnes. On l'obtient comme suit :
Dim UnDataReader As OleDbDataReader UnDataReader = UneCommande.ExecuteReader()

L'objet DataReader fonctionne tout fait comme un objet de classe StreamReader : il possde une mthode boolenne Read() et chaque appel cette mthode place le prochain enregistrement dans une variable cache (de type Collection) laquelle nous donne accs la proprit publique Item(index). Par exemple, supposons que la requte SELECT CodePerm, Nom, Intra, Final FROM IFT1175 WHERE [Num DEPT] = 12 place dans l'objet UneCommande ci haut ait pour effet de ramener le bloc d'enregistrement suivant de la base de donnes relie, soit trois enregistrements des quatre champs CodePerm, Nom, Intra et Final. GROG25127002 OUEP25627020 LAUR25017418 Grondin, Gontran Ouellette, Paulette Laurent, Rolland 89 86 61 78 91 58

IFT 1975 / E05

Page 5

ADO.NET, Module 4

Alors la squence d'noncs suivante ouvrira une connexion la base de donnes puis, dans une boucle de trois itrations, affichera le nom et la moyenne des deux examens dans une bote de message. Notez que la proprit Item tant la proprit de dfaut, l'expression UnDataReader(3) quivaut UnDataReader.Item(3)
Dim UneChaineSQL As String = "SELECT CodePerm, Nom, Intra, Final " _ & "FROM IFT1175 WHERE [Num DEPT] = 12" Dim UneChaineConn As String = _ "Provider=Microsoft.Jet.OleDb.4.0;" _ & "Data Source=BaseTP4.mdb;" _ & "Persist Security Info=False" Dim UneConn As OleDbConnection = New OleDbConnection(UneChaine) UneConn.Open() ' Mthode qui ouvre la connexion. Dim UneCommande As New OleDbCommand(UneChaineSQL, UneChaineConn) Dim UnDataReader As OleDbDataReader UnDataReader = UneCommande.ExecuteReader() Dim UnMess As String, UneMoy As Single Do While UnDataReader.Read() ' sous-entendu = True UnMess = UnDataReader.Item("Nom") & " a une moyenne de : " UneMoy = (UnDataReader(2) + UnDataReader.Item(3)) / 2 ' quivaut UnDataReader("Intra") et UnDataReader("Final") UnMess = UnMess & UneMoy.ToString MsgBox(UnMess) Loop UnDataReader.Close() UneConn.Close()

Sommaire des proprits et mthodes des classes prcdentes.


Objet
OleDbConnection

Type
Proprit lect-cr Mthode Sub Mthode Sub Proprit lect-cr Proprit lect-cr Mthode Objet Mthode Objet

Membre
ConnectionString Open() Close() CommandText Connection ExecuteDataReader() ExecuteScalar

Description
Chane de texte dfinissant la source d'information : fournisseur et base. Ouvre la connexion. Ferme la connexion. Chane de texte contenant la requte SQL. Objet de type OleDbConnection. Excute la commande et retourne un objet de classe OleDbDataReader Excute la commande et retourne la premire valeur obtenue de la base de donnes. S'utilise avec une requte qui va chercher une seule valeur comme une somme ou un dcompte dans les donnes. Excute la commande et retourne le nombre de lignes affectes. S'utilise avec une requte qui modifie, ajoute ou supprime des donnes. Indique (boolen) le nombre de champs (colonnes) disponibles via la proprit Item. Indique (boolen) si le nombre d'enregistrements est suprieur zro. Obtient la valeur de la colonne Index. Tente de lire le prochain enregistrement de la base et retourne Vrai ou Faux selon que la lecture a eu lieu ou non. Ferme l'objet mais non la connexion.

OleDbCommand

Mthode Integer

ExecuteNonQuery

OleDbDataReader

Proprit lect. Proprit lect. Proprit lect. Mthode Boolean

FieldCount HasRows Item(Index) Read()

Close()

IFT 1975 / E05

Page 6

ADO.NET, Module 4

Visual Basic et les Bases de Donnes


(Mises jour)

L'utilisation d'une base de donnes sous-entends gnralement la gestion d'un grand nombre d'informations regroupes d'une faon plus ou moins complexes selon les applications dveloppes. Le rle de ADO.NET est de fournir les outils permettant d'accder ces donnes et, ventuellement les mettre jour, soit en les modifiant, soit en les crant, soit en les supprimant selon les besoins. Nous avons vu prcdemment que pour accder aux donnes, les objets de classes OleDBConnection, OleDBCommand, et OleDBReader permettaient de lire la base de donnes tout comme on lit un fichier squentiel, soit un enregistrement (une ligne( la fois, avec la possibilit, avant ou aprs chaque lecture de vrifier si la liste est puise. Mais tout comme le cas des fichiers accs squentiels, le DataReader ne permet que la lecture des donnes et non leur mise jour. Par contre, un habitu de la programmation des bases de donnes (donc un Expert en SQL peut, partir de l'objet de classe OleDBCommand envoyer la base de donnes toutes les commandes ncessaires pour ajouter, supprimer ou modifier des enregistrements. En effet, les deux mthodes ExecuteScalar et ExecuteNonQuery de cette classe permet d'envoyer tout le jeux des commandes SQL possibles. Mais attention, il faut alors programmer chacune des tapes du programme.

Le principe de la mise jour


Dans une application Windows, l'un des lments les plus importants est l'utilisation des contrles graphiques (zones de textes, ComboBox, tiquettes, etc.) comme interface entre le programme et l'utilisateur : celui-ci interagit avec ces contrles et le programme gre les informations en consquence. Dans le cas de la mise jour des donnes, il faut donc tablir le lien entre l'information qui se trouve dans la base de donnes et l'information qui se trouve dans les contrles de la feuille. VB.NET, utilise donc les outils de ADO.NET pour placer dans les contrles les informations de la base et l'inverse, ramener dans la base les valeurs places par l'utilisateur dans les contrles. Or les informations places dans les sources de donnes (base Oracle, SQLServer, fichiers Excel, Quattro Pro, etc.) ont des formats diffrents et donc demanderaient des codes de programme diffrents. ADO.NET fonctionne donc comme ceci : une fois tablie la connexion avec la source des donnes (quelle qu'elle soit), une copie de ces informations sera cre dans une zone de mmoire de l'application, c'est--dire un DataSet. Cette copie ayant un format unique, le programme s'crira donc de la mme faon peu importe le format des donnes dans la source. Entre la source et le Dataset ADO.NET verra transfrer les informations correctement et le programmeur n'aura qu' grer le lien entre le Dataset et ses contrles d'affichage sur la feuille. Il n'existe pas (comme en ADO de VB6) de super outil qui fasse le lien directement entre la base et les contrles (probablement pour une prochaine version). Il faut donc utiliser et relier plusieurs objets pour dfinir les diffrents segments de ces liens. Voici donc les objets qui pourront tre utiliss pour tablir ces liens plusieurs tages. IFT 1975 / E05 Page 7 ADO.NET, Module 4

Schma gnral
On peut schmatiser les lments qui vont suivre dans une chane progressive entre les donnes de la base et les contrles de la feuille :
Connexion DataAdapter DataSet DataTable DataView DataBinding Contrle

Ou bien dans certains cas :


Connexion DataAdapter DataSet DataTable Contrle

Classe OleDbConnection
On utilisera ici aussi l'outil de connexion dj utilis l'tape prcdente. Se rappeler simplement les deux lments essentielles de la proprit principale (ConnectionString) de cet objet : le fournisseur de service et le nom de la base utilise. Dans le cas des mises jour, ADO.NET prvoit que la connexion est tablie, que les donnes sont transfres en mmoire et que la connexion est immdiatement ferme. Ainsi, on vite de surcharger le rseau dans le cas d'une base centralise (ce qui est le plus souvent le cas dans les applications commerciales des bases de donnes). Une fois les mises jour effectues localement en mmoire, la connexion est r ouverte, les donnes modifies retransmises dans la base et la connexion referme.

Classe OleDbDataAdapter
L'objet de cette classe (un DataAdapter) constitue le coeur de l'interface (le pont) entre la base de donnes et le programme. C'est celui qui transfre les information entre la base et l'application en convertissant au besoin les donnes de faon ce qu'elles puissent tre traites localement comme s'il s'agissait d'une base de donnes relationnelle, quel que soit leur format dans la source. Les deux proprits qui permettent d'aller chercher les donnes sont les mmes que pour le OleDbCommand, soit la connexion (OleDBConnection) et la chane SQL sous forme de variable ou constante, ou sous forme d'une commande OleDbCommand. :
Dim UnAdapt As New OleDbDataAdapter("unechaineSQL", UneConn) Dim UnAdapt As New OleDbDataAdapter(UneCommande, UneConn)

La chane SQL utilise sera place dans la proprit SelectCommand et permettra de transfrer les informations de la base de donnes vers la zone de mmoire o rsidera la copie. La mthode Fill pourra effectuer ce travail (voir plus loin). Mais pour mettre jour la base, il faudra en plus transfrer les donnes dans l'autre sens (mthode Update) et pour cela, il faudra dfinir les commandes SQL de suppression, d'ajout et de modification des enregistrements. On peut dfinir ces commande (si on les connait) dans les proprits suivantes :
UnAdapt.DeleteCommand = "UneChaineSQL2" UnAdapt.InsertCommand = "UneChaineSQL3" UnAdapt.UpdateCommand = "UneChaineSQL4"

Une fois que les 4 chanes SQL sont dfinies, les mthodes Fill et Update du DataAdapter transfreront les informations dans un sens et dans l'autre. IFT 1975 / E05 Page 8 ADO.NET, Module 4

Classe DataSet
L'objet Dataset est un espace de mmoire qui contient une structure de base de donnes relationnelle, c'est--dire qu'il contient des tables de donnes et des liaisons entre ces tables. TOUTES les donnes se trouvent dans la ou les tables du DataSet et TOUT le travail de mise jour s'y fera. Un DataSet simple ne contient qu'une table. Un DataSet complexe contient plusieurs tables. De fait, le DataSet contient une collection de tables nomme Tables. Ainsi, l'accs une table peut se faire par la proprit Tables :
Dim UnDataSet As DataSet ... ' le contenu d'une base y est transfr

Un DataSet n'a pas de mthode pour aller chercher des donnes. Il attend qu'on (le DataAdapter) les lui donne UnAdapt.Fill(). Une fois une ou des tables ajoutes sa collection, on peut y accder par le rang (base 0) ou par le nom. qu'on a donn la table. Comme la proprit Item est la proprit de dfaut de Tables, les noncs suivants seront quivalents si le nom de la premire table est MaListe :
Dim Dim Dim Dim UneTable UneTable UneTable UneTable As As As As DataTable DataTable DataTable DataTable = = = = UnDataSet.Tables.Item(0) UnDataSet.Tables.Item("MaListe") UnDataSet.Tables(0) UnDataSet.Tables("MaListe")

Bref, dans la squence suivante, on tablit une connexion, on cre un DataAdapter, on cre une variable (espace) DataSet puis on traite les donnes. Ensuite, on met jour la base de donnes en transfrant les enregistrements modifie.
Dim UneConn As OleDbConnection = New OleDbConnection(UneChaineConn) UneConn.Open() Dim UnAdapt As New OleDbDataAdapter("unechaineSQL", UneConn) Dim UnDataSet As New DataSet("UnnomOK") '(Simple nom arbitraire) UnAdapt.Fill(UnDataSet, "PremTable") ' Une table est ajoute UneConn.Close() ... traitement des donnes ... UneConn.Open() Dim NbEnrMod As Integer ' variable entire NbEnrMod = UnAdapt.Update(UnDataSet) ' NbEnrMod indique le nombre ' de modifications UneConn.Close()

Sauf que dans le cas prcdent, pour que la mthode Update russisse, il faut que les chanes SQL appropries aient t dfinies. La classe OleDbCommandBuilder permet de crer ces chanes automatiquement. On ajoute donc avant d'utiliser Updata l'nonc :
Dim UnBuid As New OleDbCommandBuilder(UnAdapt)

et le tour est jou.

IFT 1975 / E05

Page 9

ADO.NET, Module 4

Classe DataTable
Les objets DataTable sont des jeux d'enregistrements qui sont obtenus par une requte de slection (extraction) SQL lors de l'excution de la mthode Fill. En gnral, si on dsire obtenir plusieurs tables, on dfinira plusieurs objets DataAdapter qui contiendront chacun la chane SQL approprie. Ainsi, sur la feuille frmNotes qui traitera des informations provenant des trois tables de la base de donnes, la chane SQL ira chercher les donnes non pas dans les tables de Access mais dans une requte dj dfinie Liste globale et le rsultat de la mthode Fill sera une seule table. Une fois la table remplie, on peut accder aux donnes au moyen de ses proprits d'accs. Le jeu d'enregistrement est trait comme un tableau deux dimensions form soit d'un ensemble de lignes (proprit Rows) de type collection contenant des champs, soit un ensemble de colonnes (proprit Columns) de type collection contenant des enregistrements. Ainsi les deux noncs suivants pourraient tre quivalents si les noms de champs sont bien dfinis et dsigneraient le nom contenu dans le premier enregistrement :
MaTable.Rows(0).Item("Nom") = "Grondin, Gontran" MaTable.Columns("Nom").Item(0) = "Grondin, Gontran"

La programmation de chacune des cellules de la table pouvant tre fastidieuse, deux autres objets permettent d'en faciliter la tche.

Classe DataView
Les objets DataView sont aussi des jeux d'enregistrements. Mais une vue (comme une requte en Access) permet de rorganiser les donnes de la table par exemple en les triant, ou bien en filtrant des donnes. Exemple, ne prendre de la table que les enregistrements o le champ "Intra" est plus grand que le champ "Final" et sortir la liste en ordre alphabtique.
Dim UneVue As New DataView(MaTable) UneVue.RowFilter = "Intra < Final" ' Les champs doivent exister UneVue.Sort = "Nom"

L'utilisation de UneVue se fera de la mme manire que MaTable sauf que les enregistrements seront prsents diffremmant.

Classe de liaison DataBindings


Jusqu'ici, les donnes obtenues sont confines (sous diffrentes formes) en mmoire et ne sont aucunement visibles de l'utilisateur. Un objet BindingManagerBase peut synchroniser les donnes et les contrles de faon ce que, en indiquant une position dans le DataView, les informations des contrles seront ajusts ceux du DataView. Ainsi, il suffira de dplacer la valeur de position (avancer ou reculer et les contrles associs seront aussi ajusts, c'est--dire les contrles visibles sur la feuille susceptibles de contenir des donnes : TextBox, Label, CheckBos, ComboBox, Scrollbars, etc.
Dim UnBind As New BindingManagerBase UnBind = Me.BindingContext(UneVue, "")

crera un gestionnaire de liaisons associ la proprit BindingContext de la feuille et qui jouera le chef d'orchestre entre les donnes de UneVue et les contrles de la feuille.

IFT 1975 / E05

Page 10

ADO.NET, Module 4

Le principe est d'tablir un lien entre une colonne (un champ) de la vue et UNE proprit du contrle. La plupart du temps, c'est la proprit Text qui est associe au champ en question mais ce pourrait tre image, une couleur, une police de caractres, etc. Comme la feuille, c'est ME, on construira donc la liste des liaisons en utilisant la proprit DataBindings de chacun des contrles associer :
txtCodeP.DataBindings.Add(New Binding("Text", MaDataVue, "CODEPERM"))
cboDept.DataBindings.Add(New Binding("SelectedIndex", MaDataVue, "Num DEPT"))

Ici, le BindingManagerBase placera la valeur courante du champ "CODEPERM" de la DataView dans la proprit Text du contrle txtCodeP et vice-versa lorsque cette valeur aura t modifie. Pour changer la position de l'enregistrement courant de la DataView, on utilise simplement la proprit Position du BindingManagerBase. Donc tout changement de cette l'enregistrement correspondant de la Vue. proprit synchronisera les contrles et

IFT 1975 / E05

Page 11

ADO.NET, Module 4

Visual Basic et les Bases de Donnes


(Sans programmation)

En tradition avec les versions prcdentes de Visual Basic, VB.NET offre des outils automatiques et des assistants pour les ajuster, le but tant de dfinir une connexion la base sans avoir la programmer. Pour ce faire, VB met la disposition du programmeur une section de la bote d'outils intitule Donnes (Data) contenant la plupart des classes dj vues sous forme de contrles. Plutt que de crer la liste des objets l'excution, on peut dfinir chaque tape des la liaison avec les contrles au moment du design. L'assistant prsente des botes de dialogue o il suffit de fournir les principales informations demandes. Parmi les classes d'objets disponibles, on note les classes dj rencontres, soit les OleDBConnection, les OleDBCommand. les OleDbDataAdapter, les DataSet et les Dataview avec en plus

la classe DataGrid qui permet l'affichage intgral d'un jeu d'enregistrements. Bien que tous ces objets puissent tre crs lors de l'excution du programme, le fait de pouvoir les dfinir en mode Design facilite la tche par l'utilisation des fentres de proprits et des botes de dialogue des assistants. Schma gnral
On peut schmatiser ainsi la chane des relations entre les diffrents objets entre les donnes de la base et la grille d'affichage sur la feuille : Connexion DataAdapter DataSet DataGrid En plaant un DataAdapter sur la feuille, un assistant est lanc qui pourra dfinir ET la connexion (chane de connexion), ET la source des donnes (chane SQL). Ensuite il n'y aura plus qu' ajouter sur la feuille, le DataSet et la DataGrid et d'tablir les liens entre eux.

Classe DataGrid
Le point central de l'opration est certes l'utilisation du contrle DataGrid car celui-ci peut afficher directement un jeu de caractre quelconque. Mieux, comme il s'agit d'un contrle dynamique, il suffit de lui affecter un jeu d'enregistrement pour qu'il s'adapte celui-ci. En effet, le nombre, le titre et la largeur des colonnes est dfini en fonction du jeu d'enregistrement qui l'alimente. Mieux, si on lui affecte plus d'un jeu d'enregistrements, le DataGrid se retrouve muni d'un bloc d'onglets permettant de choisir laquelle des tables correspondantes sera affiche. L'information ne circule pas directement du DataGrid vers la base : elle doit transiter par une Table d'un DataSet. La proprit DataSource du DataGrid permettra donc de faire le lien avec le DataSet utilis et avec la table qui s'y trouve.

IFT 1975 / E05

Page 12

ADO.NET, Module 4

Selon que le DataAdapter qui lui sera associ pourra ou non modifier les enregistrements, les informations du DataGrid pourront ou non tre mises jour. Dans ce dernier cas, il est prfrable de mettre sa proprit ReadOnly True pour viter que l'utilisateur ait la fausse impression de fasse des changements qui ne seront jamais transmis sa base de donnes. Enfin, la faiblesse actuelle du contrle est la difficult d'en modifier le format, ce qui sera srement amlior lors d'une prochaine version de VB.NET. Notez cependant qu'une fois les donnes affiches, l'utilisateur peut grer la largeur des colonnes et trier les informations sur chacune de celles-ci, au choix, en cliquant sur la tte de colonne.

Classe OleDbConnection
Bien que l'objet de classe OleDbConnection existe dans la bote d'outils, on l'utilisera rarement puisque l'assistant DataAdapter permettra soit d'utiliser une connexion dj tablie, soit d'en crer une nouvelle. Notez qu'une mme connexion peut servir plusieurs DataAdapter.

Classe OleDbDataAdapter
En dposant sur la feuille un contrle

OleDbDataAdapter (que ce soit par glissement ou par double-clic), on lance un Assistant Configuration d'adaptateur de donnes qui permettra de crer la liaison avec les donnes de faon interactive. De fait, l'assistant permettra de dsigner le fournisseur de la base, de pointer vers le fichier (base de donnes) et donc de crer coup sur coup la chane de connexion ET la chane SQL, le tout de manire interactive. La premire tape de l'assistant consiste dsigner soit une connexion existante (dj dfinie) ou d'en crer une nouvelle. Dans ce dernier cas, il fonctionne tout comme lors de la cration d'un lien dynamique de donnes (voir plus haut, les fichiers UDL) en permettant de choisir le fournisseur et la base de donnes.

IFT 1975 / E05

Page 13

ADO.NET, Module 4

L'assistant crera en mme temps l'objet de connexion et le DataAdapter. Bien sr, ces contrles ne seront pas visibles sur la feuille elle-mme mais seront plutt placs sur l'annexe au bas de la feuille. Il faudra utiliser autant de DataAdapter qu'il y a de tables pourvoir. Lors de la cration de chacun d'eux, la chane SQL dfinie (SELECT ... ) permettra l'affichage de ces donnes mais non leur mise jour. L'assistant crera (s'il le peut) les autres chanes SQL ncessaires l'ajout, la suppression et la modification des enregistrements (Insert ... , Delete ... et Update ...). Dans le cas du TP, la
premire grille sera mise en mode de lecture seule. Elle permettra l'affichage (seul) des donnes provenant des trois tables de la base de donnes grce la requte Access (incluse dans la base) ListeGlobale qui pige dans les trois tables. Cependant le DataAdapter ne pourra pas construire les autres commandes SQL ncessaires la modification. Dans le cas de la deuxime grille, on la connectera un DataSet contenant trois tables indpendantes places dans un mme DataSet. par chacun des trois DataAdapter associs chacune d'elles.

Classe DataSet
Pour chaque grille, on ajoutera un contrle DataSet qui pourra recevoir le jeu d'enregistrement dfini par la chane SQL de chaque DataAdapter. Une fois la grille associe au DataSet, il n'y aura plus qu' commander le dplacement des informations de la base au DataSet, donc vers la grille, et de la grille (via le DataSet) vers la base de donnes. Attention cependant! Comme ADO.NET est bas sur le traitement indpendant des donnes en mmoire, il faudra procder au transfert PAR PROGRAMMATION. Pour ce faire, le DataSet possde une mthode Fill(UnDataSet, "nom_d'une_table") qui ouvre la connexion, lance l'appel la requte SQL SELECT... , place le jeu d'enregistrements dans la table nomme et referme la collection. Comme le DataGrid est li la table, les informations y sont directement accessibles. On utilise cette mthode lors du chargement de la feuille ou bien en cours d'excution (via un bouton de commande) chaque fois que l'on dsire recharger les informations de la base (par exemple si une autre grille y a plac des mises jour). En parallle, si le DataAdapter a pu gnrer les requtes SQL adquates, lors la mthode Update(UnDataSet, "nom_d'une_table") ou Update(UnDataSet) mettra jour les informations contenue dans une table ou dans toutes les tables du Dataset au moyen de ces chanes SQL. Le DataAdapter ne transfrera bien sr que les enregistrement modifis et la mthode retournera une valeur entire reprsentant le nombre d'enregistrements touchs (crs, modifis ou supprims). Ici aussi, la connexion sera ouverte et referme automatiquement. On utilisera cette mthode soit la fermeture de l'application, soit au besoin au moyen d'un bouton de commande.

IFT 1975 / E05

Page 14

ADO.NET, Module 4