0% ont trouvé ce document utile (0 vote)
6 vues133 pages

Introduction au Développement Visual Basic

Ce document présente un cours sur le développement d'applications en Visual Basic, abordant des concepts tels que l'architecture client-serveur, la programmation orientée objet et les interfaces graphiques. Il décrit également l'environnement de développement Visual Basic et fournit des instructions pour créer des projets et écrire du code. Les étudiants apprendront à manipuler des objets et à gérer des événements dans leurs applications.

Transféré par

allemin2006
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues133 pages

Introduction au Développement Visual Basic

Ce document présente un cours sur le développement d'applications en Visual Basic, abordant des concepts tels que l'architecture client-serveur, la programmation orientée objet et les interfaces graphiques. Il décrit également l'environnement de développement Visual Basic et fournit des instructions pour créer des projets et écrire du code. Les étudiants apprendront à manipuler des objets et à gérer des événements dans leurs applications.

Transféré par

allemin2006
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 1

Introduction à Visual Basic

Ce cours est la suite du cours Développement d'applications 1 que vous devez


avoir réussi à l'étape précédente. Vous allez maintenant continuer à appliquer
les notions de développement d'applications comme dans le cours précédent
mais, vous utiliserez des outils plus puissants et vous apprendrez à penser en
termes de déploiement à grande envergure des systèmes créés.

Avec MS ACCESS lors du dernier cours, nous avons étudié les techniques de
modélisation et de création d'une base de données relationnelle en mode
autonome (utilisée par une personne à la fois sur un PC). Cependant, dans la
vraie vie les besoins sont beaucoup plus complexes que ça. Dans ce cours
nous allons commencer à explorer (notez le mot commencer) les applications
complexes. Nous allons étudier et appliquer les concepts tels que:
l'architecture client-serveur, le développement "object-oriented" et nous
allons apprendre le langage SQL, le langage commun à toutes les bases de
données relationnelles.

CONCEPTS FONDAMENTAUX

● CLIENT/SERVEUR

Vous trouverez une excellente description de Client/server

[Link] (1 of 4)27/10/2004 13:16:47


Visual Basic

architecture dans le FAQ au site C/S FAQ. Cependant, je


résume les points principaux au cas ou il y aurait des
problèmes de traduction

L'architecture client/serveur:

L'architecture client/serveur est la suite logique de


la programmation modulaire. La programmation
modulaire suppose qu'un gros programme est plus
efficace s'il est décomposé en modules; il est plus
facile à développer et à maintenir. Donc, si on
décompose un logiciel en modules, on réalise qu'il
n'est pas nécessaire d'exécuter tous les modules
dans le même espace-mémoire. On peut créer un
module client qui demande un service et un autre
module serveur qui fournit le service. En plus, les
modules n'ont pas à être sur la même machine ni
même sur la même platforme. On peut utiliser la
platforme appropriée pour chaque tâche.

Fig. 1 DIFFÉRENTES
SAVEUR DE C/S

Le client

Le client est un programme qui envoie un


message à un autre programme, le serveur, lui
demandant d'exécuter une tâche quelconque, le
service. C'est le client qui gère l'interface avec
l'utilisateur, valide les données, gère la
communication avec le serveur et exécute
certaines opérations logiques. Le client est aussi
responsable de la gestion des ressources locales:
moniteur, clavier et périphériques. Lorsqu'on parle
du client on utilise aussi le terme front-end car
c'est la partie du système qui est à l'avant, c'est à
dire la plus visible à l'utilisateur. Le client
fonctionne toujours en mode graphique, GUI, et
communique avec l'utilisateur au moyen de
fenêtres.

[Link] (2 of 4)27/10/2004 13:16:47


Visual Basic

Le serveur

Le serveur reçoit les demandes des clients,


exécute les opérations d'extraction et de mise à
jour de la base de données, assure l'intégrité des
données et retourne les réponses aux clients. Le
serveur peut aussi être appellé à exécuter des
opérations logique qui peuvent aller du simple au
complexe, basées sur les règles d'affaires de
l'entreprise. Le serveur pourrait être une autre
machine sur le réseau, il pourrait servir aussi de
serveur de fichiers sur le réseau. Le serveur est le
back-end qui gère les ressources partagées et les
tâches communes à différentes applications.

● PROGRAMMATION ORIENTÉE OBJET (Object-oriented


programming)

En programmation on a toujours séparé les programmes et


les données. La POO regroupe les deux dans des unités
réutilisables qu'on appele classes. Une classe contient des
procédures (methods) et des données (attributes ou
properties). On crée une instance dune classe comme on
déclarerait une variable. L'intance d'une classe est un objet.
Puisqu'un objet est facile à dupliquer, il est toujours
réutilisable. Aussi, il est facile, à partir d'une classe, de créer
des classes similaires qui vont hériter des caractéristiques de
la première mais leur ajouter des fonctions ou des données
(inheritance).
Vous trouverez une très bonne introduction au sujet dans
Object-oriented Software.

● GUI

De nos jours, toutes les applications PC sont à base de GUI


(Graphical User Interface)). Le GUI permet à l'utilisateur
de manipuler des icônes dans un environnement graphique à
base de fenêtres (Windows) et offre ne productivité beaucoup
plus grande que ce qu'on peut obtenir dans un
environnement à base de caractères, ie DOS.

● Pilotée par les évenements (Event-driven)

Dans l'environnement traditionnel, le programme est lancé et


les instructions s'exécutent en ordre jusqu'à ce qu'il n'y aie
plus de données. Mais, dans l'environnement Windows,
l'utilisateur contrôle l'exécution. Il doit faire un clic sur un
bouton ou choisir une option dans un menu, etc. Le

[Link] (3 of 4)27/10/2004 13:16:47


Visual Basic

programmeur doit écrire le code en fonction de ces actions


(events). Par exemple, "Si l'utilisateur clic sur le bouton,
ouvrir formulaire X ......". C'est la responsabilité du
programmeur de voir à ce les options soient activées ou
désactivées au bon moment afin que les traitements
s'exécutent dans l'ordre approprié. En Visual Basic, tout le
codage est fait dans un environnement event-driven.

● LE LOGICIEL VISUAL BASIC

Il y a trois sortes de VB disponibles de chez Microsoft: VB for


Applications (VBA), VB Scripting Edition et Visual Basic
ordinaire. Le VBA est utilisé dans MS-Office pour programmer
les applications et pour passer des commandes entre les
applications; c'est un sous-ensemble de VB. VB Script est
utilisé dans seulement certaines applications spécialisées
comme Outlook; c'est encore plus restreint que VBA.
Finalement l'environnement normal de VB qu'on appelle aussi
le VB IDE (Integrated Development Environment) est celui
que nous utiliserons.

Haut de la page

[Link] (4 of 4)27/10/2004 13:16:47


Visual Basic 6

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 2

L'environnement VB

APPLICATION:

Série d'objets (fenêtres, programmes, menus, etc.) qui travaillent sur un même sujet. On
appelle l'application un Projet. Le Projet Scoring servira à manipuler les données pour
des équipes de hockey. On pourrait créer un Projet Vidéo pour gérer les opérations d'un
magasin de vidéos.

En démarrant VB on doit choisir de travailler sur un projet existant ou d'en créer un


nouveau. Il y a différentes sortes de projets mais, pour l'instant nous allons créer un
Standard EXE. Je vous suggère de sauvegarder le projet dès l'ouverture afin de lui
donner un nom officiel (il portera l'extension .VBP et vous devriez créer un répertoire

[Link] (1 of 7)27/10/2004 13:17:48


Visual Basic 6

VBapps sur votre N:). Notez que quand vous demanderez de sauver le Projet au début, VB
vous fera d'abord sauver le Form sur lequel vous travaillez (nommez-le [Link] dans
N:\VBapps).

Fig. 2-0

Tout d'abord, remarquez qu'en lançant VB vous avez une première feuille, un Form, qui
s'ouvre pour vous. La feuille est l'objet le plus visible de VB. On utilise la feuille pour créer
l'interface avec l'utilisateur. Pour créer une feuille on y place des Controls tels que ceux
du Toolbox à la gauche de l'écran. En vous familiarisant avec l'interface VB vous verrez
aussi que vous pouvez personnaliser plusieurs des fonctions d'édition de la feuille en allant
au menu Tools --> Options.

[Link] (2 of 7)27/10/2004 13:17:48


Visual Basic 6

Fig. 2-1

PREMIER EXERCICE

Comme premier exercice en VB vous allez créer la feuille que vous voyez dans Fig. 2-2.
Vous devez mettre sur la feuille 3 CommandButton et 4 Label. Ces contrôles devraient
être alignés à peu près comme l'illustration. Une fois les contrôles placés vous pouvez
ouvrir la fenêtre Properties en cliquant avec le bouton droit de la souris. La fenêtre reste
ouverte et à chaque fois que vous cliquez sur un contrôle vous voyez les propriétés de ce
contrôle s'afficher. Expérimentez avec Caption, BackColor, ForeColor et Alignment. Ne
changez pas (Name) pour l'instant. Remarquez aussi que les propriétés ne sont pas les
mêmes pour un Button et pour un Label - tous les contrôles, incluant la feuille elle-
même, ont des propriétés différentes.

[Link] (3 of 7)27/10/2004 13:17:48


Visual Basic 6

Fig. 2-2

ÉCRIRE LE CODE VB

Pour ouvrir l'éditeur de code on fait un double clique sur la feuille. La première chose à
savoir est qu'on aura besoin de 2 compteurs dans le programme. Comme vous savez, un
compteur est simplement une variable de type numérique. On doit donc déclarer ces
variables. On le fait dans la section General Declarations pour que les variables soient
accessibles à tous les objets de la feuille. On pourrait déclarer chaque variable à l'intérieur
[Link] (4 of 7)27/10/2004 13:17:48
Visual Basic 6

d'une procédure - un Private Sub - mais ces variables seraient alors locales et ne seraient
valables que pour la procédure où elles sont nommées. Nous verrons les détails
concernant les différents types de variables au prochain cours.
Pour le moment, choisissez General dans le premier ListBox et écrivez les déclarations
avec la commande Dim comme dans Fig. 2-3.

Notre application ne contient encore qu'un seul objet: la feuille Scoring. Quand on voudra
lancer l'application, faire un Start, la première action qui va se passer est que la feuille
Scoring va s'ouvrir. L'action d'ouvrir est un event, dans ce cas, le Open event for Form
Scoring. En programmation VB on écrit toujours du code pour des events. Donc, si on
veut exécuter certaines tâches lors de l'ouverture de la feuille, comme initialiser des
variables locales ou donner des valeurs de départ aux propriétés des contrôles, on
programme le Open de la feuille. Dans l'éditeur de code on choisi Form dans le premier
ListBox et Open dans le deuxième ListBox, ce qui génère une procédure Private Sub
Form_Load() comme dans Fig. 2-3.

Maintenant on code les actions qu'on veut voir lorsqu'on clique sur un bouton de
commande. Encore on invoque l'éditeur soit en faisant un double-clique sur le bouton lui-
même ou dans l'éditeur, en choisissant le nom du bouton, Command1 dans le premier
ListBox et l'événement Click dans le deuxième ListBox. Cela génère une nouvelle
procédure, Private Sub Command1_Click() comme dans Fig. 2-3.

À tout moment on peut tester l'application en faisant Start. Si le résultat n'est pas
satisfaisant, on revient au mode Design et on modifie l'interface.

[Link] (5 of 7)27/10/2004 13:17:48


Visual Basic 6

Fig. 2-3

Une fois qu'on a maitriser la technique pour coder le premier bouton, on peut coder le
deuxième facilement. Cependant, on doit faire les changements appropriés pour la
situation.

Le troisième bouton, Exit, sert à arrêter l'exécution de l'application. La commande


nécessaire est End.

Finalement, pour illustrer une autre technique très utile, je vais ajouter un quatrième
bouton pour Clear. Je veux que ce bouton ré-initialise la feuille à zéro, comme au début,
sans sortir de la feuille. Mais on a déja codé ces actions dans le Open. Il serait redondant
de ré-écrire tout le code mais ce n'est même pas nécessaire car VB me permet d'appeler
une procédure à partir d'une autre procédure. Ici je vais lui dire d'exécuter le code du
Open en cliquant sur Command4 comme ceci:
[Link] (6 of 7)27/10/2004 13:17:48
Visual Basic 6

