[RESOLU] Incroyable mais vrai !

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
anissa
Messages : 136
Inscription : mer. 13/oct./2010 15:43

[RESOLU] Incroyable mais vrai !

Message par anissa »

Bonjour,

Peut être que vous n'allez pas me croire car c'est effectivement incroyable... mais vrai !
Supposons que a$="PureBasic" et que b$="PureBasic", si on fait comme ça:

Code : Tout sélectionner

If a$=b$
  debug "a$=b$"
Else
  debug "a$ <> b$"
EndIf
On doit obtenir ce résultat: "a$=b$"

Eh bien non ! C'est incroyable ! Je pensais (comme d'habitude) que j'avais fait une bêtise
quelque part mais après avoir bien révisé mon code, testé et ajouté des dizaines de debug
après chaque bloc d'instruction, j'obtiens toujours le même résultat. Voici le vrai code mais uniquement la partie concernée :

Code : Tout sélectionner

Wsql="Select * From TableCF Where XName=" + chr(34) + wName$ + chr(34) 
Wsql+ " AND Adr=" + chr(34) + wAdr$ + chr(34) + " AND TEL=" + chr(34) + wTel$+chr(34)
CheckDataBaseQuery(Idb,wSql)
If NextDataBaseRow(Idb)
  Debug "Trouvé"
Else
  Debug "Non Trouvé"
EndIf
J'obtiens ici le message (Non trouvé) alors que normalement c'est le contraire que je devais avoir. Je vais commencer par répondre aux questions que vous allez sûrement me poser:

1. Les valeurs WName$, wAdr$ et wTel$ existent dans la table car j'ai affiché son contenu et j'ai bien vu ces données d'ailleurs même par programme je les ai affichées (champs par champs).

2. J'ai pensé aux majuscules et minuscules (c'est écrit de la même façon)

3. J'ai enlevé le doute des espaces avant et après chaque valeur.

Pensez-vous que ce genre de résultat pourrait arriver malgré cette conviction ?
Je sais très bien qu'il y a une explication qq part mais LAQUELLE?

Merci

(Si ça continue comme ça je posterais demain le code complet avec la base de données)
Dernière modification par anissa le mar. 07/juin/2011 18:28, modifié 1 fois.
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Re: Incroyable mais vrai !

Message par Atomo »

Essaye avec ce code :

Code : Tout sélectionner

Wsql="Select * From TableCF Where XName='" + wName$ + "' AND Adr='" + wAdr$ + "' And TEL='" + wTel$ + "'"
CheckDataBaseQuery(Idb,Wsql)
If NextDataBaseRow(Idb)
  Debug "Trouvé"
Else
  Debug "Non Trouvé"
EndIf
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Incroyable mais vrai !

Message par graph100 »

clairement je peux pas t'aider, car avec le même code, pour moi ca fonctionne ...

Code : Tout sélectionner

a$="PureBasic"
b$="PureBasic"


If a$=b$
  Debug "a$=b$"
Else
  Debug "a$ <> b$"
EndIf
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
anissa
Messages : 136
Inscription : mer. 13/oct./2010 15:43

Re: Incroyable mais vrai !

Message par anissa »

@Graph100
Ce code...

Code : Tout sélectionner

a$="PureBasic"
b$="PureBasic"
If a$=b$
  Debug "a$=b$"
Else
  Debug "a$ <> b$"
EndIf
...n'est qu'un exemple, ce n'est pas ici que ça plante mais c'est dans le vrai code cité après.

@Atomo (merci beaucoup ça marche bien en remplaçant les chr(34) par " ' ")

Code : Tout sélectionner

Wsql="Select * From TableCF Where XName='" + wName$ + "' AND Adr='" + wAdr$ + "' And TEL='" + wTel$ + "'"
CheckDataBaseQuery(Idb,Wsql)
If NextDataBaseRow(Idb)
  Debug "Trouvé"
Else
  Debug "Non Trouvé"
EndIf

Mais, pourquoi ça marche pas quand on utilise les chr(34)? Y a t il une différence entre Chr(34) et les quotes?
Le pire c'est que l'égalité est reconnue pour les 2 premières variables, mais pas pour la 3ème, Bizarre non?
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Incroyable mais vrai !

Message par graph100 »

arf, désolé, j'ai due ne pas tout lire :wink:
Les ' fonctionnent car c'est la syntaxe du MySql pour passer des chaines en paramètre :D et non pas les "

Je te conseille vraiment de lire l'aide SqLite qu'on peut trouver dans PureBasic, je n'y connaissais rien il y a 3 semaines, mais c'est m'a vraiment bien aidé :mrgreen:
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Incroyable mais vrai !

Message par blendman »

