Panne sur fonction base de donnée sqlite

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
michelmarchand
Messages : 20
Inscription : lun. 18/avr./2022 14:23

Panne sur fonction base de donnée sqlite

Message 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"
michelmarchand
Messages : 20
Inscription : lun. 18/avr./2022 14:23

Re: Panne sur fonction base de donnée sqlite

Message 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
michelmarchand
Messages : 20
Inscription : lun. 18/avr./2022 14:23

Re: Panne sur fonction base de donnée sqlite

Message 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
michelmarchand
Messages : 20
Inscription : lun. 18/avr./2022 14:23

Re: Panne sur fonction base de donnée sqlite

Message 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
Marc56
Messages : 2196
Inscription : sam. 08/févr./2014 15:19

Re: Panne sur fonction base de donnée sqlite

Message 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:
michelmarchand
Messages : 20
Inscription : lun. 18/avr./2022 14:23

Re: Panne sur fonction base de donnée sqlite

Message 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à
Marc56
Messages : 2196
Inscription : sam. 08/févr./2014 15:19

Re: Panne sur fonction base de donnée sqlite

Message 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
michelmarchand
Messages : 20
Inscription : lun. 18/avr./2022 14:23

Re: Panne sur fonction base de donnée sqlite

Message par michelmarchand »

Merci Camarade
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Panne sur fonction base de donnée sqlite

Message 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


Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
michelmarchand
Messages : 20
Inscription : lun. 18/avr./2022 14:23

Re: Panne sur fonction base de donnée sqlite

Message par michelmarchand »

Intéressant
Merci
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Panne sur fonction base de donnée sqlite

Message 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.
Répondre