Vous êtes sur la page 1sur 59

GUIDE DE

FORMATION

Windev

JEAN CLAVER MOUTOH


Ingénieur Informatique & Pétrole
05 162 543/04 329 929
Tavaux Dirigés Windev9 Jean Claver MOUTOH

C ours W inD ev N um éro 0

Que fait-on avec WinDev ?

WinDev est un AGL (Atelier de Génie Logiciel). Il vous permet de développer des applicatio ns dans
tous les domaines :
• Gestion (Comptabilité, Paie, Finances, Commerce, Stock, …)
• Industrie (robots, caisses, automates, balances, lecteur de badge, supervision, ...)
• Médical
• MultiMedia
• Internet
• Accès distant
•…
Les applications WinDev accèdent à toutes les bases de données, relationnelles ou non du
marché. Toutes les bases de données sont supportées. WinDev est livré en standard avec Hyper
File , une puissante base de données relationnelle, déjà utilisée sur des millions de sites !
WinDev est un outil de développement complet qui intègre tous les outils nécessaires au cycle de
réalisation d’une application.
Contrairement à d’autres langages de développement traditionnels, il n’est pas nécessaire de
chercher et de rajouter des modules pour pouvoir concevoir, tester et installer une application.
Le L5G (Langage de 5ème Génération) de WinDev, le W-Langage, vous étonnera par sa simplicité
: quelques heures suffisent pour appréhender le langage, une semaine suffit en général
pour maîtriser toute sa puissance !
WinDev permet de suivre, étape par étape, de la conception à la finalisation, le cycle complet du
développe- ment d’une application.

WinDev propose certainement l’environnement de travail le plus puissant, le plus facile et le plus
intégré du marché ! Vos équipes créeront facilement de superbes applications.
L’éditeur de fenêtres de WinDev est 100% WYSIWYG ("Ce que vous voyez est ce que vous aurez").
Il permet de réaliser facilement de superbes fenêtres reliées aux données.

Page 2 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

C ou rs W in D e v N u m éro 1

O b jectifs : Connaître les élém ents de base de l'éditeur W inD ev.


C réation d'un convertisseur Francs / Euro.

P ré req u is : Aucun

Pour ce prem ier cours, nous allons créer un convertisseur Franc / Euro.

Lancer W inD ev 9 en double cliquant sur son icône : .

La fenêtre d'accueil apparaît (si ce n’est pas le cas, ferm ez le projet, quittez puis
relancez W inD ev) :

Cliquez sur Crée r u n p rojet.

La fenêtre Assistant vous indique qu’elle va vous aider en fonction de vos choix. O n
n'en attend pas m oins d’elle.

Cliquez sur Su ivan t. C ette fenêtre va vous perm ettre de saisir le nom de ce nouveau
projet et le lieu de stockag e physique des élém ents constitutifs.

Page 3 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Inscrivez « convertisseur » dans la zone nom , il sera repris autom atiquem ent dans le
cham p du bas. C ontinuez en cliquant sur S u ivan t.

C réez un Type de projet Exécutable puis S uivant.

Page 4 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Prenez le Thèm e de G aba rit par défaut ou choisissez en un autre. Cliquez sur
Su ivan t.

Le choix des langues ne nous intéresse pas pour l'instant. C liquez sur Su ivan t

Page 5 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

C liquez sur Su ivan t et ign orer le s a sse m blages D O TN E T d an s le proje t

C om m e vous travaillez seul pour cet écran, faites un clic sur suivant.

Page 6 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

C hoisissez N e p as u tiliser d ’A n aly se puisque pour notre projet nous n'utiliserons


pas de fichiers de données.

C ontinuez en cliquant sur Su ivan t et T erm in er.

Page 7 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

L'assistant va vous poser la dernière question ? V oulez vous créer une fenêtre ?

Cliquez Crée r u n e fen être puis choisissez V ierg e dans l'onglet S tan d ard . V alidez par
OK.

A ce stad e nous avons une fenêtre vide da ns l'éditeur. Il nous reste à lui donner un
nom , une taille et définir quelques com p ortem ents.

Placez la souris dans la fenêtre vierge et faites un clic droit. D ans ce m enu contextuel,
valid ez D e scrip tion . V ous obtenez la fenêtre à rem plir com m e ci-dessous :

Page 8 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

R em plissez les divers cham ps de façons identiques et sélectionnez l'onglet IH M


(Interface H om m e-M achine).

C hangez la taille, le fait qu’elle ne sera pas redim ensionnable puis valid ez par O K .
R em arq uez les différences, vous avez m aintenant une fenêtre avec un nom , un titre
et une taille définie.
Page 9 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Il est tem ps de sauvegard er, C liquez sur Fich ier puis E n reg istrer.

Cliquez sur le bouton E n registrer.

A l'intérieur de cette fenêtre, placez 4 objets : 3 "ch am p s d e saisie" et un bouton


(faites un glisser/déposer ou drag & drop des cham ps dans la fenêtre « Bienvenue
dans le m éga convertisseur » ).

Le prem ier cham p se nom m era fran c et aura com m e libellé "Z one francs :". Cliq uez
2 fois dessus pour en m odifier les caractéristiques :

Page 10 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Le second se nom m era tau x et aura com m e libellé "Taux de change :".

Le troisièm e se nom m era con vertir et aura com m e libellé "R ésultat de la
conversion :". Le bouton (sans cliquer sur la petite flèche vers le bas placée juste en
dessou s) enfin se nom m era calcule et aura com m e libellé "calcule".

V oici à quoi doit ressem bler votre fenêtre (avec en surim pression le nom des
cham ps) :

Il nous reste à m ettre le code correspondant dans le bouton "calcule". Pour cela , faites un
clic droit dessus et choisissez "Cod e".

Page 11 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Entrez la séquence com m e indiqué ci-dessus puis ferm ez la fenêtre de l'éditeur de


code : cliquez sur l'icône de ferm eture en haut à droite de l’écran (croix du bas).

Il est tem p s d'e n registre r notre projet pa r le m e nu Fich ie r / E n re g istre r tou t.

U ne fois l'en registrem e n t a ch evé, nou s allo n s tester le projet, pour


cela cliqu ez sur La n cer le te st d u p roje t.

W inD ev vous dem a n d e de défin ir la prem iè re fen être de notre m éga projet, cho isissez
"d e p a rt" da ns la co m b o et v alidez.

V ou s av ez m a inten a n t deva nt vous notre su p er con vertisseu r. M ais a vou ez qu 'il est
fra nch em ent m oche :

- trop gra nd ;

- co u leu rs tristes ;

- et m êm e de s co m p ortem en ts pa r défa ut p eu pratiq u es.

Le sq u els ?

C 'e st sim ple : Essa y ez de sa isir le ta ux de con ve rsion de l'eu ro 6,559 5 7 !

C o m m e vous le voyez, le ch a m p ne prend q ue 2 chiffre s a prè s la virg u le ! D e plus vou s allez


être ob ligé de le sa isir à cha q ue fois.
N ous a llons rem édier à tous ce s petits déta ils :

Pour la ta ille de la fen être, pla cez votre so u ris sur l'a n g le inférieur droit de
la fen être "depart" :

U ne fois que le cu rseur ch a n ge d'a sp e ct, ten ez app uyé le bou to n ga uch e de la sou ris
et rem on tez vers l'a n gle su périeur ga uch e. R elâ ch ez la sou ris qu a nd la ta ille sou h a itée sera
atteinte.

La cou leur de fond n 'e st pa s très gaie. C lic droit n ’im p orte où da ns la fen être :
D e scrip tio n , puis on gle t S ty le et C o m b o "G a b a rit e n co u rs". Pren ez O ra n ge. Validez
2 fois pa r O k .
Page 12 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

C h a n geon s le co m p ortem ent du bou ton "ta u x", fa ites un clic droit de ssu s,
D e scrip tio n . Vérifiez que le typ e so it N u m é riq u e . M a inten a nt da ns la zone M a squ e
de sa isie , fra pp ez 9,9 9 9 9 9 . A ppliq u ez les m odifications pu is cliq u ez sur le bouton

E d ite r le co de (en ba s à ga uch e ).

Insérer le co de : M oi-m êm e = 6.5 5 95 7 da n s la zone "In itia lisa tion de ta u x ". Ainsi à ch a q ue
dém a rra g e du con vertisseur la zone de sa isie sera rem p lie. N otez que nous a u rions pu é crire :
ta ux= 6.5 595 7. M oi-m êm e dé signe l'objet da ns lequ e l on se trouve.

R eferm ez la fen être en cliqu a nt sur la cro ix du ba s (en h a ut à droite). R e la ncer le te st de


l'a pplication en cliq u a nt sur et u tilisez votre su p er con vertisseu r.

Page 13 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

C o u rs W in D e v N u m é ro 2

O b je ctifs : C onnaître les objets de base de W inD ev avec


m anipulation des :

com bo-box,
interrupteurs,
tables m ém oires,

P ré re q u is : C ours W inD ev Num éro 1.

Pour ce second cours, nous allons créer une fenêtre com porta nt plusieurs objets de
base dont nous allons étudier le com portem ent.

 Créez un projet nom m é TP2 sans Analyse et une fenêtre nom m ée


« sélecteurs » et « B onjour » pour Titre .

Insérez un cham p sélecteur à l’intérieur de votre fenêtre.

Allez dans sa description (clic droit / D escription) dans la zone N o m du cham p


inscrivez : Civilité. Idem dans le Lib e llé du cham p.

Dans la zone O p tio n s inscrivez :

M a d e m o ise lle
Madam e
M o n sie u r

Rajouter un cham p de saisie que vous nom m erez ch o ix avec com m e libellé « Elém ent
sélectionné : ».

Votre fenêtre doit ressem bler à ceci :

Page 14 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Vous allez faire en sorte que le cham p « Elém ent sélectionné » se renseigne selon la
Civilité. Pour cela, allez dans le C o d e du cham p « civilité » (clic droit) dans la zone
« A chaq ue m odification de Civilité » et saisissez le code suivant :

S E L O N C ivilité
CAS 1:
ch o ix = "M a d a m e "
CAS 2:
ch o ix = "M a d e m o ise lle "
CAS 3:
ch o ix = "M o n sie u r"
F IN

Com m e vous le rem arquez, W inDev ne renvoi pas le libellé du choix effectué m ais
l’ind ex (ou position) de l’élém ent (1, 2 ou 3).

Testez la fenêtre en cliqua nt sur G o.

Le s liste s d é ro u la n te s

Créez une nouvelle fenêtre que vous nom m erez « liste »


et « Liste déroula nte » en T itre . A droite de l’écran, cliq uez

sur le 2 ème onglet puis sur le bouton droit


de la souris pour pouvoir choisir N o u ve lle fe n ê tre . A

l’intérie ur, placez :

U ne com bo (C ré e r u n e co m b o ) que vous nom m erez


« liste » et qui aura com m e libellé « Civilité » (ne pas
saisir de liste de valeurs à afficher).

U n cham p de saisie nom m é « ch o ix » et ayant


« C h o ix » com m e libellé.

U n bouton nom m é « rem plir » et ayant com m e libellé « Rem plir la liste Civilité ». La

fenêtre ressem blera à ceci :

Page 15 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

N ous allons program m er le bouton pour qu’il rem plisse la com bo avec les élém e nts
souhaités (M ada m e, M adem oiselle, M onsieur). Puis nous allons définir le
com portem ent de la com bo pour qu’elle affecte le cham p « choix ».

Dans la zone « Clic sur re m p lir » du C o d e du bouton écriv ez le code suivant :

ListeSupprim eTout(liste) // Pour éviter d’ajouter les élém ents à


chaque clic sur le bouton
ListeAjoute(liste,"M adam e")
ListeAjoute(liste,"M adem oiselle")
ListeAjou te(liste,"M onsieur")

Vérifiez que votre liste soit correcte m ent rem plie en cliqua nt sur le bouton R e m p lir
puis en l’ouvrant avec la flèche vers le bas :

Dans la zone « sélection d’une ligne de… » du C o d e de la com bo C ivilité écrivez le


code suivant :

choix= liste..ValeurA ffichée

