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