Cours Visual Basic et les bases de données, tutoriel & guide de travaux pratiques Visual Basic pour Application en pdf.
Classe OleDbCommand
Une base de données, par définition, contient de nombreuses données de sorte qu’une «interrogation» consiste à soumettre une «requête» spécifiant les informations désirées. Le langage «standard» d’interrogation des bases de données remonte aux années 70 et continue de dominer le «marché» des SGBD (système de gestion de bases de données). Il s’agit du SQL (Structured Query Language ou Langage de requêtes structuré).
Une requête SQL est une chaîne de caractères (ex. «SELECT * FROM XXX» où XXX est le nom d’une table de la base voir plus haut).
Si on présume que la chaîne «UneReqSQL» contient une requête valide en fonction de la base de données visée par la commande, un objet de la classe «OleDbCommand» peut associer cette requête SQL à un objet «OleDbConnection comme suit :
Dim UneCommande As OleDbCommand
UneCommande = New OleDbCommand
UneCommande.Connection = UneConn
UneCommande.CommandText = UneReqSQL
ou, plus brièvement, en utilisant le constructeur «New»
Dim UneCommande As New OleDbCommand(UneReqSQL, UneConn)
Une fois que la commande est définie (requête plus connexion), on doit appeler une méthode (parmi plusieurs) permettant de «lancer» (exécuter) cette requête en vue de recevoir les résultats demandés.
Classe OleDbDataReader
L’objet de classe «OleDbDataReader» est une interface vers les données permettant d’accéder séquentiellement aux données obtenues à partir de l’objet précédent, de classe OleDbCommand. Il s’utilise avec une requête dont l’effet est de ramener un jeu d’enregistrements, c’est-à-dire une séquence de lignes d’une table dont les colonnes sont les champs de la base de données. 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 possède une méthode booléenne «Read()» et chaque appel à cette méthode place le prochain enregistrement dans une variable cachée (de type Collection) à laquelle nous donne accès la propriété publique «Item(index)».
Par exemple, supposons que la requête «SELECT CodePerm, Nom, Intra, Final FROM IFT1175 WHERE [Num DEPT] = 12» placée dans l’objet «UneCommande» ci haut ait pour effet de ramener le bloc d’enregis-trement suivant de la base de données reliée, soit trois enregistrements des quatre champs «CodePerm», «Nom», «Intra» et «Final».
Alors la séquence d’énoncés suivante ouvrira une connexion à la base de données puis, dans une boucle de trois itérations, affichera le nom et la moyenne des deux examens dans une boîte de message. Notez que la propriété «Item» étant la propriété de défaut, 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() ‘ Méthode 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()
Visual Basic et les Bases de Données (Mises à jour)
L’utilisation d’une base de données sous-entends généralement la gestion d’un grand nombre d’informations regroupées d’une façon plus ou moins complexes selon les applications développées. Le rôle de ADO.NET est de fournir les outils permettant d’accéder à ces données et, éventuellement les mettre à jour, soit en les modifiant, soit en les créant, soit en les supprimant selon les besoins.
Nous avons vu précédemment que pour accéder aux données, les objets de classes OleDBConnection, OleDBCommand, et OleDBReader permettaient de «lire» la base de données tout comme on lit un fichier séquentiel, soit un enregistrement (une ligne( à la fois, avec la possibilité, avant ou après chaque «lecture» de vérifier si la liste est épuisée.
Mais tout comme le cas des fichiers à accès séquentiels, le DataReader ne permet que la lecture des données et non leur mise à jour. Par contre, un «habitué» de la programmation des bases de données (donc un «Expert» en SQL peut, à partir de l’objet de classe OleDBCommand envoyer à la base de données toutes les commandes nécessaires pour ajouter, supprimer ou modifier des enregistrements. En effet, les deux méthodes 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 éléments les plus importants est l’utilisation des contrôles graphiques (zones de textes, ComboBox, étiquettes, etc.) comme interface entre le programme et l’utilisateur : celui-ci interagit avec ces contrôles et le programme gère les informations en conséquence. Dans le cas de la mise à jour des données, il faut donc établir le lien entre l’information qui se trouve dans la base de données et l’information qui se trouve dans les contrôles de la feuille.
VB.NET, utilise donc les outils de ADO.NET pour placer dans les contrôles les informations de la base et à l’inverse, ramener dans la base les valeurs placées par l’utilisateur dans les contrôles. Or les informations placées dans les sources de données (base Oracle, SQLServer, fichiers Excel, Quattro Pro, etc.) ont des formats différents et donc demanderaient des codes de programme différents.
ADO.NET fonctionne donc comme ceci : une fois établie la connexion avec la source des données (quelle qu’elle soit), une copie de ces informations sera créée dans une zone de mémoire de l’application, c’est-à-dire un «DataSet». Cette copie ayant un format unique, le programme s’écrira donc de la même façon peu importe le format des données dans la source. Entre la source et le «Dataset» ADO.NET verra à transférer les informations correctement et le programmeur n’aura qu’à gérer le lien entre le «Dataset» et ses contrôles 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 contrôles (probablement pour une prochaine version). Il faut donc utiliser et relier plusieurs objets pour définir les différents segments de ces liens. Voici donc les objets qui pourront être utilisés pour établir ces liens à «plusieurs étages».
………