Par cette sim ple ligne vous dem andez à la com bo de copier la valeur affichée dans le
cham p « choix ».

S a u ve g a rd e z e t te s te z la fe n ê tre .

N ’oubliez pas d’utiliser l’aide pour approfondir vos connaissanc es !!

Le s ta b le s m é m o ire s :

Le cham p table perm et de sim plifier l'affichage et la saisie d'inform atio ns stockées en
m ém oire ou provenant d'un fichier de données, d'une vue ou d'une req uête. Une table
est com posée de lig nes et de colonnes. L'intersection d'une ligne et d'une colonne
définit une cellule. U ne table peut être gérée ligne par ligne, colonne par colonne ou
cellule par cellule.

Les inform ations affichées dans la table peuvent :

 être déterm inés par program m ation : on parle alors de T a b le M é m o ire ;

 prove nir d'un fichier de données ou d'une requête : on parle alors de T a b le


fich ie r.

Les tables perm ette nt de sélectionner un ou plusieurs élém ents de la table.

Page 16 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

P o u r cré e r u n ch a m p d e ty p e T a b le :

1. Sous l'éditeur de fenêtres, cliquez sur l'icône .

2. Cliquez dans la fenêtre à la position où le cham p doit être créé. L'assistant de


création d'un cham p table se lance autom atiquem ent.