Fig. 2-4

Haut de la page

[Link] (7 of 7)27/10/2004 13:17:48


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 3

Le langage VB

Références: Visual Basic Compendium, source de tutoriels et de liens pour VB 6.

VB 6 Programmer's Guide, référence officielle de MSDN.

Comme vous savez de l'exercice précédent, pour ouvrir l'éditeur de code de VB vous
devez soit cliquer sur l'icon View Code dans la fenêtre Project Explorer, cliquer sur
View-->Code dans le menu ou cliquer sur View code avec le bouton droit de la souris ou
encore faire un double-clique sur un objet.

Vous noterez que dans la ligne de menu les fonctions Delete, Cut, Copy, Paste, Find,
Replace, etc. fonctionnent toutes comme dans un éditeur de texte ordinaire.

LE LANGAGE VB: TECHNIQUES DE BASE

Lignes de code

Le langage VB n'est pas très rigide: les espaces, indentations, etc. n'ont
pas d'importance pour le compilateur. Cependant, elles en ont pour le
professeur et vous devrez respecter les techniques de base concernant la
lisibilité du code.

En général on écrit une commande par ligne; pour la lisibilité il est parfois
préférable de mettre la commande sur 2 lignes en utilisant le caractère de
continuation (espace underscore) _
La ligne suivante est correcte:

[Link] = "SELECT * FROM Titles"

[Link] (1 of 8)27/10/2004 13:18:23


Visual Basic

Mais je pourrais aussi l'écrire en 2 lignes dans le code:

[Link] = _
"SELECT * FROM Titles"

Dans le cas contraire on pourrait écrire 2 commandes sur une ligne en les
séparant par un : mais ce n'est pas une pratique recommandée!

L'utilisation de majuscules ou minuscules n'a pas d'importance, sauf pour


la lisibilité

Commentaires

Le caractère de commentaire est l'apostrophe '

On recommande l'usage de commentaires dans les codes partout ou des


explications sont requises.

Notez qu'on ne peut pas mettre un commentaire après un caractère de


continuation.

Les commentaires peuvent être au début d'une ligne ou après le code


comme:

' Ceci est un commentaire

[Link] = "Michel" ' Ce commentaire suit une


commande

Noms de variables

- Le nom doit commencer par une lettre

- Maximum de 40 caractères

- Ne doit pas contenir d'espaces; peut contenir des signes excepté ceux qui
décrivent un data type:

! single, # double, % integer, $ string, & long, @


currency

(le trait d'union - quoique légal est fortement déconseillé car il


porte à confusion avec l'opération moins; utilisez plutôt le
underscore comme: nom_famille ou les majuscules comme:
NomFamille)

- Ne doit pas être un mot réservé (qui fait partie du code )

Types de données

[Link] (2 of 8)27/10/2004 13:18:23


Visual Basic

Data type Storage


Range
size
Byte 1 byte 0 to 255
Boolean 2 bytes True or False
Integer 2 bytes -32,768 to 32,767
Long (long
4 bytes -2,147,483,648 to 2,147,483,647
integer)
Single (single- 4 bytes
-3.402823E38 to -1.401298E-45 for negative values;
precision
1.401298E-45 to 3.402823E38 for positive values
floating-point)
Double 8 bytes
-1.79769313486232E308 to -4.94065645841247E-324
(double-
for negative values; 4.94065645841247E-324 to
precision
1.79769313486232E308 for positive values
floating-point)
Currency
-922,337,203,685,477.5808 to
(scaled 8 bytes
922,337,203,685,477.5807
integer)
Decimal 14 bytes +/-79,228,162,514,264,337,593,543,950,335 with no
decimal point; +/-7.9228162514264337593543950335
with 28 places to the right of the decimal; smallest non-
zero number is +/-0.0000000000000000000000000001
Date 8 bytes January 1, 100 to December 31, 9999
Object 4 bytes Any Object reference
String
10 bytes +
(variable- 0 to approximately 2 billion
string length
length)
String (fixed- Length of
1 to approximately 65,400
length) string
Variant (with
16 bytes Any numeric value up to the range of a Double
numbers)
Variant (with 22 bytes +
Same range as for variable-length String
characters) string length
User-defined Number
The range of each element is the same as the range of its
(using Type) required by
data type.
elements

Naming conventions
Quand on crée des controles en VB, l'éditeur leur donne automatiquement un nom. Par
exemple, le premier bouton sera Command1 et le vingtième sera Command20. Dans le
code, quand on voudra référer au bouton pour exécuter les calculs, est-ce Command8
ou Command12? Et une variable qu'on a définie, est-ce une "String" ou une "Single" ou
une "Double"? C'est difficile de se rappeler de tous les contrôles et les variables qu'on
crée pour pouvoir s'y retrouver par la suite si on n'utilise pas un système de référence.

Pour nommer les objets en VB il y 2 facteurs à considérer:

● Utiliser toujours un nom significatif pour chaque objet

[Link] (3 of 8)27/10/2004 13:18:23


Visual Basic

● Utiliser le préfixe standard pour chaque objet tel que suggéré par le langage

Donc: cmdExit au lieu de Command8 pour le bouton "Exit",


txtHeures au lieu de Text3 pour la saisie du nombre d'heures
et sglTaux_horaire pour la variable de taux plutôt que t_h

Voici le tableau des préfixes suggérés par VB, pour les variables et
pour les controls:

Variable Data Type Prefix Example


Boolean bln blnFull
Byte byt bytDaysInMonth
Currency cur curPoundsSterling
Date (Time) dtm dtmStart
Double dbl dblAstronomicalDistances
Integer int intNumberOfEmployees
Long lng lngProfits
Single sgl sgl
String str strSurname
User-Defined Type udt udtStaffDetails
Variant vnt vntChartData

Control Type Prefix Example


Animated button ani aniEmptying
Check box chk chkWriteOnly
Combo box cbo cboLanguage
Command button cmd cmdCancel
Common Dialog dlg dlgSave
Data Contol dat datStock
Data-bound Combo dbcbo dbcboActicleType
Data-bound Grid dbgrd dbgrdStockItems
Data-bound List box dblst dblstAccountCodes
Directory list box dir dirTarget
Drive list box drv drvSource
File list box fil filPick
Form frm frmMainMenu
Frame fra frmPrinters
Graph gra graSharePrices
Grid grd grdQuantities
Horizontal Scroll Bar hsb hsbHueColor
Image img imgBitMap

[Link] (4 of 8)27/10/2004 13:18:23


Visual Basic

Label lbl lblHelpUser


List Box lst lstColorCodes
MCI mci mciSoundEffects
MDI Child Form mdi mdiJuly
Menu mnu mnuFileOpen
MS Tab mst mstDays
OLE ole oleExcel
Picture Box pic picMemoryLeft
ProgressBar prg prgConverting
Report rpt rptEndofYear
RichTextBox rtf rtfDiary
Shape shp shpSquare
Slider sld sldWindSpeed
Spin button spn spnTicketsRequired
StatusBar sta staInformation
Text Box txt txtInputText
Timer tmr tmrStartAlarmCount
Vertical Scroll Bar vsb vsbRatios

Déclaration de variables
Déclaration explicite

Définir une variable au début d'une procédure ou dans la section


"Declarations" en utilisant Dim

Dim UnEntier As Integer


Dim NomClient As String
Dim MontantDu As Currency

Normalement, les variables déclarées dans une procédure sont détruites


lorsqu'on quitte la procédure; si on veut les garder on peut les déclarer
avec Static au lieu de Dim comme:

Static TotalOtt As Integer

Avant de procéder aux exercices, vous devriez voir la section sur: Utiliser
plusieurs Forms

Par exemple, codez les deux procédures qui suivent et comparez-les:

Private Sub Command1_Click()


Dim I As Integer
I=I+1
[Link] = I
End Sub

[Link] (5 of 8)27/10/2004 13:18:23


Visual Basic

Private Sub Command2_Click()


Static I As Integer
I=I+1
[Link] = I
End Sub

Déclaration implicite

Déclaration dynamique, faite "on the fly" dans le code:

Dim Total1, Total2 As Integer


Total3 = Total1 + Total2
Total4% = 0
Montant5# = 12.34
MonNom$ = "Michel"

En général, les déclarations implicites ne sont pas recommandées car


elles rendent le code plus difficile à lire et à comprendre.

Constantes

Une constante est une valeur qui ne change pas au cours de l'exécution
d'une procédure; on la déclare avec Const comme:

Const ValeurPi = 3.1416

Portée des variables (Scope)

Une variable déclarée dans une procédure avec l'instruction Dim est
locale; lorsqu'on sort de la procédure la variable n'existe plus.

Si on déclare la variable dans la section General/Declarations avec Dim, la


variable est locale au module; elle est disponible pour toutes les autres
procédures de la feuille.

Si on déclare la variable dans la section General/Declarations d'un module


(et non d'une feuille), avec l'instruction Public au lieu de Dim, la variable
est globale et elle est disponible à l'application toute entière.

Opérateurs
Les opérateurs arithmétiques habituels sont disponibles:
+ - * / ^

Le signe & est utilisé pour une concaténation de chaines:

Dim alpha, beta, chaine As String


alpha = "Chaine divisée "
beta = "en deux parties"
chaine = alpha + beta

[Link] (6 of 8)27/10/2004 13:18:23


Visual Basic

Avec les variables de type Variant le signe + peut aussi dénoter une
concaténation si les deux variables contiennent des chaines mais, on
suggère de toujours utiliser le &

Les opérateurs de comparaison habituels sont utilisés:


= > < <= >= <> ainsi que AND OR NOT IS et LIKE

Utiliser plusieurs Forms dans un Projet

Un projet peut contenir plusieurs feuilles (Forms). Il s'agit d'abord de créer une nouvelle
feuille en faisant Add form. Ensuite, pour l'ouvrir il y a deux façons:
1) on peut changer le Startup object dans les propriétés du Projet pour que notre
nouvelle feuille s'ouvre en démarrant le Projet:

Fig. 3-1

2) on peut créer un nouveau bouton sur une feuille existante et utiliser ce bouton pour
ouvrir une autre feuille:

[Link] (7 of 8)27/10/2004 13:18:23


Visual Basic

Fig. 3-2

Fig. 3-3

Top

[Link] (8 of 8)27/10/2004 13:18:23


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 4

Le langage VB ...suite

Quelques fonctions VB utiles


MsgBox()
La fonction permet d'afficher une fenêtre de message à l'écran et de
saisir la réponse de l'utilisateur.

Le format général est :


strReponse = MsgBox(prompt[, buttons] [, title] [,
helpfile, context])

Le seul paramètre obligatoire est prompt

Les constantes qui sont utilisées pour buttons:


vbOkOnly
vbOkCancel
vbAbortRetryIgnore
vbYesNoCancel
vbYesNo
vbRetryCancel

[Link] (1 of 11)27/10/2004 13:18:58


Visual Basic

et les valeurs retournées dans strReponse:

1 vbOk Ok
2 vbCancel Cancel
3 vbAbort Abort
4 vbRetry Retry
5 vbIgnore Ignore
6 vbYes Yes
7 vbNo No

Pour plus d'information au sujet de la fonction et de la valeur des


constantes, voyez: MsgBox function dans le Help.

Par exemple, pour afficher:

Fig. 3-3

on écrit:

DIM strReponse As String


strReponse = MsgBox("Erreur dans le système!")

InputBox()
La fonction permet d'entrer et de stocker une valeur dans une variable.

Le format général est :


strReponse = InputBox(prompt [, title] [, default]
[, xPos] [, yPos])

Le seul paramètre obligatoire est prompt


La valeur entrée par l'utilisateur sera stockée dans strReponse.
Par exemple, pour saisir le nom et la note:

[Link] (2 of 11)27/10/2004 13:18:58


Visual Basic

DIM strNom As String


DIM intNote As Integer
strNom = InputBox("Entrez le nom de l'étudiant")
intNote = InputBox("Entrez la note")

