Académique Documents
Professionnel Documents
Culture Documents
Support VB 6
Support VB 6
Microsoft
Visual Basic 6
Denis Szalkowski - Tous droits
rservs
7. Le client ser
servveur a
avvec SQL Ser
Servver
7.1
Hist
orique des mthodes de conne
xion
Historique
connexion
Clientser
servveur
Utiliser le composant A
do
Ado
ODBC
Denis
Szalkowski
Tous droits
rservs
Visual Basic
7.2
tous les utilisateurs).
DSN
Data
Denis ol
Contr
Control
Szalkowski
Tous droits
rservs
Cont
enu du ffic
ic
hier UDL
Contenu
ichier
[oledb]
7. Le client ser
servveur a
avvec SQL Ser
Servver
7.3
Par le code
Connexion en mode SQLOLEDB en dfinissant les proprits de connexion
Dclaration
Dim cn As New
Fournisseur
cn.Provider =
des variables
ADODB.Connection
OLE-DB.
sqloledb
L'e
L'exxemple
cn.Properties(User ID).Value = sa
cn.Properties(Password).Value =
End If
Ouverture de la base
cn.Open
Connexion en mode SQLOLEDB par un chane de connexion
Denis
Szalkowski
Tous droits
rservs
Visual Basic
7.4
Dim provStr As String
Fournisseur OLE-DB.
cn.Provider = sqloledb
Ouverture de la connexion
ProvStr =
Server=MyServer;Database=northwind;Trusted_Connection=yes
cn.Open provStr
Utilisation de MSDASQL (via un DSN ODBC)
DataGrid
DataList
Cr
ystalR
epor
CrystalR
ystalRepor
eportt
Denis
Szalkowski
Tous droits
rservs
cn.ConnectionTimeout = 100
Le DSN Suppose la cration pralable dune connexion ODBC
7. Le client ser
servveur a
avvec SQL Ser
Servver
cn.Close
Utilisation de MSDASQL (via ODBC sans DSN)
cn.Close
Denis
Szalkowski
Tous droits
rservs
7.5
Visual Basic
7.6
d'un requte sous la forme d'un ordre SQL SELECT en lecture-criture ou lecture
seule. A partir de la bote outils, slectionnez l'outil Data
Maniement
du
Recordse
ecordsett
et dessinez une
7. Le client ser
servveur a
avvec SQL Ser
Servver
7.7
Pour le Data Control prcdent, vous aurez besoin de trois champs de type Text.
Pour chaque zone de texte, aprs les avoir nommes (Name), modifiez tout d'abord
la proprit DataSource en slectionnant le Data Control , Data_AUTEURS. Puis,
choisissez le champ que vous voulez afficher dans la zone de texte par la proprit
DataField.
Pour la Data Control :
Connect = "odbc;dsn=biblio;"
DatabaseName = ""
DefaultCursorType = 1 'ODBCCursor
DefaultType = 1 'UseODBC
RecordsetType = 1 'Dynaset
RecordSource = "SELECT * FROM Authors"
Utilisation du Cr
ystal R
epor
Crystal
Repor
eportt
Denis
Szalkowski
Tous droits
rservs
De tous les contrles, Crystal Report est sans doute l'un des plus compliqu utiliser.
Il vous permet de faire du reporting : des tats sur la base de donnes.
Pour crer un tat, allez dans Complments | Crateurs d'tats. En premier
lieu, vous devez choisir votre source de donnes.
Par la suite, vous devez dterminer les tables partir desquelles vous souhaitez
concevoir votre tat.
Il peut s'agir d'une requte, comme dans l'exemple ci-dessous.
Vous pouvez modifier la nature de la jointure : quijointure ou jointure externe. Faites
un double clic sur le connecteur qui relie les tables pour accder l'cran suivant.
La dernire tape gnre l'aperu de l'tat. Vous pouvez maintenant l'diter. Ainsi
pour changer les noms des champs, faites un clic droit et choisissez Editer le
champ texte. Une fois l'tat fini, sauvegardez le. L'extension du fichier est de type
RPT.
Pour utiliser le composant dans votre feuille, dessinez un bouton l'aide de l'outil
Crystal Report. Les proprits renseigner sont le DataSource correspondant au
DataControl et le ReportFileName Correspondant au fichier RPT.
Pour lancer l'tat, crez un bouton auquel vous associez le code vnementiel suivant
Visual Basic
7.8
:
Private Sub Command_ETAT()
CrystalReport_PUB.SQLQuery = DATA_NEW
CrystalReport_PUB.Destination = crptToWindow
CrystalReport_PUB.Action = 1
End Sub
Un
langage
SQL
pr
opritaire
propritaire
Denis
Szalkowski
Tous droits
rservs
Pour la mise jour, le code est identique ceci prs que vous devez employer la
mthode Edit. Edit ncessite l'emploi de la commande UpDate.
Enfin pour la suppression, employez la mthode Delete. Vous n'avez pas besoin
d'utiliser la commande Update?
Les dplacements
Vous pouvez utiliser les mthodes MoveFirst, MoveLast, MovePrevious, MoveNext.
Pour cela, vous devez tester lenregistrement en cours.
Private Sub Command_FIN_Click()
Data1.Recordset.MoveLast
End Sub
Private Sub Command_PREC_Click()
If Not Data1.Recordset.BOF Then
Data1.Recordset.MovePrevious
Else
Data1.Recordset.MoveLast
End If
End Sub
Private Sub Command_PREMIER_Click()
Data1.Recordset.MoveFirst
End Sub
Private Sub Command_SUIV_Click()
If Not Data1.Recordset.EOF Then
Data1.Recordset.MoveNext
Else
Data1.Recordset.MoveFirst
End If
End Sub
La mthode Find
Pour rechercher des enregistrements, vous pouvez utiliser les mthodes suivantes :
7. Le client ser
servveur a
avvec SQL Ser
Servver
7.9
La mthode Seek
Cette mthode s'appuie sur le choix pralable d'un index avec la proprit Index.
Dim Table_REVUE As RecordSet
Set Table_REVUE=Data1.RecordSet
Table_REVUE.Index="REVUE"
Utilisation
de INNER
JOIN
Les signe
ts
signets
Vous pouvez mmoriser lenregistrement sur lequel vous vous situez laide de la
proprit BookMark.
Pour mmoriser la position du pointeur, inspirez-vous du code suivant :
Dim MARQUE_PAGE As Variant
MARQUE_PAGE=Data1.RecordSet.BookMark
Data1.Recordset.MoveLast
Data1.Recorset.BookMark=MARQUE_PAGE
Les transactions
Les contrles Data fonctionnement dans un mode de transaction en validation
automatique. Vous devez dclarer lobjet correspondant votre jeu denregistrements
ainsi que lespace de travail dans lequel vous voluez. La mthode BeginTrans
initie les transactions jusqu ce quelles soient valides par CommitTrans ou
annules par RollBack.
Dim TABLE_REVUE As RecordSet, SESSION As WorkSpace
Set SESSION=WorkSpace(0)
Set TABLE_REVUE=Data1.RecordSet
SESSION.BeginTrans
.
SESSION.CommitTrans
.
SESSION.Rollback
Denis
Szalkowski
Tous droits
rservs
La mthode Refresh permet de mettre jour les proprits du contrle Data. Cest
fort utile lorsque vous utilisez des instructions SQL par exemple.
La commande UpDateRecord met jour le jeu denregistrements avec les
donnes saisies dans les contrles dpendants.
La commande UpdateControls provoque leffet inverse linstruction prcdente.
Visual Basic
7.10
Le SQL (le langage de manipulation de donnes) interne Visual Basic n'est pas
standard. Toutes les instructions qui suivent peuvent tre utilises au niveau de la
proprit RecordSource de votre contrle Data.
SELECT
L'ordre SELECT permet de retourner un jeu d'enregistrement.
SELECT [predicate] { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2]
[, ...]]}
FROM tableexpression [, ...]
[IN externaldatabase]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]
predicate
*
table
field1, field2
alias1, alias2
UPD
ATE
UPDA
DELETE
tableexpression
externaldatabase
Denis
Szalkowski
Tous droits
rservs
7. Le client ser
servveur a
avvec SQL Ser
Servver
7.11
L'oprat
eur INNER JOIN
L'oprateur
BeginT
rans
BeginTrans
CommitT
rans
CommitTrans
RollBac
k
ollBack
Cet oprateur permet d'tablir entre une n tables lorsqu partir d'un champ
commun, ce dernier contient des valeurs identiques. On parle d'quijointure. Cet
oprateur s'emploie derrire l'instruction FROM. Si vous employez les oprateurs LEFT
JOIN ou RIGHT JOIN, vous demandez obtenir tous les enregistrements de la table
mentionne au niveau du membre gauche de la jointure.
FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2
Vous pouvez employer comme oprateur de comparaison relationnelle "=", "<", ">",
"<=", ">=", ou "<>".
Denis
Szalkowski
Tous droits
rservs
DELETE
Visual Basic
7.12
L'odre DELETE permet de supprimer le contenu de champs dans une table partir de
critres logiques. On l'emploie pour dtruire un ensemble d'enregistrements.
DELETE [table.*]
FROM table
WHERE criteria
UPD
ATE
UPDA
L'instruction UPDATE vous autorise mettre jour une collection d'enregistrement selon
une expression soumise critres.
UPDATE table
SET newvalue
WHERE criteria;
Denis
Szalkowski
Tous droits
rservs
7. Le client ser
servveur a
avvec SQL Ser
Servver
7.13
INSERT INT
O
INTO
Cette instruction permet d'ajouter un ou plusieurs enregistrements une table.
Pour ajouter plusieurs enregistrements :
INSERT INTO target [IN externaldatabase] [(field1[, field2[, ...]])]
SELECT [source.]field1[, field2[, ...]
FROM tableexpression
Si, lors d'une opration d'ajout, vous ne prcisez pas tous les champs, la valeur par
dfaut ou Null sinsre la place des colonnes manquantes.
Vous pouvez aussi utiliser INSERT INTO pour ajouter une srie denregistrements depuis
une autre table ou requte, conjointement la clause SELECT ... FROM comme dcrit
plus haut dans la syntaxe de requte Ajout avec plusieurs enregistrements. Dans ce cas,
la clause SELECT mentionne les champs ajouter la table target spcifie.
SELECT INT
O
INTO
Cette instruction SQL permet la cration d'un table.
SELECT field1[, field2[, ...]] INTO newtable
[IN externaldatabase]
FROM source
Remar
ques sur les instructions UPD
ATE e
emarques
UPDA
ett DELETE.
Elle ncessite du code... Rien que du code ! Avec mme... quelques surprises ! Les bases
de donnes de type Access exigent un mode d'ouverture de type Jet et non ODBC !
Private Sub Command_MAJ_Click()
Dim dbs As Database
Set dbs = OpenDatabase("E:\samples\cinq\Biblio97.mdb")
dbs.Execute "UPDATE Titles " _
& "SET [Year Published] = " & CInt(Text_NEW.Text) _
& " WHERE [Year Published] = " & CInt(DBCombo_ANNEES.Text)
dbs.Close
Data_ANNEES.Refresh
End Sub
Les transactions
Un espace de travail dfinit un environnement dans lequel vous pouvez valider ou
invalider des modifications apportes vos donnes : mises jour, ajout et suppression.
Aprs avoir dclar une variable de type WorkSpace au niveau d'un module ou d'un
module de feuille, initialisez cette variable l'aide de l'instruction Set.
L'espace transactionnel est dfini par la mthode BeginTrans. Pour valider les
modifications apportes, utilisez la mthode CommitTrans. Pour invalider, employez
RollBack. Toute sortie intempestive du programme quivaut un RollBack.
Une e
ys de l'application NWind.mdb
exxemple : utilisation de la table Emplo
Employs
Denis
Szalkowski
Tous droits
rservs
Aprs avoir ajout le composant Microsoft Data Bound Grid, dessinez un Data
Control et DBGrid Control. Aprs avoir dfini les proprits Connect,
DataBaseName et RecordSource du Data Control, dfinissez les proprits
DataSource du DBGrid. Par un clic droit, extrayez les champs de la table par
Extraire les zones.
Visual Basic
7.14
Le code associ
Option Explicit
'
'Dfinit une variable de type environnement
'
Dim wrkCourant As Workspace
'
'Cration de l'espace de travail
'
Private Sub Form_Initialize()
Set wrkCourant = DBEngine.Workspaces(0)
End Sub
'
'Dmarrage de l'espace transactionnel
'
Private Sub Form_Activate()
wrkCourant.BeginTrans
End Sub
'
'Validation effective des modifications
'
Private Sub Command_COMMIT_Click()
wrkCourant.CommitTrans
Data_EMP.Refresh
wrkCourant.BeginTrans
End Sub
'
'Invalidaton des modifications
'
Private Sub Command_ROLLBACK_Click()
wrkCourant.Rollback
Data_EMP.Refresh
wrkCourant.BeginTrans
End Sub
'
'Fermeture de l'environnement
'
Private Sub Form_Unload(Cancel As Integer)
wrkCourant.Close
Set wrkCourant = Nothing
End Sub
Denis
Szalkowski
Tous droits
rservs
7. Le client ser
servveur a
avvec SQL Ser
Servver
7.15
Anne
euilles
Annexxe : le code associ aux ffeuilles
Le code associ au fformulaire
ormulaire de saisie
Private Sub Check_NAISSANCE_Click()
If Check_NAISSANCE.Value Then
Data_AUTEURS.RecordSource = SELECT * FROM Authors WHERE [Year
Born] Is Not Null
Else
Data_AUTEURS.RecordSource = SELECT * FROM Authors
End If
Data_AUTEURS.Refresh
End Sub
Private Sub Command_COMPTE_Click()
Data_COMPTE.RecordSource = SELECT COUNT(Au_ID) As Total FROM Authors
Data_COMPTE.Refresh
MsgBox Data_COMPTE.Recordset.Fields(Total)
End Sub
La requt
e sur le fformulaire
ormulaire "DataGrid"
requte
SELECT Titles.Title,Authors.Author,Publishers.Name
FROM
(Publishers INNER JOIN Titles ON Publishers.PubID=Titles.PubID)
INNER JOIN
([Title Author] INNER JOIN Authors ON [Title Author].Au_ID=Authors.Au_ID)
ON Titles.ISBN=[Title Author].ISBN
Denis
Szalkowski
Tous droits
rservs
6. A
ctiv
eX
Activ
ctiveX
6.1
Prsentation de la ttec
ec
hnologie A
ctiv
eX
echnologie
Activ
ctiveX
Tec
hnologie
echnologie
Activ
eX
ctiveX
La pr
ogrammation orient obje
programmation
objett sous VB
Pr
oper
ty
Proper
operty
Ge
Gett
Le
Lett
Ajout
er un module de classe
Ajouter
A partir de l'explorateur de projets, par un clic droit, ajoutez un module de classe.
Les fichiers de ce type ont pour suffixe le type CLS.
Option Explicit
Private Var_TEXTE As String
TEXTE = Var_TEXTE
End Property
Denis
Szalkowski
Tous droits
rservs
Visual Basic
6.2
Module
de classe
Var_TEXTE = CHAINE
End Sub
La fforme
orme utilisant le module de classe
Le module de ffeuille
euille
Denis
Szalkowski
Tous droits
rservs
Option Explicit
Dim Obj_TEXTE As Class_TEXTE
Private Sub Form_Load()
Obj_TEXTE.TEXTE = Text_NOM.Text
Obj_TEXTE.MAJ_TEXTE
Text_NOM.Text = Obj_TEXTE.TEXTE
End Sub
Private Sub Command_INVERSER_Click()
Obj_TEXTE.TEXTE = Text_NOM.Text
Obj_TEXTE.INVERSE_TEXTE
Text_NOM.Text = Obj_TEXTE.TEXTE
End Sub
6. A
ctiv
eX
Activ
ctiveX
6.3
Private Sub Command_FINIR_Click()
Crer un composant A
ctiv
eX
Activ
ctiveX
L'objet de cette partie est double. Elle est de voir la construction de composants
employables l'intrieur de projets de type EXE Standard. Elle est aussi d'intgrer un
composant ActiveX au sein d'une page HTML et de lui transmettre un paramtre.
Nous verrons que les deux approches comportent de grandes diffrences.
Nous chercherons faire un composant qui permet de voir l'heure ou la date en
temps rel.
Le code du composant A
ctiv
eX
Activ
ctiveX
L'e
L'exxemple
Denis
Szalkowski
Tous droits
rservs
Visual Basic
6.4
Equivaut un refresh
PropertyChanged ChoixFormat
End Property
Public Property Get Hauteur() As Integer
UserControl.Height = Label_DATEHEURE.Height
Hauteur = CInt(UserControl.Height / COEF)
End Property
Public Property Get Largeur() As Integer
UserControl.Width = Label_DATEHEURE.Width
Largeur = CInt(UserControl.Width / COEF)
End Property
Public Property Let Hauteur(NouvelleHauteur As Integer)
TEMP_HAUTEUR = CInt(NouvelleHauteur * COEF)
Label_DATEHEURE.Height = TEMP_HAUTEUR
UserControl.Height = TEMP_HAUTEUR
PropertyChanged Hauteur
End Property
Public Property Let Largeur(NouvelleLargeur As Integer)
TEMP_LARGEUR = CInt(NouvelleLargeur * COEF)
Label_DATEHEURE.Width = TEMP_LARGEUR
UserControl.Width = TEMP_LARGEUR
PropertyChanged Largeur
End Property
Inser
tion du composant dans une fforme
orme
Insertion
6. A
ctiv
eX
Activ
ctiveX
Page de
pr
oprits
proprits
6.5
ajoutez une page de proprits. Au niveau du composant, cliquez dans la fentre des
proprits sur PropertyPage. Connectez la page de proprits votre composant.
Dans notre exemple, dessinez une combo box.
Voici le code qui lui est associ :
Option Explicit
Private Sub PropertyPage_ApplyChanges()
SelectedControls(0).ChoixFormat = Combo_CHOIXFORMAT.Text
End Sub
Private Sub PropertyPage_Initialize()
Combo_CHOIXFORMAT.AddItem hh:nn:ss
Combo_CHOIXFORMAT.AddItem dd/mm/yyyy
Combo_CHOIXFORMAT.AddItem dd/mm/yyyy hh:nn:ss
End Sub
Compiler un composant
OCX
Dtruisez alors la feuille qui nous a
Denis
Szalkowski
Tous droits
rservs
Visual Basic
6.6
Installation
Int
erne
Interne
ernett
Utiliser un A
ctiv
eX par
tir
Activ
ctiveX
partir
d'une page Int
erne
Interne
ernett
En fait , l'assistant Installation gnre
Denis
Szalkowski
Tous droits
rservs
6. A
ctiv
eX
Activ
ctiveX
6.7
<P
ARAM
<PARAM
...
NAME...
VAL
UE...>
ALUE...>
l'excution en mode standard. Aprs tre pass l'tape suivante, vous en avez
termin.
Modif
ier le code HTML par
tir de FFrrontP
age
Modifier
partir
ontPage
Dans le rpertoire De l'installation, vous trouverez une page HTML que vous pouvez
diter Avec FrontPage Express ou FrontPage 98... si vous en disposez. Pour visualiser
le code sous FrontPage Express, allez dans Affichage | HTML. Remettez par un copiercoller le code de l'objet dans la partie <BODY> </BODY>.
Si vous utilisez FrontPage 98, cliquez sur l'onglet HTML.
L'utilisation du Control comprend plusieurs paramtres :
CLASSID
Numro identifiant la classe du contrle
CODEBASE
Url o se procurer le composant par tlchargement
PARAM NAME... VALUE Paramtre transmis de la page vers le contrle
Denis
Szalkowski
Tous droits
rservs
<html>
<head>
<title></title>
</head>
<body>
<p>
Visual Basic
6.8
<object
ID=UserControl_DATEHEURE
WIDTH=167" HEIGHT=24"
CLASSID=clsid:CBFB9FA8-DAEB11D2-AFBE-0020AF27536E
CODEBASE=http://
perso.wanadoo.fr/denis.szalkowski/
Projet7.CAB#version=1,0,0,0">
<param name=_ExtentX
value=4419">
<param name=_ExtentY
value=635">
<param name=ChoixFormat
value=dd/mm/yyyy hh:nn:ss>
</object>
</p>
</body>
</html>
Denis
Szalkowski
Tous droits
rservs
5. Le client ser
servveur
5.1
Prsentation du client-ser
client-servveur
Clientser
servveur
ODBC
connecter notamment une base Access. Ou bien, vous pouvez utiliser ODBC, Open
Data Base Connectivity qui vise une plus grande ouverture et interoprabilit en
vous loignant des couches
matrielles. Vous accdez aux
ressources par le biais d'un
identifiant logique : le DSN (Data
Source Name).
Paramtrer ODBC
Denis
Szalkowski
Tous droits
rservs
Visual Basic
5.2
Pour crer votre DSN, vous disposez de deux possibilits : un DSN attach
l'utilisateur (non accessibles aux autres), un DSN attach la machine (accessibles
tous les utilisateurs).
DSN
Data
Denis
Szalkowski
Contr
ol
Control
Tous droits
rservs
5. Le client ser
servveur
5.3
et dessinez une
L'e
L'exxemple
Denis
Szalkowski
Tous droits
rservs
Visual Basic
5.4
Structure de la base Biblio
Les contrles dpendants
DataGrid
DataList
Cr
ystalR
epor
CrystalR
ystalRepor
eportt
Denis
Szalkowski
Tous droits
rservs
Vous pouvez lier des contrles standards diffuss avec VB comme la zone de texte, la
case cocher, la zone de liste, la zone de liste modifiable et le conteneur OLE pour les
images au Data Control prcdemment cr.
Pour le Data Control prcdent, vous aurez besoin de trois champs de type Text.
Pour chaque zone de texte, aprs les avoir nommes (Name), modifiez tout d'abord
la proprit DataSource en slectionnant le Data Control , Data_AUTEURS. Puis,
choisissez le champ que vous voulez afficher dans la zone de texte par la proprit
DataField.
Pour la Data Control :
Connect = "odbc;dsn=biblio;"
DatabaseName = ""
DefaultCursorType = 1 'ODBCCursor
DefaultType = 1 'UseODBC
RecordsetType = 1 'Dynaset
RecordSource = "SELECT * FROM Authors"
5. Le client ser
servveur
5.5
A partir de votre bote outils, par un clic droit, ajoutez ces trois composants.
Denis
Szalkowski
Tous droits
rservs
Visual Basic
5.6
Utilisation du Data Grid
Pour le DataGrid, la seule proprit renseigner est le DataSource qui doit rfrence
au Control Data. Faites ensuite un clic droit sur le Data Grid et choisissez Extrait
les zones. Pour donner d'autres titres aux colonnes, par clic droit , accdez la
page de Proprits.
Utilisation du Cr
ystal R
epor
Crystal
Repor
eportt
Maniement
du
Recordse
ecordsett
Denis
Szalkowski
Tous droits
rservs
De tous les contrles, Crystal Report est sans doute l'un des plus compliqu utiliser.
Il vous permet de faire du reporting : des tats sur la base de donnes.
Pour crer un tat, allez dans Complments | Crateurs d'tats. En premier
lieu, vous devez choisir votre source de donnes.
Par la suite, vous devez dterminer les tables partir desquelles vous souhaitez
concevoir votre tat.
Il peut s'agir d'une requte, comme dans l'exemple ci-dessous.
Vous pouvez modifier la nature de la jointure : quijointure ou jointure externe. Faites
un double clic sur le connecteur qui relie les tables pour accder l'cran suivant.
La dernire tape gnre l'aperu de l'tat. Vous pouvez maintenant l'diter. Ainsi
pour changer les noms des champs, faites un clic droit et choisissez Editer le
champ texte. Une fois l'tat fini, sauvegardez le. L'extension du fichier est de type
RPT.
Pour utiliser le composant dans votre feuille, dessinez un bouton l'aide de l'outil
Crystal Report. Les proprits renseigner sont le DataSource correspondant au
DataControl et le ReportFileName Correspondant au fichier RPT.
Pour lancer l'tat, crez un bouton auquel vous associez le code vnementiel suivant
:
Private Sub Command_ETAT()
CrystalReport_PUB.SQLQuery = DATA_NEW
CrystalReport_PUB.Destination = crptToWindow
CrystalReport_PUB.Action = 1
5. Le client ser
servveur
5.7
End Sub
Pour la mise jour, le code est identique ceci prs que vous devez employer la
mthode Edit. Edit ncessite l'emploi de la commande UpDate.
Enfin pour la suppression, employez la mthode Delete. Vous n'avez pas besoin
d'utiliser la commande Update?
Les dplacements
Vous pouvez utiliser les mthodes MoveFirst, MoveLast, MovePrevious, MoveNext.
Pour cela, vous devez tester lenregistrement en cours.
Private Sub Command_FIN_Click()
Data1.Recordset.MoveLast
End Sub
Private Sub Command_PREC_Click()
If Not Data1.Recordset.BOF Then
Data1.Recordset.MovePrevious
Else
Data1.Recordset.MoveLast
End If
End Sub
Private Sub Command_PREMIER_Click()
Data1.Recordset.MoveFirst
End Sub
Private Sub Command_SUIV_Click()
If Not Data1.Recordset.EOF Then
Data1.Recordset.MoveNext
Else
Data1.Recordset.MoveFirst
End If
End Sub
La mthode Find
Denis
Szalkowski
Tous droits
rservs
Pour rechercher des enregistrements, vous pouvez utiliser les mthodes suivantes :
FindFirst, FindLast, FindNext et FindPrevious.
Private Sub Command_FIND_Click()
Data1.Recordset.FindFirst "Revue like " & Text4.Text & ""
End Sub
Private Sub Command_CHERCHE_SUIVANT_Click()
Visual Basic
5.8
La mthode Seek
Cette mthode s'appuie sur le choix pralable d'un index avec la proprit Index.
Dim Table_REVUE As RecordSet
Set Table_REVUE=Data1.RecordSet
Table_REVUE.Index="REVUE"
Les signe
ts
signets
Vous pouvez mmoriser lenregistrement sur lequel vous vous situez laide de la
proprit BookMark.
Pour mmoriser la position du pointeur, inspirez-vous du code suivant :
Dim MARQUE_PAGE As Variant
MARQUE_PAGE=Data1.RecordSet.BookMark
Data1.Recordset.MoveLast
Data1.Recorset.BookMark=MARQUE_PAGE
Les transactions
Un
langage
SQL
pr
opritaire
propritaire
Le SQL (le langage de manipulation de donnes) interne Visual Basic n'est pas
standard. Toutes les instructions qui suivent peuvent tre utilises au niveau de la
proprit RecordSource de votre contrle Data.
SELECT
L'ordre SELECT permet de retourner un jeu d'enregistrement.
5. Le client ser
servveur
5.9
predicate
*
table
Utilisation
de INNER
JOIN
field1, field2
alias1, alias2
tableexpression
externaldatabase
L'oprat
eur INNER JOIN
L'oprateur
Denis
Szalkowski
Tous droits
rservs
Cet oprateur permet d'tablir entre une n tables lorsqu partir d'un champ
commun, ce dernier contient des valeurs identiques. On parle d'quijointure. Cet
oprateur s'emploie derrire l'instruction FROM. Si vous employez les oprateurs LEFT
JOIN ou RIGHT JOIN, vous demandez obtenir tous les enregistrements de la table
mentionne au niveau du membre gauche de la jointure.
FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2
Vous pouvez employer comme oprateur de comparaison relationnelle "=", "<", ">",
"<=", ">=", ou "<>".
Visual Basic
5.10
DELETE
L'odre DELETE permet de supprimer le contenu de champs dans une table partir de
critres logiques. On l'emploie pour dtruire un ensemble d'enregistrements.
DELETE [table.*]
FROM table
WHERE criteria
UPD
ATE
UPDA
L'instruction UPDATE vous autorise mettre jour une collection d'enregistrement
selon une expression soumise critres.
UPDATE table
SET newvalue
WHERE criteria;
UPD
ATE
UPDA
DELETE
INSERT INT
O
INTO
Cette instruction permet d'ajouter un ou plusieurs enregistrements une table.
Pour ajouter plusieurs enregistrements :
INSERT INTO target [IN externaldatabase] [(field1[, field2[, ...]])]
Denis
Szalkowski
Tous droits
rservs
5. Le client ser
servveur
5.11
BeginT
rans
BeginTrans
CommitT
rans
CommitTrans
RollBac
k
ollBack
Si, lors d'une opration d'ajout, vous ne prcisez pas tous les champs, la valeur par
dfaut ou Null sinsre la place des colonnes manquantes.
Vous pouvez aussi utiliser INSERT INTO pour ajouter une srie denregistrements
depuis une autre table ou requte, conjointement la clause SELECT ... FROM
comme dcrit plus haut dans la syntaxe de requte Ajout avec plusieurs
enregistrements. Dans ce cas, la clause SELECT mentionne les champs ajouter la
table target spcifie.
SELECT INT
O
INTO
Cette instruction SQL permet la cration d'un table.
Remar
ques sur les instructions UPD
ATE e
emarques
UPDA
ett DELETE.
Elle ncessite du code... Rien que du code ! Avec mme... quelques surprises ! Les
bases de donnes de type Access exigent un mode d'ouverture de type Jet et non
ODBC !
Private Sub Command_MAJ_Click()
Dim dbs As Database
Set dbs = OpenDatabase("E:\samples\cinq\Biblio97.mdb")
dbs.Execute "UPDATE Titles " _
& "SET [Year Published] = " & CInt(Text_NEW.Text) _
& " WHERE [Year Published] = " & CInt(DBCombo_ANNEES.Text)
dbs.Close
Data_ANNEES.Refresh
End Sub
Denis
Szalkowski
Tous droits
rservs
Les transactions
Un espace de travail dfinit un environnement dans lequel vous pouvez valider ou
Visual Basic
5.12
invalider des modifications apportes vos donnes : mises jour, ajout et suppression.
Aprs avoir dclar une variable de type WorkSpace au niveau d'un module ou d'un
module de feuille, initialisez cette variable l'aide de l'instruction Set.
L'espace transactionnel est dfini par la mthode BeginTrans. Pour valider les
modifications apportes, utilisez la mthode CommitTrans. Pour invalider, employez
RollBack. Toute sortie intempestive du programme quivaut un RollBack.
Une e
ys de l'application NWind.mdb
exxemple : utilisation de la table Emplo
Employs
Aprs avoir ajout le composant Microsoft Data Bound Grid, dessinez un Data
Control et DBGrid Control. Aprs avoir dfini les proprits Connect,
DataBaseName et RecordSource du Data Control, dfinissez les proprits
DataSource du DBGrid. Par un clic droit, extrayez les champs de la table par
Extraire les zones.
Le code associ
Option Explicit
'
'Dfinit une variable de type environnement
'
Denis
Szalkowski
Tous droits
rservs
5. Le client ser
servveur
5.13
Anne
euilles
Annexxe : le code associ aux ffeuilles
Le code associ au fformulaire
ormulaire de saisie
Private Sub Check_NAISSANCE_Click()
If Check_NAISSANCE.Value Then
Data_AUTEURS.RecordSource = SELECT * FROM Authors WHERE [Year
Born] Is Not Null
Else
Data_AUTEURS.RecordSource = SELECT * FROM Authors
End If
Data_AUTEURS.Refresh
End Sub
Denis
Szalkowski
Tous droits
rservs
La requt
e sur le fformulaire
ormulaire "DataGrid"
requte
SELECT Titles.Title,Authors.Author,Publishers.Name
FROM
(Publishers INNER JOIN Titles ON Publishers.PubID=Titles.PubID)
INNER JOIN
([Title Author] INNER JOIN Authors ON [Title Author].Au_ID=Authors.Au_ID)
4. Dv
elopper une application
Dvelopper
4.1
Unif
ormiser la taille des composants
Uniformiser
Pour que les zones de saisie disposent des mmes proprits en hauteur et en
largeur, allez dans Format | Uniformiser.
Format
Denis
Szalkowski
Tous droits
rservs
Visual Basic
4.2
Centrer dans la ffeuille
euille
Crat
eur
Crateur
de menus
feuille.
Calculez vvo
otre bior
ythme
biorythme
Le biorythme est un concept "sotrique" auquel se rfrent certains sportifs pour
obtenir des "performances". Il est bas sur des cycles vis vis de la date de
naissance.
Les modules
Ils ont pour objectif de stocker les fonctions, procdures, constantes et variables
communes (et globales) au projet. Remarquez que l'ordre n'a pas d'importance.
Windo
ws
Windows
List
Denis
Szalkowski
Tous droits
rservs
'
' Retourne un tableau contenant les diffrents biorythmes
'
Function RESULTATS_BIO(DN As Date, DJ As Date) As Variant
Dim Var_PHY As Double, Var_EMO As Double, Var_INT As Double, Var_MOY As
Double
Var_PHY = CALCUL_BIO(DN, DJ, 23)
Var_EMO = CALCUL_BIO(DN, DJ, 28)
Var_INT = CALCUL_BIO(DN, DJ, 33)
Var_MOY = (Var_PHY + Var_EMO + Var_INT) / 3
RESULTATS_BIO = Array(Var_PHY, Var_EMO, Var_INT, Var_MOY)
End Function
'
' Le calcul du biorythme
'
Function CALCUL_BIO(DN As Date, DJ As Date, PERIODE As Integer) As Double
CALCUL_BIO = (Sin(2 * Pi * (DJ - DN) /
PERIODE) + 1) / 2
End Function
'
' La "constante" PI n'existe pas !
'
Function Pi() As Double
Pi = 4 * Atn(1)
End Function
La fforme
orme MDI
Elle contient le menu de l'application.
Private Sub
4. Dv
elopper une application
Dvelopper
PopupMenu
Sho
w
Show
Hide
Unload
Denis
Szalkowski
Tous droits
rservs
4.3
CommandeMenu_PARAM_Click()
Hide
CommandeMenu_VISU.Enabled = True
CommandeMenu_TAB.Enabled = True
CommandeMenu_GRAPH.Enabled = True
Form_PARAM.Show
End Sub
Private Sub CommandeMenu_VISU_Click()
Hide
If Form_PARAM.Visible Then
Unload Form_PARAM
End If
Form_VISU.Show
End Sub
Private Sub CommandeMenu_TAB_Click()
Hide
Form_TAB.Show
End Sub
Private Sub CommandeMenu_GRAPH_Click()
Hide
Form_GRAPH.Show
End Sub
Dchargement de lapplication
Unload Me
End Sub
Visual Basic
4.4
MDIForm_MAIN.Arrange vbTileHorizontal
End Sub
Private Sub CommandeMenu_REORG_Click()
MDIForm_MAIN.Arrange vbArrangeIcons
End Sub
Label
Text
Label
Text
Pr
ogressBar
ProgressBar
'
' Chargement d'une combo de 30 lments
'
Private Sub Form_Load()
Dim I As Integer
Dim Tab_OBS(29) As String * 10
For I = 0 To 29
Tab_OBS(I) = Format(Date + I, "dd/mm/yyyy")
Combo_OBSERVATION.AddItem Tab_OBS(I)
Next I
Combo_OBSERVATION.Text = Tab_OBS(0)
End Sub
'
' Test et formatage de la date de naissance
'
Private Sub Text_NAISSANCE_LostFocus()
If IsDate(Text_NAISSANCE.Text) Then
Text_NAISSANCE.Text =
Format(Text_NAISSANCE.Text, "dd/mm/yyyy")
Else
MsgBox "Date errone", vbOKOnly, Erreur
End If
End Sub
Denis
Szalkowski
Tous droits
rservs
4. Dv
elopper une application
Dvelopper
MsFle
xGrid
MsFlexGrid
4.5
L'af
hage dans un tableau de type MSFle
xGrid
L'afffic
ichage
MSFlexGrid
Pour utiliser ce type de tableau, vous devez l'ajouter votre bote outils (Microsoft
Flexgrid Control). La ncessit de passer par la procdure vnementielle masque un
rel problme. Vous pourrez l'observer dans l'exemple prcdent si, aprs avoir
chang les paramtres du premier menu, vous visualisez les rsultats partir du
deuxime menu. Pourquoi ? Dommage que nous ne puissions pas "envoyer" un
tableau directement dans ce composant.
Denis
Szalkowski
Tous droits
rservs
Visual Basic
4.6
MSFlexGrid_BIO.COL = 3
MSFlexGrid_BIO.Text = Format(TAB_RESULTATS(2), "0.00 %")
MSFlexGrid_BIO.COL = 4
MSFlexGrid_BIO.Text = Format(TAB_RESULTATS(3), "0.00 %")
Char
Chartt
Contr
ol
Control
Next I
MSFlexGrid_BIO.Visible = True
End Sub
L'af
hage par un graphique
L'afffic
ichage
Pour raliser un contrle, employez le composant Microsoft Chart Control. Les
problmes sont identiques ceux que nous avons pu pointer prcdemment.
Denis
Szalkowski
Tous droits
rservs
'
' Indice des tableaux 1
'
Option Base 1
Private Sub Form_Load()
Dim LIG As Integer
Dim Tab_GRAPH()
Dim TAB_RESULTATS As Variant
Dim Var_DJ As Date, Var_DN As Date
Var_DN = CDate(Form_PARAM.Text_NAISSANCE.Text)
Var_DJ = CDate(Form_PARAM.Combo_OBSERVATION.Text)
ReDim Tab_GRAPH(15, 5)
Tab_GRAPH(1, 2) = "PHY"
Tab_GRAPH(1, 3) = "EMO"
Tab_GRAPH(1, 4) = "INT"
Tab_GRAPH(1, 5) = "MOY"
For LIG = 2 To 14
Tab_GRAPH(LIG, 1) = Var_DJ
TAB_RESULTATS = RESULTATS_BIO(Var_DN, Var_DJ)
Tab_GRAPH(LIG, 2) = TAB_RESULTATS(0)
Tab_GRAPH(LIG, 3) = TAB_RESULTATS(1)
Tab_GRAPH(LIG, 4) = TAB_RESULTATS(2)
Tab_GRAPH(LIG, 5) = TAB_RESULTATS(3)
Var_DJ = Var_DJ + 1
4. Dv
elopper une application
Dvelopper
4.7
Next LIG
'
' Le composant accepte un tableau de donnes.
'
MSChart_BIO.ChartData = Tab_GRAPH
End Sub
Debug.Print
Le dbogage
C'est l'opration par laquelle vous tentez de cerner les problmes de programmation :
erreurs de type, division par 0, dpassement de piles, etc. Dans la phase d'dition et
de test, vitez le plus possible l'utilisation du On Error Goto.
L'instruction Debug.Print
Insre dans le programme, elle renvoie une chane de caractres dans la fentre
Denis
Szalkowski
Tous droits
rservs
Visual Basic
4.8
d'arrt).
Les espions
Ce sont des expressions de votre programme que vous dcidez de suivre durant
l'excution du programme. La premire mthode consiste en arrire-plan placer la
#Const
#if...
#else if...
#else...
#end if
Denis
Szalkowski
Tous droits
rservs
La compilation conditionnelle
A quoi peut-elle servir ? Tout simplement, distribuer des versions de dmonstrations
ou optimiser selon les plate-formes.
4. Dv
elopper une application
Dvelopper
4.9
Globale au pr
oje
proje
ojett
Allez dans Projet | Proprits du projet. Entrez vos arguments dans la zone
Arguments conditionnels de compilation.
Dans le code, observez l'instruction #if...#else...#end if.
Private Sub CommandeMenu_PARAM_Click()
Hide
CommandeMenu_VISU.Enabled = True
#if not DEMO then
CommandeMenu_TAB.Enabled = True
CommandeMenu_GRAPH.Enabled = True
#end if
Form_PARAM.Show
End Sub
Locale au module
Vous pouvez aussi utiliser une constante contenant la valeur de l'argument
conditionnel prfix par #Const en en-tte du module.
Fonction
Command()
#Const DEMO=True
Private Sub CommandeMenu_PARAM_Click()
Hide
CommandeMenu_VISU.Enabled = True
#if not DEMO then
CommandeMenu_TAB.Enabled = True
CommandeMenu_GRAPH.Enabled = True
#end if
Form_PARAM.Show
End Sub
Denis
Szalkowski
Tous droits
rservs
Sub Main()
'
' Initialisation d'un tableau contenant trois valeurs
'
Dim VALEURS
VALEURS = Array("0", "1", "2")
'
' Rcupration du contenu de la ligne de commande
'
ligne_COMMANDE = Command()
'
' Balayage du tableau
'
For Each ELEMENT In VALEURS
'
' Test pour savoir si la ligne de commande contient l'une des valeurs du tableau
'
Visual Basic
4.10
If ligne_COMMANDE = ELEMENT Then
'
' Changement du mode de
dmarrage en fonction du contenu de
la ligne de commande
'
MDIForm_MAIN.WindowState =
Command()
Exit For
End If
Next ELEMENT
'
' Affichage de la feuille
'
MDIForm_MAIN.Show
Dpendances
End Sub
L'assistant installation
L'assistant va raliser l'empaquettage
Denis
Szalkowski
Tous droits
rservs
4. Dv
elopper une application
Dvelopper
4.11
l'installation.
Visual Basic Entend par dpendance tout contrle sur lequel repose votre application.
Ce sont donc les composants OCX contenant ces diffrents contrles.
Denis
Szalkowski
Tous droits
rservs
3. En
vir
onnement MDI e
Envir
vironnement
ett SDI
3.1
Df
initions
Dfinitions
Single
Multiple
Document
Int
er
face
Inter
erface
Pour faire en sorte qu'une feuille soit fille d'une feuille MDI, dans les proprits,
modifiez la valeur MDIChild en la passant True.
Dt
erminer le lanceur du pr
oje
Dterminer
proje
ojett
Pr
oje
Proje
ojett
Pr
oprits
Proprits
Le lanceur d'un projet VB peut tre ou une feuille ou une procdure Main (sans
arguments) appartenant un module. Pour dterminer le lanceur, allez dans Projet
| Proprits du projet.
Pour lancer l'application partir d'un module, entrez une procdure du type suivant :
Sub Main()
MDIForm_MAIN.Show
End Sub
Denis
Szalkowski
Tous droits
rservs
Visual Basic
3.2
Crer un composant de type Menu
Le crat
eur de menus
crateur
Crat
eur
Crateur
de menus
Tapez le titre de la commande dans la zone Caption. Si vous faites prcder une
lettre par &, vous pouvez accder par raccourci clavier du type ALT+Lettre la
commande. Donnez un nom en le prfixant dans la zone Name.
La pr
oprit Windo
ws List
proprit
Windows
Windo
ws
Windows
List
Denis
Szalkowski
Tous droits
rservs
Le fait de cocher Windows List pour un menu signifie quil listera par leur nom toutes
les fentres actives filles incluses ou lies la feuille MIDI.
Lorganisation des feuilles filles en mosaque, en cascade ou en organisant les icnes
se ralise par le code associ un lment de menu.
Private Sub CommandeMenu_HORIZONTAL_Click()
MDIForm_MAIN.Arrange vbTileHorizontal
End Sub
Private Sub CommandeMenu_VERTICAL_Click()
MDIForm_MAIN.Arrange vbTileVertical
End Sub
Private Sub CommandeMenu_CASCADE_Click()
MDIForm_MAIN.Arrange vbCascade
End Sub
Private Sub CommandeMenu_ORGANISER_Click()
MDIForm_MAIN.Arrange vbArrangeIcons
End Sub
3. En
vir
onnement MDI e
Envir
vironnement
ett SDI
3.3
Associer une pr
ocdure vnementielle une commande de menu
procdure
A partir de la feuille MDI, cliquez sur la commande de menu. L'vnement gr est du
type NomContrle_Click. Pour accder l'lment et aussi pour qu'il s'excute, il doit
tre visible et activ.
Rien ne vous empche par la fentre Code entre le code li l'vnement.
PopupMenu
Le menu cont
extuel
conte
Le menu contextuel n'est autre qu'un menu de commandes au sein du crateur de
menus auquel vous faites appel par la mthode object.PopupMenu NomMenu.
L'vnement le plus appropri la gestion de ce menu contextuel est
MouseDown.
Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As
Single)
If Button = 2 Then
PopupMenu Menu_BIO
End If
End Sub
Sho
w
Show
Hide
Unload
Denis
Szalkowski
Tous droits
rservs
Af
her les ffentres
entres
Afffic
icher
Il existe plusieurs mthodes (procdures lis un objet) pour manipuler les fentres.
Pour afficher (et charger) une feuille, employez la mthode Feuille.Show. Pour
masquer une feuille dj charge, utilisez la mthode Hide. Enfin pour quitter
l'application, dchargez la forme principale par Unload Me.
Private Sub CommandeMenu_PARAM_Click()
Hide
CommandeMenu_VISU.Enabled = True
CommandeMenu_TAB.Enabled = True
CommandeMenu_GRAPH.Enabled = True
Form_PARAM.Show
End Sub
Private Sub CommandeMenu_VISU_Click()
Hide
If Form_PARAM.Visible Then
Unload Form_PARAM
End If
Form_VISU.Show
End Sub
Private Sub CommandeMenu_TAB_Click()
Hide
Form_TAB.Show
End Sub
Private Sub CommandeMenu_GRAPH_Click()
Hide
Form_GRAPH.Show
End Sub
Visual Basic
3.4
Dchargement de lapplication
Unload Me
End Sub
Pour fermer un ensemble de feuilles ouvertes, vous pouvez prendre exemple sur le
code suivant :
Excution
modale
Feuilles modales
Ouvrir de faon modale une feuille d'un projet signifie qu'elle soit ferme (dcharge)
par lutilisateur afin de revenir la feuille qui la appele.
Pour ouvrir une feuille en mode modal, utilisez la syntaxe suivante :
feuille.show vbModal
Bot
es de dialogue standard
Botes
Vous pouvez utiliser les fonctions standards InputBox et MsgBox linstar de ce qui
existe en VBA.
La fonction InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
retourne une chane correspondant la valeur saisie si vous cliquez sur OK ou
appuyez sur Entre, la chane nulle "" si vous activez Annuler ou Echap au clavier.
L'instruction MsgBox peut-tre employe en tant que procdure ou fonction :
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
Si vous l'employez comme fonction, elle retourne une valeur entire correspondant au
bouton cliqu.
Denis
Szalkowski
Tous droits
rservs
2.1
Rgles d'criture
Les commentaires
'_:
Commentaire
Instructions
Ils sont prcds par le caractre apostrophe. Dans l'optique de transmettre un projet
comprhensible une personne tierce, leur usage est plus que recommand.
Pr
olonger une instruction sur plusieur
Prolonger
plusieurss lignes
Pour signifier l'diteur de prolonger une commande la ligne suivante, tapez en
bout de ligne un caractre underscore _ ou tiret bas prcd d'un espacement.
Saisir plusieur
plusieurss instructions sur une mme ligne
Bien que cela ne soit pas trs recommand, sparez vos instructions par le signe
deux-points :.
Les oprat
eur
oprateur
eurss
List
e des oprat
eur
Liste
oprateur
eurss
Arithmtique
Comparaison
Logique
Puissance (^)
Egalit (=)
Not
Ngation ( - )
Diffrence (<>)
And
Or
Xor
Modulo (Mod)
Eqv
Imp
Like
Is
Loprat
eur Lik
e
oprateur
Like
Il permet de comparer deux chanes de caractres.
resultat = expression Like modle
Si lexpression est comparable au modle, le rsultat est vrai. Si l'une au moins des
deux parties est nulle, le rsultat est nulle. Par dfaut, Visual Basic fait la distinction
entre les minuscules et les majuscules sauf si figure en en-tte de module Option
Compare Text.
Denis
Szalkowski
Tous droits
rservs
Caractre
[Liste_de_caractres]
[!Liste_de_caractres]
Nimporte que autre caractre que ceux dans la
liste
Pour rechercher les caractres ?, #, entrez-les entre crochets. Vous pouvez utiliser le
signe moins pour spcifier un intervalle de recherche : [A-Z]. Vous pouvez spcifier
plusieurs intervalles de Recherche sans dlimiteur : [a-zA-Z0-9]. Loprateur Like est
capable de retrouver le caractre sil est compar ae.
Con
Convventions de lecture
Visual Basic
2.2
Les crochets indiquent des lments facultatifs. Le "pipe" | signifie une alternative.
Les accolades signifient un choix obligatoire dans un ensemble de solutions.
Option
Explicit
Variables, types e
es
ett constant
constantes
Les identif
icat
eur
identificat
icateur
eurss
Ils ont limits 255 caractres maximum, le premier dentre eux tant
ncessairement une lettre. Vous avez le droit aux caractres accentus (quoique
dangereux pour le portage de votre application), aux chiffres, au caractres
underscore. Sont interdits les espaces, les oprateurs +, -, *, /, \, ^, &
Les types
Type de donnes
Taille d'enregistrement
Byte
1 octet
0
255
Boolean
2 octets
True
False
Integer
2 octets
-32 768
32 767
Long
4 octets
Single
4 octets
-3,402823E38
-1,401298E-45
1,401298E-45
3,402823E38
Double
Denis
Szalkowski
Tous droits
rservs
Plage
8 octets
-1,79769313486232E308
-4,94065645841247E-324
4,94065645841247E-324
1,79769313486232E308
Currency
8 octets
Decimal
14 octets
+/79 228 162 514 264 337 593 543 950 335
+/7,9228162514264337593543950335
+/0.0000000000000000000000000001
Date
8 octets
Object
4 octets
Le type
Variant
2.3
String
10 octets + chane
0 environ 2 milliards
String * n
n octets
1 environ 65 400
Variant
16 octets
Numrique : double
Variant
22 octets + chane
String * n
Le type vvariant
ariant
Le type variant est susceptible d'accueillir tout type de donnes. C'est le mode de
gestion des variables si vous ne forcez pas le mode de dclaration explicite. De la
mme faon, si vous ne typez pas votre variable, elle est considre dans le type
Variant.
Pour passer en mode explicite, allez dans Outils | Options | Editeur et cochez
Requiert la dclaration des variables. Une autre solution consiste crire
en en-tte de module Option Explicit.
La por
te
porte
Public
Private
La dclaration de constant
es
constantes
[Public | Private] Const constname [As type] = expression
type
Byte, Boolean, Integer, Long, Currency, Single, Double,
Decimal, Date, String ou Variant
expression
Valeur littrale, autre constante ou combinaison pouvant
contenir tout oprateur arithmtique ou logique l'exception
de Is.
La dclaration de vvariables
ariables
Lorsque les variables sont dclares lintrieur de la forme ou du module, sa porte
est locale.
Dim NomVariable [As [New] type]
Lors de l'initialisation des variables, une variable numrique prend pour valeur initiale
0, une chane de longueur variable prend pour valeur initiale une chane de longueur
nulle (""), et une chane de longueur fixe est remplie de zros. Les variables Variant
ont la valeur Empty l'initialisation.
Les ffonctions
onctions sur la gestion e
sion de type
ett con
convver
ersion
VarType(varname)
Denis
Szalkowski
Tous droits
rservs
Visual Basic
2.4
IsObject
Fonctions de conversionAsc, CBool, CByte, CCur, CDate, CDec, CDbl, Chr, CInt, CLng,
CSng, CStr, CVar, CVErr, Format, Hex, Oct, Str, Val
Attention ! Les fonctions de conversion provoquent des erreurs si la conversion
choue.
Pour utiliser le type ainsi dfini, dclarez une variable se rfrant du type cr.
Dim Variable As Varname
With Variable
elementname1=...
End With
ou
Variable.elementname1=...
Les df
initions de type par dfaut
dfinitions
Trs pratique, cette possibilit que vous offre le langage associe le type la premire
lettre des identificateurs dans les formes et modules de votre projet.
DefInt letterrange [,letterrange] . . .
DefLng letterrange [,letterrange] . . .
DefSng letterrange [,letterrange] . . .
DefDbl letterrange [,letterrange] . . .
DefCur letterrange [,letterrange] . . .
DefStr letterrange [,letterrange] . . .
DefVar letterrange [,letterrange] . . .
Les tableaux
La dclaration de tableaux
Lorsque les variables sont dclares lintrieur de la forme ou du module, sa porte
est locale.
Dim NomVariable ([Indice_mini_1 To ] Indice_Maxi_1[,...,[Indice_mini_n To]
Indice_Maxi_n])] [As [New] type]
Fonction
Arra
Arrayy
Redim
L'instruction Redim permet de modifier la dimension des tableaux dynamiquement.
ReDim [Preserve] NomVariable(Indices) [As type]
Denis
Szalkowski
Tous droits
rservs
2.5
ReDim A(8, 0 To 3)
Arra
y(arglist)
Array(arglist)
Instructions
conditionnelles
Array est une fonction qui vous permet d'initialiser un tableau sous forme d'une liste.
L'argument arglist est une liste de valeurs dlimites par des virgules. Chaque
lment charge le tableau. Si l'argument est omis, un tableau de longueur nulle est
cr. La fonction renvoi une collection de Variant.
Dim TABLEAU As Variant
TABLEAU = Array(1,2,3)
ELEMENT = TABLEAU(2)
La limite infrieure d'un tableau cr l'aide de la fonction Array est toujours gale
zro. Il n'obit pas l'instruction Option Base.
Les ffonctions
onctions LBound e
ett UBound
Elles renvoient chacune une valeur de type Long contenant respectivement le plus
petit et le plus grand indice disponible pour la dimension indique d'un tableau.
UBound(arrayname[, dimension])
LBound(arrayname[, dimension])
Instructions
rptitiv
es
rptitives
La plus courante :
If condition1 Then
Bloc_Instructions_1
[ElseIf condition2 Then
Bloc_Instructions_2]
[Else
Bloc_Instructions_n]
End If
Select Case
Select Case test_variable
[Case expression_liste1
Bloc_Instructions_1]
[Case expression_liste2
Bloc_Instructions_2]
[Case Else
Bloc_Instructions_n]
End Select
For
...ne
xt
or...ne
...next
For compteur = mini To maxi [ Step pas ]
bloc_instructions
[Exit For]
bloc_instructions
Visual Basic
2.6
Next [compteur]
Sor
tie
Sortie
de blocs
While...W
end
While...Wend
Tant que la condition est vraie, les instructions internes la structure continuent de
s'excuter. Prfrez l'emploi du Do...Loop.
While condition
bloc
Wend
Do Loop
Do [{While | Until} condition]
bloc_instructions
[Exit Do]
bloc_instructions
Loop
Do
bloc
[Exit Do]
bloc
Loop [{While | Until} condition]
Exit
Cette instruction permet de sortir dun bloc de contrle.
Exit Do Sortie dun bloc Do...Loop
Exit For Sortie dun bloc For...Next.
Exit Function Sortie dune fonction
Exit Sub Sortie dune procdure
Fonctions e
ocdures
ett pr
procdures
A l'instar du Pascal, Visual Basic diffrencie les fonctions et les procdures. Les
premires retournent une valeur au programme appelant. Les secondes en changent
son comportement sans retourner de valeur. Ce sont des "sous-traitants".
Les pr
ocdures
procdures
[Static] [Private] Sub NomProcdure ([[Optional] [ByVal | ByRef] [ParamArray]
varname[( )] [As type] [= defaultvalue],...])
BlocInstructions
[Exit Sub]
BlocInstructions
End Sub
Denis
Szalkowski
Tous droits
rservs
L'emploi du mot Static signifie que les variables internes la procdure sont
conserves entre les appels successifs.
Le mot Optional permet de rendre un argument optionnel. Tous doivent l'tre
derrire. L'option Defaultvalue n'est valide que pour les arguments
du type Optional. ParamArray permet de transmettre un tableau. L'uitlisation
de l'argument est incompatible avec Optional. Il doit tre en dernier dans la liste.
ByVal et ByRef signifient un argument
de type "valeur" pour le premier, de type
"variable" pour le second.
Lors de l'appel une procdure, chaque
argument doit tre spar par un pointvirgule et sans parenthse contrairement
au fonctions o le sparateur est une
virgule. Pour les fonctions, les arguments
doivent tre encadrs par des
2.7
parenthses.
Les ffonctions
onctions
On Err
or
...
Error
or...
Go
Gotto...
La gestion d'erreur
d'erreurss
Lors de la conversion de type, du remplissage d'un tableau, une erreur de votre part
peut causer l'arrt brutal du programme. Pour illustrer ce point, nous allons nous
servir d'un contrle de saisie sur un contrle de Type MaskEdit. Ce contrle ne fait pas
partie des composants standards. Vous devez par consquence l'ajouter dans votre
bote outils. La gestion d'erreur se fait dans l'exemple ci-dessous sur l'vnement
LostFocus (sortie de zone).
'
'Procdure attribuant la date la zone MaskEdBox_DATEOBS
'
Private Sub Form_Load()
MaskEdBox_DATEOBS.Text = Format(Date, "dd/mm/yyyy")
End Sub
Private Sub MaskEdBox_DATEOBS_LostFocus()
Dim Var_INFOS
'
' La gestion d'erreur est gre par tiquette !!!
'
On Error GoTo ERREUR
'
' Solution ne ncessitant pas de gestion d'erreur
'
'If Not IsDate(MaskEdBox_DATEOBS.Text) Then
' GESTION_ERREUR ("Date incorrecte")
'End If
'
' A viter : la conversion suppose qu'il s'agit d'un type compatible
' Si la zone n'est pas compatible avec le format date, une erreur survient !
'
If Not IsDate(CDate(MaskEdBox_DATEOBS.Text)) Then
Denis
Szalkowski
Tous droits
rservs
Visual Basic
2.8
GESTION_ERREUR ("Date incorrecte")
End If
'
' Sortie de bloc
'
Exit Sub
ERREUR:
Var_INFOS = Err.Description & Chr(13) & _
Err.Number & Chr(13) & _
Err.Source
GESTION_ERREUR (Var_INFOS)
End Sub
'
' Procdure-utilisateur visant grer l'erreur
'
Sub GESTION_ERREUR(MESSAGE)
MsgBox MESSAGE, vbOKOnly, "Erreur"
Form_Load
'
' Le curseur est positionn dans la zone de saisie !
'
MaskEdBox_DATEOBS.SetFocus
End Sub
La table ANSI
Denis
Szalkowski
Tous droits
rservs
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
32
33
34
35
36
37
38
39
BS 40
TAB 41
LF 42
43
44
CR 45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
[space]
!
65
66
#
67
$
68
%
69
&
70
71
(
72
)
73
*
74
+
75
,
76
77
.
78
/
79
0
80
1
81
2
82
3
83
4
84
5
85
6
86
7
87
8
88
9
89
:
90
;
91
<
92
=
93
64
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
@
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
96
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
128
160
129
161
130
162
131
163
132
164
133
165
134
166
135
167
136
168
137
169
138
170
139
171
140
172
141
173 142
174
143
175
144
176
145
177
146
178
147
179
148
180
149
181
150
182
151
183
152
184
153
185
154
186
155
187
156
188
157
189
[space]
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
192
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
224
1.1
Les lments du pr
oje
proje
ojett
Le pr
oje
proje
ojett
VBP
FRM
BAS
La ffeuille
euille (f
orm)
(form)
Elle reprsente linterface-utilisateur. Une feuille correspond une fentre. Elle inclut
les contrles et le code "vnementiel" attach aux contrles. L'extension d'une
feuille est FRM. Il s'agit d'un fichier texte.
Une fentre comprenant un menu est un exemple de forme.
Les contrles
Ce sont les composants (OCX Object LinKing and Embedding Controls) dune forme :
botes de dialogues, boutons, tiquettes, etc. Ils intgrent des proprits modifiables.
Leur sont associes des procdures vnementielles, c'est--dire des actions
attaches l'utilisateur : clic souris, touche clavier.
Les modules
Ce sont des bibliothques de fonctions et de procdures utilisables au niveau du
projet indpendamment des feuilles qu'il comprend. Vous pouvez dmarrer votre
projet partir de la procdure Main. L'extension d'un module est BAS. Ce sont des
fichiers texte.
CTRL+R
F4
MAJ+F7
F7
Denis
Szalkowski
Tous droits
rservs
ou F7 (code).
ou MAJ+F7
Visual Basic
1.2
Outils
Options
Ancrage
ou F4
la prsentation des feuilles : Affichage | Fentre prsentation des
feuilles
Le ffonctionnem
onctionnem ent d'une
application EXE S
tandard
Standard
Denis
Szalkowski
Tous droits
rservs
Ajout d'lments au pr
oje
proje
ojett
Ajout d'une ffeuille
euille ou d'un
module
1.3
Ajout de composants A
ctiv
eX
Activ
ctiveX
Un ActiveX est un excutable mettant
ses objets disposition dautres
applications conformment au
modle dobjet composant distribu
ou DCOM (Distributed Component
Ajout
er
Ajouter
un ongle
onglett
dans la
bot
e
bote
outils
Denis
Szalkowski
Tous droits
rservs
Visual Basic
1.4
Associer une pr
ocdure vnementielle
procdure
Un vnement peut-tre dfini comme une dclencheur : un clic, une touche, le
temps qui passe. La procdure vnementielle, quant elle, est une action (souvant
formaliser par un verbe) associe l'venement dclencheur.
Pour initialiser le contenu de la zone Label, par un double-clic au centre du
formulaire, vous accdez la fentre relative au code.
Private Sub Form_Load()
'
' Attribution au contrle Label_HEURE de l'heure courante formate
'
Label_HEURE.Caption = Format(Now(), "hh:mm:ss")
End Sub
Denis
Szalkowski
Tous droits
rservs
Crer l'application
Avant toute chose, pensez sauvegarder l'ensemble du projet par
1.5
Test
er vvo
otre "code"
ester
A partir de la barre d'outils Standard, cliquez sur le bouton . Pour arrter l'excution
du programme, ou bien fermez la fentre principale de l'application par
ou bien
arrter l'application par le bouton
en arrire-plan.
Test
er e
ester
ett compiler
L'excutable n'est gnr sur disque que s'il est compil, c'est--dire traduit dans un
format "binaire". Vous pouvez ou faire CTRL+F5 ou slectionner Excution |
Excution avec compilation complte.
Compiler seulement
Si vous ne souhaitez que compiler, c'est--dire crer l'excutable, choisissez par le
menu Fichier | Crer... EXE.
Denis
Szalkowski
Tous droits
rservs