Pour afficher les caractéristiques du cham p, sélectionnez l'op tion « D escription » dans
le m enu contextu el du cham p. D eux types d'inform ations peuvent être visualisé es :

 les inform ations concernant la table dans son ensem ble (il suffit de
sélectionner le nom de la table) ;

 les inform ations concernant chacune des colon nes de la table (il suffit de
sélection ner le nom d'une des colonnes de la table).

Pour notre exem ple, créez une fenêtre nom m ée « ta b le m e m » et


« Table m ém oire » pour Titre, créez un cham p de type table et
positionn ez le sur la fenêtre.

Indiquez à l’assista nt que vous allez rem plir la table vous-m êm e. Cliqu ez sur
T e rm in e r pour sortir de l’A ssistant, sans vous soucier des autres choix qu’il vous
prop ose. N ous allons m odifier m anuellem ent les propriétés de la table.

Pour ce faire, cliquez sur la table avec le bouton droit de la souris pour faire apparaître
le m enu contextu el. Choisissez « D e scrip tio n ».

N om m ez la table « m a ta b le ».

Créez 3 colonnes en appuyant 2 fois sur le bouton « N o u ve a u ».

Pour la prem ière colonne : Nom m ez la « N o m », son type restera T e x te , dans la zone
« Titre » de l’onglet « G é n é ra l » incrivez « Le N o m ». D ans la zone « ta ille d e
sa isie » inscrivez « 5 0 » . Ainsi l’utilisateur ne pourra pas inscrire un nom de plus de
50 caractères.

Pour la deuxièm e colonne : Nom m ez la « P ré n o m », son type sera T e x te , dans la


zone « T itre », inscrivez « Le P ré n o m » et 20 caractères de taille de saisie.

Pour la troisièm e colonne : Nom m ez la « A g e », son type sera N u m é riq u e , dans la


zone « T itre » inscrivez « A g e », dans la com bo « m a sq u e d e sa isie » trouv ez le
m asque « 9 9 9 » (en haut de liste), cela signifie que seuls des entie rs de 3 chiffres
m axim um seront acceptés.

U ne fois ces m anipulations réalisées vous pouvez cliquer sur « A p p liq u e r » et « O k »


pour valider vos choix.

Page 17 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Ajouter 4 Bouto ns :

Le prem ier se nom m era « re m p lirta b le » et aura com m e libellé « R e m p lir » ;

Le second se nom m era « su p lig n e » et aura com m e libellé « Su p p rim e r » ; Le

troisièm e se nom m era « vid e ta b le » et aura com m e libellé « V id e r la


ta b le » ;

Le quatrièm e se nom m era « q u itte r » et com m e libellé « Q u itte r ».

Voici une représentation de votre fenêtre :

N ous allons étudier les différe nts cod es perm ettant de rem plir la table avec des
inform ations, supprim er la lig ne sélectio nnée, vider com plètem ent la table et enfin
ferm er la fenêtre.

Dans la zone « C lic s u r re m p lirta b le » du bouton « R e m p lir », insérez le code


suiva nt (n’hésitez pas à em ployer le copier-coller pour éviter de le retaper) :

TableA joute(m ata ble,"Jesus"+ T A B+ "C hrist"+ TA B + 100 )


TableA joute(m ata ble,"D ieu "+ TA B+ "Em m a nuel"+ T A B + 10)
TableA joute(m ata ble,"M outoh "+ TA B+ " Cla ver"+ TA B + 13 )
TableA joute(m ata ble,"A gnéro "+ TA B + "Pa sca lyne "+ T A B + 22)
TableA joute(m ata ble,"M outoh "+ T A B+ "C hloé "+ TA B + 1)

« Jésus » correspond au Nom , « C hrist» au Prénom et « 100 » à l’âge. TAB


indique le changem ent de colonne.

Utilisez l’aide pour avoir plus de renseign em ents sur la fonction Tablea joute

Page 18 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Dans la zone « clic su r su p lig n e » de « S u p p rim e r », insérez le code suivant :

TableS u pp rim e(m atable)

Dans la zone « clic su r vid e ta b le » de « V id e r la ta b le », insérez le code suivant :

TableS u pp rim eTo ut(m atable)

Dans la zone « clic su r q u itte r » de « Q u itte r », insérez le code suivant :

Ferm e

Testez les différents bouto ns et appuyez sur la loupe (à coté du nom de la colonne)
pour tester son com portem e nt par défaut.

Com m e vous pouvez le constater, W inD ev est puissant et peu de lignes de codes
suffise nt. Il est bien évident que le rem plissage de la table peut être fait à partir de la
lecture d’un fichier.

Pour term iner ce cours, il nous reste à faire une fenêtre de départ com portant
3 boutons qui ouvriront les différentes fenêtres.

Créez donc une nouvelle fenêtre vierge que vous nom m erez « d e p art », son Titre sera
« B onjour ». Insérez -y 4 boutons : 3 serviro nt à lancer les fenêtres, 1 à quitter
l’application :

Pour indication, le code d’ouv erture d’une fenêtre est : ouvre, le code de ferm eture est
: ferm e. Je vous laisse m ettre le code correspondant.

Il ne vous restera qu’à ne pas oublier d’enregistrer cette fenêtre


pour pouvoir la déclarer com m e prem ière fenêtre du projet.

Dans la zone exploratrice des élém ents du projet, faites un clic


droit sur la fenêtre départ et choisissez « P re m iè re fe n ê tre d u
p ro je t ».

Page 19 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

C o u rs W in D e v N u m é ro 3

O b je ctifs : Travailler avec un fichier de données :

Etude du gestionnaire d’analyse,


M anipulation des tables m ém oires,
M anipulation de données,
Création d’états,

P ré re q u is : C ours W inD ev N um éro 1 et 2

L’objectif de cette leçon est de vous fam iliariser avec l’utilisation des fichiers, du
gestionnaire d’analyse et de la conception d’états.

Vous allez com m encer par créer un nouveau proje t nom m é TP3. Dans l’assistant, vous
sélection nerez votre thèm e préféré, confirm erez le choix de cré a tio n d ’u n e A n a ly se
et finirez le processus de l’assistant. U n nouvel assistant de création d’analyse va
apparaître, cliquez sur S u iva n t.

Vous pouvez choisir entre un M odèle Logique de D onnées et un M odèle C onceptuel de


D onnées. Cliquez sur S u iva n t pour choisir le M LD.

Dans la zone Nom de l’analyse appelez là : T P 3 et vérifiez qu’elle soit bien associée au
projet en cours, cliquez ensuite sur S u iva n t.

N ous ne donnero ns pas de m ots de passe à l’analyse donc cliquez encore sur
S u iva n t.

Cette nouvelle fenêtre vous dem ande de choisir le type de base de données que vous
voulez "attaquer". C ’est ici par exem ple que vous pourriez décider d’utiliser une base
de données tierce du type M ysql, Access ou autres. C om m e le but de cette leçon est de
travailler avec W inD ev nous allons faire en sorte de C ré e r u n e n o u ve lle d e scrip tio n
d e fich ie r. C e choix étant validé nous allons m aintenant créer notre structure de
fichier.

En fait nous allons program m er une m ini gestion de budget fam ilial. Pour cela on va
utiliser un seul fichier des m ouv em ents dans lequel on inscrira le descriptif des
opérations, la date de l’opératio n, le m ontant au débit ou le m ontant au crédit.
Cela devrait vous faire penser à votre relevé de com pte bancaire.

Dans la zone N o m , vous allez indiquer le nom suivant : M o u ve m e n t.


Rem arquez les cham ps suivants qui se rem plissent autom atiquem ent.
Vérifiez que la case « Le fichier possède un identifiant autom atique » soit cochée.
N ous allons ainsi créer un identifiant autom atique par W inDev. L’identifia nt autom atiq ue
est com parable à un com pteur, c’est lui qui vous garantit l’unicité de vos tuples.

Page 20 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Cliquez sur S u iva n t. La nouvelle fenêtre vous dem ande de confirm er le fait que vous
voulez travailler avec des fichiers de type H yp er file (Form at propriétaire W inD ev).
Cliquez sur S u iva n t p uis de nouveau sur S u iva n t. La nouvelle fenêtre vous propose
des optio ns RAD (R apid Application D evelopm ent). Le RAD est à oublier, c’est W inD ev
qui fait tout, vous n’apprendrez rien à le voir faire, il vaut m ieux que ça soit vous qui
créez que lui. Donc décochez ces cases et cliq uez sur T e rm in e r.

Vous voilà m aintena nt dans le gestionnaire d’analyse, vous vous trouvez plus
exactem e nt dans la fenêtre de description des fichiers. C ’est ici que nous allons
déterm iner la com position de chaque attribut de notre fichier m ouvem ent.

Vous pouvez rem arquer que notre identifiant est déjà créé « Idm ouvem ent » et vous
voyez la clé jaune à gauche qui sym b olise l’identifiant. Nous allons insérer les
rubriqu es suiva ntes :

Nom Lib e llé Type T a ille


Date Date de l’opération Date Sera rem pli
autom atiquem ent
D escriptif D escription de Texte 50
l’opération
D épense M ontant D ébit N um ériq ue (Form at 999 Sera rem pli
999,99) autom atiquem ent

Recette M ontant Crédit Idem Idem

Pour insérer, cliquez sur une ligne vide dans la rubrique choisie. A vous de bien
rem plir vos cham ps, cela ne devrait vous poser aucun problèm e. U ne fois la saisie
term inée, cliq uez sur O K .

Vous pouvez m aintenant R e to u rn e r so u s l’é d ite u r d e W in D e v . C hoisissez ensuite

Page 21 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

A lle r d ire cte m e n t d a n s l’é d ite u r W in D e v et O K .

Voici une représentation de ce que vous devriez obtenir

Ce drapeau sert à lancer la génération de l’analyse.


En effet, chaque fois que vous créez ou modifiez une
structure de fichier, vous devez l’activer pour
synchroniser l’analyse et les champs des fenêtres qui
accèdent aux données.

M aintena nt que votre fichier est décrit, il ne vous reste plus qu’à générer l’analyse.

N ous allons m aintenant fabriquer les fenêtres de notre applica tion. Allez dans le m enu
F ich ie r / N o u ve a u et cliqu ez sur Fe n ê tre . C hoisissez une fenêtre vierge.

Cette fenêtre sera la prem ière fenêtre de notre application. D ans sa description (clic
droit sur la fenêtre), vous lui donnerez les caractéristiques suivantes :

N om logique : d é p art
D escription : Fe n ê tre p rin cip a le d e l’a p p lica tio n
Titre : B ie n ve n u e d a n s vo tre m in i co m p te b a n ca ire

A p p liq u e z les m odificatio ns et cliquez sur O k.

Page 22 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

N ous allons insérer dans cette fenêtre une table m ém oire qui sera le conteneur du
fichier. C hoisissez un cham p table dans la barre d’outils et positionnez le sur votre
fenêtre. D ites à l’assistant que vous rem plirez la table vous-m êm e, cliquez sur
S u iva n t.

C hoisissez Type de « T a b le e n a ffich a g e » puis Te rm in e r. La table est définie par


défaut, allez dans la D e scrip tio n (clic droit sur la table).

Le nom de la table : Tm ouv


Respectez les mêmes
N om de la colon ne 1 : tdate conventions de nommage
que celles indiquées car tout
Type de la colon ne 1 : Date le reste du projet s’appuiera
Titre de la colon ne 1 : Date sur ces noms là !

N om de la colon ne 2 : tdescrip tion


Type de la colon ne 2 : Texte
Titre de la colon ne 2 : D escription de l’opération
Taille de saisie : 50

N om de la colon ne 3 : tdébit
Type de la colon ne 3 : N um érique
Titre de la colon ne 3 : D épense

N om de la colon ne 4 : tcrédit
Type de la colon ne 4 : N um érique
Titre de la colonne 4 : R ecette

N om de la colon ne 5 : clé
Type de la colon ne 5 : N um érique
M asq ue de saisie : 999 999 999.
Dans l’onglet IH M de cette 5 ème colon ne, décochez V isib le , nous m ettro ns dans ce cham p
l’identifiant de la lig ne. Il n’est pas nécessaire de le m ontrer à l’utilisateur, c’est pour çà que
je vous conseille de le m ettre invisible.

Page 23 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

U ne fois tous les cham ps renseignés, cliquez sur A p p liq u e r puis O K

Voici ce qu’il vous reste à concevoir pour term in er notre projet :

N om : ajout

N om : su pprim e

N om : im prim e

N om : qu itte

N om du ch am p : S olde
Type : N u m érique

Il m e sem ble que ça fait longtem ps que vous n’av ez pas


sauvegardé votre projet ! ce n’est pas très prudent… N ’oubliez pas de
déterm iner cette fenêtre com m e la prem ière fenêtre du projet

M aintena nt que le décor est planté, nous pouvo ns com m e ncer la program m ation.

La prem ier chose à faire est de dire à W inDev de nous créer le fichier M o u ve m e n t s’il
n’existe pas, pour cela allez dans le m enu Projet / C ode du projet et dans la zone
In itia lisa tio n d e T P 3 inscrivez le code suivant :

H Créatio nSiInexistant(M o uvem ent)

R e m a rq u e : C ette ligne indique à W inD ev de com m encer à chercher si le


fichier M o u ve m e n t existe, s’il ne le trouve pas il le conçoit. Le code placé
dans cette zone est exécuté avant le chargem ent de la prem ière fenêtre.

Le code du bouton Q uitter est très facile : Dans clic sur Q u itte r inscrivez :

Ferm e

Voyo ns m aintenant la décom p osition possible des événem ents. Il faut qu’au
C hargem ent de la fenêtre la table se rem plisse avec les enregistrem ents conten us
dans le fichier situé sur le disque dur. Pour cela nous allons parcourir l’ensem ble des
lignes du fichier « M o u ve m e n t.fic » et les placer les unes après les autres dans la table
m ém oire. C ’est ce que nous allons faire m aintenant.
Page 24 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Allez dans le code de la fenêtre dans la zone « In itia lisa tio n d e d é p a rt » et saisissez
le code suivant :

H LitPrem ier(M o uvem ent,IDM o uvem en t)


TANTQ U E PAS H EnD ehors
TableA joute(Tm o uv,M ouv em ent.Date+ TAB+ M o uvem ent.D escriptif+ TAB+ M ouve
m ent.Dépense+ TAB + M ouvem e nt.Recette+ TAB+ M ouvem ent.I D M ouvem ent)
H LitSuiva nt(M o uvem ent)
FIN

E x p lica tio n d u co d e :

H LitPrem ier(M o uvem ent,IDM o uvem ent) // Cette ligne ordonne à W inD ev d’ouv rir le
fichier M ouvem ent et de lire la prem ière ligne en plaçant les cham ps correspondants
en m ém oire.

TANTQ U E PAS H enD ehors // Ici on com m ence une boucle qui sera vraie tant que l’on
reste dans le fichier. Le m ot clé H endehors renv oie V rai si on est hors du fichier. D onc
PAS H enD ehors est vrai tant que la fin du fichier n’est pas atteinte. C ’est tout sim ple
en fait, non ?

La séquence tableajoute est connue, elle perm et de positionner du texte - ici les
rubriqu es du fichier - à l’intérieur d’un fichier.

H litsuivant(M ouvem ent) // Fait descendre le pointeur du fichier d’une ligne vers

Le bouton A jo u te r va ouvrir une fenêtre de saisie qui nous perm ettra de rentrer les
inform ations. Donc le code sera dans C lic s u r a jo u t :

O uvre (saisie)

Il est norm al que W inD ev vous renvoie un


m essage d’erre ur si nous essayons d’exécuter le
projet car la fenêtre saisie n’existe pas, créons-
la de suite.

Fichier / N ouveau / Fenêtre

Dans la description de la fenêtre :

N o m lo g iq u e : saisie
D e s crip tio n : Fenêtre de saisie
T itre : S aisissez votre op ération

Faites glisser les cham ps D a te , D e s crip tif , D é p e n s e , R e ce tte sur la fenêtre sa isie .

Page 25 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Cliquez sur un champ en tenant le bouton


gauche de la souris enfoncé, faite glisser et
déposez sur la fenêtre. N’hésitez pas à
changer la mise en forme du champ. Le fait
de faire glisser le champ vous garanti que
WinDev peut faire l’association entre le champ
sur la fenêtre et la rubrique du fichier.

Cet onglet vous permet de


sélectionner les fichiers
constituant votre analyse. Je
vous laisse chercher à quoi
correspondent les autres.

Votre fenêtre devrait correspo ndre à celle-ci :

Pour être sûr que chaque cham p est bien lié à une rubrique du
fichier, cliquez sur l’un d’entre eux et vérifiez dans la barre de
m essage en bas à gauche que le m essage « Lié à : M ouv em ent.XXXXXX » soit
prése nt.

Cette fenêtre ne com porte que 2 boutons, le bouton A n n u le r nous servira juste à
ferm er la fenêtre. V ous connaissez la séquence de code le perm ettant, ce n’est donc
plus la peine que je vous indique la m arche à suivre. En cas de problèm e je vous
rappelle que l’aide de W inD ev est accessible par la touche F 1 .

Consacro ns-nous au bouton V a lid e r, la valida tion consiste à placer les rubriqu es de la
fenêtre dans le fichier et à valider l’ajout. Pour placer les rubriques de la fenêtre dans
le fichier, l’ordre est le suivant :

EcranV ersFichier(saisie) // saisie étant le nom de la fenêtre


Page 26 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

La validation d’ajout est com m andée par l’ordre suivant :

H Ajoute(M ouvem ent) // M ouvem ent étant le fichier dans lequel on ajoute

Il nous reste plus qu’à ajouter un ordre de ferm eture de la fenêtre.

Voici le code intégral du bouton V a lid e r :

EcranVersFichier(saisie)
H Ajoute(M ouvem ent)
Ferm e

Vous pouvez faire en sorte de program m er le contrôle pour qu’il vérifie que l’on n’a
qu’un débit ou qu’un crédit, ou alors que l’un des cham ps n’est pas vide. Le code à
placer juste ava nt celui que l’on voit ci-dessus pourrait ressem bler à ceci :

SI D ate= "" O U Descriptif= "" O U (D épense= 0 ET R ecette= 0) ALO RS


Info("L'un des cham ps n'a pas été rem pli !")
Ferm e
FIN
SI D épense < > 0 ET Recette < > 0 A LO RS
Info("Vous ne pouvez saisir qu'un m onta nt au D ébit ou alors au Crédit !")
Ferm e
FIN

Testez votre fenêtre avec le bouton ou en cliquant à droite de l’écran sur la


Fenêtre avec le bouton droit pour choisir T e s te r. Insérez des valeurs dans les cham ps
et validez.

Pour voir si votre nouvelle ligne est présente dans le fichier, allez dans le m enu O u tils
/ W D M A P et choisissez M o u v e m e n t com m e N o m d u fich ie r.

M aintena nt que vos lignes s’insèrent, lancez le projet en cliquant sur G O .

Cliquez sur le bouton A jo u te r, saisissez et validez un nouvel enregistrem ent. Vous


pouvez constater que la table m ém oire ne réa git pas correctem ent : en effet
l’insertion n’a pas été détectée et donc la table m ém oire n’est pas synchronis ée avec
le fichier. N ous allons essayer de rem édier à ce problèm e. En fait, il faudrait que
lorsque la fenêtre sa isie se ferm e, la fenêtre d é p art recharge la table m ém oire.

Placez-vous dans le code de la fenêtre d é p a rt, vous devez trouver une zone nom m ée
« p rise d e fo cu s d e d é p a rt » . La prise de focus est le fait de rem ettre active une
fenêtre inactive, en cliquant sur la barre de titre par exem ple.

Page 27 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Voici le code à insérer dans cette zone :

TableS u pp rim eTo ut(Tm ouv) // Efface la table m ém oire pour éviter d’insérer les
enregistrem ents à la suite des précédents
H LitPrem ier(M o uvem ent,IDM o uvem en t)
TANTQ U E PAS H EnD ehors
TableA joute(Tm o uv,M ouv em ent.Date+ TAB+ M o uvem ent.D escriptif+ TAB+ M ouve
m ent.Dépense+ TAB + M ouvem e nt.Recette+ TAB+ M ouvem ent.I D M ouvem ent)
H LitSuiva nt(M o uvem ent)
FIN

Testez cette m odification, com m e vous le voyez, les com porte m ents sont m aintenant
cohére nts.

Intéressons-nous au bouton S u p p rim e r.


Dans la table, nous avons une rubrique qui est l’identifiant de la ligne.
Pour supprim er cette ligne dans le fichier nous allons donc rechercher cet identifiant dans
le fichier et supprim er la ligne correspondante.

Voici la séquence de code nécessaire :

H LitR echerche(M ouv em ent,IDM ouvem ent,clé)


SI H Tro uve ALO RS
H Supprim e(M o uvem ent)
Info("La suppression est effective")
SINO N
Info("G rave problèm e de l'applicatio n")
FIN

E x p lica tio n s :

La prem ière ligne fait rechercher dans le fichier M ouvem ent et sur l’identifiant la
valeur du cham p clé pointée dans notre table m ém oire. C e n’est pas parce que la
rubrique clé est invisible que nous ne pouvons pas en connaître la valeur.

Si on trouve la lig ne ayant le m êm e identifiant que clé alors on la supprim e et on


affiche un m essage indiquant la bonne m arche des opérations. Sinon dans un cas fort
im probable où il ne trouve pas l’enregistrem ent on inscrit un m essage d’erreur.

Je vous laisse le soin de tester cette nouvelle fonctionnalité de votre program m e.


Com m e vous venez de le rem arquer, la m ise à jour de la table m ém oire ne s’est pas
Faite. La valeur a été supprim ée m ais la table ne le sait pas. N ous allons rem éd ier à ce
problèm e.

Le code de réafficha ge de la table m ém oire existe déjà (ex : dans la zone de p rise d e
fo cu s de la fenêtre d é p a rt) nous allons donc ré-exécuter un traitem ent existant.
Sous la ligne « Info("La suppression est effective") » inscrivez la com m an de suivante :

ExécuteTraitem e nt(depart,trtPriseF ocus)

Page 28 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Cette com m ande fait rejou er un traitem ent existant.

Testez et vérifiez la cohérence de votre projet.

M aintena nt n o u s a vo n s à ca lcu le r le so ld e (D ébit – Crédit), pour ce faire nous


allons créer une procédure qui scannera le fichier et fera les calculs pour nous.

2) Cliquez sur Nouvelle procédure et


nommez là calcsolde

1) Choisissez Procédures locales dans la


zone de sélection du bas d’écran

Rem arqu es : Les procédures locales ne sont vues que par les objets de la
fenêtre, les procédures globales sont actives pour tous les élém ents du projet

