Page 1 sur 1

Panne sur fonction base de donnée sqlite

Publié : dim. 22/mai/2022 13:41
par michelmarchand
Bonjour,
je ne comprend pas un non affichage de données dans une listicon ex ci-dessous

Code : Tout sélectionner

          Case #Bt_Recher ; Bouton Recherche
            ClearGadgetItems( #Listicon )
            reqs.s = "SELECT * FROM "+GetGadgetText( #Combotable )+ " WHERE "
            If GetGadgetText( #String_0 ) <> ""
              reqs = reqs+ GetGadgetText( #Combo_0 )+" = "+GetGadgetText( #String_0 )
            EndIf 
            If GetGadgetText( #String_1 ) <> ""
              reqs = reqs +" " + GetGadgetText( #Combo_1 )+" = "+GetGadgetText( #String_1 )+" AND " 
            EndIf 
            If GetGadgetText( #String_1 ) <> ""
              reqs = reqs +" " + GetGadgetText( #Combo_2 )+" = "+GetGadgetText( #String_2 )+" AND " 
            EndIf 
            reqs = reqs + " ORDER BY DateEnrg ASC"
;---------------------------------------------------------            
            Debug FirstDatabaseRow( #Classeur )                                  Retourne 1
            If DatabaseQuery( #Classeur, Reqs, #PB_Database_DynamicCursor )
              Debug NextDatabaseRow( #Classeur )                                 Retourne 0 : Alors que j'ai 5 enregistrements dans la table
;---------------------------------------------------------              
              While NextDatabaseRow( #Classeur )
                LigneClasseur = GetDatabaseString( #Classeur, 1 )           + Chr(10)
                LigneClasseur + GetDatabaseString( #Classeur, 2 )           + Chr(10)
                LigneClasseur + GetDatabaseString( #Classeur, 3 )           + Chr(10)
                LigneClasseur + GetDatabaseString( #Classeur, 4 )           + Chr(10)
                LigneClasseur + StrF( GetDatabaseFloat(  #Classeur, 5 ), 2) + Chr(10)
                LigneClasseur + StrF( GetDatabaseFloat(  #Classeur, 6 ), 2)
                AddGadgetItem( #Listicon, -1, LigneClasseur )
              Wend
              FinishDatabaseQuery( #Classeur )
            Else
              Error( 2 )
            EndIf             
J'ai adapté une procédure ci-dessous pour la connexion et l'affichage (cà fonctionne)

Code : Tout sélectionner

Procedure SessionStart()
  ;Initialisation de l'environnement SQlite
  If Not UseSQLiteDatabase()
    Error(0)
  EndIf
  ;  NewgestWindow( 0, 0, 624, 400 )   ;Ouverture de la fenetre principale
  ;  DisableForm(#True)    ;Desactivation  du formulaire de saisie
  ;Ouverture et lecture de la base de données 
  If OpenDatabase( #Classeur, GetCurrentDirectory()+"/Newgest.sqlite", "", "", #PB_Database_SQLite)
    ;Selection de tout les enregistrement de la base de données 
    ;tri sur le champ date de création : Mise en oeuvre de ORDER BY ASC ou DESC 
    If DatabaseQuery( #Classeur, "select * from Classeur order by DateEnrg asc", #PB_Database_DynamicCursor  )
      While NextDatabaseRow( #Classeur)
        LigneClasseur = GetDatabaseString( #Classeur, 1 )           + Chr(10)
        LigneClasseur + GetDatabaseString( #Classeur, 2 )           + Chr(10) ;Libellé de l'opération
        LigneClasseur + GetDatabaseString( #Classeur, 3 )           + Chr(10) ;Libellé de l'opération
        LigneClasseur + GetDatabaseString( #Classeur, 4 )           + Chr(10) ;Libellé de l'opération
        LigneClasseur + StrF( GetDatabaseFloat(  #Classeur, 5 ), 2) + Chr(10) ;Recette (Type Float)
        LigneClasseur + StrF( GetDatabaseFloat(  #Classeur, 6 ), 2)           ;Depense (Type Float)
        AddGadgetItem( #Listicon, -1, LigneClasseur )
        ;Pour chaque ligne du tableau on indique l'identifiant automatique de l'enregistrement
        SetGadgetItemData( #Listicon, CountGadgetItems( #Listicon )-1, GetDatabaseLong( #Classeur, 0 ) )
      Wend
 ;     FinishDatabaseQuery( #Classeur )
    Else
      Error(2)
    EndIf
  Else
    Error(1)
  EndIf
EndProcedure
Edit par TazNormand : premier code mis entre balice "Code"

Re: Panne sur fonction base de donnée sqlite

Publié : dim. 22/mai/2022 13:57
par michelmarchand
debug de la construction de la requête reps
SELECT * FROM Classeur WHERE CompteTiers = 401049 AND DateRech = 05/2022 AND TypePiece = Bon de Livraison ORDER BY DateEnrg ASC
est-ce que cela est correct
merci

Re: Panne sur fonction base de donnée sqlite

Publié : dim. 22/mai/2022 15:52
par michelmarchand
je pense avoir trouvé mais je n'est pas la solution
SELECT * FROM Classeur WHERE CompteTiers = 401049 AND TypePiece = Bon de Livraison ORDER BY DateEnrg ASC
pas d’affichage
ne serait-ce pas Bon de Livraison car il me mets une erreur near "de" :
comment gérer les espaces dans une clé
Merci

Re: Panne sur fonction base de donnée sqlite

Publié : dim. 22/mai/2022 16:40
par michelmarchand
après plusieurs recherche j'ai trouvé mon erreur
il faut mettre ( ' ) 401049 ( ' ) et ( ' ) Bon de Livraison ( ' )
SELECT * FROM Classeur WHERE CompteTiers = '401049' AND TypePiece = 'Bon de Livraison' ORDER BY DateEnrg ASC
ça pourra peut être servir à quelq'un

Re: Panne sur fonction base de donnée sqlite

Publié : dim. 22/mai/2022 20:21
par Marc56
Bonsoir,

Tu avance bien. tu ne nous a pas dit si tu avait déjà utilisé d'autres langages ? Je pense que oui, car commencer avec des structures contenant des structures n'est pas la méthodes de débutants et tu déduit vite tes erreurs. Bravo.

SQL est un langage ligne de commande, comme le shell (command.com, CMD.exe, bash, sh, etc)
Pour tous ces outils, l'espace est un séparateur, donc pour passer une chaine il faut l'encapsuler soit avec des " " soit avec des ' ' selon le système Windows ou Unix) C'est bien pour cela que le système a indiqué, erreur proche de "DE" car sans ' ' il a pensé que le mot suivant devait être un mot clé SQL.
Pour se simplifier la vie on évite souvent d'utiliser l'espace dans les noms de champs de base de données.

PS. Comme tu vas aussi peut être buter par la suite sur des données pouvant contenir des apostrophes (ex dans les noms ou les adresses) saches qu'il existe un système simple avec les variables de liaisons
https://www.purebasic.com/french/docume ... tring.html
Cela évite de devoir faire des concaténation illisibles "'" etc
:wink:

Re: Panne sur fonction base de donnée sqlite

Publié : lun. 23/mai/2022 16:52
par michelmarchand
Bonjour,
Il y a très longtemps j’ai commencé avec Dbase III plus
Ensuite passé à Clipper 5
J’ai géré une entreprise dans le bâtiment avec 4 postes distant
Je récupérais les données de chaque postes sur disquette tous les mois 3 vers 1 et vis versa 1 vers 3
des tests sur d’autres langages (sans suite)
J’ai laissé tomber la programmation pendant de nombreuses années (Ebp Bâtiment)
Et j’ai découvert PureBasic
Et depuis c’est ma détente
J’ai toujours eut à l’esprit de créer un log de Gestion d’entreprise avec le moins de saisie possible
Voilà

Re: Panne sur fonction base de donnée sqlite

Publié : lun. 23/mai/2022 18:06
par Marc56
Parfait, donc tu n'aurais pas de problème avec la logique de codage et tu va trouver bien du plaisir avec PB
J'ai aussi fait du dBase III+ mais pas utilisé le compilateur Clipper dans les années 90 et je pratique aussi PB en partie comme détente (j'appelle ça "faire mes mots croisés" pour entretenir mes neurones de quinqua voir presque séxagénaire)
Si tu as d'autrers question, pas de soucis.
PS. Pour gérer les bases SQLite après beaucoup de tests, j'utilise le plus souvent SQLstudio (gratuit)
https://sqlitestudio.pl

Re: Panne sur fonction base de donnée sqlite

Publié : mar. 24/mai/2022 6:33
par michelmarchand
Merci Camarade

Re: Panne sur fonction base de donnée sqlite

Publié : mar. 24/mai/2022 14:33
par microdevweb
Bonjour michelmarchand ,

Une autre solution est

Code : Tout sélectionner


req.s = "SELECT * FROM Classeur WHERE CompteTiers = ? AND TypePiece = ?"
SetDatabaseLong(#BaseDeDonnees, 0, 401049)
SetDatabaseString(#BaseDeDonnees, 1, " Bon de Livraison")
DatabaseQuery(#BaseDeDonnees, req)
While NextDatabaseRow(#BaseDeDonnees) 
      ; Ton code
Wend



Re: Panne sur fonction base de donnée sqlite

Publié : mer. 25/mai/2022 13:38
par michelmarchand
Intéressant
Merci

Re: Panne sur fonction base de donnée sqlite

Publié : mer. 25/mai/2022 21:51
par Ollivier
Je plussoie l'image de Marc : c'est un très bon système d'entretien neuronal. Et si le Sql ne te convient pas complètement, tu peux programmer toi-même un système de bases de données.