Les fonctions Is ...

Les fonctions IsNumeric, IsDate retourne True si un paramètre est de


type voulu. Normalement utilisées dans une condition, comme:

' Si la valeur entrée est de type numérique, le code


après le Then est exécuté.
If IsNumeric(ValeurEntree) Then
MsgBox("All OK")
End If

' Si la valeur entrée n'est pas une date, un message


est affiché et on sort du module.
If NOT IsDate(dateNaiss) Then
MsgBox("La date n'est pas bonne!")
Exit Sub
End If

Conversion de type

Pour convertir d'un type de donnée à un autre on utilise CInt, CLong,


etc.:
Voir: functions --> Conversion functions dans le Help

Pour convertir un numérique à string:


Str(number)

Par exemple:
Dim UneChaine As String
UneChaine = Str(3456) ' retourne " 3456" (un espace
au début pour le signe)
UneChaine = Str(-3456.123) ' retourne "-3456.123"

La structure de décision
La structure de décision est comme dans tous les autres langages:

[Link] (3 of 11)27/10/2004 13:18:58


Visual Basic

If (condition est vraie) Then


(commandes)
ElseIf (autre condition est vraie)
(commandes)
Else
(commandes)
End If

La structure de cas
La structure de cas est plus efficace qu'une série de If.

On l'utilise lorsqu'on doit exécuter plusieurs comparaison. C'est


beaucoup plus facile de suivre la logique d'un Select Case que de
nombreux If ... Else ... imbriqués.

La règle de base: du moment que vous avez plus que 2 comparaisons,


utilisez un Select Case.

Dim Pourcent As Integer


Dim Lettre As String
Pourcent = InputBox("Entrez la note numérique")

Select Case Pourcent


Case Is >= 90
Lettre = "A"
Case 53 To 89
Lettre = "B"
Case 50,51,52
Lettre="C"
Case Else
Lettre = "F"
End Select

Notez qu'il y a plusieurs façons d'exprimer la condition du Case:


avec les signes < et > il faut utiliser le IS
on peut spécifier un range: 60 TO 89
on peut spécifier des valeurs: 44, 46, 55, 62

Référence:MSDN: la structure Select Case

[Link] (4 of 11)27/10/2004 13:18:58


Visual Basic

Exemples

[Link] (5 of 11)27/10/2004 13:18:58


Visual Basic

[Link] (6 of 11)27/10/2004 13:18:58


Visual Basic

[Link] (7 of 11)27/10/2004 13:18:58


Visual Basic

[Link] (8 of 11)27/10/2004 13:18:58


Visual Basic

[Link] (9 of 11)27/10/2004 13:18:58


Visual Basic

Structure de boucle: le Do ... Loop


Le Do ... Loop sert à exécuter un nombre d'instruction en répétant
selon une condition.

Dim continuer
continuer = 6
Do While continuer < 7
continuer = MsgBox("Voulez-vous continuer?",
vbYesNo)

[Link] (10 of 11)27/10/2004 13:18:58


Visual Basic

Loop

et aussi

Do Until continuer = 7
continuer = MsgBox("Voulez-vous continuer?",
vbYesNo)
Loop

Structure de boucle: le For ... Next


Utilisé lorsqu'on veut répéter les instruction un certain nombre de fois.

