Gambas France BETA


Pas de compte ? Incription

code redondant

Ce sujet est résolu.

1
AuteurMessages
jeanyvon#1 Posté le 19/4/2021 à 14:58:49
Gambas? Ma! Et gustobonjour!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
PUBLIC SUB ListBox1_Click()
DIM rep AS INTEGER

rep = Message.Delete("Es tu sûr de vouloir effacer cette ligne ?" "oui", "annuler")

IF rep = 1 THEN
connex.Open
connex.Exec("delete From liste where nom = '" & listbox1.text & "'")
connex.Close
ListBox1.Clear
remplire_liste
ENDIF

END

ce code tourne sur lui même.
La sub remplir_liste remplie la listbox.
Une fois le remplissage fait il revient à la messagebox. il faut que je dise non pour arrêter.
la listebox est sur single en mode
si je rajoute un return après le endif ça ne fait rien.
je joins le code de remplissage
1
2
3
4
5
6
7
8
9
10
11
PUBLIC SUB remplire_liste()
DIM fichier AS Result

connex.Open
fichier = connex.Exec("select * from liste order by nom")
FOR EACH fichier
Listbox1.Add(fichier!nom)
NEXT
connex.Close

END
Vieillir? On peut retarder mais pas y échapper!
spheris#2 Posté le 19/4/2021 à 21:30:57
Jean Yvon,
Dans ton message je ne lis pas de question. Peux-tu préciser ta demande?
Je suppose que tu veux sortir de la boucle IF THEN, alors fais comme ceci:

1
2
3
4
5
6
7
8
9
IF rep = 1 THEN 'Appui sur OK
connex.Open
connex.Exec("delete From liste where nom = '" & listbox1.text & "'")
connex.Close
ListBox1.Clear
remplire_liste
ELSE 'Appui sur Annuler
message.info("je sors de la boucle !")
ENDIF


;)
jeanyvon#3 Posté le 20/4/2021 à 06:08:55
Gambas? Ma! Et gustoBonjour!
La question est dans le titre.
Ce code tourne en rond.
Ce n'est pas normal, il ne doit pas revenir au début de la procédure listbox1_click après remplissage de la list et pourtant il le fait
Il plante lors du deuxième passage si j’appuie sur ok. Il n'y a pas de message d'erreur.
Vieillir? On peut retarder mais pas y échapper!
spheris#4 Posté le 20/4/2021 à 22:17:51
Excuse moi jean yvon je n'avais pas compris.
Petite question :
Pourquoi effaces-tu la totalité de la listbox et recharges la base de données juste pour effacer une ligne de ta listview?
Tu peux simplement effacer la ligne sélectionnée par la commande :

1
listview1.remove(listview1.current.key)


puis effacer l'entrée dans la base de données. et c'est tout, comme ça pas de redondance.

d'où le code complet :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PUBLIC SUB remplire_liste()
DIM fichier AS Result
connex.Open()
fichier = connex.Exec("select * from liste order by nom")
FOR EACH fichier
Listbox1.Add(fichier!nom)
NEXT
connex.Close()
END

PUBLIC SUB ListBox1_Click()
DIM rep AS INTEGER
rep = Message.Delete("Es tu sûr de vouloir effacer cette ligne ?" "oui" "annuler")
IF rep = 1 THEN
connex.Open()
connex.Exec("delete From liste where nom = '" & listbox1.text & "'")
connex.Close()
ListBox1.remove(ListBox1.Current.Key)
ENDIF
END

jeanyvon#5 Posté le 21/4/2021 à 07:58:38
Gambas? Ma! Et gustosalut
current.key n'existe pas pour une listbox mais pour une listview.
donc pour effacer la ligne il faut écrire :
1
listbox.remove(index)

et si je fais ça, le code fonctionne correctement sans redondance
Merci Sphéris.
Vieillir? On peut retarder mais pas y échapper!
1