Gambas France BETA


Pas de compte ? Incription

Partie 3 :

Les Parties :





Troisième Partie : Gérer la Base De Données :



La form GestBase :



Grâce à cette form nous allons pouvoir :

- nous déplacer dans la base avec les boutons de navigation
- modifier un enregistrement
- supprimer un enregistrement
- créer un enregistrement
Seul le numéro de la fiche, ici, est géré automatiquement par la base.
(on peut aussi le gérer)

Ici, nous avons fait le choix de ne pas utiliser les composants gb.db.form pour plus de souplesse et de maîtrise de ce qui se passe.

Form alimentée :





Modification demandée :





Dans l'IDE :





Le Code :


Les déclarations :



1
2
3
4
5
6
7
8
9
10
11
12
' Gambas class file

PUBLIC FlagAjout AS BOOLEAN
PUBLIC FlagModif AS BOOLEAN
PUBLIC FlagSuppr AS BOOLEAN
PUBLIC p AS BOOLEAN
PUBLIC hResult AS Result
PUBLIC iPosition AS INTEGER
PUBLIC iNextCharPos AS INTEGER
PUBLIC iLongMot AS INTEGER
PUBLIC iLongMotMax AS INTEGER
PUBLIC t AS STRING

Déplacement dans la base :


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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
PUBLIC SUB btFIRST_Click() 'first

IF hresult.index > 0 THEN
FMain.camera()
hResult.MoveFirst
tee()
ELSE
FMain.beep()
ENDIF

END

PUBLIC SUB btPREV_Click() 'arrière

IF hresult.index > 0 THEN
FMain.camera()
hResult.MovePrevious
tee()
ELSE
FMain.beep()
ENDIF

END

PUBLIC SUB btNEXT_Click() 'avant

IF hResult.Index >= hResult.Count - 1 THEN
FMain.beep()
ELSE
FMain.camera()
hResult.MoveNext
tee()
ENDIF

END

PUBLIC SUB btLAST_Click() 'last

IF hResult.Index >= hResult.Count - 1 THEN
FMain.beep()
ELSE
FMain.camera()
hResult.MoveLast
tee()
ENDIF

END

Annulation et autres tests


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
30
31
32
33
PUBLIC SUB btANNUL_Click() 'bouton annule

IF hResult.Index >= hResult.Count - 1 THEN
FMain.beep()
ELSE
db.Current.Begin
db.Current.Rollback()
db.Current.Commit
ENDIF

hResult = DB.Current.Exec(FMain.tribase)
hResult.MoveTo(FMain.clef)
tee()
TextBoxTrue()

END

PUBLIC SUB testValeurs() 'test des valeurs avant validation

FMain.Mms = CFloat(Val(DCMms.Value))
FMain.SD = CFloat(Val(DCSd.Value))
FMain.FR = CFloat(Val(DCFr.Value))
FMain.QT = CFloat(Val(DCQt.Value))
FMain.QM = CFloat(Val(DCQm.Value))
FMain.Rcc = CFloat(Val(DCRcc.Value))

FMain.cms = 1 / ((2 * Pi * FMain.fr) ^ 2 * FMain.mms)
FMain.qe = FMain.qm / ((FMain.qm / FMain.qt) - 1)
FMain.bl = (2 * Pi * FMain.fr * FMain.mms * FMain.rcc / FMain.qe) ^ (1 / 2)
FMain.fa = FMain.bl / FMain.mms
FMain.mas = FMain.mms / FMain.sd ^ 2

END

Validation après un changement dans la base :


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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
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
222
223
224
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
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
PUBLIC SUB btVALID_Click() 'les différentes validations

'--------------Ajout--------------------
IF FlagAjout THEN 'Ajout
IF DCMarque.Text = "" OR DCReference.Text = "" THEN
Message.Info(("Ajout-Remplissez tous les champs de texte"))
RETURN
END IF