Utilise un compteur de boucle (qu'on doit déclarer) pour contrôler


l'exécution.

Dim compteur as Integer


For compteur = 1 To 10
MsgBox(compteur)
Next

Top

[Link] (11 of 11)27/10/2004 13:18:58


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 5

Création d'un form

Design de l'application

Avant de commencer à créer les objets en VB, il faut normalement planifier le travail à
faire. Cela veut dire d'utiliser un papier et un crayon et de dessiner un plan ou modèle
de l'application. En architecture on dessine un plan de maison. En informatique on fait la
modélisation de l'application.

Propriétés du Form

Fig. 4-1

[Link] (1 of 12)27/10/2004 13:19:52


Visual Basic

(Name): même nom qu'on lui donne en le sauvegardant - le nom qu'on


utilise lorsqu'on réfère à la feuille dans le code.

Caption: nom qui apparaît dans la ligne Titre - information seulement - pas
référencé dans le code.

BorderStyle: ligne titre voulue et si la grandeur peut être changée à


l'exécution - 1 et 2 sont des Forms ordinaires.

BackColor: couleur de la feuille.

StartUpPosition: où on veut que la feuille s'affiche sur l'écran à l'exécution.

Au sujet des noms (la propriété "Name"): on devrait utiliser un système


de terminologie standard à travers toutes les applications VB. Ceci veut dire
d'identifier tous les objets ainsi que les variables avec un préfixe qui est facile
à reconnaitre partout dans le code.

Pour établir la grandeur et la position de la feuille lors de l'exécution, on le


fait habituellement dans le code.

Dans le Form_Load event on écrit le code qui sera exécuté en lançant


l'application:

Private Sub Form_Load()


[Link] = 8000
[Link] = 6000
[Link] = ([Link] - [Link]) / 2
[Link] = ([Link] - [Link]) / 2
End Sub

Les mesures pour l'objet Screen sont en twips:


517 twips = 1 cm
1440 twips = 1 pouce.

Ajouter des controls au Form

Pour mettre un control


dans le form il faut
d'adord sélectionner le
control dans boîte
d'outils qui est à la
gauche de l'écran - si la
boîte n'est pas là, on
l'active avec le bouton
Boîte d'outils .

Dans la boîte d'outils on


clique sur le control
voulu et puis on clique
sur la feuille à l'endroit

[Link] (2 of 12)27/10/2004 13:19:52


Visual Basic

où on veut placer le
control et on le traîne à
la grandeur qu'on désire.

Une fois le control en


place on peut changer
sa grandeur, le déplacer
ou l'enlever (Delete) ou
faire Undo si on s'est
trompé.

Pour faire une copie


d'un control, on le
sélectionne et on fait
Copy et Paste - on
répond "Non" à la
question Control array
parce qu'on veut des
controls individuels - un
nouveau nom sera
assigné
automatiquement au
control, Label2, par
exemple, mais il faudra
changer le Caption.

Pour sélectionner
plusieurs controls on
clique en haut, à gache
du premier et on traine
Fig. 4-2 la souris jusqu'au coin
droit, en bas du
rectangle de sélection;
on peut aussi le faire
avec (Control)(Click).

Pour aligner un groupe


de controls ou pour les
mettre de la même
grandeur, on les
sélectionne tous et on
utilise les boutons
d'alignement:
.
Le bouton Undo est
bien utile si on se
trompe de sélection.

Propriétés communes des controls

Name: le nom interne de l'objet, tel qu'il sera utilisé dans le code

Appearance: si le control possède ou non un aspect en relief

BackColor, ForeColor couleur du fond et couleur du texte

[Link] (3 of 12)27/10/2004 13:19:52


Visual Basic

Visible, Enabled valeur True/False si le control est visible et s'il est actif -
par exemple, un bouton peut être désactivé ([Link] = false) si on ne
veut pas que l'utilisateur le clique à certains moments dans le traitement.

TabIndex l'ordre d'activation des controls sur la feuille - détermine quel


control aura le Focus quand l'utilisateur fait un Tab.

Label, PictureBox

Label: un titre, une étiquette - utilisé pour afficher une information

PictureBox: une image - utilisé pour afficher un fichier contenant une image
(.BMP, .GIF, etc) - sert pour un logo d'entreprise, par exemple

Saisie de données

TextBox: sert à saisir une donnée au clavier - la donnée saisie est gardée dans la
propriété Text de l'objet et on peut s'en servir à partir de là:

[Link] (4 of 12)27/10/2004 13:19:52


Visual Basic

Voici le code sous forme de texte pour ceux qui veulent le coller.
N'oubliez-pas que vos noms d'objets doivent correspondre à ceux
dans le code pour que ça fonctionne.

Option Explicit

[Link] (5 of 12)27/10/2004 13:19:52


Visual Basic

Dim curAchats As Currency


Dim strNomClient As String
Dim strVilleClient As String

Private Sub Form_Load()


[Link] = 5000
[Link] = 6000
[Link] = ([Link] - [Link]) / 2
[Link] = ([Link] - [Link]) / 2
[Link] = &H119911
EffaceTout
End Sub

Private Sub cmdContinuer_Click()


strNomClient = [Link]
strVilleClient = [Link]

If Not IsNumeric([Link]) Then


MsgBox ("Montant n'est pas numérique")
Exit Sub
End If

curAchats = [Link]

[Link] = "Client est " _


& strNomClient _
& " , habite à " & strVilleClient _
& Chr(13) & "et achète pour " _
& curAchats
End Sub

Private Sub cmdCancel_Click()


EffaceTout
End Sub

Private Sub cmdExit_Click()


Unload Me
End
End Sub

Private Sub EffaceTout()


[Link] = ""
[Link] = ""
[Link] = ""
[Link] = ""
End Sub

Les Listes

[Link] (6 of 12)27/10/2004 13:19:52


Visual Basic

ListBox:
affiche une liste
de choix dans
une boîte - on
sélectionne
l'élément voulu
en cliquant
dessus - la liste
peut être créée
lors de la
création du
Form ou elle
peut être créée
dynamiquement
pendant
l'exécution du
code (on verra
la technique un
peu plus loin).

[Link] (7 of 12)27/10/2004 13:19:52


Visual Basic

ComboBox:
une combinaison (de là le terme combo) d'un TextBox et d'un ListBox. Il
permet à l'utilisateur de cliquer sur un item de la liste ou d'en entrer un
nouveau. On utilise les 2 events Click et Change pour déterminer ce qui
se passe.

Si on veut charger la liste de la boîte Combo au moment de l'exécution, on écrit le code


approprié dans le Form_Load:

CommandButton, OptionButton et CheckBox

[Link] (8 of 12)27/10/2004 13:19:52


Visual Basic

CommandButton ( cmd ) -
un objet 3D - pas de
couleur - effet de s'enfoncer
quand on clique

Si Default = True, marge


du bouton est foncée et
Click sera activé par Enter

Si Cancel = True Click


sera activé par Esc
Fig. 4-5

OptionButton Par définition un bouton d'option fait partie d'un groupe; on


crée d'abord un cadre (Frame) et on y met les boutons d'options. Le Frame
détermine que les boutons font tous partie du groupe. Si j'ai besoin de 2
groupes de boutons, je doit créer 2 Frames différents.

À l'exécution on doit tester la propriété Value de chaque bouton - si elle


retourne True, le bouton est celui qui a été sélectionné (seulement un bouton
du groupe retourne True) et j'exécute l'action appropriée.

[Link] (9 of 12)27/10/2004 13:19:52


Visual Basic

CheckBox: on se sert de la propriété Value pour tester si la boîte est vide


(Value = 0), cochée (Value = 1) et on peut aussi regarder pour Indéfini
(Value = 2)..

Voici le code pour l'application de boutons et de cases:

Option Explicit

Private Sub Form_Load() EffaceTout

[Link] (10 of 12)27/10/2004 13:19:52


Visual Basic

End Sub

Private Sub cmdConfirmer_Click()


Dim strPrNom As String, strOsNom As String
Dim vntAccPr, vntAccMn, vntAccMod, vntAccNic

'Si pas de processeur choisi, afficher erreur


'et refaire la saisie

If [Link] = False _
And [Link] = False _
And [Link] = False Then
MsgBox ("Vous devez choisir un Processeur")
[Link]
Else
If [Link] = True Then
strPrNom = "Pentium"
ElseIf optPent2 = True Then
strPrNom = "Pentium II"
Else
strPrNom = "Pentium III"
End If
End If

'SetFocus est une Method qui retourne le Focus


'(le curseur) à un objet spécifié,
'dans ce cas-ci, un bouton d'option
'Voir "SetFocus Method" dans Help.

'Check if OS was selected - if no


'display error message; if yes, get its name.
If [Link] = False _
And [Link] = False Then
MsgBox ("You must select an Operating system")
[Link]
Else
If [Link] = True Then
strOsNom = "Windows 98"
Else
strOsNom = "Windows NT"
End If
End If

'Verify which accessories were checked in order


'to build output label.
If [Link] = 1 Then
vntAccPr = " printer "
End If
If [Link] = 1 Then
vntAccMn = " monitor"
End If
If [Link] = 1 Then
vntAccMod = " modem"
End If
If [Link] = 1 Then

[Link] (11 of 12)27/10/2004 13:19:52


Visual Basic

vntAccNic = " NIC"


End If

[Link] = "You selected a " & PrName _


& " with " & strOsNom & Chr(13) _
& "and accessories: " & vntAccPr & vntAccMn _
& vntAccMod & vntAccNic

'If you want to force a line change in a Label,


'insert a Chr(13) - the carriage return character-
'in the string.
End Sub

Private Sub cmdCancel_Click()


EffaceTout
End Sub

Private Sub cmdExit_Click()


Unload Me
End
End Sub

Private Sub EffaceTout()


[Link] = 0
[Link] = 0
[Link] = 0
[Link] = 0
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = ""
End Sub

Top

[Link] (12 of 12)27/10/2004 13:19:52


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 6

Utilisation d'arrays

Création du tableau - "array"


En VB on déclare un tableau comme une variable ordinaire, avec
DIM.

Par exemple:
Dim Mois(1 to 12) As String
déclare un tableau Mois qui contiendra 12 valeurs avec index de 1 à
12. Mois(1) = "Janvier", etc.

Le tableau:
Dim Departement(6 ) As String
déclare un tableau de 7 éléments avec le premier index = 0.

On peut aussi déclarer un tableau de grandeur indéterminée


(unbound) en utilisant la fonction Array( ) dans le code:
Dim Semaine, Jour
Semaine = Array("lundi", "mardi", "mercredi")

[Link] (1 of 5)27/10/2004 13:20:26


Visual Basic

Jour = Semaine(1) 'retourne mardi

Le Control Array

Un tableau de contrôles et non un tableau qui contrôle

Si j'ai un form qui doit contenir 10 TextBox, je crée le premier et je


le copie et le colle 9 fois. Je spécifie "Yes" à la question de control
array. J'obtiens ceci:

Maintenant, je peux utiliser un For ... Next pour faire des opérations
sur les TextBox

Pour initialiser tous les contrôles à 0:

Dim i As Integer
For i = 0 to 9
Text1(i).Text = 0
Next i

[Link] (2 of 5)27/10/2004 13:20:26


Visual Basic

Exemple d'utilisation du tableau et du control array


Je dois saisir 6 notes de 6 cours de chaque étudiant et calculer sa
moyenne.

Je devrai déclarer 6 variables pour les noms de cours, 6 variables


pour les notes et utiliser 12 TextBox pour entrer les données.

Quand je réalise que j'ai deux fois 6 variables du même type je


devrais voir que je peux utiliser un tableau pour la saisie et les
calculs.

Option Explicit

[Link] (3 of 5)27/10/2004 13:20:26


Visual Basic

Dim sglNotes(5) As Single


Dim strCours(5) As String
Dim sglTotal As Single, sglMoyenne As Single

Private Sub Form_Load()


EffaceTout
End Sub

Private Sub EffaceTout()


Dim i As Integer

For i = 0 To 5
sglNotes(i) = 0
strCours(i) = ""
txtNotes(i).Text = 0
txtCours(i).Text = ""
Next i

sglTotal = 0
sglMoyenne = 0

[Link] = ""

End Sub

Private Sub cmdCalcul_Click()


Dim i As Integer

For i = 0 To 5
sglNotes(i) = txtNotes(i).Text
strCours(i) = txtCours(i).Text
Next i

For i = 0 To 5
sglTotal = sglTotal + sglNotes(i)
Next i

sglMoyenne = sglTotal / 6

[Link] = sglMoyenne

End Sub

[Link] (4 of 5)27/10/2004 13:20:26


Visual Basic

Private Sub cmdEffacer_Click()


EffaceTout
End Sub

Private Sub cmdQuitter_Click()


End
End Sub

Top

[Link] (5 of 5)27/10/2004 13:20:26


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 7

Le Menu et le Debug

Création du menu
Pour créer un menu dans un form on utilise l'éditeur de menu dans Tools --> Menu
editor. L'éditeur ouvre une fenêtre dans laquelle on crée le menu qu'on veut voir affiché
dans le form.

On utilise les flèches et les boutons Next et Insert pour créer la cascade d'items dans le
menu.

[Link] (1 of 4)27/10/2004 13:21:07


Visual Basic

Ensuite il ne reste qu'à écrire le code pour activer les fonctions du menu.

Chaque item du menu n'a qu'un événement possible et c'est le Click.

Le "debugging", ou déboguage, si vous préférez


Il arrive assez fréquemment qu'un programmeur fasse une erreur en écrivant le
code. Les erreurs de syntaxe sont habituellement assez évidentes et le
compilateur les identie à l'exécution. Les erreurs de logique sont souvent plus

[Link] (2 of 4)27/10/2004 13:21:07


Visual Basic

difficiles à identifier. C'est pourquoi la plupart des logiciels ont une fonction de
debugging qui aide à la correction des erreurs dans un programme.

La façon la plus simple d'utiliser debug en VB est de créer des breakpoints dans
le code et puis de regarder l'état du programme au moment où il s'arrête. Un
breakpoint est un point d'arrêt dans le code - l'exécution du programme arrête
avant d'exécuter la ligne qui contient le breakpoint. Lorsque code s'arrête, une
fenêtre immediate s'ouvre au bas de l'écran. Dans cette fenêtre on peut
regarder le contenu des variables, des propriétés, des objets, etc. Pour continuer
l'exécution après avoir étudier la situation on peut faire Start à nouveau.
Cependant, il sera parfois tès utile de regarder la séquence des instructions qui
suivent. Pour cela on fait le Step... et la manière la plus facile de le faire est
avec la touche (F8).

Fig. 5-7

AUTRES TECHNIQUES

Branchements:
Le GoTo: Parfois dans un module il est nécessaire de changer l'ordre
d'exécution des commandes. La façon la plus simple de le faire est
d'utiliser un GoTo comme:

Private Sub command1_Click()


Debut:
(code)
If erreur = 1 Then
GoTo Debut

[Link] (3 of 4)27/10/2004 13:21:07


Visual Basic

End If
End Sub

Cependant, veuillez notez que l'usage du GoTo n'est jamais


recommandé car c'est une vieille technique qui risque de créer des
gros problèmes de lisibilité. Il y a d'autres structures plus efficaces
pour faire la même chose.

Le Do ... Loop: crée une boucle de traitement entre le Do et le Loop


- on peut s'en servir pour traiter une condition d'erreur comme:

Private Sub command1_Click()


erreur = 0
Do While erreur = 0
erreur = 1
If valeur > x Then
erreur = 0
End If
Loop
.....

La structure Do While ... Loop peut être remplacée par la structure


équivalente:

While condition
instructions
Wend

Top

[Link] (4 of 4)27/10/2004 13:21:07


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 8

Caractères et images

Gérer le texte
Il est souvent nécessaire quand on saisie des données ou qu'on valide des
informations,
de pouvoir manipuler les chaînes de caractères de différentes façons.
Voyons quelques fonctions utiles pour exécuter ces manipulations:

Len(chaine): retourne la longueur - nombre de caractères


dans la chaine.

Left(chaine, nombre): retourne le nombre de caractères


spécifié à partir de la gauche de chaine.

Right(chaine, nombre): retourne le nombre de caractères à


partir de la droite de la chaine.

Mid(chaine, position, nombre): retourne le nombre de


caractères spécifié à partir de position dans la chaine.

InStr(chaine1, chaine2): retourne la position dans la


chaine1 où chaine2 commence - retourne 0 si chaine2 pas
trouvée

LTrim(chaine), RTrim(chaine) et Trim(chaine): retourne


la chaine avec les espaces non-significatifs enlevés, à gauche,
à droite ou les deux.

LCase(chaine), UCase(chaine): LCase retourne la chaine


toute en minuscules (lower case) et UCase retourne toutes des
majuscules (upper case).

[Link] (1 of 11)27/10/2004 13:21:44


Visual Basic

[Link] (2 of 11)27/10/2004 13:21:44


Visual Basic

Format(chaine, format): retourne la chaine formattée selon le format


spécifié; les caractères de formattage utilisés pour les données
numériques sont:

0 représente un chiffre, avec les zéros non-significatifs


# représente un chiffre, sans les zéros non-significatifs
. pour la position du décimal
, pour les groupes de milliers
+ - ( ) espace affichés littéralement

Par exemple:
Format(3456.7, "00000.00") --> 03456.70
Format(3456.7, "#####.##") --> 3456.7
Format(003456.75899, "##,##0.00") --> 3,456.76
Format(456.7, "##,##0.00$") --> 456.70$

Pour les données de type date ou heure on utilise les caractères suivants:
yy --> l'année sans le centennaire - eg: 98
yyyy --> l'année avec centennaire - eg: 1998
m --> le mois numérique - eg: 10
mmm --> le mois abbrévié - eg: oct
mmmm --> le nom du mois au long - eg: octobre
d --> le jour du mois, sans zéro - eg: 8
dd --> le jour du mois, avec zéro - eg: 08
dddd --> le nom du jour de la semaine - eg: lundi
h --> l'heure, sans zéro - eg: 7
hh --> l'heure avec zéro - eg: 07
mm --> minutes - eg: 45
ss --> secondes - eg: 50

Il existe aussi plusieurs formats prédéfinis qu'on peut utiliser. Par


exemple:
"general date", "short date", "long date" pour les dates
"general number", "currency", "standard" pour les
nombres.

On les utilise comme:


[Link] = Format(dtmEmbauche, "short
date")

[Link] = Format(sglSalaire, "currency")

Voir la rubrique: Named formats dans l'Aide.

Blocs de texte

Il est souvent utile dans une application de pouvoir travailler avec des
blocs de texte. Les contrôles TextBox et ComboBox possèdent des

[Link] (3 of 11)27/10/2004 13:21:44


Visual Basic

propriétés qui permettent de manipuler les blocs de texte. Il s'agit de:


SelStart: entier long qui identifie le début du bloc - 0 signifie
le début du texte et un nombre égal à la longueur signifie tout
le texte
SelLength: un entier long qui identifie le nombre de
caractères à sélectionner
SelText: un string qui contient les caractères sélectionnés

Par exemple, le code suivant sélectionne tout le texte dans un TextBox:


[Link]
[Link] = 0
[Link] = Len([Link])
'
' Si je veux remplacer le texte choisi
' j'assigne une nouvelle valeur à SelText
'
[Link] = "Nouvelle valeur"
'
' Notez que ce genre de manipulation est habituellement lancé
' par les événements MouseDown, MouseUp ou
' MouseMove associés au contrôle

Voici un exemple de bloc, tel que décrit dans l'Aide:


Private Sub Form_Load ()
[Link] = "Two of the peak human experiences"
[Link] = [Link] & " are good food and classical
music."
End Sub

Private Sub Form_Click ()


Dim Search, Where ' Declare variables.
' Get search string from user.
Search = InputBox("Enter text to be found:")
Where = InStr([Link], Search) ' Find string in text.
If Where Then ' If found,
[Link] = Where - 1 ' set selection start and
[Link] = Len(Search) ' set selection length.
Else
MsgBox "String not found." ' Notify user.
End If
End Sub

Objets spéciaux

[Link] (4 of 11)27/10/2004 13:21:44


Visual Basic

Screen: représente l'environnement Windows


au complet - permet l'accès aux feuilles et aux
contrôles. Ses propriétés importantes:
ActiveControl retourne le nom du contrôle
qui a le focus et ActiveForm retourne le nom
de la feuille courante

Clipboard: le presse-papier du système -


permet de manipuler (couper, copier, coller)
du texte et des graphiques de l'application.
Ses méthodes importantes: Clear vide le
clipboard, SetText met une chaine de texte
dans le clipboard, GetText retourne une
chaine de texte du clipboard.

Voici un exemple qui montre comment utiliser l'objet Clipboard, le


presse-papier, pour manipuler des blocs de texte. Remarquez qu'on fait la
manipulation au moyen d'un menu puisque c'est possible de maintenir le
contrôle choisi en focus pendant qu'on fait la sélection du texte.
Notez aussi que le fait d'utiliser des références à l'objet Screen plutôt
qu'à des contrôles spécifiques nous permet d'incorporer le code dans
n'importe quelle application, peu importe les noms qu'on a donné aux
différents contrôles.
This example shows how the Clipboard object is used in cut,
copy, paste, and delete operations. To try this example, create
a form with a TextBox control and use the Menu Editor to
create an Edit menu (for each of the commands, set the
Caption property = Cut, Copy, Paste, and Delete, respectively;
set the Name property = EditCut, EditCopy, EditPaste, and
EditDelete, respectively).

Private Sub EditCut_Click ()


' Clear the contents of the Clipboard.
[Link]
' Copy selected text to Clipboard.
[Link] [Link]
' Delete selected text.
[Link] = ""
End Sub

Private Sub EditCopy_Click ()


' Clear the contents of the Clipboard.
[Link]
' Copy selected text to Clipboard.
[Link] [Link]
End Sub

Private Sub EditPaste_Click ()


' Place text from Clipboard into active control.
[Link] = [Link] ()
End Sub

[Link] (5 of 11)27/10/2004 13:21:44


Visual Basic

Private Sub EditDelete_Click ()


' Delete selected text.
[Link] = ""
End Sub

GÉRER LES GRAPHIQUES

Le système de coordonnées

Le système de coordonnées de la feuille est une grille à 2-dimensions qui


définit la position sous forme de (x,y). la valeur de x représente la
distance à partir du bord gauche et y représente la distance à partir du
haut. La position (0,0) est donc le coin supérieur gauche de la feuille.

En VB l'unité de mesure pour les coordonnées est le twip.


1 twip = 1/20 d'un point d'impression
1440 twips = 1 pouce
567 twips = 1 centimètre

Cependant, il est possible de changer l'unité de mesure en changeant la


propriété ScaleMode.
ScaleMode = 1 --> twips
ScaleMode = 2 --> points
ScaleMode = 3 --> pixels
ScaleMode = 4 --> caractères
ScaleMode = 5 --> pouces
ScaleMode = 6 --> millimètres
ScaleMode = 7 --> centimètres

On peut changer ScaleMode dans FormLoad, ce qui appliquera l'échelle à


la feuille elle-même ou bien, on peut changer ScaleMode pour un objet
spécifique comme:
[Link] = 5 'en pouces
[Link] 2, 2, 2, 2

Déplacement et grandeur

Par exemple, pour déplacer ou modifier la grandeur d'une feuille on utilise


la méthode Move, comme dans:
[Link] 3000, 3000 'à environ 5 cm de la gauche et 5
cm du haut
[Link](3000, 3000, 5670, 5670) ' haut. = 10 cm,
larg. = 10 cm
[Link] = 7
[Link] 5, 5, 10, 10

[Link] (6 of 11)27/10/2004 13:21:44


Visual Basic

Les images

Une image peut être affichée de 3 façons:


1) sur une feuille directement
2) dans un contrôle PictureBox
3) dans un contrôle Image
Pour afficher l'image dans un des contrôles on doit spécifier le
nom du fichier qui contient l'image dans la propriété Picture
du contrôle.
Dans le cas d'un Form, l'image devient le "background". Il faut
que l'image soit de la bonne grandeur avant de l'afficher.

