Page 1 sur 1

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

Publié : dim. 26/févr./2017 14:47
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

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

Publié : dim. 26/févr./2017 16:26
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 !

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

Publié : dim. 26/févr./2017 16:50
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

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

Publié : dim. 26/févr./2017 22:49
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. ^^

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

Publié : lun. 27/févr./2017 7:10
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)

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

Publié : lun. 27/févr./2017 9:38
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.

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

Publié : lun. 27/févr./2017 17:02
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.

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

Publié : lun. 27/févr./2017 17:40
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()

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

Publié : lun. 27/févr./2017 21:20
par PCPixMusic
Merci, beaucoup, ça marche. :mrgreen: