Support Labo Info VB - Net IUC - 124439
Support Labo Info VB - Net IUC - 124439
SUPPORT DE LABO
INFORMATIQUE
DESTINE AUX ETUDIANTS DE BAC 2 INFORMATIQUE
Objectifs du cours
1
Un framework est une sorte d'immense bibliothèque informatique contenant des outils qui vont faciliter la vie
du développeur.
SUPPORT DE LABO INFORMATIQUE (VB .NET) IR. KITAMBALA THEOPHILE
4
Après avoir lancé VB, l’écran qui s’affiche correspond à l’espace de travail comme illustré dans
la figure ci-après : C’est alors que vous pouvez créer vos fenêtres, entrer vos lignes de code,
etc.
Console.Read()
End Sub Instruction
End Module d'affichage à
Instruction de l'écran
. pause console
Exemple
Module Module1
Sub Main()
Dim NbEnfant As Integer
NbEnfant = 5
Console.Write(Nbenfant) ' affiche 5
Console.Read()
End Sub
End Module
NB.:
Le nom d'une variable ne peut contenir d'espaces ; privilégiez plutôt un « _ »
(underscore) ou une majuscule à chaque « nouveau mot », mais en liant le tout.
Une variable peut contenir une valeur.
Des guillements : « " " » délimitent une valeur d'une variable de type chaîne de
caractères.
Le type String contient les chaînes de caractères, Integer les entiers, Double les nombres
à virgule, et Date les dates et heures.
0.6 OPÉRATIONS SUR LES VARIABLES
Les autres opérations possibles sont :
Opération Addition Soustraction Multiplication Division Division Puissance Modulo
souhaitée entière Reste de la division
Symbole + - * / \ ^ Mod
x = 14
y=3
x mod y = 2
x\y=4
x / y = 4.666666
x ^ y = 2 744
Module Module1
Sub Main()
Dim x As Integer
Dim x2 As Integer
Dim x3 As Integer
x = 8
x2 = 9
x3 = x * x2
Console.Write("9 x 8 = ")
Console.Write(x)
Console.Read()
End Sub
End Module
Exemple :
If x = 10 Then
Console.write(x^2)
ElseIf x = 5 Then
Console.write(x^2-5)
Else
Console.write(x^3-x^2-6)
End If
SUPPORT DE LABO INFORMATIQUE (VB .NET) IR. KITAMBALA THEOPHILE
9
Exemple
Module Module1
Sub Main()
Dim x As Integer
Console.WriteLine(" Faites votre choix? 1, 2, 3, 4")
x = Console.ReadLine()
Do While x > 4
Console.WriteLine(" quel est votre choix? 1, 2, 3, 4")
x = Console.ReadLine()
Loop
Console.Write("t'as saisi " & x)
Console.Read()
End Sub
End Module
0.7 LES TABLEAUX
Un tableau va servir à stocker plusieurs valeurs.
For j = 0 To 2
Console.Write(x(i, j) & " ")
Next
Console.WriteLine()
Next
Console.Read()
End Sub
End Sub
Utilisation de la boucle For Each
Cette boucle traduisible par « pour chaque » permet de parcourir tous les éléments d’un tableau
ou d’une même collection et de récupérer les valeurs.
Exemple 1
Dim x(9), z As integer
For Each z As Integer In x
If z < 10 Then
Console.WriteLine(z)
End If
Next
Exemple 2
Un For Each peut être utilisé pour parcourir chaque lettre d'un mot :
Dim x As String = "Bonjour à tous"
Dim i As Integer = 0
For Each z As String In x
If z = "a" Then
i = i + 1
End If
Next
Ce code compte le nombre d'occurrences de la lettre a dans un mot.
0.8 Les fonctions prédéfinies
0.8.1 Les fonctions Chaines de caractères
Le tableau suivant répertorie les fonctions fournies par Visual Basic pour rechercher et
manipuler des chaînes.
Méthode Description Exemples
LCase Retourne une chaîne ou
un caractère converti en
lettres minuscules.
Left Retourne une chaîne Dim x As String = "Salut les amis!"
contenant un nombre ' affiche "Salut".
spécifié de caractères en Dim y As String = Left(x, 5)
partant de la gauche d'une
chaîne.
Len Retourne un entier Dim TestString As String = "Hello World"
contenant le nombre de ' Returns 11.
caractères dans une Dim TestLen As Integer = Len(TestString)
chaîne.
Mid Retourne une chaîne X=Mid ("Emery K",3, 5)
contenant un nombre ' affiche "ery k"
spécifié de caractères
d'une chaîne.
Console.WriteLine(#12/4/2013#.ToLo
ngDateString())
affichera
0.8.2.2 Exemple
Le code suivant fait tourner une horloge à l’écran.
Sub Main()
While 1
Console.WriteLine(Date.Now.ToLongTimeString)
'Pause de 1 seconde
System.Threading.Thread.Sleep(1000)
Console.Clear()
End While
Console.Read()
End Sub
Méthode Description
Max Retourne le plus grand de deux
nombres.
Min Retourne le plus petit de deux
nombres.
Pow Retourne un nombre spécifié X=Math.Pow(value, power)
élevé à la puissance spécifiée.
Sqrt Retourne la racine carrée d'un ' Returns 2.
nombre spécifié. MySqr1 = Math.Sqrt(4)
' Returns 4.79583152331272.
MySqr2 As Double = Math.Sqrt(23)
La feuille de style (design) est la fenêtre dans laquelle on conçoit l'interface graphique.
0.1 Les MsgBox et InputBox
MsgBox et InputBox sont des fenêtres de dialogue pour capter l'attention de l'utilisateur.
Changez la source de données
Sélectionnez Avancées et entrez les mêmes valeurs qu'à la figure suivante.
0.1.1.1 La MessageBox
MessageBox.Show, méthode
Affiche un message avec le texte spécifié.
Exemple : Messagebox.show « Bonjour »
MessageBox.Show(TextBox1.Text)
variable=inputbox("Saisir un nombre")
0.2 Le premier objet : la feuille ou le formulaire :
Le premier objet est la feuille ou formulaire.
1 Feuille ou formulaire Name : Nom de la feuille à utiliser dans le code Private Sub Form1_Load()
With Me.Button1
Text : Le texte associé à la barre de titre du formulaire tel que .ForeColor = Color.Red
.Text = "Mon texte"
« Form1 » .Left = 50
.Top = 10
Form_Load : appelé lors du chargement du formulaire .Height = 50
.Width = 150
Les fonctions Show() et Close() permettent d'ouvrir et fermer
End With
les formulaires End Sub
Private Sub BT_FERMER_Click()
Me.Close ()
End Sub
Bouton de commande Name : Nom à utiliser dans le code Private Sub Button1_Click()
3 Zone de texte : ScrollBar : indique le type de barre de défilement Les événements possibles
(Horizontale, verticale ou les deux) lorsque le Change () : qui intervient lorsque l’on
multiline est activé saisit du texte dans une zone de texte
Cursor : Type de curseur qui s’affiche lorsque le pointeur Click () : lorsque l’on clic
passe sur le contôle
SUPPORT DE LABO INFORMATIQUE (VB .NET) IR. KITAMBALA THEOPHILE
18
5 ListBox
1Me.LBL_TEXTE.Location = Control.MousePosition
0.3.2.4 Champ
Un enregistrement est composé de plusieurs champs. Chaque champ d'un enregistrement
contient une seule information sur l'enregistrement.
Par exemple, un enregistrement Client peut contenir les champs CodeClient, Nom, Prénom…
0.3.2.5 Clé primaire
Une clé primaire est utilisée pour identifier, de manière unique, chaque ligne d'une table. La clé
primaire est un champ ou une combinaison de champs dont la valeur est unique dans la table.
Par exemple, le champ CodeClient est la clé primaire de la table Clients, il ne peut pas y avoir
deux clients ayant le même code.
0.3.2.6 Clé étrangère
Une clé étrangère représente un ou plusieurs champs d'une table, qui font référence aux champs
de la clé primaire d'une autre table. Les clés étrangères indiquent la manière dont les tables sont
liées.
0.3.2.7 Relation
Une relation est une association établie entre des champs communs dans deux tables. Une
relation peut être de un à un, de un à plusieurs, ou de plusieurs à plusieurs. Grâce aux
relations, les résultats de requêtes peuvent contenir des données issues de plusieurs tables. Une
relation de un à plusieurs entre la table Clients et la table Commandes permet à une requête de
renvoyer le numéro des commandes correspondant à un client.
0.3.3 Les SGBD
Les SGBD (systèmes de gestion de base de données) sont des programmes qui s'occupent du
stockage des données. Un SGBD est en fait un logiciel qui joue le rôle d'interface entre
l’utilisateur et la base de données. Un SGBD permet de décrire, manipuler et interroger les
données d'une BDD manuellement. Il est utilisé dans un premier temps pour structurer la BDD
: création de tables et de champs.
Il en existe plusieurs SGBD, dont voici les plus connus :
Microsoft SQL Server : le SGBD de Microsoft, nous l'utiliserons dans ce cours.
MySQL : c'est un des SGBD les plus populaires.
Oracle : c'est le SGBD le plus utilisé en entreprise, le plus complet aussi… mais payant
!
PostgreSQL : ressemble un peu à MySQL, avec plus de fonctionnalités, mais un peu
moins connu.
Remplissez de la même manière : « (local) » pour le server name et « sa » comme login. Puis
entrez le mot de passe que vous avez choisi lors de l'installation.
Si la connexion est correcte, vous accédez à l'interface de SQL Server Management Studio.
On constate rapidement que l'interface principale de SQL Manager est très simple. Elle est
formée d'un menu contextuel, d'une barre d'outils et d'une fenêtre Explorer à gauche, comme à
la figure suivante.
La page d'accueil
0.5 INTRODUCTION AU LANGAGE SQL
0.5.1 Recherche d’informations avec l’instruction SELECT
Cette instruction est utilisée pour renvoyer des champs spécifiques d'une ou de plusieurs tables
de la base de données.
Par exemple, pour extraire la liste des Artistes et des Titres de tous les enregistrements de la
table Musiques, on utlise le code suivant :
SELECT Artiste, Titre FROM Musiques ou SELECT * FROM Musiques
0.5.1.1 Les clauses utlisées avec Select
La clause va permettre de spécifier les conditions : seule une partie des enregistrements seront
concernés.
Il existe en SQL des conditions associées à la clause WHERE tout comme en VB .NET :
AND
OR
Condition = != < > <= >= ou
ou ||
&&
Égal Différent Inférieur Supérieur Inférieur Supérieur Et Ou
Valeur
ou égal ou égal
WHERE… SELECT * FROM Artistes WHERE Nom LIKE recherche tous les artistes dont
LIKE 's%' le nom commence par un « s »
ORDER SELECT * FROM Artistes ORDER BY Nom DE retourne les artistes triés par
BY….. SC, Prenom ASC ordre décroissant sur le nom
ASC ou
DESC
Effectuez un clic droit sur le dossier Databases, puis sélectionnez New Database.
Saisr le nom de votre BDD par exemple « BDCours ».
BDCours
Modification :
Pour ajouter un classement à une musique : UPDATE Musiques SET Classement=7
WHERE Titre='Hotel California' AND Artiste='Eagles'.
Affichage :
Pour afficher la table sous forme de tableau : SELECT * FROM Musiques.
Pour exécuter une requête, effectuez un clic droit sur la base BDCours, puis New query. Entrez
votre requête SQL dans le panel central, puis cliquez sur Execute dans la barre de menu. Vous
devriez obtenir quelque chose de similaire à la figure suivante.
BDCours
Il est préférable de mettre l'ouverture de connexion dans un Try… Catch (voir l'annexe de la
gestion des erreurs). Ainsi, si le serveur n'est pas accessible pour une raison X ou Y, le
programme ne plante pas et on peut gérer l'erreur :
1Try
2 Connexion.Open()
3Catch ex As Exception
4 Console.WriteLine(ex.Message)
5End Try
Attention, il faut toujours fermer sa connexion à la fin du programme avec un Close() :
1Connexion.Close()
… à mettre dans un finally par exemple.
Voilà, vous êtes connectés à votre base de données.
0.7.3 Insertion ou modification
Comme vous l'avez vu, dans tous les cas il faut effectuer une requête grâce à
l'objet SqlCommand.
Nous allons donc voir comment générer une requête et l’exécuter. Pour commencer, je
souhaiterais ajouter à ma BDD une ligne contenant un nouveau titre.
Je veux ajouter « Hotel California » des Eagles.
La requête SQL est Insert into Musiques(Titre, Artiste) values ('Hotel
California', 'Eagles').
Je crée cette requête et mon objet SqlCommand :
1Dim Requete As String = "Insert into Musiques(Titre, Artiste)
values ('Hotel California', 'Eagles')"
2Dim Commande As New SqlCommand(Requete, Connexion)
Puis l'éxécution de la requête s'effectue simplement en faisant appel à la méthode
ExecuteNonQuery().
Cette méthode retourne le nombre de lignes affectées par la modification. Dans le cas d'une
insertion, ce sera souvent 1. Mais certaines modifications de masses (comme des update)
pourront en modifier un grand nombre.
On execute donc la requête (avec un Try… Catch).
1Try
2 Commande.ExecuteNonQuery()
3Catch ex As Exception
4 Console.WriteLine(ex.Message)
5End Try
Et voilà une nouvelle ligne d'insérée en BDD.
Supposons que je veuille attribuer « Album inconnu » à chaque entrée qui n'a pas son album de
renseigné, le programme serait :
1Imports System.Data.SqlClient
3Module Module1
5 Sub Main()
7 Dim Connexion As New SqlConnection("Data Source=localhost;I
nitial Catalog=SDZ;User Id=sa;Password=********;")
9 Try
10 Connexion.Open()
12 Dim Requete As String = "UPDATE Musiques SET Album='Al
bum inconnu' WHERE Album is null"
13 Dim Commande As New SqlCommand(Requete, Connexion)
14 Try
15 Console.WriteLine("Il y a eu " & Commande.ExecuteN
onQuery() & " lignes mises à jour")
16 Catch ex As Exception
17 Console.WriteLine(ex.Message)
18 End Try
20 Commande.Dispose()
21 Connexion.Close()
23 Catch ex As Exception
24 Console.WriteLine(ex.Message)
25 End Try
27 End Sub
29End Module
Avec comme résultat console :
Il y a eu 3 lignes mises à jour
Il faut penser à libérer la mémoire de votre commande avec : Commande.Dispose(). Et surtout
fermer la connexion avec Connexion.Close().
Voici le résultat en BDD à la figure suivante.
Le résultat en BDD
0.7.4 Lecture de données
Maintenant que vous savez exécuter une requête d'ajout ou de modification, on va s'attaquer
aux requêtes de lecture. Je souhaiterais connaître l'artiste qui a chanté « Jeune Et Con ».
La requête SQL est SELECT Artiste from Musiques Where Titre = 'Jeune Et Con'.
Je crée cette requête et mon objet SqlCommand :
Saez
La figure suivante est un schéma qui représente ce qu'il s'est passé.
ADO.NET permet l'accès rapide aux données, son utilisation peut cependant devenir
laborieuse sur de grandes tables.
On se connecte à la BDD en définissant une SqlConnection et une chaîne de connexion.
On exécute des requêtes SQL avec ExecuteNonQuery.
0.8 Le contrôle DATASET
Le contrôle ADO.NET c'est bien beau mais ça nous limite assez vite. En effet, pour de très
grandes requêtes, il va falloir itérer sur l'intégralité des résultats avant d'avoir la valeur
recherchée.
Imaginons maintenant que nous n'ayons plus à manipuler manuellement les données récupérées
mais que des objets aient été conçus spécialement pour contenir des « Bases de données ». on
n'a aucun intérêt à stocker l'ensemble de notre base dans un objet. Par contre on va pouvoir
récupérer les résultats et les manipuler plus aisément que précédemment. Cet objet existe et
s'appelle un dataset, allons le découvrir.
0.8.1 Qu'est-ce ?
Un DataSet, pour résumer, est une représentation d'une base de données sous forme d'objet. Il
contient des tables, elles-mêmes contiennent des colonnes et des lignes. On pourrait le
schématiser par la figure suivante.
Pour créer un DataView on peut passer en paramètre du constructeur la table voulue à laquelle
lier la vue. Je vais donc lui passer la table Musiques :
1Dim MonView As New DataView(MonDataSet.Tables("Musiques"))
Puis on effectue des modifications sur la view.
0.8.2.2.1 Tri
Le tri est la propriété Sort du DataView. On va l'utiliser avec la même syntaxe que le tri SQL,
en spécifiant le champ suivant lequel trier et l'ordre (ASC pour ordre croissant et DESC pour
décroissant).
Ainsi, si je veux trier suivant le champ Artiste et afficher le résultat :
1MonView.Sort = "Artiste ASC" 'On trie les artistes par ordre
croissant
2For Each Ligne As DataRowView In MonView
3 Console.WriteLine(Ligne("Titre") & " - " & Ligne("Artist
e"))
4Next
Cette fois, les lignes ne sont plus des DataRow, mais des DataRowView, car elles proviennent
d'un DataView.
0.8.2.2.2 Filtre
Le filtre s'utilise avec la propriété RowFilter. On spécifie le champ à filtrer et la valeur voulue.
Si je veux afficher uniquement les entrées où l'album est inconnu :
1MonView.RowFilter = "Album = 'Album inconnu'"
C'est encore une syntaxe du type SQL, n'oubliez pas les guillemets autour des chaînes de
caractères.
0.8.2.2.3 La recherche
Pour effectuer une recherche sur un champ, il faut déjà spécifier un tri du DataView avec la
commandeSort. Cela indiquera au DataView dans quel champ effectuer la recherche.
Puis FindRow permettra de rechercher la valeur souhaitée. Cela retournera une collection
de RowView(car il peut y avoir plusieurs fois la même valeur). On peut donc réutiliser un For
Each pour afficher les résultats.
1 MonView.Sort = "Artiste ASC"
2 For Each Ligne As DataRowView In MonView.FindRows("Saez")
3 Console.WriteLine(Ligne("Titre") & " - " & Ligne("Artiste"
))
4Next
La fonction Find, quant à elle, renverra l'index de la première ligne qui correspond à la
recherche. Il faudra ensuite y accéder avec MonView(x), où x est l'index.
21End Try
Nous revoilà donc avec notre DataSet contenant les données de la BDD. Pour le lier avec
notreDataGrid, nous allons devoir utiliser la propriété DataSource de ce dernier.
On peut assigner à DataSource une DataTable ou un DataView, en fonction de ce que l'on
souhaite.
1DG_DataGrid.DataSource = MonDataSet.Tables("Musiques")
J'ai donc lié le DataGrid à ma DataTable, vous pouvez tester le programme et constater qu'il a
parfaitement rempli le composant.
Vous pouvez voir qu'en fait ce DataGrid est une « vue » au même titre qu'un DataView, vous
pouvez effectuer des tris en cliquant sur les colonnes. Il est également possible de modifier les
données (les changements ne seront pas effectifs sur la BDD cependant) ou d'en ajouter.
0.9.3 Liaison via l'assistant
La seconde méthode est d'utiliser l'assistant. Créez un nouveau projet et ajoutez un DataGrid.
Cliquez sur la petite flèche en haut à droite du composant, comme à la figure suivante.
Vous voici devant l'assistant d'ajout d'une base de données au projet. Cela va permettre de lier
une base au projet afin de faciliter la liaison d'éléments avec la BDD sans passer par du code
VB .NET.
Suivons donc cet assistant. Dans la première fenêtre, spécifiez Base de données, puis dans la
seconde DataSet.
Cela va ajouter un objet de type DataSet à votre projet (mais visible du côté feuille de design
graphique).
Maintenant, créons notre connexion vers la BDD. Cliquez sur Nouvelle connexion puis
changez la source de données pour utiliser SQL Server (voir figure suivante).
Changez la source de données
Sélectionnez Avancées et entrez les mêmes valeurs qu'à la figure suivante.
DataGrid
Vous avez sans doute remarqué les trois objets qui ont été créés suite à cette opération :
Un DataSet ;
Un BindingSource qui lie notre source à notre DataSet, car on ne peut pas lier directement
un DataSet donc cet objet effectue la liaison ;
Un TableAdaptater, il effectue la requête pour récupérer les données dans le DataSet. Son
fonctionnement est plutôt particulier et compliqué ; pour plus de souplesse je vous
recommande d'utiliser du code VB plutôt que ces objets en cas de projets nécessitant
des requêtes spécifiques.
Vous voilà en possession du même DataSet que précédemment. Si vous lancez le programme,
le résultat sera le même.
Bonne évasion