Pour charger une image lors de l'exécution on utilise la


fonction LoadPicture comme:
[Link] = LoadPicture("C:\images
\[Link]")

Pour enlever une image lors de l'exécution on utilise aussi


LoadPicture, avec le paramètre nul comme:
[Link] = LoadPicture("")

Dans un PictureBox, si l'image est trop grande pour le contrôle


dans lequel on l'affiche, elle est coupée à droite et en bas.
Si on veut que le contrôle s'étende pour recevoir l'image, on
met la propriété AutoSize à True. Le contrôle Image n'a pas
de propriété AutoSize mais, il s'agrandit automatiquement à la
grandeur de l'image. Le Form n'a pas d'AutoSize et ne
s'ajuste pas à la grandeur de l'image.

Dans un Image, on peut mettre la propriété Stretch à True


si on veut que l'image ajuste sa grandeur à la grandeur du
contrôle.

[Link] (7 of 11)27/10/2004 13:21:44


Visual Basic

Multimédia

Multimedia réfère à des unités autres que l'écran ou l'imprimante pour


produire des sons, regarder des vidéos ou écouter de la musique. Pour ce
faire, on utilise un nouveau controle: le Multimedia control. Mais ne le
chercher pas dans la boite à outils; il faut l'ajouter d'ailleur. Pour la
pratique, créer une nouvelle feuille: [Link] dans un projet
existant. Dans le menu Projects --> Components, trouvez "Microsoft
Multimedia Control 6.0" et cochez la case puis faites OK. Maintenant, le
Multimedia control fait partie de votre boite à outils (mais seulement pour
ce projet).

Si vous mettez un Multimedia control sur la feuile, vous


obtenez une barre de bouton comme vous voyez pour tous les
équipements de ce genre. Dans la DeviceType property vous
spécifiez quelle sorte de lecteur ce control opère:
DeviceType Device
CDAudio CD Audio player
DAT Digital audio tape player
Overlay Overlay
Scanner Scanner
Videotape player and
Vcr
recorder
Videodisc Videodisc player
Other Other devices not specified

Exemple: un lecteur CD

Dans la nouvelle feuille: frmMultimed, on ajoute un Multimedia control.


Puisque c'est le seul control qu'on utilise, on laisse son nom à MMControl1.

Puis on met: CDAudio dans DeviceType. Le device CDAudio sert à lire


des CD dans le lecteur CD. Si on veut entendre le son qui est enregistré
dans un fichier .WAV on utilise le DeviceType WaveAudio et on doit lui
fournir un Filename qui contient le son.

On ajoute quelque labels pour complèter la feuille et on obtient:

[Link] (8 of 11)27/10/2004 13:21:44


Visual Basic

Maintenant il faut écrire le code pour faire fonctionner le lecteur.

D'abord, voici ce qu'il faut savoir au sujet du MM Control: Il y a un Track


property qui contient le numéro de la piste courante. Mais la propriété la
plus importante est Command property qui peut accepter plusieurs
valeurs et qui, en fait, opère le lecteur.

Command value Meaning


Open Opens the device
Close Closes the device
Eject Ejects the CD
Play Plays the device
Pause Pauses the device
Next Goes to next track
Goes to beginning of current
track.
Prev If used within 3 seconds of most
recent Prev, goes to beginning
of previous track
Record Initializes recording
Save Saves the open device file
Step backward or forward a
Seek
track
Stop Stops the device
Step Step forward through tracks

[Link] (9 of 11)27/10/2004 13:21:44


Visual Basic

Par exemple, pour ouvrir le lecteur, on fait:


[Link] = "Open" 'assigne la valeur "Open" à la
propriété Command
Pour faire une pause:
[Link] = "Pause" 'assigne la valeur "Pause" à la
propriété Command

Comme vous savez, le truc de la programmation est de savoir dans quel


événement on doit écrire le code. On sait que le Form_Load event est
activé quand la feuille s'ouvre. On peut y mettre le démarrage du lecteur
avec Open. Un fois le lecteur en marche, il ne s'arrêtera pas même si on
ferme la feuille, à moins qu'on lui dise de s'arrêter. On va donc mettre la
commande Stop dans le Form_Unload event. Et pour voir ce qui se
passe, on va utiliser le StatusUpdate event pour afficher le compteur de
piste; "change track, pause, play" sont toutes des actions qui lancent un
StatusUpdate.

Vous remarquerez que vous pouvez utiliser les boutons du MM Control


pour contrôler le lecteur.

[Link] (10 of 11)27/10/2004 13:21:44


Visual Basic

Top

[Link] (11 of 11)27/10/2004 13:21:44


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 9

Validation des données

Gérer les données entrées par l'utilisateur


Validation signifie s'assurer que les valeurs entrées sont bonnes. On valide afin de s'assurer qu'on
passe des valeurs correctes aux calculs et pour éviter de faire "crasher" l'application.

Par exemple, si on entre une données qui n'est pas numérique, la procédure de calcul va s'arrêter
sur une erreur de "Type mismatch" et l'utilisateur restera en panne.

Il y a 3 événements qui sont généralement utilisés pour faire la validation:


le _Change

le _LostFocus

le _Validate

Le "Change event"
Voici un exemple de _Change:

Private Sub txtHeures_Change()


[Link] (1 of 3)27/10/2004 13:22:16
Visual Basic

If Not IsNumeric([Link]) Then


MsgBox ("Doit être numérique")
End If
End Sub

Notez que le change est exécuté pour chaque changement qu'on fait - chaque
caractère est un changement.

Ça marche pour IsNumeric - du moment ou on entre un caractère qui n'est pas


numérique, le message est activé.

Cependant, pour IsDate ce n'est pas pratique car il faut que la date soit entrée au
complet avant de la valider.

Le "Validate event"
Voici un exemple de _Validate:

Private Sub txtHeures_Validate(Cancel As Boolean)


If txtHeures < 0 Or txtHeures > 100 Then
MsgBox ("Doit être un nombre entre 0 et 100")
Cancel = True
End If
End Sub

"Cancel = True" sert à garder le focus dans le champ actuel.


Donc, tant qu'il y a une erreur l'utilisateur ne peut pas quitter le TextBox.

On peut utiliser le IsNumeric dans Validate comme dans Change.

La fonction IsDate( ) est utilisée fréquement pour valider.

Attention: on ne devrait pas utiliser Validate pour vérifier si le textBox est vide ou
non. Le Validate est activé seulement au moment ou le curseur quitte le textBox.
Or, si l'utilisateur a sauté le TextBox en utilisant la souris, par exemple, le Validate
ne sera jamais activé. On met la vérification pour les vides au début des calculs.

Le "GotFocus event" et le "LostFocus event"


Voici comment on pourrait utiliser _GotFocus et _LostFocus pour changer la couleur de la boite,

[Link] (2 of 3)27/10/2004 13:22:16


Visual Basic

par exemple:

Private Sub txtHeures_GotFocus()


[Link] = RGB(0, 0, 128)
[Link] = RGB(255, 255, 255)
End Sub

Private Sub txtHeures_LostFocus()


[Link] = RGB(255, 255, 255)
[Link] = 0
End Sub

Ou bien ceci pour sélectionner le texte déjà dans le TextBox


- très utile quand on ne veut pas avoir a effacer
le 0 initial avant de pouvoir entrer la valeur.

Private Sub txtHeures_GotFocus()


[Link] = 0
[Link] = Len([Link])
End Sub

Top

[Link] (3 of 3)27/10/2004 13:22:16


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 10

Bases de données et VB

Notions de SGBD
Universal Data Access est la vision de Microsoft pour tout ce qui touche les bases de données.
Tout ce qui ne conforme pas à UDA est appellé à être abandonné.

[Link] (1 of 6)27/10/2004 13:22:43


Visual Basic

Il est important de comprendre comment le serveur de bd s'intègre avec les autres composantes.

ADO avec OLE DB sont les technologies à retenir pour l'avenir.

[Link] (2 of 6)27/10/2004 13:22:43


Visual Basic

ÉTUDE DE CAS: LA GESTION DE PROJETS

La compagnie GEN5 INC. se spécialise dans la consultation en systèmes


informatiques auprès de l'industrie. À tout moment il y a plusieurs projets en
cours et plusieurs soumissions de projets en train d'être négociées. Chaque
projet actif emploie plusieurs employés mais, pas exclusivement - au cours
d'une semaine donnée, un employé peut travailler sur 2 ou 3 projets
différents. Ceci est important quand il faudra établir les coûts du projet et
savoir si on a fait un profit ou une perte sur ce projet. Chaque employé est
attaché à un département à l'intérieur de la compagnie et se rapporte au
Directeur de ce département. Les employés du département "Administration"
sont affectés à la gestion interne et ne sont assignés à aucun projet.

A chaque semaine, chaque employé doit soumettre une feuille de temps, un


"Timesheet", pour indiquer les projets sur lesquels il a travaillé. Voici un
exemple de la feuille de temps:

[Link] (3 of 6)27/10/2004 13:22:43


Visual Basic

Notre première tâche quand on commence l'étude du système est de dessiner une
ébauche de diagramme ER pour établir quelles tables principales on devra créer dans la
base de données. Ce premier diagramme nous indique: les entités, les relations entre
les entités et la cardinalité des relations.

[Link] (4 of 6)27/10/2004 13:22:43


Visual Basic

Ensuite, on doit normaliser la structure de données. Le processus de normalisation


consiste à établir des relations exactes entre les tables.

On doit maintenant s'assurer que les données respectent les règles d'intégrité: il faut
être certain, en tous temps, que les données dans la base de donnée sont
correctes et consistentes.

● Intégrité de l'entité: pour chaque instance d'une entité la clé primaire doit
exister, elle doit être unique et elle ne peut pas être nulle.

● Intégrité référentielle: chaque clé étrangère dans une entité doit représenter la
clé primaire d'une autre entité - il faut donc être toujours en mesure de naviguer
entre entités parent-enfant - par exemple, dans le cas d'une insertion, le parent
doit exister pour pouvoir insérer un enfant - de même, on n'enlève pas un parent si
des enfants existent. Par exemple, dans le modèle Gen5, pour pouvoir entrer le
numéro du département dans la table "Employe" il faut que le département existe
déjà dans la table "Departement"; aussi, il n'est pas permit d'enlever un
département de la table "Departement" si son numéro est présent dans la table
"Employe" - ces deux situations, si on les permet, créent une référence à une chose
qui n'existe pas et faussent la base de données. Habituellement, les logiciels
imposent le respect des règles d'intégrité référentielle: l'opération (Insert, Delete
ou Modify) n'est pas permise si elle viole les règles.

● Intégrité des domaines: chaque attribut devrait avoir un domaine de valeurs


permises, des valeurs qui ont du sens pour cet attribut - le type de donnée, la

[Link] (5 of 6)27/10/2004 13:22:43


Visual Basic

longueur, le format de date, les limites maximum et minimum, les valeurs par
défaut et une indication de si la valeur "NULL" est permise. Par exemple, on
pourrait établir que pour "Nombre d'heures", la valeur maximum est 100 car c'est
impossible qu'un employé travaille plus que 100 heures sur un projet dans une
semaine. Si on fait une erreur et on entre 400 au lieu de 40, le système captera
l'erreur.

Top

[Link] (6 of 6)27/10/2004 13:22:43


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 11

Introduction au langage SQL

Manipuler les données avec SQL

SQL = Structured Query Language


On prononce S . Q . L . ou bien Sequel

Langage de manipulation de bases de données


relationnelles inventé dans les années '70 par IBM et Dr. E.
F. Codd

Popularisé par la cie ORACLE

Avantage est qu'il permet à des SGBD qui n'ont pas la


même programmation de se parler - base de la
technologie client-serveur

Une application client sur une platforme WinXP opérant


Visual Basic peut aller chercher de l'information sur un

[Link] (1 of 11)27/10/2004 13:23:11


Visual Basic

serveur opérant sur une platforme H-P avec Oracle - le


client envoie une commande SQL au serveur qui l'exécute
et retourne le résultat

La deuxième raison pour apprendre SQL est que tous les


SGBD l'utilisent dans leurs opérations internes

Pas tous les SGBD utilisent les GUI - dans certains cas, il
faut que le programmeur code les requêtes - il y a encore
beaucoups d'entreprises qui opèrent avec des SGBD plus
anciens ( La Cité collégiale, par exemple) ou la
connaissance du code SQL est requise

Pour tester nos commandes SQL nous allons passer par


MS-Access et la base de données "Gestion". Notez qu'il y
a quelques différences de syntaxe entre SQL Access et
SQL ANSI mais ce sont des différences mineures.

Pour créer une requête SQL en Access il s'agit tout


simplement de créer une requête normale en passant par
le mode SQL plutôt que par l'Assistant-requête. On crée
une nouvelle requête (il n'est pas nécessaire de spécifier
les tables utilisées) et on exécute le mode SQL:

[Link] (2 of 11)27/10/2004 13:23:11


Visual Basic

puis on entre la commande SQL appropriée et on l'exécute:

LES INSTRUCTIONS SQL

Le langage fonctionne avec une série d'instructions


restreinte : il n'y a qu'environ 30 instructions en SQL,
divisées en 4 catégories: Manipulation de la structure,
Manipulation des données, Interrogation, Contrôle
d'accès

Manipulation de la structure

On peut utiliser des commandes SQL pour créer les


tables, les modifier ou les enlever

Pour créer une nouvelle table:

CREATE TABLE nom_table (colonne1 type1,


colonne2 type2, ...)

Eg: CREATE TABLE employe (enumero string


(5) not null primary key, enom string(20),
esalaire single, edateemb date);

Les types de données communs sont les


mêmes qu'en VB, ou on peut utiliser ceux de
Access:

[Link] (3 of 11)27/10/2004 13:23:11


Visual Basic

INTEGER, LONG, SINGLE, DOUBLE, DATE,


STRING(n), BOOLEAN

Pour changer la structure d'une table (ajouter


une colonne, changer le type ou effacer une
colonne):