M aintena nt, vérifiez bien que vous vous trouv ez dans la zone co d e de la procédure
ca lcso ld e .

Le code doit parcourir le fichier M ouv em ent, affecter le contenu de d é b it dans une
variable, le contenu de cré d it dans une autre et cela jusqu'à la fin du fichier et
ensuite affecter la différe nce entre le débit et le crédit au cham p so ld e .

Voici le code de la procédure :

PRO CED U RE calcsolde()

sdebit,scredit sont des réels= 0 // on affecte la valeur 0 aux deux variables

H LitPrem ier(M o uvem ent,IDM o uvem en t)


TANTQ U E PAS H .endehors
Sdebit+ = M ouvem ent.D épense // + = signifie
Sdebit= S debit+ M ouvem ent.Dé pense
Scredit+ = M ouv em ent.R ecette
H LitSuiva nt(M o uvem ent,IDM o uvem ent)
FIN

solde= sd ebit-scredit

Le code est suffisam m ent sim ple pour ne pas avoir à l’expliquer. La question qui se
pose est où lancer ca lcso ld e . C om prenez qu’il nous faut activer cette procédure aux
m êm es endroits où l’on a activé le rafraîchissem ent de la table m ém oire.

Page 29 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Je vous laisse m odifier les zones de code en conséquence (dans le co d e de la fenêtre


d é p a rt). N ’oubliez pas de tester la cohérence de votre projet.

Il ne nous reste plus qu’à fabriquer l’état de sortie. C hoisissez Fich ie r / N o u ve a u /


E ta t. C hoisissez un état de type T ab le a u . En cliquant sur Su iv a n t W inD ev vous
dem ande la source de donn ée, il vous faut préciser que ce sont des enregistrem ents
prove nant d’un fichier H yp er file. Sélectionnez le fichier M o u ve m e n t, la clé de
parco urs est un identifiant qui sert pour donner l’ordre de tri. C ontinuez à appuyer sur
S u iva n t, je vous laisse découvrir les questions posées et à vous de prendre les
bonnes décisions. V ous savez lire, donc vous prendrez les bonnes décisions ! Je vous
dem ande juste d’ap peler l’état E ta tm o u v.

Rem arqu es : Les détails du choix du style, de la m ise en form e sont à votre
discrétion, faites com m e bon vous sem ble. N ’oubliez pas que le client n’a pas les
m êm es goûts graphiques que vous, donc faites sobre. Eviter les styles
« N o ir su r fo n d N o ir » « R o se su r fo n d V e rt » et autres singularités
visuelles qui feront penser à l’utilisateur qu’il devient déficient visuel.

U ne fois votre état fini et enregistré, entrez dans la zone co d e du bouton Im p rim e :

iAperçu(i100) // O n enverra l’état à l’écran avec un zoom de 100 %


iIm prim e Etat(Etatm ouv) // G énération de l’état et utilisation des param ètres définis
par iApercu

Rem arques : Les C om m and es W inD ev sont classées. Celles qui com m e ncent
par H sont des com m andes d’accès aux fichiers, celles qui com m encent par i
sont des com m and es de pilotage d’état.

N ’oubliez pas de re fa ire ce T P p lu sie u rs fo is, le but étant de se passer du


G uide papier et d’apprécier la facilité avec laquelle on peut travailler avec
W inD ev.

Page 30 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

C o u rs W in D e v N u m é ro 4

O b je ctifs : Travailler avec plusieurs fichiers de donn ées

Création d’un M CD ,
G estion des cham ps indexés,
M anipulation de données,
Liaison des données,

P ré re q u is : C ours W inD ev N um éro 1, 2 et 3

L’objectif de ce cours est de vous fam iliariser avec l’utilisation des fichiers liés.

N ous allons créer une m ini G PAO (G estion de P rod uction A ssistée par O rdinateur). Vous
travaillez pour un assem bleur inform atique, son processus de prod uction est le suiva nt :
Il reçoit les différentes pièces détaché es (disque dur, m ém oires, cartes
m ères… ) et assem ble ces différentes pièces pour en faire un m odèle fini. Com m e vous
pouvez le percevoir, le m odèle conceptuel travaillera avec 2 entités (Ensem ble fini et
com posan ts). V oici une représentation du M CD :

En sem ble C om pos ant

R e fE n s R e fC o m p
D ésignationE 0,n Intègre 1,n D ésignationC
PrixV H T PrixA H T
Q té

R e m a rq u e : Je n’ai pas besoin de vous rappeler que les propriétés


souligné es et en gras désignent les identifiants de l’entité, donc je ne le fais
pas.

Vous allez com m encer par créer un nouveau projet nom m é TP4. Dans l’Assistant,
vous sélectionnerez votre thèm e préféré, confirm erez le choix de création d’analyse et
finirez le processus de l’assista nt. U n nouvel assista nt de C ré a tio n d ’a n a ly se va
apparaître. Vous pouvez ensuite valider les différentes fenêtres de l’Assistant jusqu’à
arriver à l’Assistant de C ré a tio n d e fich ie r.

Restez sur C ré e r u n e n o u ve lle d e s crip tio n d e fich ie r, donnez E n se m b le com m e


N om et O rd in a te u rs a sse m b lé s
com m e Libellé. Pensez à «
décocher » Le fich ie r p o ssè d e u n
id e n tifia n t a u to m a tiq u e puisque
nous avons R e fe n s qui sera notre
identifiant.

G ard ez H y p e r F ile R é se a u o u
M o n o p o ste com m e Ty p e d e b a se
Page 31 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

d e d o n n é e s et ne laissez coché que l’option u n e fe n ê tre e n m o d e ta b le dans la


dernière partie de l’assistant.

M aintena nt la fenêtre suivante apparaît c’est elle qui va vous perm ettre de saisir toutes
les propriétés de votre entité. Rem plissez-la pour qu’elle ressem ble à ceci :

Pour RefEns, il faut être en


Clé unique et Texte taille
15, DésignationE est en
Texte taille 80 et PrixVHT
est en Monétaire Windev.

U ne fois rem plies, cliquez sur O k et retournez sous l’éditeur de W indev. Enregistrez.

Page 32 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Attention un écran va vous dem ander si vous voulez créer une fenêtre ou allez sous
l’éditeur, cliquez sur A lle z d ire cte m e n t d a n s l’é d ite u r d e W in d e v pour rester dans
l’analyse.

Si vous regardez bien votre éditeur d’analyse en haut vous devez découvrir une barre
d’outils com m e celle-ci :

Voyez les utilisations des différentes icônes en passant le curseur de la souris dessus.

Com m e vous êtes dégourdis et intelligents je vous laisse finir de concevoir le m odèle !

Voilà à quoi vous devez arriver :

Vous venez donc de créer le M o d è le Lo g iq u e d e D o n n é e s (M LD ). Enregistrez.

A tte n tio n : N ’oubliez pas que ce n’est pas parce que l’analyse est créée que les
fichiers sont physiquem ent créés sur votre disque dur… A llez dans le code du projet
« Projet / C ode du projet » et inscrivez la séquence suivante dans la zone
« Initialisation de TP4 » :

H Créatio nSiInexistant(C om posant)


H Créatio nSiInexistant(Ense m ble)
H Créatio nSiInexistant(Intè gre)
H G èreIntégrité("* ", "*", hCardinalité+ hE nM odification+ hEnSuppression, Faux)

La dernière ligne indique à W inD ev de ne pas se soucier de gérer l’intégrité


référentielle, nous le ferons nous-m êm e.

M aintena nt que l’analyse est créée, nous allons com m encer à construire notre
application. C hoisissez F ich ie r / N o u ve a u / Fe n ê tre .

Créez une fenêtre nom m ée M e n u qui sera la prem ière fenêtre du projet. Faites en
sorte qu'elle ait les caractéristiques suivantes :

O nglet G é n é ra l :
N om logique : M enu
D escription : Prem ière fenêtre du projet
Titre : Bienvenue dans la M ini G p

O nglet IH M :
Taille : Taille 640*480

O nglet D é ta il :
Type de fenêtre : M ère M di
Page 33 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

R e m a rq u e : U ne fenêtre m ère M DI est obligatoirem ent la prem ière fenêtre


d'un projet W inD ev. Cette fenêtre perm et d'affich er toutes les fenêtres de
l'application.

U ne fenêtre m ère M D I a les caractéristiq ues suivantes (non m odifiables) :


bords m odifiables, bouton d'iconisation, d'agrandissem ent, m enu systèm e,
barre de titre, barre d'icônes, possibilité d'avoir un m enu déroulant et des
barres outils.

Dans une fenêtre m ère M D I, seuls les cham ps situés dans la zone "b arre
d'icônes" peuvent être en saisie. En dehors de cette zone, aucun cham p ne
peut être en saisie, aucun clic souris n'est actif.

N ous allons placer une barre d’outils dans cette fenêtre d é p a rt, pour cela cliq uez sur

l’objet C ré e r u n e b a rre d ’o u tils et placez le


dans le bord supérieur gauche de la fenêtre. Faites un clic d ro it sur ce nouvel objet
et allez dans D e scrip tio n . N ous allons placer 5 boutons dans cette barre d’outils (un
pour saisir les nouveaux com posant, un pour créer des ensem bles, un pour im prim er
la liste des com posants, un pour im prim er l’ensem ble et ses com posants, le dernier
pour quitter l’application).

Vous allez donc cliq uer sur le bouton C ré e r puis choisissez B o u to n . Le résultat
obtenu devrait ressem bler à ceci :

Cliquez sur B o u to n 1 , puis sur le bouto n E d ite r, dans cette fenêtre D e s crip tio n d ’u n
b o u to n saisissez n c dans la zone N o m , supprim ez le libellé par défaut, cliquez sur
C a ta lo g u e … pour la zone Im a g e .

Le catalogue app araît, sur la gauche choisissez seulem ent 1 6 * 1 6 (nous n’aurons que des
petites im ages), dans la zone R e ch e rch e frapp ez « nouveau » puis appuyez sur
le bouton R e ch e rch e r.

Pren ez le 4 ème bouton de la 4 ème ligne puis validez. D ans l’onglet A id e de la fenêtre
descriptio n, dans la zone B u lle d ’a id e inscrivez S a isie d ’u n n o u v e a u co m p o sa n t

Page 34 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Pour les boutons suivants, faites de m êm e en suivant les instructio ns suivantes :

B o u to n s Nom B u lle d ’aid e


Bouto n2 Créer Créer des ensem bles
Bouto n3 Im prim eC Im prim er les com posants
Bouto n4 Im prim eE Im prim er les ensem bles
Bouto n5 Ferm er Q uitter l’application

Vous choisirez les icônes les plus en phase avec le but du bouton.

R e m a rq u e : S i vous avez des difficultés pour placer les boutons


(chevauc hem ent par exem ple), allez dans leur onglet D é ta il et affectez leurs les
dim ensions suivantes : largeur 32, hauteur 24.

Voici un exem ple de ce que devrait être la barre d’outils :