petite question : CheckDataBaseQuery(Idb,Wsql)
C'est une procédure dans ton code ? car je ne trouve rien dans l'aide qui y correspond.
anissa
Messages : 136
Inscription : mer. 13/oct./2010 15:43

Re: Incroyable mais vrai !

Message par anissa »

@Blendman
petite question : CheckDataBaseQuery(Idb,Wsql)
C'est une procédure dans ton code ? car je ne trouve rien dans l'aide qui y correspond
C'est une procédure généralement utilisée par tout ceux qui utilisent sqlite dans purebasic d'ailleurs elle existe dans l'aide je crois... Elle permet simplement de raccourcir le code, au lieu
d'écrire :

Code : Tout sélectionner

if DataBaseQuery(MaBase,"Select * from Matable where A$=" + chr(34)  + WVar$ + chr(34) "
  Debug "ok"
Else
 Debug "Erreur Query"
EndIf
On utilise la procédure qui pourra être utilisée dans tous les cas

Code : Tout sélectionner

Procedure CheckDatabaseQuery(Database, Query$)
   Define Resultat
   Resultat = DatabaseQuery(Database, Query$)
   If Resultat = 0
      MessageRequester("Erreur", DatabaseError(),0)
   EndIf
   
   ProcedureReturn Resultat
EndProcedure
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Incroyable mais vrai !

Message par blendman »

c'est étrange, car j'ai regardé dans l'aide mais je ne l'ai aps trouvé, je n'ai trouvé que ça comme fonction :

Code : Tout sélectionner

CloseDatabase
DatabaseColumnName
DatabaseColumnSize
DatabaseColumnType
DatabaseColumns
DatabaseDriverDescription
DatabaseDriverName
DatabaseError
DatabaseID
DatabaseQuery
DatabaseUpdate
ExamineDatabaseDrivers
FinishDatabaseQuery
FirstDatabaseRow
GetDatabaseBlob
GetDatabaseDouble
GetDatabaseFloat
GetDatabaseLong
GetDatabaseQuad
GetDatabaseString
IsDatabase
NextDatabaseDriver
NextDatabaseRow
OpenDatabase
OpenDatabaseRequester
PreviousDatabaseRow
SetDatabaseBlob
UseODBCDatabase
UsePostgreSQLDatabase
UseSQLiteDatabase
il faut installer quelque chose pour utiliser sqlite ou ce qui est présent dans pb est suffisant ?
anissa
Messages : 136
Inscription : mer. 13/oct./2010 15:43

Re: Incroyable mais vrai !

Message par anissa »

@Blendman
c'est étrange, car j'ai regardé dans l'aide mais je ne l'ai pas trouvé
Pourtant ça existe dans la liste que vous avez citée et qui est proposée justement dans l'aide de PureBasic, il s'agit bien de (DataBaseQuery). Dans l'aide, on ne propose pas des procédures, mais les commandes et instructions de base de SqlIte, par contre c'est dans les exemples proposés dans l'aide qu'on pourrait les trouver. Rien ne t'empêche de fabriquer une procédure différente mais qui donne le résultat qu'on veut (dans notre exemple: c'est contrôler si DataBaseQuery s'exécute normalement).
il faut installer quelque chose pour utiliser sqlite ou ce qui est présent dans pb est suffisant ?
Normalement, il n'y a rien à installer, la présence de Pb suffit c'est d'ailleurs l'un des avantages de Pb et cela me plait beaucoup que Pb soit aussi indépendant.
Le fait d'utiliser la commande UseSqliteDataBase() veut tout dire.
Avatar de l’utilisateur
falsam
Messages : 7334
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Incroyable mais vrai !

Message par falsam »

blendman a écrit :petite question : CheckDataBaseQuery(Idb,Wsql)
C'est une procédure dans ton code ? car je ne trouve rien dans l'aide qui y correspond.
Les explications citées plus haut dans ce post sont peut être mal comprises.

CheckDataBaseQuery n'est pas une fonction de pure basic. C'est une procédure utilisée dans un exemple consacré à Sqlite que tu trouveras en cliquant sur ce lien
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
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Incroyable mais vrai !

Message par blendman »

falsam a écrit :
blendman a écrit :petite question : CheckDataBaseQuery(Idb,Wsql)
C'est une procédure dans ton code ? car je ne trouve rien dans l'aide qui y correspond.
Les explications citées plus haut dans ce post sont peut être mal comprises.

CheckDataBaseQuery n'est pas une fonction de pure basic. C'est une procédure utilisée dans un exemple consacré à Sqlite que tu trouveras en cliquant sur ce lien
ah ok, effectivement, je croyais que c'était une fonction native et non une procédure en pure ;).

merci pour le lien.
Répondre