ALTER TABLE nom_table ADD colonne type,


colonne type, ... ;

Eg: ALTER TABLE employe ADD adresse string


(30);

ALTER TABLE employe ALTER


COLUMN salaire integer

ALTER TABLE employe DROP


COLUMN salaire

Pour effacer une table:

DROP TABLE nom_table

Eg: DROP TABLE employe;

La manipulation des données

Les commandes servent à manipuler les données - les


insérer, les changer ou les effacer dans les tables

Pour insérer des données dans une table:

INSERT INTO nom_table VALUES (valeur1,


valeur2, ...)

Eg: INSERT INTO competence VALUES


('A111', 'COBOL', 15);

Notez bien:Chaque Insert ajoute une nouvelle

[Link] (4 of 11)27/10/2004 13:23:11


Visual Basic

ligne à la table

Pour corriger les données (faire une mise à


jour):

UPDATE nom_table SET colonne1 = valeur1,


colonne2=valeur2
WHERE condition

Eg: UPDATE employe SET salaire=25000


WHERE numemp = 'A1111';

Eg: UPDATE employe SET salaire = salaire *


1.1
WHERE departement = 22;

Pour effacer des données:

DELETE FROM nom_table WHERE condition

Eg: DELETE FROM projets


WHERE p_datefin < date();

Les commandes d'interrogation

SELECT colonne1, colonne2, ... FROM nom_table


WHERE condition

* = toutes les colonnes

SELECT * FROM projets;

SELECT Numero_projet, Titre, Budget FROM


projets;

SELECT e_id, e_Nom FROM Employe ;

SELECT e_id AS "Numéro", e_Nom AS "Nom de

[Link] (5 of 11)27/10/2004 13:23:11


Visual Basic

famille"
FROM Employe ;

LA CLAUSE WHERE ...

OPÉRATEURS:

= > < >= <= <> ou !


= BETWEEN LIKE IN NOT

Supposons qu'il existe une table PRODUITS comme:

Produits

numprod
desc
prix
cout

EXEMPLES:

SELECT * FROM produits WHERE numprod =


"A1234";

SELECT numprod, description, prix FROM


produits WHERE prix > 50;

SELECT numprod, prix, (prix * 1.1) FROM


produits;

SELECT numprod, prix, cout, (prix -cout) AS


"Profit"

[Link] (6 of 11)27/10/2004 13:23:11


Visual Basic

FROM produits
WHERE numprod LIKE "A*";

SELECT numprod, description, prix FROM


produits
WHERE prix BETWEEN 50 AND 150;

SELECT numprod, description FROM produits


WHERE numprod LIKE "A*";

SELECT numprod, description FROM produits


WHERE numprod LIKE "A????";

* = chaîne de caractères

? = 1 caractère

SELECT numprod, description FROM produits


WHERE description LIKE "*10*";

SELECT numprod, description FROM produits


WHERE numprod IN ("A100", "A200", "B500",
"D800");

Le AND et OR s'utilisent comme dans tous les


autres langages:

SELECT * FROM produits


WHERE description LIKE "A*" AND prix > 500;

SELECT ... AVEC FONCTIONS


:

LES FONCTIONS:

+ - * /

COUNT MAX MIN AVG


SUM

EXEMPLES:

[Link] (7 of 11)27/10/2004 13:23:11


Visual Basic

SELECT MAX(prix) FROM produits; ' le plus


grand prix

SELECT COUNT(*) FROM produits; ' le


nombre de produits

SELECT COUNT(*) AS "Nombre avec gros


profit" FROM produits
WHERE (prix - cout) > 50;

SELECT AVG(prix) FROM produits; 'le prix


moyen

SELECT SUM(cout) FROM produits; ' la


somme des coûts

DISTINCT identifie tous ceux qui sont


différents

SELECT DISTINCT description FROM produits;

Pour savoir si le fichier contient des DESC


répétées:

SELECT COUNT(description) FROM produits;

SELECT COUNT(DISTINCT desc) FROM


produits;

LES FONCTIONS DE DATE:

Pour commencer à étudier les fonctions de


date, on va dans l'Aide et on cherche pour:
Date functions ou Fonctions: date et heure ou
Functions: date and time

les fonctions NOW( ) ou DATE( ) retourne la


date courante

[Link] (8 of 11)27/10/2004 13:23:11


Visual Basic

dans la commande SQL, une date spécifique


doit être identifiée par des #

en Access et SQL, votre fonction la plus utile


est DateDiff( )