N ous allons créer les 4 fenêtres filles nécessaires pour faire fonctionner notre application
(fenêtre filles car elles doivent s’exécuter à l’intérieur de la fenêtre m ère. Pour le bouton
Q u itte r, je vous laisse m ettre le code
Correspondant , vous n’av ez plus besoin de m on aide, sinon retour aux TP précédents.

Pour la prem ière fenêtre associée au bouton , respectez les consignes ci dessous :

O nglet G é n é ra l d e la d e scrip tio n


N om logique : G com po Le code d’ouverture de la fenêtre
D escription : G estion des com posants fille sera :
OuvreFille(Gcompo)
Titre : G estion des com posants

O nglet IH M
Largeur : 500
H auteur : 350
Position : R elatif à la m ère

O nglet D é ta il
Type de fenêtre : Fille M di
Voici à quoi elle devrait ressem bler :

Page 35 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Ces 3 champs sont liés avec les champs du fichier Composant Créez 2
boutons :
(faites-les glisser depuis l’onglet à droite de l’écran). Si BAjout et
certains ont des difficultés : retour au TP3. Faites en sorte que BSup
RefComp ait un masque de saisie TOUT EN MAJUSCULES.

Nom de la table mémoire : Table1


RefComp : type texte longueur 15
Désignation : type texte longueur 80
PrixAchat : type numérique (Titre : Prix d’Achat)
Choisir dans l’assistant Je veux remplir moi-même la table
Mettez la table en Affichage seulement (sinon la saisie ne serait pas validée)
voir TP3

M aintena nt analyso ns le com portem ent que devra avoir cette fenêtre à l’ouverture :
Elle devra parco urir le fichier C om posant et afficher les tuples dans la table m ém oire s'il
y en a.

Le bouton A jo u te r devra :

. Inscrire la valeur des 3 cham ps dans le fichier correspondant en interceptant une


erreur de doublonn age si l’utilisateur saisi 2 fois une référe nce existante,
. Il devra aussi m ettre à blanc les 3 cham ps pour préparer une nouvelle saisie,
. Réafficher la table m ém oire (supprim er le contenu existant et re-écrire avec le
contenu du fichier),
. Et enfin avertir l’utilisateur que tout s’est bien passé.

Le bouton S u p p rim e r devra :

. Supprim er physiqu em ent la ligne pointée dans la table m ém oire


. Réafficher la table m ém oire

Page 36 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Voici les différents codes (Ils ont déjà été étudiés à la leçon 3) : Nous allons créer une

procéd ure locale a ffic h e ta b le qui aura pour rôle de réafficherla table m ém oire

(supprim er le contenu existant et re-écrire avec le conte nu du fichier) :

TableS u pp rim eTo ut(Table1)


H LitPrem ier(Com posant,RefC om p)
TANTQ U E H .trouve ET PAS H .EnD ehors
TableA joute(Table1,Com p osant.RefC om p+ TAB+ C om posant.D ésignation C + TAB+
Com p osant.PrixAH T)
H LitSuiva nt(Com posant,RefC om p)
FIN

Cette séq uence devrait vous être fam ilière donc je ne vous la com m ente pas, sinon
retour au cours 3.

Rappel pour faire une procéd ure locale cliquez sur « Procéd ures locales » en bas de
l’écran :

Clic droit dans cette zone et Code pour


activer le processus de création de la
procédure.

Initialisation de G com po (la fenêtre) :

// A ppel de la procédure affich etable


affichetable()

M aintena nt on est sûr que dès que cette fenêtre s’ouvrira, la table m ém oire sera en
phase avec le conte nu du fichier.

R e m a rq u e : la table m ém oire vous apportera plus de souplesse et une gestion


plus fine des enregistrem en ts et des lignes dans certains cas.

Voici le code du bouton B A jo u t :

EcranVersFichier() // Transfère les valeurs contenues dans les cham ps de la fenêtre


// dans la zone de structure du fichier
H Ajoute(C om posant) // Passe la structure physiquem ent dans le fichier
RAZ(Vrai)// Efface les valeu rs contenues dans les cham ps liés pour saisir un nouveau
com posant
affichetable()

Page 37 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Voici le code du bouton B S u p :

H LitR echerche(C om posant,R efC om p,R efC om p) // Recherche dans la table Com p osant,
// sur la rubrique R efCom p, la valeur contenue dans RefC om p de Table1
SI H Tro uve ALO RS // S i la valeur est trouvée alors
H Supprim e(Com posant) // O n supp rim e physiquem ent la
ligne dans le fichier Com p osant
Info("Sup pression réussie") // O n inform e l’utilisateur de la
réussite de la suppression
affichetable()
SINO N // S inon, on n’a pas trouvé ?!!
Info("Il y a un boulon dans le potage") //
FIN

Enregistrez la fenêtre et testez votre projet sans oublier de définir qu’elle est la 1 ère
fenêtre du projet (M e n u ), norm alem e nt les com portem ents doivent être cohérents. Dan s le
cas contraire, reprenez le support et vérifiez que vous n’avez pas oublié quelqu es
instructions.

N ous allons m aintenant faire la fenêtre la plus intéressante au niveau intellectuel, celle
qui gère l’assem blage d’un ordinateur.

Créez une nouvelle fenêtre (Fichier / N ouveau / Fenêtre). Pren ez une fenêtre vierge et
enregistrez la sous G e n se m b le .

N ’oubliez pas d’en faire une fenêtre fille (cf. : étap es identiques à la fenêtre G co m p o )
et de m ettre le code d’ouv erture de cette fenêtre dans le deuxièm e bouton de la barre
d’outils de la fenêtre d é p a rt.

Voici la fenêtre telle quelle devrait être :

1 2

4 5 6 7

9
8
10

11 12 13

Page 38 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

O b je t N ° Nom R ô le
1 RefEns Lié à Ensem ble.RefEns (TO UT EN M AJUSCULES )
2 PrixVH T Lié à Ensem ble.PrixV HT
3 D ésignation Lié à Ensem ble.D ésignation
4 BPrem ier Bouton nous positio nnant sur le prem ier enregistre m ent du
fichier Ensem ble
5 BPrecedent Bouton nous positionnant sur l’enregistrem ent précédent
6 BSuivant Bouton nous positio nnant sur l’enregistrem ent suivant
7 BDernier Bouton nous positio nnant sur le dernier enregistre m ent du
fichier Ensem ble
8 Table1 Table m ém oire contenant des rubriqu es sim ilaires à la
structure de C om posant
9 BAjo ut Bouton nous perm ettant d’ajouter un com posant à
l’ensem ble
10 BS upprim e Bouton nous perm ettant de supprim er un com posant à
l’ensem ble
11 BNouveau Bouton nous perm ettant de créer un nouvel ensem ble
12 BValide Bouton nous perm ettant de valider un ensem ble
13 BSupp Bouton nous perm ettant de supprim er un ensem ble

Analyse des élém ents de la fenêtre G e n s e m b le .

A l’ouv erture de la fenêtre dans le code d’initialisation, nous devrons nous positionner sur
le prem ier ensem ble (s’il existe) et recherc her tous ces com posa nts constitutifs.

Voici com m ent faire :

Il nous faut lire la référence de l’ensem ble (RefE ns), parco urir le fichier de liaison
(Intègre) sur la clé RefEns, tant que l’on trouve Ensem ble.R efEns= Intè gre.RefEns il
nous faut cherc her dans la table com posant la clé de liaison (Intègre.R efC om p =
Com p osant.RefC om p) et récup érer Intègre.Q té. Alors relisez en ayant l’analyse en tête.

N ous allons créer une fonction (en fait une procéd ure, W inD ev ne faisant pas de
différe nce entre fonction et procédure) qui, prenant en param ètre le code RefEns,
nous rem pli la table. Facile et efficace.

PRO CEDURE rem plir (code)


TableS u pp rim eTo ut(Table1)
FichierV ersEcran(G e nsem ble) // on affecte aux cham ps de la fenêtre les données liées
H LitR echerche(Intègre,R efEns ,code) // O n fait rechercher dans le fichier Intègre une
valeur de RefEns égale à code
TANTQ U E H Trouve ET PA S H EnD ehors
H LitR echerche(C om posant,R efC om p,Intè gre.R efC om p) // A vous de trouver
TableA joute(Table1,Com p osant.RefC om p+ TAB+ C om posant.D ésignation C + TAB+
Com p osant.PrixAH T + TAB+ Intè gre.Q té)
H LitSuiva nt(Intègre,RefE ns)
FIN

Page 39 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

En fait, com m e vous pouvez le voir, nous veno ns de « jongler » avec 3 fichiers sans
trop de difficultés. R egardo ns le code d’initialisation de la fenêtre :

H LitPrem ier(Ensem ble,R efEns)


SI H NbEnr(Ensem ble)> 0 ALO RS // si le fichier Ensem ble contient au m oins un
enregistrem ent
rem plir(E nsem ble.R efEns)
SINO N
Info("Le fichier est vide")
FIN

Voyons le code nécessaire aux boutons 4, 5, 6 et 7 (pour les icônes, faites un tour du
côté des flèches en 16x16). Je vous donne le code du bouton 4 , vous êtes
Suffisam m ent aguerri pour pouvoir créer le code des bouto ns 5, 6 et 7.
(Si vous ne savez pas… retour, au TP 3).

N ous allons traiter le bouton 9 . Ce bouton doit nous perm ettre de sélectionner dans le
fichier C o m p o sa n t le com posant que nous voulo ns insérer dans la table m ém oire.
N ous allons voir si W inD ev peut nous générer la fenêtre qui va bien. Allez sur Fichier /
N ouveau / Fenêtre. Cherch ez une fenêtre nom m ée V isio n p lu s et validez.

Dans l’A ssistant qui arrive, décochez A ve c co d e d e ra fraîch isse m e n t


a u to m a tiq u e , puis cliq uez sur S u iva n t 2 fois, ensuite cliquez sur C o m p o sa n t,
cliquez encore sur S u iva n t, vérifiez que tous les cham ps soient cochés, cliquez encore
sur S u iva n t 2 fois. Prenez une taille 640*480. Puis saisissez se le ctio n com m e N o m .
Enfin cliquez sur Te rm in e r.

Vous avez m aintena nt une fenêtre fonctionnelle dans laquelle on peut supp rim er le bouton
N o u ve a u (on peut utiliser la création de com posants avec notre 1 er bouton du m enu).
R éduisez-la pour quelle soit plus petite. Voici à quoi elle pourrait ressem bler :

Page 40 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Regardons com m ent nous pourrions m odifier le code pour qu’il nous soit utile. Allez
dans le code du bouton O K . V ous pouvez voir que la fenêtre retourne vra i si on clique sur
O K , faux sur A n n u le r. Q ui dit band eau déplacé dit structure m ém oire du fichier contena nt
les valeurs recherchées ! Donc, nous n’aurons qu’à lancer la fenêtre et tester si elle
retourne vra i.

Ferm ez la et retournez sur G e n se m b le dans le code du bouton B A jo u t. S aisissez la


séque nce de code suivante :

resultat est un booléen= Faux


resultat= O uvre(selection)
SI resultat= Vrai ALO RS // la fenêtre nous a renvoyé vrai, donc le bande au a été
déplacé
TableA jouteLigne(T able1,C om posant.R efC om p,Com p osant.D ésignationC ,C om po
sant.P rixA H T)
FIN

M éditez sur la différence entre ta b le a jo u te et ta b le a jo u te lig n e (l’aide, touche F1 ).

Sauveg ardez et exécutez la fenêtre, norm alem ent le clic sur le bouton B A jo u t lance
bien la fenêtre se le ctio n qui nous retourne vrai ou faux selon le bouton cliq ué.

Pour saisir la Q té , cliquez dans la colonne pour saisir le nom bre souh aité. N ’oubliez
pas de vérifier que la Table est En sa isie et d’avoir seule la rubrique Q té En sa isie /
a ctif, les autres restant en m ode A ffich a g e se u le m e n t.

Pour le bouton 10 (B S u p p rim e ), la séqu ence de code a déjà été étudiée lors du TP3.
Pour le bouton N ouveau (B N o u ve a u ), il vous faut program m er un traitem ent qui
efface les cham ps 1, 2, 3 et la table m ém oire, vous savez faire.
Le bouton S upprim e (B S u p p ) va nous obliger à sca nner 2 tables et supprim er les
référenc es « Ensem ble » recherchées. Il faut donc prendre la valeur du cham p 1
(R efE ns), parco urir la table Intègre sur le cham p R efEns et supprim er tous ceux égaux au
cham p RefEns. Et ensuite le supprim er dans la table Ensem ble.

Voici une séquence de code qui devrait être efficace :

SI O uiN on("Voulez vous vraim ent supprim er cet enregistrem ent ?")= O ui A LO RS
H LitR echerche(In tègre,R efEns ,R efEns)
TANTQ U E H Trouve ET PA S H EnD ehors
H Supprim e(Intè gre)
H LitSuiva nt(Intègre)
FIN
H LitR echerche(En sem ble,R efEns,RefEns)
SI H Tro uve ALO RS
H Supprim e(Ensem ble)
Info("La suppression est réussie")
H LitPrem ier(Ensem ble,R efEns)
FIN
FIN

Page 41 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

La séquence du bouton V alid e r va être un peu plus rude. En fait, lorsqu’un nouvel
ensem ble est créé ou m odifié par l’adjonction d’un nouvea u com posant, il va nous
falloir faire plusieurs actions différentes.

Il faut supprim er l’ensem ble existant dans le fichier pour le recréer avec ses nouveaux
com posants, donc on com m ence par une phase de suppression (voir code ci-dessus)
et on achève par une phase d’insertion dans le fichier.

Le code est long m ais n’est pas com plexe, pren ez le tem ps de l’étudier.

i est un entier

H LitR echerche(En sem ble,R efEns,RefEn s)


SI H Tro uve ALO RS // l'enregistrem ent existait dans le fichier, on va le supprim er
H LitR echerche(Intèg re, R efEns, R efEns)
TANTQ U E H Trouve ET PA S H EnD ehors
H Supprim e(Intè gre)
H LitSuiva nt(Intègre)
FIN
H Supprim e(Ensem ble)
FIN
// M ainte nant inscrivons l'ensem ble dans le fichier
Ensem ble.RefEns= RefEns
Ensem ble.D ésignati onE= Désig nationE
Ensem ble.PrixVH T= PrixVH T
H Ajoute(Ensem ble)

// R em plissons le fichier Intègre


PO U R i= 1 A TableO ccurrenc e(Table1) // Pour i= 1 aux m ax de la table m ém oire
Intègre.R efCom p= T able1.RefC om p[i] // [i] indique l'indice de la lig ne
Intègre.R efEns= RefEns
Intègre.Q té= Table1.Qté[i]
H Ajoute(Intègre)
FIN
Info("L'ajout c'est bien passé")

N ’o u b lie z p a s d e sa u ve g a rd e r vo tre œ u vre .

Le troisièm e bouton de la barre d’outils sert à im prim er la liste des com posants, vous
avez déjà étudié la procéd ure dans le TP 3 .

Page 42 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

N ous allons nous laisser guid er par l’Assistant pour faire un état avec des données
prove nant des 3 tables. Allez dans Fich ie r / N o u ve a u / E ta t.

C hoisissez ensuite un type d’état ta b le a u , cliquez sur S u iva n t.

Vérifiez que les données proviennent bien d’une requête et cliquez sur S u iva n t.

Faites lui com pren dre que les données proviennent d’une req uête que vous voulez
définir m aintenant, cliquez sur S u iva n t.

M aintena nt vous devez avoir cette fenêtre à l’écran :

Cliquez sur cette flèche pour


faire passer les champs de Cliquez ici pour indiquer à
l’analyse dans la liste des l’état que vous désirez un tri
éléments de la requête croissant sur RefEns

Cliquez ensuite sur S u iva n t. A la question « Voulez -vous des ruptures dans l’état »
répond ez O u i et cliquez sur S u iv a n t.
La fenêtre suiva nte vous dem ande de sélection ner la rupture, vérifiez que R é fé re n ce d e
l’e n s e m b le soit bien coché, cliquez sur Su iv a n t.

Page 43 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Vous devriez avoir m aintenant une fenêtre qui ressem ble à ceci :

Passez ces 2 champs appartenant à Ensemble en Haut de Rupture. Les


éléments en haut de rupture apparaissent une seule fois. Les éléments
dans le corps apparaissent autant de fois qu’il y en a dans le fichier

Cliquez ensuite sur S u iva n t. La fenêtre suivante vous dem ande quels sont les cham ps
num ériq ues sur lesq uels vous voulez effectuer un calcul, essayer de faire en sorte
quelle ressem ble à ceci :

Page 44 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Cliquez sur S u iva n t. Les choix suivan ts concernent les form ats du papier, laissez les
par défaut et cliqu ez sur S u iva n t.

C hoisissez un gabarit et S u iva n t. N om m ez cet état Ie n se m b le (atten tion, le i est en


m inuscule), com m e titre « Etat des ensem bles ». cliq uer sur Te rm in e r.

Com m e votre état est plus large que la feuille, passez en m ode paysage. Votre état
apparaît m aintenant dans l’éditeur d’état. Si vous voulez faire quelqu es retouch es,
c’est m aintenant.

Il ne vous reste plus qu’à activer l’état dans le bouton de la barre d’outils avec la
séque nce de code suivante :

iAperçu(i100)
iIm prim e Etat(Ie nsem ble)

Voilà, ce m od este "M ini G P " est fini. Vérifiez que tous les boutons fonctionnent, que
les traitem ents sont cohérents.

Page 45 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

C ours W inD ev N um éro 5

Objectifs : Études des Sockets, communication répartie

Rappels de notions réseaux, Tcp/ip, Ports.

Grâce à ce nouveau TP nous allons rentrer dans le monde merveilleux de la communication distante via
réseau.
Cette jolie introduction pour vous faire comprendre que ce support va nous apprendre à faire discuter 2 (ou
plusieurs )
Ordinateurs entre-deux. Nous allons employer les Sockets et les

threads. Commençons par définir ces 2 termes :

Les Sockets : Une Socket est définie comme une extrémité d’une communication.
Une paire de processus (ou de Threads ) communiquant sur un réseau emploie une paire de sockets, une pour
chaque processus. Un socket est constitué d’une adresse IP concaténée à un numéro de port. En général les
sockets utilisent
Une architecture Client/serveur. Le serveur attend des requêtes entrantes du client en écoutant un port
spécifique. Dès
Réception d’une requête, il accepte une connexion du socket du client. Les serveurs implémentant des
services particuliers (par exemple, Telnet, ftp, mail, http), écoutent des ports bien connus (Telnet écoute le
port 23, un serveur
ftp le port 21, un serveur web [Http] le port 80 ). Les ports inférieurs à 1024 sont considérés comme connus et
sont utilisables pour les services standards. Lorsqu’un thread client commence une requête de connexion, il se
voit assigner
Un port par la machine hôte. Ce port est un nombre supérieur à 1024.
Par exemple, lorsqu’un client de l’hôte X d’adresse IP 192.168.5.20 souhaite établir une connexion avec un
serveur Web (qui écoute le port 80) d’adresse 192.168.6.10, l’hôte X peut se voir affecter le port 1625.
La connexion est constituée d’une paire de sockets : (192.168.5.20 : 1625) sur l’hôte X et (192.168.6.10 :
80) sur le serveur Web.

Un thread peut être perçu comme un flot de contrôle à l’intérieur d’un processus. Dans notre cas il joue
le rôle d’interface entre les 2 ordinateurs, interceptant les données transmises.

Notre exercice consistera à créer 2 exécutables, un client et un serveur. Le serveur sera en attente de
réception de message et le client essayera de se connecter au serveur et de lui envoyer des messages.
Pour cela il nous faudra 2 projets un pour le client, un pour le serveur

Je vous rappelle que plus on avance au fil des TP moins je détaille les fonctionnalités que je considère comme
Devant être acquises. Donc si à ce stade vous éprouvez des difficultés reprenez les cours précédents.

Partie Serveur
Vous allez commencer par créer un nouveau projet nommé « Serveur ». Nous ne travaillerons pas sur des fichiers donc
faites en sorte de n'utiliser aucune analyse. Nous n’aurons besoin que d’une fenêtre que vous nommerez « Depart » et
qui sera la première fenêtre du projet. Faites en sorte quelle ressemble à celle ci :

Page 46 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

C ette zo n e est d es tin ée à recev o ir le


n u m é ro d u p o rt d ’éco u te. C ’est u n o b jet
C es 2 b o u to n s sero n t n o m m és
ch a m p d e saisie q u e v o u s n o m m e re z
« dem arre » et « arrete » . A v o u s d e
« portip »
ch o isir q u i est q u i.

C ette zo n e d e tex te n o u s in d iq u era si le serv eu r est


Ic i s’a ffich e ro n t les p h rases en v o y ées p ar le actif o u p as. C ’est u n o b jet ch a m p d e s aisie q u e
clien t. C ’est u n o b je t liste q u e v o u s n o m m e rez v o u s n o m m e re z « etatserveur »
« liste1 »

Analysons le fonctionnement du
serveur :

1. Il faut lui donner un port a écouter.


2. Il faut lancer la boucle d’écoute (boucle infinie) et faire en sorte que les
événements d’entrés ( demande de connexion…) soient traités par des threads.
3. Une fois la connexion acceptée le texte reçu sera inscrit dans la liste déroulante.
Nous allons commencer par créer une procédure d’attente ( la boucle d’écoute ).
Pour cela créez une procédure globale nommée “attente”

Page 47 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Voici le code que nous allons analyser.

P R O C E D U R E atten te()
B O U C L E // d éb u t d e la b o u cle
S I S o ck etA tte n d C o n n ex io n ("serv eu r") A L O R S // si u n e d e m an d e d e co n n ex io n est en atten te
can al est u n e ch aîn e
can al= S o ck etA cc e p te("serv eu r") //C ette fo n ctio n p erm et d e c réer le can al d e co m m u n ic atio n en tre la so ck et
serv e u r et la so ck et clien te.
T h read E x écu te(“th read cn x ”,th read N o rm al,"affich e m es",c an a l) //L a n c e l'ex écu tio n d 'u n "th read "
M u ltitac h e(-3 0 ) //L a fo n ctio n M u ltitac h e av e c u n n eg atif su sp en d l’ap p licatio n
F IN
F IN

Vous pouvez constater que nous nous trouvons devant une boucle sans fin ou en attente dite active. A
l’intérieur de
cette boucle une fonction WinDev (SocketAttendConnexion), est chargée de vérifier si des demandes de
connexion se produisent. Comme paramètres cette fonction prend un argument qui est le nom du socket ici
“serveur”. Vous allez voir où nous allons définir la socket nommée “serveur”. Pour l’instant l’essentiel est de
comprendre le principe de la boucle d’attente active. Donc si une demande de connexion se produit pour la
socket “serveur” on l’accepte en créant un canal de communication. Vous pouvez considérer ce canal comme
un tunnel ou les données vont transiter.
La ligne : ThreadExécute (“threadcnx», threadNormal,"affichemes", canal), est chargée de faire en sorte que le
code de la
fonction affichemes soit exécutée comme un Thread normal appelé “threadcnx” utilisant le parametre
“canal”) Multitache(-30) : L'exécution de l'application est suspendue durant <Temporisation> 100ème de
seconde. D'autres traitements peuvent être exécutés durant cette période de temps (ré-affichage ou
exécution d'un code de clic par exemple). Dans notre cas la boucle est gelée pour permettre aux threads de
s’exécuter durant leurs quantums.

