SQlite - Else/ElseIF ne réagissent pas à une variable String

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

SQlite - Else/ElseIF ne réagissent pas à une variable String

Message par PCPixMusic »

Bonjour,

Le but du code de mon programme, dont fait partie la portion de code suivante, est la recherche de mot dans un dictionnaire dans une base de données, avec les mots et leurs définitions.

Quand le mot saisi dans la variable phrase.s est trouver dans un enregistrement de la table langage et du champ mot, il y a bien le mot que j'ai saisi dans la variable phrase.s est donc le message TextGadget(#Text_1, 400, 10, 300 ,20, "Je connais ce mot. "+Reponse_Recherche_def_1) est bien renvoyé quand ce même mot est trouvé dans la base de données.

Mon problème, c'est que étrangement, quand ce mot n'ai pas trouvé, il est bien sûr toujours dans sa variable d'origine phrase.s, mais que ça soit avec else ou elseif, TextGadget(#Text_1, 400, 10, 300 ,20, "Je ne connais pas ce mot ! :("), ne s'affiche pas quand le mot saisi dans phrase.s n'existe pas dans la base de données.

Pour le moment, c'est vraiment super de pouvoir avoir le mot et sa définition qui s'affiche quand le mot est présent dans la table de la base de données. C'est simple, mais je suis content d'y être arrivé. :mrgreen: 8)

Mais, je ne comprends pas pourquoi Else et ElseIF ne renvoient rien. :/

Merci d'avance à qui sera résoudre ce mystère.

Bon dimanche. 8)

Code : Tout sélectionner

 If DatabaseQuery(glDBSQLite, "SELECT * FROM langage WHERE mot = '" + Phrase + "'") <> 0
   While NextDatabaseRow(glDBSQLite)
     Reponse_Recherche_Mot = GetDatabaseString(glDBSQLite, 1) 
     Tampon_Reponse_Recherche_Mot = Phrase
     Reponse_Recherche_def_1  = GetDatabaseString(glDBSQLite, 2)    
  
     If Reponse_Recherche_Mot = Phrase
       ;GetDatabaseString(glDBSQLite, 1)
     TextGadget(#Text_1,  400, 10, 300 ,20, "Je connais ce mot. "+Reponse_Recherche_def_1)        
     
     ElseIf Reponse_Recherche_Mot <> Phrase
     
     TextGadget(#Text_1,  400, 10, 300 ,20, "Je connais pas ce mot ! :(")   
   EndIf
   
   Wend  
   FinishDatabaseQuery(glDBSQLite)
  
 EndIf
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: SQlite - Else/ElseIF ne réagissent pas à une variable St

Message par falsam »

Mais, je ne comprends pas pourquoi Else et ElseIF ne renvoient rien. :/
C'est normal puisque le mot n'est pas dans la base de données.

Explication :
- Tu fais une requéte dans ta base de donnée afin de vérifier que le mot existe.

Code : Tout sélectionner

If DatabaseQuery(glDBSQLite, "SELECT * FROM langage WHERE mot = '" + Phrase + "'") <> 0
Puis tu examines ta réponse dans une boucle While

Code : Tout sélectionner

While NextDatabaseRow(glDBSQLite)
Ce qui veut dire tant qu'il y a des réponses à lire.

:idea: Hors il n'y a pas de réponse puisque le mot n'existe pas. Donc impossibilité de rentrer dans le couple if .... endif et donc pas de Else non plus donc pas de message Je connais pas ce mot !
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: SQlite - Else/ElseIF ne réagissent pas à une variable St

Message par falsam »

Une solution possible respectant ta philosophie de re-creer #text1

Code : Tout sélectionner

If DatabaseQuery(glDBSQLite, "SELECT * FROM langage WHERE mot = '" + Phrase + "'") <> 0
  
  ;Pour le moment on ne sait pas si il y a une réponse
  Reponse = #False 
  
  ;Si il y a des réponses alors NextDatabaseRow(glDBSQLite) retournera une valeur différente de 0 donc vrai
  While NextDatabaseRow(glDBSQLite)
    
    ;Il y a des réponses
    Reponse = #True    
  Wend  
  FinishDatabaseQuery(glDBSQLite)
EndIf

If Reponse
  TextGadget(#Text_1,  400, 10, 300 ,20, "Je connais ce mot. "+ GetDatabaseString(glDBSQLite, 2))
Else
  TextGadget(#Text_1,  400, 10, 300 ,20, "Je connais pas ce mot ! :(")
EndIf
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: SQlite - Else/ElseIF ne réagissent pas à une variable St

Message par PCPixMusic »

Merciiiiiiiiiiiiiiiiiiiiii. ça marche super bien. ^^

tu as oublié le .b, donc pour faire Reponse.b pour dire que c'est une variable boolean. ^^
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: SQlite - Else/ElseIF ne réagissent pas à une variable St

Message par Marc56 »

PCPixMusic a écrit :Merciiiiiiiiiiiiiiiiiiiiii. ça marche super bien. ^^
tu as oublié le .b, donc pour faire Reponse.b pour dire que c'est une variable boolean. ^^
En PB .b signifie Byte (-127 à +127) pas boolean :wink:
https://www.purebasic.com/french/docume ... ables.html
(Cependant, c'est effectivement ce type de variable qu'on utilise pour les drapeaux car il n'utilise qu'un octet)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: SQlite - Else/ElseIF ne réagissent pas à une variable St

Message par falsam »

PCPixMusic a écrit :tu as oublié le .b, donc pour faire Reponse.b pour dire que c'est une variable boolean. ^^
héhé, Monsieur est moqueur. [hyenne rieuse]Bien évidement que Reponse est déclarée en .b tout comme ta variable Phrase qui n’apparaît nul pas en .s dans ton extrait de code hein ? :mrgreen:[/hyenne rieuse]

Puisqu'on se moque, pourquoi tu recrées #text1 pour afficher ta réponse ?
If Reponse
TextGadget(#Text_1, 400, 10, 300 ,20, "Je connais ce mot. "+ GetDatabaseString(glDBSQLite, 2))
Else
TextGadget(#Text_1, 400, 10, 300 ,20, "Je connais pas ce mot ! :(")
EndIf
@Marc: Merci d'avoir repris cet insolent manant. Hahahaha.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: SQlite - Else/ElseIF ne réagissent pas à une variable St

Message par PCPixMusic »

Je ne me moque pas, je dis juste que je n'ai pas eu d'indication de type de variable. Je ne savais pas que ça ne voulait dire type byte .b, car dans un cours c'était indiqué qu'il fallait mettre ce type pour les types booléen.

Le but de remettre #Text_1 au même endroit, c'est de masquer le message "s'il trouve le mot" ou "s'il ne trouve pas",
ça permet au même endroit d'afficher soit l'un, soit l'autre.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: SQlite - Else/ElseIF ne réagissent pas à une variable St

Message par falsam »

Le but de remettre #Text_1 au même endroit, c'est de masquer le message "s'il trouve le mot" ou "s'il ne trouve pas", ça permet au même endroit d'afficher soit l'un, soit l'autre.
Crée une seule fois ton #Text_1 et met le à jour avec la fonction SetGadgetText()
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: SQlite - Else/ElseIF ne réagissent pas à une variable St

Message par PCPixMusic »

Merci, beaucoup, ça marche. :mrgreen:
Répondre