DateDiff('intervale', #date1#, #date2#)


retourne le temps entre 2 dates, exprimé selon
l'intervale: en années, en mois, en heures, etc.

L'intervale s'écrit comme: 'd' pour jours, 'w'


pour semaines, 'm' pour mois et 'yyyy' pour
années

Exemples:

Datediff('d', #2000-01-01#, now


()) retourne le nombre de jours
entre le 1 janvier et maintenant

Datediff('m', p_datedebut,
p_datefin) retourne la durée du
projet, en mois

si le résultat affiche trop de chiffres


après le décimal, utilisez
la fonction ROUND(nombre,
chiffres) pour afficher
correctement:
ROUND(Datediff('m',
p_datedebut, p_datefin), 2)

en théorie, Datediff('yyyy',
e_datenaiss, now()) retourne
l'âge de l'employé, exprimé en
année
le problème est que le résultat est
arrondi vers le haut et le calcul n'est
pas exact

pour calculer l'âge exact utilisez la


formule suivante:

[Link] (9 of 11)27/10/2004 13:23:11


Visual Basic

INT(Datediff('d', e_datenaiss,
now())/365.25)
on calcule en jours et on divise par
le nombre exact de jours dans un an
la fonction INT( ) tronque le
résultat: 25.9 devient 25, par
exemple

dans une commande SQL on écrirait:


SELECT e_nom, e_datenaiss,
INT(Datediff('d', e_datenaiss,
now())/365.25) AS Age
FROM Employe;

ETABLIR LA SEQUENCE D'AFFICHAGE:

UTILISE LA CLAUSE ORDER BY ...

SELECT numprod, prix FROM produits


ORDER BY prix ;

ASC spécifie en ordre croissant

DESC spécifie en ordre décroissant

si pas spécifié, c'est ASC

SELECT * FROM clients


ORDER BY nom, prenom;

liste en ordre de nom d'abord,

en ordre de prenom à l'intérieur des noms


identiques

[Link] (10 of 11)27/10/2004 13:23:11


Visual Basic

Top

[Link] (11 of 11)27/10/2004 13:23:11


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 12

Langage SQL ... suite

Manipuler les données avec SQL


D'abord, créez une nouvelle base de données Access et
nommez-la [Link]. La base de données [Link]
contient les tables suivantes :

Etudiants Inscriptions Cours

Numetud Numetud Numcours

Nometud Numcours Titre

Sexe Dateinscr HeuresTheorie

Datenaiss Frais HeuresLab

Rue NoteFinale Secteur

Ville

[Link] (1 of 9)27/10/2004 13:23:40


Visual Basic

Prov

Programme

Nous utilisons une requête simple pour répondre à une


interrogation simple :

Tous les cours de Technologie ?

SELECT * FROM cours


WHERE secteur = 'Technologie' ;

Le nom et l'âge de tous les étudiants masculins ?

SELECT nometud,
INT(DATEDIFF('d', datenaiss, NOW
())/365.25) AS Age
FROM etudiants
WHERE sexe = 'M' ;

Tous les étudiants âgés de plus de 20 ans ?

SELECT numetud, nometud, datenaiss


FROM etudiants
WHERE INT(DATEDIFF('d', datenaiss, NOW
())/365.25) > 20 ;

JOINTURE

Pour répondre à une interrogation où il faut extraire des


champs de 2 tables, on utilise un JOIN (Jointure) ; par
définition, la jointure produit une multiplication des 2 tables ;
donc, si une table contient 10 enregistrements et l'autre en
contient 15, le produit de la jointure en contient 150.

Le numéro et le nom de l'étudiant, la date d'inscription et le

[Link] (2 of 9)27/10/2004 13:23:40


Visual Basic

numéro de cours et de tous les cours où l'étudiant '1234' est


inscrit ?

nometud est dans etudiants, dateinscr est dans


inscriptions, numcours est dans inscriptions et
NUMETUD est dans les deux; donc il faut faire un
SELECT dans deux tables:

SELECT numetud, nometud,


dateinscr, numcours
FROM etudiants, inscriptions ;

La première chose qu'on remarque c'est qu'on


obtient une erreur: "Ambiguous field reference
'numetud'"
En effet, la colonne NUMETUD fait partie des deux
tables et l'interpreteur ne sait pas laquelle utiliser.

En SQL lorsq'une référence est ambigüe, il faut


donner le nom complet de la colonne et ceci veut
dire d'y ajouter le nom de table devant comme:
[Link] ou [Link]

Mais puisqu'on se fatigue vite d'écrire les noms au


complet, il est de mise d'assigner à chaque table
un surnom, un alias qui facilite l'écriture; on
nomme l'alias dans le FROM:

SELECT [Link], nometud,


dateinscr, numcours
FROM etudiants et, inscriptions ins

Mais on n'a pas fini; si on exécute ce SELECT avec


3000 étudiants et 3000 inscriptions, SQL nous
retourne 9,000,000 de réponses!
Le truc dans un JOIN est de spécifier qu'on veut
seulement ceux qui ont une colonne commune:

SELECT [Link], nometud,


dateinscr, numcours
FROM etudiants et, inscriptions ins
WHERE [Link] = [Link]

La condition [Link] = [Link]


identifie la relation entre les 2 tables.

[Link] (3 of 9)27/10/2004 13:23:40


Visual Basic

Et ce n'est pas tout; le SELECT précédent me


donnera la liste de tous les cours suivis par tous
les étudiants; même si chaque étudiant ne suit
qu'un cours, le résultat contiendra 3000 lignes; je
voulais seulement les cours suivis par l'étudiant
'1234' donc je dois finir la condition:

SELECT [Link], nometud,


dateinscr, numcours
FROM etudiants et, inscriptions ins
WHERE [Link] = [Link]
AND [Link] = '1234';

En résumé: La première condition à inclure après le WHERE


dans la requête est la condition qui spécifie la clé commune
dans les 2 tables.

Autres exemples:

Le numéro d'étudiant, le numéro de cours, le titre et les frais


de tous les cours suivis en Commerce ?

SELECT numetud, [Link], titre, frais


FROM inscriptions INS, cours CO
WHERE [Link] = [Link]
AND secteur = ''Commerce'' ;

Le nom et le programme de tous les étudiants qui payent des


frais de plus que 100$?

SELECT nometud, programme


FROM etudiants X, inscriptions Y
WHERE [Link] = [Link]
AND frais > 100;

Si les colonnes doivent être tirées de 3 tables, il faudra qu'il


y aie 2 relations entre les colonnes communes:

Le nom de tous les étudiants et le titre ainsi que les frais de

[Link] (4 of 9)27/10/2004 13:23:40


Visual Basic

tous les cours auxquels ils sont inscrits ?

SELECT nometud, titre, frais


FROM etudiants ET, inscriptions INS, cours CO
WHERE [Link] = [Link]
AND [Link] = [Link] ;

Le titre ainsi que les frais de tous les cours de 'Jean Smith'?

SELECT nometud, titre, frais


FROM etudiants ET, inscriptions INS, cours CO
WHERE [Link] = [Link]
AND [Link] = [Link]
AND nometud = 'Jean Smith';

REQUÊTES EMBOITÉES

Tous les étudiants qui habitent la même ville que l'étudiant


'1234' ?

SELECT * FROM etudiants


WHERE ville = (la ville où habite '1234') ? ? ?

On pourrait le faire en deux étapes :

SELECT ville FROM etudiants


WHERE numetud = '1234' ;

noter le résultat et, en supposant que c'est GLOUCESTER,

SELECT * FROM etudiants


WHERE ville = 'GLOUCESTER' ;

Mais, dans un programme, où tout doit être automatique, ceci

[Link] (5 of 9)27/10/2004 13:23:40


Visual Basic

n'est pas du tout pratique

Cependant, SQL nous permet de faire la même chose avec


une requête emboitée, c'est à dire, une requête à l'intérieur
d'une requête

SELECT * FROM etudiants


WHERE ville = (SELECT ville FROM etudiants
WHERE numetud = '1234') ;

La sous-requête doit être entre ( ); lors de l'exécution c'est


d'abord la sous-requête qui est évaluée et ensuite, la valeur
retournée est utilisée dans la requête principale

Notez que la sous-requête doit retourner une valeur qui


correspond à ce que la requête veut ; par exemple :

SELECT * .... dans la sous-requête n'a pas de sens car la


condition devient :

... WHERE ville = numero, nom, sexe, datenaiss, etc.

N.B. On utilise une requête emboitée lorsqu'il faut


extraire des données en les comparant à une autre
donnée de la même table :

Quels sont les cours dans le même secteur que le cours


'13639' ?

SELECT numcours, TITRE, secteur FROM


cours
WHERE secteur = (SELECT secteur FROM
cours
WHERE numcours = '13639')
ORDER BY numcours ASC ;

Quels étudiants sont plus vieux que Jean Smith ?

SELECT numetud, nometud, datenaiss, (years


(datenaiss, today()) AS age
FROM etudiants WHERE datenaiss <

[Link] (6 of 9)27/10/2004 13:23:40


Visual Basic

(SELECT datenaiss FROM etudiants


WHERE nometud = 'Jean Smith')
ORDER BY age ;

On peut aussi s'en servir avec les fonctions statistiques:

Quel cours a le plus grand nombre d'heures de théorie?

SELECT numcours, titre, heurestheorie FROM


cours
WHERE heurestheorie = (SELECT MAX
(heurestheorie) FROM cours

Quels cours ont plus d'heures de lab que la moyenne?

SELECT numcours, titre, heureslab FROM


cours
WHERE heureslab > (SELECT AVG
(heureslab) FROM cours)

LA REQUÊTE UNION

- Requête UNION utilisée lorsqu'il faut combiner des champs


similaires de 2 tables qui n'ont pas de liens entre elles

Eg: Montrer la date de naissance de tous les


étudiants et de tous les profs, dans une seule
requête:

SELECT Nometud, Datenaiss FROM


Etudiants
UNION
SELECT NomProf, DateNaissProf
FROM Profs;

La requête UNION produit une liste de tous les

[Link] (7 of 9)27/10/2004 13:23:40


Visual Basic

enregistrements de la première table avec les


enregistrements de la deuxième table

Les champs demandés dans les deux tables doivent être du


même type mais, pas nécéssairement de la même taille

Le nom affiché par la requête sera celui de la première table:


les colonnes seraient Nometud et Datenaiss; si on veut des
noms génériques, on peut utiliser la clause AS

SELECT Nometud AS Nom, Datenaiss AS


Anniversaire FROM Etudiants
UNION
SELECT NomProf, DateNaissProf FROM Profs;

La technique peut aussi être utilisée lorsqu'on veut produire


une liste et des totaux dans la même requête:

SELECT Str(Numcours) AS Cours, Titre,


HeuresTheorie AS Theorie, HeuresLab AS
Laboratoire
FROM Cours
UNION
SELECT 'Total', ' ', SUM(HeuresTheorie), SUM
(HeuresLab)
FROM Cours

Points à remarquer au sujet de l'exemple


précédent:

● On peut afficher des constantes dans un


SELECT, par exemple, 'Total' et ' '

● Les deux SELECT doivent afficher le même


nombre de colonnes, c'est pourquoi on
affiche un espace dans la ligne Total

● le data type des colonnes doit être le même


dans les deux SELECT; puisque Numcours
est défini comme Integer dans la table, il
faut le convertir à un type String pour
pouvoir l'afficher dans la même colonne que

[Link] (8 of 9)27/10/2004 13:23:40


Visual Basic

le string 'Total'; la fonction STR( ) sert à


convertir un champ de type numérique à
type caractères

Top

[Link] (9 of 9)27/10/2004 13:23:40


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 13

VB avec une base de données

L'application "BookStor"
Dans ce premier exercice nous allons nous rattacher à une base de données en Access.
Puisque VB et Access sont de proches parents, cette connection est la plus simple possible.

Plus tard, nous utiliserons d'autres techniques pour communiquer avec une bd en MySQL.

Pour ces exemples nous utilisons la base de données "[Link]". Vous pouvez la
récupérer en cliquant sur le lien: BookStor.

Notre application devra pouvoir faire toutes les tâches de maintenance et de transactions
requises. On crée un Form pour chaque table fondamentale dans l'application. Et puisqu'on
se retrouvera avec plusieurs Forms il faudra naviguer d'une façon organisée à travers ces
Forms. La meilleure technique pour accomplir cela est d'utiliser un Menu d'application
pour activer les différents Forms au besoin.

Le Data Control

Le data control est l'objet qui relie un Form et une base de données. Pour avoir accès à
"[Link]" pour faire la maintenance sur les tables on crée un nouveau Form qu'on
appelle "Authors" et le premier control qu'on y place est le "Data control". Puis on spécifie
les propriétés "Data" du control:
Connect = sorte de base de données - normallement Access 2000
DatabaseName = le nom de la bd qu'on attache
RecordSource = le nom de la table qu'on utilise

[Link] (1 of 7)27/10/2004 13:24:06


Visual Basic

Les controls liés

Après le Data control on place des controls pour afficher les champs de la table. Pour
chacun de ces controls on doit décrire les propriétés: DataSource et DataField qui
spécifient de passer par le Data control pour accéder au champ qu'on veut manipuler.

[Link] (2 of 7)27/10/2004 13:24:06


Visual Basic

Tout changement que l'on fait sur un control lié est automatiquement éffectué dans la
table dès que l'on quitte l'enregistrement. Dans certains cas cependant on peut vouloir
écrire du code pour traiter les changements.

Pour Ajouter un enregistrement à la table, il y a deux méthodes:

● dans le DataControl datAuthors, mettre la propriété EOFAction = 2


Ceci fait en sorte que quand on fait "Suivant" après "Dernier", un nouvel
enregistrement est généré.

● créer un bouton "Ajouter" qui exécute la commande:

[Link]

Ceci a l'avantage que l'enregistrement est inséré dans le recordset à l'endroit où on


fait le Addnew.

La commande Update réécrit l'enregistrement sans le quitter.


Update doit être précédé d'un AddNew ou d'un Edit.
On peut coder le bouton Update comme:

[Link] (3 of 7)27/10/2004 13:24:06


Visual Basic

[Link]
[Link]

Pour Effacer il est préférable d'utiliser un bouton codé comme:

[Link]
[Link]

Il se peut dans certains cas qu'on doive annuler les changements faits sur les controls - on
veut donc Rétablir les controls à leur valeur initiale. On crée un bouton codé comme:

[Link]

Dans le Form illustré, on a aussi ajouté un bouton pour Fermer. Il devra exécuter un
Unload afin de fermer le Form courant et retourner au Menu.

[Link] (4 of 7)27/10/2004 13:24:06


Visual Basic

On peut aussi ajouter les boutons de navigation. Le code pour naviguer utilise le
MoveFirst, MovePrevious, MoveNext et MoveLast. Avec les boutons codés, on peut
cacher le Data Control.

Le bouton Imprimer nous permet d'envoyer à l'imprimante une copie du Form. C'est très
élémentaire comme rapport mais, ça nous permet de produire un "hard copy" facilement.
Le code pour imprimer consiste d'exécuter la méthode PrintForm. La syntaxe est:

[Link]

Si "form" n'est pas spécifié, elle imprime le form actuel.

Pour exécuter l'application, il faudra créer un Menu d'application:

[Link] (5 of 7)27/10/2004 13:24:06


Visual Basic

[Link] (6 of 7)27/10/2004 13:24:06


Visual Basic

Top

[Link] (7 of 7)27/10/2004 13:24:06


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 14

VB avec une base de données ... suite

La portabilité de l'application
Pour pouvoir exécuter l'application, il faut avoir accès à la base de données.

Si le path de la b.d. est spécifié dans les propriétés on peut seulement l'appeler du même
répertoire que celui où elle a été créée.

En mettant le path dans le code l'application est portable.

Private Sub Form_Load()


[Link] = [Link] & "\[Link]"
[Link] = "authors"
End Sub

Trouver un enregistrement spécifique


On peut chercher seulement sur un champ à la fois.

Il faudra créer un nouveau TextBox pour saisir le critère de recherche. On met le TextBox de
critère comme TabIndex = 0. La recherche sera activée par le LostFocus du Textbox. Si on ne fait
pas de recherche (le critère est vide) la fonction ne fait rien.

[Link] (1 of 8)27/10/2004 13:24:32


Visual Basic

La syntaxe du Find est un peu difficile - il faut surveiller la ponctuation:

[Link] "fieldname = 'searchstring'"

C'est pourquoi c'est préférable de construire le 'searchstring', comme dans le code suivant:

Private Sub txtTrouver_LostFocus()


Dim strNom As String
strNom = Trim([Link]) & "*"
strNom = "au_Lname like '" & strNom & "'"
If [Link] <> "" Then
[Link] strNom
End If
End Sub

Utiliser plusieurs tables dans un Form


Pour utiliser plusieurs tables dans un même Form il faut créer plusieurs DataControls.

Chaque Data control est rattaché à une seule table.

Prenons le form "BookAuthor", par exemple:

[Link] (2 of 8)27/10/2004 13:24:32


Visual Basic

Les deux nouveaux controls sont: DBList et DBCombo. Ils fonctionnent comme le List et le
Combo normal mais, ils peuvent être rattacher à une table, ce que les autres ne peuvent pas faire.

[Link] (3 of 8)27/10/2004 13:24:32


Visual Basic

Il faut rattacher chacun des data controls à la table appropriée.

Notez que dans une base Access, une requête est traitée exactemment comme une table. Un data

[Link] (4 of 8)27/10/2004 13:24:32


Visual Basic

control peut être rattaché à une Requête.

Pour afficher la liste des auteurs dans le DBList, il faut spécifier les propriétés: List

Les propriétés Data servent à spécifier où l'information saisie sera stockée.

[Link] (5 of 8)27/10/2004 13:24:32


Visual Basic

Quiz: Comment pourriez-vous obtenir le résultat suivant dans le DBList pour Authors:

[Link] (6 of 8)27/10/2004 13:24:32


Visual Basic

Voici la version finale du Form Contrats avec quelques fonctions utiles ajoutées.

Private Sub Form_Load()


[Link] = [Link] & "\[Link]"
[Link] = "bookauthor"

[Link] = [Link] & "\[Link]"


' [Link] = "authornames"
'J'ai créé une Requête Access pour concaténation Prénom & Nom
' ou je crée ma requête en code SQL
[Link] = "SELECT au_id, au_fname & ' ' & au_lname AS name," _
& " au_city, au_salary, au_subject FROM authors"

[Link] = [Link] & "\[Link]"


[Link] = "books"

[Link]
[Link] ' Ceci va aller chercher le RecordCount (nombre de
lignes) dans le recordset
[Link] ' et ensuite revenir au début
End Sub

[Link] (7 of 8)27/10/2004 13:24:32


Visual Basic

Private Sub cmdFermer_Click()


Unload Me
End Sub

Private Sub cmdAjouter_Click()


[Link]
End Sub

Private Sub cmdUpdate_Click()


[Link]
[Link]
End Sub

Private Sub cmdEffacer_Click()


[Link]
[Link]
End Sub

Private Sub cmdRetablir_Click()


[Link]
End Sub

Private Sub cmdImprimer_Click()


[Link]
End Sub

'Je veux afficher le RecordCount et le pointeur actuel dans le Data Control.


Private Sub datBA_Reposition()
[Link] = [Link]
[Link] = "Record: " & Str$([Link] + 1) _
& " of " & Str$([Link])
End Sub

Private Sub DBList1_Click()


[Link] = [Link]
End Sub

Top

[Link] (8 of 8)27/10/2004 13:24:32


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 15

VisData pour créer une application

Utiliser le Form Designer

[Link] (1 of 8)27/10/2004 13:25:05


Visual Basic

[Link] (2 of 8)27/10/2004 13:25:05


Visual Basic

[Link] (3 of 8)27/10/2004 13:25:05


Visual Basic

Résultat final:

[Link] (4 of 8)27/10/2004 13:25:05


Visual Basic

[Link] (5 of 8)27/10/2004 13:25:05


Visual Basic

[Link] (6 of 8)27/10/2004 13:25:05


Visual Basic

[Link] (7 of 8)27/10/2004 13:25:05


Visual Basic

Top

[Link] (8 of 8)27/10/2004 13:25:05


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Notes de cours 16

Impression de rapports

Crystal Reports
L'impression de rapport est une des fonctions essentielle de presque toutes les applications

Il y a plusieurs façons de s'y prendre.

La plus simple est d'utiliser un Add-in appellé Seagate Crystal Reports. Celui-ci est disponible dans toutes les
versions de VB.

Pour l'activer, on regarde dans Programmes --> Outils de programmation --> Seagate Crystal Reports 6.0

Choisir le type de rapport.

[Link] (1 of 13)27/10/2004 13:25:33


Visual Basic

Établir la connexion à la base de données qu'on veut utiliser pour produire ce rapport.

[Link] (2 of 13)27/10/2004 13:25:33


Visual Basic

Choisir les tables qu'on veut utiliser.

[Link] (3 of 13)27/10/2004 13:25:33


Visual Basic

Vérifier que les relations entre tables sont bonnes.

Si les relations n'ont pas été établies dans la bd, on le fait içi.

[Link] (4 of 13)27/10/2004 13:25:33


Visual Basic

On choisi les champs, dans l'ordre qu'on veut les voir sur le rapport.

Le Column Heading est le titre qui sera imprimé pour chaque colonne. On le corrige içi.

[Link] (5 of 13)27/10/2004 13:25:33


Visual Basic

On fait la finition.

On peut ajouter une image au besoin.

On donne le titre qui sera imprimé.

On fini avec Preview report.

[Link] (6 of 13)27/10/2004 13:25:33


Visual Basic

Le preview nous donne un aperçu du rapport.

Comme on peut voir, il manque des marges, certaines colonnes sont trop larges et d'autres sont
trop étroites, etc.

Il faudra aller en mode Design pour corriger la mise en page.

[Link] (7 of 13)27/10/2004 13:25:33


Visual Basic

En mode Design on corrige l'apparence de notre rapport.

[Link] (8 of 13)27/10/2004 13:25:33


Visual Basic

Le rapport est sauvegardé dans le dossier de l'application avec l'extension .rpt.

[Link] (9 of 13)27/10/2004 13:25:33


Visual Basic

On peut maintenant fermer Crystal report et revenir à notre form dans l'application VB.

Pour pouvoir visionner le rapport on doit ajouter un nouveau contrôle de Project --> Components.

Il s'agit d'un Crystal Report Control.

[Link] (10 of 13)27/10/2004 13:25:33


Visual Basic

Dans le form, on crée un Crystal Report control. Dans sa propriété ReportFileName on spécifie le
nom d'un fichier .rpt

Pour activer le control, on crée un bouton qui contient le code:

[Link]

[Link] (11 of 13)27/10/2004 13:25:33


Visual Basic

[Link] (12 of 13)27/10/2004 13:25:33


Visual Basic

Top

[Link] (13 of 13)27/10/2004 13:25:33


Visual Basic

DÉVELOPPEMENT D'APPLICATIONS

VISUAL BASIC

Précédente Contenu Suivante

Révision des concepts de bases de données

dbList et dbCombo
La technique pour utiliser les contrôles liés - "bound controls" est une des plus difficiles que
nous avons étudié dans le cours.

Utilisons l'application Gestion comme exemple.

Dans cette application je désire faire la maintenance de la table Employes au moyen d'un form.
Que ce soit un form que je crée ou un form fait en utilisant le Visual Data Manager, la technique
est la même.

Ce form affichera toutes les colonnes de la table dans des Textbox ordinaires.

La table contient un champ pour le Numéro de département de l'employé. Je pourrais afficher


ce champ dans un Textbox et entrer un numéro quand je voudrai spécifier dans quel département
l'employé travaille.

Mais, je décide qu'au lieu d'entrer un numéro je veux choisir le nom du département dans une
liste.

Pour faire cela je doit aller chercher la liste des noms de départements dans la table
Departements et l'afficher dans un ListBox ou un ComboBox.

Dans le form je vais donc avoir deux tables. Puisque j'ai accès à deux tables, il me faut deux
Data Controls.

Et puis, le ComboBox ordinaire ne fonctionne pas dans cette situation. Il faut que je prenne le
Data bound List Control que je trouverai dans Project --> Components. (Voir Notes de cours
14).

Je crée un form pour Employés en utilisant le Form Designer.

[Link] (1 of 6)27/10/2004 13:25:57


Visual Basic

Je modifie le form pour afficher le département dans un combo plutôt qu'un textbox.

[Link] (2 of 6)27/10/2004 13:25:57


Visual Basic

Ceci est le résultat du form que je viens de créer.

[Link] (3 of 6)27/10/2004 13:25:57


Visual Basic

Modifier le RecordSource
Chaque Data Control dans un form a une propriété DataBaseName et une propriété
RecordSource.

Le DataBaseName, évidemment, est le nom de la base de données qui contient l'information.

Le RecordSource est habituellement le nom d'une table de la base de données.

Le RecordSource est la source des données. Les données sont lues et placées en mémoire dans un
objet qui s'appelle un RecordSet. Le RecordSet est en fait un buffer en mémoire qui est entre le
form et la table. Quand on fait un Load, l'information est lue de la table et gardée dans le
RecordSet. Quand on fait un Next ou un Previous, on navigue dans le RecordSet. La commande
Update transfert l'information du RecordSet à la table.

Le RecordSet peut aussi contenir l'information de plus qu'une table.

Pour obtenir ce qu'on veut dans le RecordSet, il faut modifier le RecordSource.

On peut mettre dans le RecordSource n'importe quelle commande SQL.

Par exemple, si je veux afficher un form pour Timesheet mais je veux montrer le nom de
l'employé et le titre du projet au lieu des numéros, je ferais ceci:

Je décrit le DataBaseName et Le RecordSource dans le code.

La commande SQL peut contenir toutes les conditions nécessaires, incluant un


Where ... pour sélectionner les données.

[Link] (4 of 6)27/10/2004 13:25:57


Visual Basic

Il faut surveiller la ponctuation. Toute la commande Select doit être à l'intérieur de


" ". En utilisant le caractère de continuation, il faut faire une concaténation de la
commande.

Je crée des TextBox pour afficher les données.

Il faut que chaque textbox soit lié à un champ du recordsource.

[Link] (5 of 6)27/10/2004 13:25:57


Visual Basic

Ceci est le résultat du form que je viens de créer.

Top

[Link] (6 of 6)27/10/2004 13:25:57

Vous aimerez peut-être aussi