NB : la socket s’appelle « serveur », le canal crée s’appelle « canal », le thread gestionnaire se


nomme « threadcnx ».

Maintenant nous allons nous intéresser à la procédure « affichemes ».C’est elle le cœur de notre serveur
puisque c’est la gestionnaire d’événement. Pour ce faire créez une procédure globale « affichemes »
(affichemes pour affiche messages).

P R O C E D U R E affich e m es(c an al)


tex te est u n e ch aîn e
BOUCLE
tex te = S o c k etL it(c an al,V rai)
L iste A jo u te("liste 1 ",tex te)
FI
N
T h re ad A rrête("",5 0 0 )
M u ltitac h e(-3 0 )

Comme vous pouvez le constater la procédure prend comme paramètre le nom du canal reliant les 2 sockets. Je
vous
rappelle que cette procédure est lancée en temps que thread. La fonction WinDev SocketLit lit le contenu du
canal et le mets dans la variable texte. Le paramètre vrai signifie à SocketLit que la durée d’attente sur canal est
indéfinie. Une fois le message récupéré il doit être mis dans notre liste déroulante « liste1 ». Le reste de la
procédure n’appelle pas de commentaires particuliers.

Page 48 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Continuons par le code du bouton “demarre”.

S I P A S S o ck etC ré e("serv e u r",P O R T IP ,N etA d resseIp ()) A L O R S


E rreu r("E rre u r d e créatio n " + E rreu rIn fo (errM essa g e))
E T A T S E R V E U R = " P ro b lè m e lo rs d u d é m arra g e d u serv e u r"
S IN O
N E T A T S E R V E U R = "S erv eu r d é m arré"
T h read E x écu te ("th read 1 ",th re ad N o rm al,atten te)
F IN