IF DCMms.Value = NULL OR DCSd.Value = NULL OR DCFr.Value = NULL OR DCQt.Value = NULL OR DCQm.Value = NULL OR DCRcc.Value = NULL THEN
Message.Info(("Ajout-Remplissez tous les champs numériques")
RETURN
ENDIF

IF DCMms.Value = 0 OR DCSd.Value = 0 OR DCFr.Value = 0 OR DCQt.Value = 0 OR DCQm.Value = 0 OR DCRcc.Value = 0 THEN
Message.Info(("Ajout-Pas de valeurs nulles!"))
RETURN
ENDIF

IF DCMms.Value <> 0 OR DCSd.Value <> 0 OR DCFr.Value <> 0 OR DCQt.Value <> 0 OR DCQm.Value <> 0 OR DCRcc.Value <> 0 THEN
testValeurs()
IF NOT ERROR THEN
'---------------------------------
hResult!numero = DCNumero.value
hResult!marque = DCMarque.Text
hResult!reference = DCReference.Text
hResult!mms = DCMms.Value
hResult!sd = DCSd.Value
hResult!fr = DCFr.Value
hResult!qt = DCQt.Value
hResult!qm = DCQm.Value
hResult!rcc = DCRcc.Value
hResult!FichTech = TBnFichTech.Text

hResult.Update
db.Current.Commit
'----------------------------
FlagAjout = FALSE
FMain.camera()
ENDIF
ENDIF
END IF
'-----------------------------Modif-------------------------------
IF FlagModif THEN 'modification

IF hResult.Index >= hResult.Max THEN
FMain.beep()
FlagModif = FALSE
RETURN
ELSE
IF DCMarque.Text = "" OR DCReference.Text = "" THEN
Message.Info(("Modif.-Remplissez tous les champs de texte"))
RETURN
END IF

IF DCMms.Value = NULL OR DCSd.Value = NULL OR DCFr.Value = NULL OR DCQt.Value = NULL OR DCQm.Value = NULL OR DCRcc.Value = NULL THEN
FMain.beep
Message.Info(("Modif.-Remplissez tous les champs numériques")
RETURN
ENDIF
ENDIF

' ' hResult!numero = DCNumero.value 'pas à modifier clef primaire
hResult!marque = DCMarque.Text
hResult!reference = DCReference.Text
hResult!mms = DCMms.Value
hResult!sd = DCSd.Value
hResult!fr = DCFr.Value
hResult!qt = DCQt.Value
hResult!qm = DCQm.Value
hResult!rcc = DCRcc.Value
hResult!FichTech = TBnFichTech.Text
'-------------------
hResult.Update
db.Current.Commit
'--------------------
FlagModif = FALSE
FMain.camera()

END IF
'-----------------------Suppr-------------------------------------
IF FlagSuppr THEN 'suppression

IF hresult.count <= 0 THEN
FMain.beep()
FlagSuppr = FALSE
RETURN
ELSE
hResult.MoveTo(FMain.clef)
tee()
'----------------------------
hresult.Delete()
db.Current.Commit
'----------------------------
FlagSuppr = FALSE
FMain.camera()
Message.Info(("Suppression de l'enregistrement courant effectuée")

IF hresult.Count > 0 THEN
hResult.MoveTo(FMain.clef - 1)
ELSE
hResult.MoveFirst
ENDIF
tee()
ENDIF
END IF
'-------------------------Global Valid-----------------------------

'------------- mise à jour immédiate ----------------------
hResult = DB.Current.Exec(FMain.tribase) ' pour reprendre le bon hresult
hResult.MoveTo(FMain.clef)
tee()
'------------------------------------------------
FMain.IndexInit = hResult.Count
TextBoxTrue()
'----------sortie-----------------------------
sortie:

CATCH 'gestion des erreurs de validation
IF FlagAjout = TRUE THEN
' DCMarque.Text = ""
' DCReference.Text = ""
' DCMms.Value = 0
' DCSd.Value = 0
' DCFr.Value = 0
' DCQt.Value = 0
' DCQm.Value = 0
' DCRcc.Value = 0
' TBnFichTech.Text = ""
' DCMarque.SetFocus()
'-----ou bien --------------------
hResult!marque = DCMarque.Text
hResult!reference = DCReference.Text
hResult!mms = DCMms.Value
hResult!sd = DCSd.Value
hResult!fr = DCFr.Value
hResult!qt = DCQt.Value
hResult!qm = DCQm.Value
hResult!rcc = DCRcc.Value
hResult!FichTech = TBnFichTech.Text
DCMms.SetFocus()
'-----------------------------------
FMain.beep
Message(("Vérifier les valeurs")
RETURN
ENDIF
IF FlagModif = TRUE THEN
Message(("erreur sur modification : ") & Error.text)
ENDIF
IF FlagSuppr = TRUE THEN
Message(("erreur sur suppression : ") & Error.text)
ENDIF
Message.Error(Error.Text & ", " & Str(Error.Class) & ", code : " & Error.Code & ", " & Str(Error.Backtrace) & " à " Error.Wher "\n Error.Text)

END

PUBLIC SUB Button1_Click() ' fiche technique

TBnFichTech.Enabled = FALSE
Dialog.Filter = ["*.pdf", ("Fichier pdf"), "*.PDF", ("Fichier PDF"), "*.*", ("Tous les Fichiers")]
Dialog.Title = (" Choisissez la Fiche Technique de votre HautParleur : ") & ("là où vous l'avez rangée!"

Message(("Dans la fenêtre suivante : " & "\n" & ("cliquer 'Annuler' permet d'effacer le choix.") & "\n" & ("Cliquer 'OK' permet de valider le choix.")) 'information
IF Dialog.OpenFile(FALSE) THEN
Message.Title = ("effacer le champ?")
IF Message.Question(("Voulez vous effacer le champ?"), ("Non"), ("Oui")) = 1 THEN
RETURN
ELSE
Dialog.Path = ""
ENDIF
ENDIF

TBnFichTech.Text = Dialog.Path

TBnFichTech.Visible = TRUE
TBnFichTech.Enabled = FALSE

END

PUBLIC SUB btMODIF_Click() 'modifier

textbox1.Text = ("Modification demandée"
IF NOT db.Current.Opened THEN
db.Current.Open
ENDIF

IF hResult.Index >= hResult.Count THEN
FMain.beep()
FlagModif = FALSE
RETURN
END IF

FlagModif = TRUE
'--------------------------
db.Current.Begin
hResult = db.Current.Edit("hautparleur", FMain.triSelOrdre)
hResult.MoveTo(FMain.clef)

FMain.camera()
TextBoxFalse()
DCMarque.SetFocus
sortie:

END

PUBLIC SUB btSUPPR_Click() 'suppression

textbox1.Text = ("Suppression demandée"
IF NOT db.Current.Opened THEN
db.Current.Open
ENDIF

IF hresult.Count <= 0 THEN
FMain.beep()
FlagSuppr = FALSE
RETURN
END IF
FMain.camera()

'------------------------
hResult.MoveTo(FMain.clef)
tee()

db.Current.Begin
hResult = db.Current.Edit("hautparleur", FMain.triSelOrdre)

FlagSuppr = TRUE
TextBoxFalse()

Message.Info(("Attention vous êtes sur le point" & gb.CrLf & (" d'effacer l'enregistrement courant"))

sortie:

END

PUBLIC SUB btAJOUT_Click() 'Ajout

DIM numLast AS INTEGER

Textbox1.Text = ("Ajout demandé"
IF NOT db.Current.Opened THEN
db.Current.Open
ENDIF

FMain.beep()
FlagAjout = TRUE
TextBoxFalse()
'------------------------------------
hResult = DB.Current.Exec(FMain.tribase)
hResult.MoveLast()
tee()
numLast = DCNumero.Value + 1

db.Current.Begin
hResult = db.Current.Create("hautparleur")

DCNumero.value = numLast
DCMarque.Text = ""
DCReference.Text = ""
DCMms.Value = 0
DCSd.Value = 0
DCFr.Value = 0
DCQt.Value = 0
DCQm.Value = 0
DCRcc.Value = 0
TBnFichTech.Text = ""
DCMarque.SetFocus()

END

Réglages de démarrage


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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
PUBLIC SUB debut()

FlagAjout = FALSE
FlagModif = FALSE
FlagSuppr = FALSE

DCNumero.Enabled = FALSE
DCNumero.Foreground = Color.Black

TextBoxTrue()

END

PUBLIC SUB DCnotEnabled()

DCNumero.Enabled = FALSE
DCMarque.Enabled = FALSE
DCReference.Enabled = FALSE
DCMms.Enabled = FALSE
DCSd.Enabled = FALSE
DCFr.Enabled = FALSE
DCQt.Enabled = FALSE
DCQm.Enabled = FALSE
DCRcc.Enabled = FALSE
TBnFichTech.Enabled = FALSE
Button1.Enabled = FALSE
Textbox1.Visible = FALSE

DCNumero.Foreground = Color.Black
DCMarque.Foreground = Color.Black
DCReference.Foreground = Color.Black
DCMms.Foreground = Color.Black
DCSd.Foreground = Color.Black
DCFr.Foreground = Color.Black
DCQt.Foreground = Color.Black
DCQm.Foreground = Color.Black
DCRcc.Foreground = Color.Black
TBnFichTech.Foreground = Color.Black

END

PUBLIC SUB DCEnabled()

DCNumero.Enabled = FALSE
DCMarque.Enabled = TRUE
DCReference.Enabled = TRUE
DCMms.Enabled = TRUE
DCSd.Enabled = TRUE
DCFr.Enabled = TRUE
DCQt.Enabled = TRUE
DCQm.Enabled = TRUE
DCRcc.Enabled = TRUE
TBnFichTech.Enabled = FALSE
Button1.Enabled = TRUE
Textbox1.Visible = TRUE

END

PUBLIC SUB TextBoxFalse()

btMODIF.Enabled = FALSE
btSUPPR.Enabled = FALSE
btAJOUT.Enabled = FALSE
btRETOUR.Enabled = FALSE
panel1.Enabled = FALSE

btVALID.Enabled = TRUE
btANNUL.Enabled = TRUE

DCEnabled()

END SUB

PUBLIC SUB TextboxTrue()

btMODIF.Enabled = TRUE
btSUPPR.Enabled = TRUE
btAJOUT.Enabled = TRUE
btRETOUR.Enabled = TRUE
panel1.Enabled = TRUE

btVALID.Enabled = FALSE
btANNUL.Enabled = FALSE

DCnotEnabled()

END SUB

PUBLIC SUB tee() 'mise à jour immédiate des champs

IF hResult.Available = TRUE THEN
DCNumero.value = hResult!numero
DCMarque.Text = hResult!marque
DCReference.Text = hResult!reference
DCMms.Value = hResult!mms
DCSd.Value = hResult!sd
DCFr.Value = hResult!fr
DCQt.Value = hResult!qt
DCQm.Value = hResult!qm
DCRcc.Value = hResult!rcc
TBnFichTech.Text = hResult!FichTech
FMain.clef = hResult.Index
ENDIF

END

Ouverture de la form principale


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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
PUBLIC SUB Form_Open()

IF NOT db.Current.Opened THEN
db.Current.Open
ENDIF

FMain.RetourQ = FALSE
GestBase.Text = Application.Title & " - " & GestBase.Text
debut()

hResult = DB.Current.Exec(FMain.tribase)
FMain.clef = FMain.Resultat.Index
hResult.MoveTo(FMain.clef)

tee()

CATCH
Message("GestBase Open :" & gb.CrLf & Error.Text)
ME.Close()

END

PUBLIC SUB Form_Close()

GestBase.Exit()

IF IsNull(FMain.triBase) THEN
FMain.triBase = "SELECT * FROM hautparleur ORDER BY numero;"
ENDIF

FMain.RetourQ = TRUE
db.Current.Close
FMain.RetourQuery() 'pour mettre la base à jour
FMain.Show()

END

PUBLIC SUB _new() 'boucle évènement

IF NOT db.Current.Opened THEN
db.Current.Open
ENDIF

IF FMain.RetourQ = FALSE THEN
hResult = DB.Current.Exec(FMain.tribase)
hResult.MoveTo(FMain.clef)
tee()
ENDIF

END

PUBLIC SUB datedujour() AS STRING

RETURN Format(Now, "dd-mm-yyyy_hh-mm-ss")

END


====================

Commandes utilisées :


DatabaseSqlite
DB
Result
Message
Select case
Return
Dialog
Stop Event


====================

Navigation :



<-- Liens du Wiki : <--
<-- Accueil du WIKI : <--

====================

Documentation :



====================