Ce code lance l’exécution du serveur. La procédure WinDev SocketCréer utilise plusieurs parametres :
Le nom de la socket que l’on va
créer. Le port sur lequel on écoute.
L’adresse ip du poste serveur.

Comme vous le voyez à la lecture de ce code si la socket “serveur” est créée on fait de notre procédure
globale“attente” un thread qui appellera lui même le thread “affichemes”.

Voici le code du bouton arrêter

S o c k etF erm e("serv e u r")


E T A T S E R V E U R = " A rret d u serv e u r"

Voilà la partie serveur est maintenant terminée… Il ne vous reste plus qu’a créer l’exécutable (Menu
Projet/Créerl’executable).

NB: Si vous avez des Warnings concernant une boucle sans condition de sortie ne vous en souciez pas !

Dés a présent vous avez conçu un serveur, il ne nous reste plus qu’a créer le client. Son rôle est
d’essayer de se connecter au serveur et de lui envoyer des messages.

Partie C liente
Pour le client, comme ce doit etre une application autonome, il nous faut donc créer un projet, sans analyse
ayant pour
nom “Client”. Ce projet ne contiendra qu’une fenetre nommée “Depart”. Elle ressemblera à ceci :

O b je t ch a m p d e saisie
N o m : A D R IP

Objet : Champ de saisie. Objet : Champ de saisie.


Nom : messa Nom : ETATCNX
Objet : champ de saisie.
Nom : Portip

Page 49 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Comme vous pouvez le constater le client est vraiment minimaliste. On saisit l’adresse ip du serveur, le port
d’écoute, le message à transmettre. Le bouton Connexion nous servira pour établir la liaison, le bouton envoyer
transmettra le message.

Intéressons nous au bouton connexion. Son rôle est de nous mettre en relation avec la socket du serveur.
Voici le code du bouton.

S I P A S S o ck e tC o n n ec te ("s e rv eu r" , P O R T IP ,A D R IP ) A L O R S
E rre u r(" e rreu r d e c o n n ex io n " + E rre u rIn fo (e rrM ess ag e ))
S IN O N
E T A T C N X = "V o u s etes en lig n e"
F IN

On essaye de ce connecter à la socket nommée “Serveur, écoutant le port défini ( PORTIP), à


telle adresse IP (ADRIP). Si tout ce passe bien on écrit “Vous êtes en ligne dans le champ de
saisie Etatcnx. Sinon on envoie le message d’erreur.

Maintenant voyons le code du bouton envoyer.

S I S o ck etE crit("serv eu r", m essa) = F aux A L O R S


In fo ("U n pro b lèm e est surv en u ")
F IN

On envoit un message ( le texte contenu dans le champ de saisie “messa” ) à la socket


“serveur”. Si ca ne fonctionne
pas on affiche une boite de dialogue d’avertissement.

Voilà tout est fini, vous pouvez compiler, créer l’exécutable et tester votre
client/serveur. Pour la mise en œuvre vous avez besoin de lancer le serveur, le
mettre en écoute d’un port. Ensuite vous lancez le client que vous branchez sur le
port d’écoute et envoyez le message. Si vous êtes en réseau utilisez la bonne adresse
IP du serveur

Page 50 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

C ours W inD ev N um éro 6


Objectifs : Accès à des bases de données tierces (Mysql)

Langage Sql, Fonctions Sql de WinDev, gestion avancée des tree-view, des tables
mémoire, des chaînes de caractères…

A l’heure actuelle, les bases de données de type Clients/Serveurs ont la faveur de plus en plus
d’informaticiens.
Une de ces bases se détache du lot, il s’agit de MySQL. Cette base de données offre plusieurs avantages non
négligeables.

1. Elle est gratuite.


2. Elle est rapide
3. Elle est fiable.
4. Elle est Multi-Plateforme…

Le fait qu’elle existe sous plusieurs systèmes d’exploitations est appréciable, en effet à l’heure actuelle
beaucoup de Fournisseurs d’Accès Internet vous permettent de vous connecter à une base de donnée, dans la
majorité des cas cette base de donnée est MySQL. Pourquoi la choisissent-elles ? En fait, ils ont fait le choix
du logiciel libre, donc le système d’exploitation est Linux, comme les internautes utilisent de plus en plus le
couple PHP/MySQL, cette base de données
Est le choix technologique le plus évident à faire.

Maintenant imaginez la situation suivante : Vous êtes développeur dans une société qui a sur Internet un site
où les
clients peuvent passer des commandes. Le site utilise PHP et MySQL, comment faire pour que votre logiciel
commercial puisse récupérer les commandes directement dans la base de données MySQL qui est sur Internet
?

Nous allons, ensemble, développer un logiciel de connexion à une base de donnée MySQL, créer des
requêtes, récupérer les résultats…..Elle n'est pas belle la vie ? Mais cependant certaines mises en garde
sont nécessaires :

Je vous rappelle qu’il est inutile de faire cette leçon 6 sans maîtriser les Tp précédents. Je ne reviens
pas sur les notions abordées dans les TP précédents.
Pour le bon déroulement de ce support téléchargez et installez easyphp que vous trouverez à l’adresse
Suivante : http://www.easyphp.org/

A tte n tio n : Si vous n'êtes pas adm inistrateur de votre ordinateur une
librairie de M ysql ne s’installera pas correctem ent, il s’agit de libm ysql.d ll,
de plus le serveur M ysql s’arrêtera à la m oindre tentative de connexion.
A u tre p o in t im p o rta n t : S i des erreurs récurre ntes se produisent alors
que votre code est propre et que vous utilisiez Easyphp, téléchargez la dll
libm ysql.dll directem ent chez M ysql.
D e plus, allez sur w w w .pcsoft.fr dans la rubrique télécharg em ent pour
télécharg er l'accès natif à M ysql

Page 51 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Avant de commencer, vérifiez qu’Easyphp est actif (Vous devez apercevoir un E noir avec un point rouge
clignotant
dans la barre des taches). S’il n’est pas en fonctionnement, vous ne pourrez pas accéder au serveur
MySQL. Je vous laisse lire la doc fournie avec pour le faire fonctionner, c’est simple.

Nous allons maintenant entrer dans le vif du sujet. Créez un nouveau projet nommé TP6 qui ne comporte
aucune analyse, normal puisque nous allons accéder à des données distantes. Ce projet comportera 2
fenêtres : Une orienté gestion de la base MySQL, l’autre sur l’édition de requêtes.

Voici le prototype de la première fenêtre que vous nommerez départ et qui sera la première fenêtre du projet.

Ic i v o u s tro u v ez 4 ch a m p s d e saisie n o m m és : N um ip, Login, Ic i, c réez u n ch a m p arb re q u e v o u s


M dp, Etatcnx. U n b o u to n n o m m é C nx. C es ch a m p s so n t n o m m e rez listebase . V o u s p o u v ez
d an s u n ch am p lib ellé d e sty le « L ib e llé -A ch ev al_ D o u b leB » , l’en cad re r p a r u n c h a m p lib e llé .
d o n t le lib ellé est : « C o n n ex io n au serv eu r M y sq l »

A tten tio n , ici c ’est u n e tab le m é m o ire q u e v o u s n o m m e rez Table1 d o n t In sé rez 2 b o u to n s u n n o m m é


to u tes les co lo n n es so n t in v isib les. D a n s cette tab le sera a ffich é le R equete, l’au tre Q uitter. Je
co n ten u d es tab les d e v o tre b ase d e d o n n ée M y sq l. L ’a ffich ag e est v o u s laisse tro u v e r le co d e d u
activ é p a r u n ch o ix d e tab le d an s l’a rb re listebase. C o m m e n o u s n e b o u to n Q u itte r.
co n n aiss o n s p as à p rio ri le n o m b re d e co lo n n es d e la tab le a a ffich e r
n o u s allo n s em p lo y e r u n e g ro sse ru se C h e y en n e. O n v a c rée r u n e
q u in zain e d e co lo n n es tex te n o m m é es c1 ,c2 ,c3 … ..c1 5 et to u tes
in v isib le , cap ito ? N o u s cré e ro n s l’affich ag e p a r p ro g ra m m atio n p lu s
ta rd

Page 52 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Maintenant que la scène est installée, voyons les comportements des objets et ce que l’on attend d’eux.
Pour ce connecter à une base de donnée MySQL nous avons besoin de divers renseignements :

L’adresse Ip de l’ordinateur où est située votre base de données MySQL. Si vous l’avez sur votre
ordinateur, plusieurs possibilités s’offrent à vous, soit vous inscrirez dans ce champ l’adresse IP de votre
ordinateur, soit localhost, soit une adresse de bouclage ex : 127.0.0.1.
Le login : Si vous venez d’installer votre base de donnée le login par défaut est : root. Sinon
demandez un login à votre administrateur réseau.
Le mot de passe : Si vous venez d’installer MySQL sur votre poste le mot de passe par défaut n’est
pas défini, donc cette zone restera vide.

Donc, lorsque ces renseignements seront saisis nous essayerons de nous connecter à la base de donnée via le
bouton de connexion, si la connexion réussie nous remplirons l’arbre avec les bases MySQL et pour chaque
bases, les tables constituantes. Dans le champ etatcnx nous mettrons un texte nous indiquant le succès de la
connexion sinon l’échec.

Verifier que vous avez placé tous les objets et votre fenêtre ressemble à la mienne .Vous l’enregistrée sous le
nom de départ .Vous la déclarée comme première fenêtre du projet.
Nous allons avoir besoins de 2 variables globales à la fenêtre, allez dans le code de la fenêtre et dans la zone
« déclaration globale de départ » inscrivez ceci :

GLOBAL
mabase,matable sont des chaînes

Ces 2 variables doivent être connues ou vues par tous les objets de la fenêtre, c’est pour cela que l’on les
déclare
globales au plus haut dans le conteneur principal.

Intéressons nous maintenant au comportement du bouton de connexion. Son rôle est d’établir une connexion
avec la base de données MySQL. Il a besoin de l’adresse ip de la base, du login et du mot de passe pour
établir le contact.

Voici son code :

resultat est un entier

resultat=SQLConnecte(Numip,login,mdp,"","MySQL")
SI resultat=0 ALORS
etatcnx="Votre serveur Mysql n'a pas repondu"
SINON
etatcnx="Votre connexion est active"
lesbases()
FIN
SQLDeconnecte()// Une fois les traitements fait, on se déconnecte

La procédure WinDev importante est SQLConnecte son rôle est de connecter l'application en cours à une base
de données à interroger par SQL. Pour cela elle a besoin de paramètre qui sont le contenu du champ Numip,
de login, du mot de passe. Le 4eme paramètre est vide (les 2 apostrophes), il est dévolu au nom de la base de
donnée souhaitée. Le5eme paramètre est le type de base de données attaqué, dans notre cas MySQL. Appuyez
sur F1 en étant positionné sur le mot SQLConnecte et regardez dans l’aide toutes les bases de données
susceptibles d’être interfacées avec WinDev

Cette procédure retourne un entier qui vaut 0 si la connexion n’a pas pu être établie (mauvaise adresse ip,
mauvais login, mot de passe, serveur Mysql arrêté…etc…). Une bonne habitude à prendre est de tester la
réussite ou l’échec
D’une fonction. Donc, si resultat=0 on informe l’utilisateur qu’il y a un boulon dans le potage. Sinon c’est que
tout va bien : on fait afficher dans le champ de saisie etatcnx que la connexion est active. Pour alléger le code
nous allons créer une procédure locale à la fenêtre que nous nommerons les bases.

Page 53 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Le rôle de cette procédure est de nous remplir l’arbre avec les bases de données MySQL et les tables les
composants.

Voyons son code :

P R O C E D U R E lesb ases()
resu ltat est u n b o o lé en
resu ltat= S Q L E x e c("sh o w d ata b ase s","req u ete1 ")
S I resu ltat A L O R S // L ’ex é cu tio n d e la req u ête est réu ssie
T A N T Q U E S Q L F etc h ("req u ete1 ") = 0
A rb re A jo u te(listeb ase,"B ases" + T A B + S Q L L itC o l("req u ete1 ",
1 ),a D éfa u t,a D éfau t,S Q L L itC o l("re q u ete 1 ", 1 ))
lesta b les(S Q L L itC o l("req u ete 1 ", 1 ))
F IN
S Q L F erm e("req u ete1 ")
A rb re D éro u le(listeb a se,"B ases")
S IN O
N In fo("V o u s av e z u n p ro b lèm e d e co n n ex io n ")

F IN

Résultat est un booléen qui va recevoir le résultat d’exécution de la procédure SQLExec.


Celle ci va exécuter la requête nommée « requete1 », dont le texte associé est « show
databases » (Cette commande SQL fait retourner l’ensemble des bases de donnée présentent
sur votre serveur MySQL).
Si la requête s’exécute bien résultat vaut vrai sinon faux.

T A N T Q U E S Q L F etc h ("req u ete1 ") = 0

La fonction SQLFetch ne lance pas la récupération de toutes les lignes du résultat de la requête :
seul l'enregistrement en cours est récupéré par la fonction SQLFetch.
Le hic est que tant qu’elle retourne 0 la lecture de l'enregistrement s'est bien passée.
La procédure ArbreAjoute crée un tree-view avec les éléments que l’on va lui passer.
Dans notre cas il faut remplir avec le contenu résultant de la requête précédente.
En fait le résultat de la requête est, dans ce cas là, une table d’une colonne contenant un nom de base
par ligne.
SQLFetch parcourt les lignes de la table et SQLLitcol("req u ete1 ", 1 ) lit pour la requête passée en
paramètre, le contenu dela colonne passée aussi en paramètre (ici 1).
Regarder l’aide d’ArbreAjoute et comparer avec le code, vous allez vite comprendre son
fonctionnement. Nous allons donc créer un arbre affichant les bases de données disponibles, mais
pour chaque base il nous faut aussi insérer dans l’arbre les tables qui la composent. C’est le rôle de la
procédure globale lestable que nous allons créer. Comme vous le remarquez la procédure lestables
prend comme paramètre le nom de la base de donnée contenu dans S Q L L itC o l("requ ete1 ", 1)

Page 54 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Créez donc cette procédure

P R O C E D U R E lestab les(lab ase)


resu ltat est u n b o o lé en
S Q L C o n n e cte(N u m ip ,lo g in ,m d p ,lab ase," M y S Q L ")
resu ltat= S Q L E x e c("sh o w tab les","re q u ete2 ")
S I resu ltat A L O R S
T A N T Q U E S Q L F etc h ("req u ete2 ") = 0
A rb re A jo u te(liste b ase,"B ases" + T A B + lab ase + T A B + S Q L L itC o l("req u ete2 ",
1 ),a D éfau t,a D éfau t,S Q L L itC o l("req u ete2 ", 1))
F IN
S Q L F erm e("req u ete2 ")
A rb re D éro u le(liste b ase,"B ases" + T A B + lab ase)
FI
N

S Q L D e co n n e cte()

Comme vous pouvez le constater cette procédure récupère comme argument une chaîne de caractère
(labase) contenant le nom de la base de donnée a traiter. Il faut ensuite se connecter à cette base de
donnée (ligne 3) pour demander l’ensemble des tables la constituant (ligne 4).Une fois la requête
exécutée, si elle a fonctionné, tant que des lignes existent dans le contenu du résultat de la requête, on
les ajoute au bon endroit dans le tree-view (l’arbre).
On ferme la requête avec la commande SQLFerme. Et on déroule l’arbre pour des raisons esthétiques.
Pour des raisons de sécurité on utilise SQLDeconnecte() qui ferme la connexion en cours et libère
l'espace mémoire utilisé par la connexion. La fonction SQLDéconnecte doit être appelée
systématiquement pour fermer la connexion, même si cette connexion a échoué

Arrivé à ce stade, vous pouvez tester le résultat. Entrez les bons paramètres de connexion, appuyez
sur le bouton connexion et vous verrez le tree-view est rempli de l’arborescence bases de données +
Tables.

Maintenant, ce serait super de pouvoir lister le contenu d’une table dont on aurait cliqué sur le nom
dans l’arbre. Pour cela il faudrait récupérer le nom de la table choisie et remplir la table mémoire.
C’est tout simple voici le code que vous allez inscrire dans la zone clic sur listebase de l’objet
listebase (l’arbre).

resultat est une chaîne

resultat=ArbreSelect(MoiMême)
mabase=ExtraitChaîne(resultat,2)
matable=ExtraitChaîne(resultat,3)

SI matable<>EOT ET mabase <>EOT ALORS //Nous avons la base et la table


remplirtable(mabase,matable)
FIN

Page 55 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

ArbreSelect(MoiMême) renvoie l’élément cliqué sous forme d’une chaine.


La fonction ExtraitChaine va nous être d’un grand secourt. On lui donne la chaîne initiale et on lui dit de
nous renvoyer le Xieme mot. Dans notre cas nous allons mettre dans la variable globale mabase le
deuxième terme de la chaîne et dans la variable matable le troisième terme. Si jamais vous avez cliqué sur
le nom de la base au lieu de cliquer sur le nom de la table, resultat sera composé de 2 mots et non de trois,
dans ce cas ExtraitChaine (resultat, 3) renverra EOT.
Nous allons pouvoir remplir la table si les 2 variables (mabase et matable) sont différentes de EOT.
Pour alléger la lecture et faciliter la compréhension, on va donc créer un traitant de remplissage de table, la
procédure remplirtable qui va prendre 2 arguments : le nom de la base et le nom de la table.

Voici le code de remplirtable(mabase,matable)

PROCEDURE remplirtable(labase,latable)
resultat est un booléen
numconnexion est un entier
texte est une chaîne

TableSupprimeTout(Table1)

numconnexion=SQLConnecte(Numip,login,mdp,labase,"MySQL")

texte=SQLColonne(numconnexion,latable,Faux)

SQLExec("select * from "+latable,"requete3")


SQLInfoGene()
miseenforme(texte,SQL.NbCol)

SQLTable("requete3", "Table1")
SQLFerme("requete3")
SQLDeconnecte()

Voici l’explication du code. On commence par vider la table mémoire nommé table1. Ensuite on se connecte
à la base
de donnée dont le nom fut passé en paramètre.
Cette ligne : texte=SQLColonne(numconnexion,latable,Faux) renvoie dans la variable « texte » le nom des
colonnes de
la table choisie par l’utilisateur dans le tree-view. Le nom des colonnes nous sera utile pour mettre en forme la
table mémoire on mettra en entête de table le nom des colonnes, ce sera plus parlant que c1,c2,c3…c15. La
ligne suivante fait une requête select classique qui liste le contenu intégral d’un fichier donné (latable).
SQLInfoGene() va renseigner diverses variables sur la dernière requête lancée (requete3).

Nous ce qu’il nous intéresse, c’est de connaître le nombre de colonnes que va générer notre requête.
Notre table sélectionnée contient-elle 5 colonnes, 2, 10 ? En fait, a priori nous n’en savons rien, c’est
pour cela que je vous aidemandé de créer une table mémoire de 15 colonnes par défaut.
C’est la variable SQL.NbCol qui va nous dire combien la requête a de colonnes. Mais n’oubliez pas que
SQL.NbCol ne contient des infos qu’après l’appel de SQLInfoGene()
Nous allons commencer à créer l’entête de la table mémoire(table1) avant d’y transférer les données. C’est le
rôle de la procédure « miseenforme(texte,SQL.NbCol) »

PROCEDURE miseenforme(lescolonnes,nbcol)
i est un entier=1
nomcol,exnomcol sont des chaînes
TANTQUE i<>nbcol
nomcol=ExtraitChaîne(lescolonnes,i,RC)
exnomcol="C"+i
{exnomcol}..Titre=nomcol
{exnomcol}..Etat=Visible
i++
FIN
Page 56 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Le but de cette procédure est de remplacer les c1,c2, c3…..nbcol par un le nom de la colonne renvoyé par la
requête.
Nous allons donc affecter le nouveau nom à l’ancien. Nous avons passé a la procédure 2 paramètres : Une
chaîne contenant les noms des colonnes séparés par un espace et le nombre de colonnes. Nous avons comme
impératif de renommer la première colonne (C1) par le 1er terme contenu dans la chaîne ( lescolonnes ), la
deuxième colonne (C2) par le 2eme terme de la chaîne et cela jusqu'à nbcol. Comme vous le voyez c’est ce
que fait la boucle tantque.

On initialise une variable i à 1, puis tant qu’elle est différente de nbcol on place dans nomcol le terme contenu
dans la chaîne lescolonnes à l’indice i. Ensuite on recrée le nom de colonne basé sur l’indice pour être en
phase. La partie la plus surprenante est le fait de mettre entre accolades le nom de la colonne.
C’est ce que l’on appelle une indirection, comme le nom du champ est dans une variable on fait ainsi
comprendre à WinDev de traiter le contenu de la variable comme étant le nom du champ souhaité. On modifie
le nom de la colonne par la constante.Titre et on la rend visible par ..Etat=Visible.
Voilà la procédure a fait la mise en forme. Elle s’arrête et repasse la main a la procédure appelante :
la procédure remplirtable. L’exécution continue sur la ligne SQLTable(« requete3 », « Table1 »).
Cette commande faitun transfert du contenu de la requête dans la table mémoire.

Sauvegardez et testez votre travail.

Mais tout cela serait plus magique si vous aviez une zone de saisie de requête sql pour créer des nouvelles
bases de données, créer des nouvelles tables, insérer des enregistrements…..

C’est ce que l’on va réaliser maintenant, mais tout d’abord voici le code du bouton requete

SI mabase<>"" ALORS
Ouvre(frequete,Numip,login,mdp,mabase)
SINON
Info("Choisissez une base de donnée")
FIN

Si l’utilisateur a cliqué sur une base du Tree-view alors on peut lancer l’ouverture de la 2eme fenêtre nommée
requête.
Fenêtre à qui on passe 4 arguments de connexion : le numéro ip, le login, le mot de passe et la base sur
laquelle on désire travailler.

Voici l’image de la nouvelle fenêtre que vous nommerez «


frequete » Champ de saisie
nommé larequete

Bouton nommé
execute

Champ liste nommé


resultat

Voyons les éléments :


Page 57 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

 Un champ de saisie nommé la requête dans lequel vous taperez le texte de votre requête
 Un champ liste nommé résultat dans lequel le résultat de votre requête apparaîtra.
 Un bouton execute qui contient le code chargé de se connecter à la base MySQL, de faire
exécuter la requête et d’afficher le résultat.

Pour que les variables passées par le code du bouton requête de la fenêtre « Départ » soient prisent en
compte par la
fenêtre « frequete », il faut saisir dans la zone « déclaration globale de frequete » la ligne suivante :

Procedure frequete (Numip,login,mdp,mabase)

Voyons de suite le code du bouton execution

i est un entier
texte est une chaîne
ListeSupprimeTout(resultat) // on vide la liste resultat

SQLConnecte(numip,login,mdp,labase,"MySQL")// on se connecte à la base


SI larequete<>"" ALORS // si du texte a été frappé
SQLExec(larequete,"requete4") // on fait exécuter la requête par Mysql
SQLInfoGene() // on fait générer les variables concernant la requête
SQLPremier("requete4") // on se positionne sur la première ligne des données retournées par la requête

TANTQUE PAS SQL.EnDehors // Tant qu’il reste des lignes à lire


i=1
texte="" // Je vais construire dans texte la ligne en concaténant les colonnes
TANTQUE i<=SQL.NbCol // de i au nombre de colonnes
texte=texte+TAB+SQLCol("requete4", i) // Je concatene
i++
FIN
ListeAjoute(resultat,texte) // J’ajoute dans la liste résultat la ligne que je viens de créer
SQLSuivant("requete4") // je passe à la ligne suivante
FIN
SQLFerme("requete4") // je détruis ma requête
SINON
Info("Veuillez saisir une requête")
FIN
SQLDeconnecte() // Je me déconnecte

Page 58 sur 59
Tavaux Dirigés Windev9 Jean Claver MOUTOH

Page 59 sur 59

Vous aimerez peut-être aussi