Page 5 sur 5

Re: Problèmes SQLite - "Values et colomns"

Publié : mer. 08/févr./2017 19:50
par falsam
Le même code que précédemment avec affichage du détail de la facture.

Code : Tout sélectionner

EnableExplicit

Enumeration Database 
  #DataBase
EndEnumeration

Enumeration Window
  #mainform  
EndEnumeration

Enumeration Gadget
  #factures
  #nom
  #idfacture
  #montant
EndEnumeration

UseSQLiteDatabase()

Global ReqSql.s

;Plan de l'application
Declare InitBase()
Declare Start()
Declare ListeFactures()
Declare FactureSelect()
Declare Exit()

Initbase()
Start()

Procedure InitBase()
  If OpenDatabase(#DataBase, ":memory:", "", "")
    ;Creation de la table 'clients'
    ;- Un client est relié à 0 à N factures
    ReqSql = "CREATE TABLE clients ("
    ReqSql + "idclient INTEGER PRIMARY KEY,"        ;Identifiant client automatique
    ReqSql + "nom TEXTE"                            ;Nom client 
    ReqSql + ");"
    
    DatabaseUpdate(#DataBase, ReqSql)               ;Création de la table      
    
    ;Pour ce test nous allons ajouter quelques clients
    ;-L'identifiant de 'John Dovali' sera = 1 (idclient INTEGER PRIMARY KEY)
    ;-L'identifiant de 'Bart Jovoho' sera = 2 (idclient INTEGER PRIMARY KEY)
    DatabaseUpdate(#DataBase, "insert into clients(nom) values('John Dovali')")
    DatabaseUpdate(#DataBase, "insert into clients(nom) values('Bart Jovoho')")
    
    ;Creation de la table facture
    ;- Une facture est relié à un et un seul client
    ReqSql = "CREATE TABLE factures ("
    ReqSql + "idfacture INTEGER PRIMARY KEY,"       ;Identifiant facture automatique
    ReqSql + "idclient INTEGER,"                    ;Identifiant client
    ReqSql + "montant INTEGER"                      ;Montant total de la facture 
    ReqSql + ");"
    
    DatabaseUpdate(#DataBase, ReqSql)               ;Création de la table
    
    ;Pour ce test on va créer quelques factures pour le client 'John Do' & 'Bart Jovoho'
    DatabaseUpdate(#DataBase, "insert into factures(idclient, montant) values('1','100')")
    DatabaseUpdate(#DataBase, "insert into factures(idclient, montant) values('2','100')")
    DatabaseUpdate(#DataBase, "insert into factures(idclient, montant) values('2','200')")
    DatabaseUpdate(#DataBase, "insert into factures(idclient, montant) values('2','300')")    
  Else
    Debug DatabaseError()      
  EndIf
EndProcedure

Procedure Start()
  OpenWindow(#mainForm, 0, 0, 800, 600, "Fermer une fenetre", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  ;Liste des factures
  ListIconGadget(#factures, 10, 10, 320, 500, "Client", 100, #PB_ListIcon_FullRowSelect)
  AddGadgetColumn(#factures, 1, "Numéro facture", 100)
  AddGadgetColumn(#factures, 2, "Montant TTC", 100)
  ListeFactures()
  
  ;Détail facture
  TextGadget(#PB_Any, 340, 10, 100, 22, "Nom")
  StringGadget(#nom, 440, 10, 200, 22, "")
  
  TextGadget(#PB_Any, 340, 40, 100, 22, "Facture N°")
  StringGadget(#idfacture, 440, 40, 200, 22, "")
  
  TextGadget(#PB_Any, 340, 70, 100, 22, "Montant T.t.c.")
  StringGadget(#montant, 440, 70, 200, 22, "")
  
  ;Déclencheur
  BindEvent(#PB_Event_CloseWindow, @Exit())
  BindGadgetEvent(#factures, @FactureSelect(), #PB_EventType_LeftClick)
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure ListeFactures()
  Protected Buffer.s
  
  ReqSql = "SELECT clients.nom, factures.idfacture, factures.montant"  
  ReqSql + " FROM clients"
  ReqSql + " JOIN factures"
  ReqSql + " ON (clients.idclient = factures.idclient)"
  
  DatabaseQuery(#Database, ReqSql)
  
  While NextDatabaseRow(#Database)
    Buffer = GetDatabaseString(#DataBase, 0) + Chr(10) + GetDatabaseString(#Database, 1) + Chr(10) + GetDatabaseString(#Database, 2)
    AddGadgetItem(#factures, -1, Buffer)  
    
    ;Mémorisation de l'idclient pour chaque item
    SetGadgetItemData(#factures, CountGadgetItems(#factures) - 1, GetDatabaseLong(#Database, 1))
  Wend  
EndProcedure

Procedure FactureSelect()
  Protected idfacture = GetGadgetItemData(#factures, GetGadgetState(#factures))
  
  If idfacture
    ReqSql = "SELECT clients.nom, factures.idfacture, factures.montant"  
    ReqSql + " FROM clients"
    ReqSql + " JOIN factures"
    ReqSql + " ON (clients.idclient = factures.idclient)"
    ReqSql + " WHERE factures.idfacture = " + Str(idfacture)  
    
    DatabaseQuery(#Database, ReqSql)
    While NextDatabaseRow(#Database)
      SetGadgetText(#nom, GetDatabaseString(#DataBase, 0))
      SetGadgetText(#idfacture, GetDatabaseString(#DataBase, 1))
      SetGadgetText(#montant, GetDatabaseString(#DataBase, 2))    
    Wend
  Else
    SetGadgetText(#nom, "")
    SetGadgetText(#idfacture, "")
    SetGadgetText(#montant, "")    
  EndIf
EndProcedure

Procedure Exit()  
  End
EndProcedure


Re: Problèmes SQLite - "Values et colomns"

Publié : mer. 08/févr./2017 19:51
par PCPixMusic
J'ai adapté ton code au mieux pour ma ListeView, mais ça n'affiche plus rien dans la ListeView :

Code : Tout sélectionner

   psSQLRequest = "SELECT contacts.contact_prenom, contacts.contact_nom, contacts.contact_job,factures.idfacture"
   psSQLRequest + "FROM contacts"
   psSQLRequest + "JOIN factures"   
   psSQLRequest + "ON (contacts.id_contacts = factures.id_contacts) " 
     
   DatabaseQuery(glDBSQLite,psSQLRequest)
        
   While NextDatabaseRow(glDBSQLite)
     Buffer = GetDatabaseString(glDBSQLite, 0) + Chr(10) + GetDatabaseString(glDBSQLite, 1) + Chr(10) + GetDatabaseString(glDBSQLite, 2)
     AddGadgetItem(#Listview_0, -1, Buffer) 
   Wend 

Re: Problèmes SQLite - "Values et colomns"

Publié : mer. 08/févr./2017 19:55
par falsam
aprés DatabaseQuery(glDBSQLite,psSQLRequest) ajoute debug DatabaseError() pour voir ce qu'il se passe

Re: Problèmes SQLite - "Values et colomns"

Publié : mer. 08/févr./2017 20:07
par PCPixMusic
L'erreur est : "no such column: factures.idfacture"

Re: Problèmes SQLite - "Values et colomns"

Publié : mer. 08/févr./2017 20:09
par PCPixMusic
Voici ma table facture :

Code : Tout sélectionner

 psSQLRequest = "CREATE TABLE IF NOT EXISTS factures ("                     +
                   "id_factures INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "  + 
                   "id_contacts INTEGER, "                                     +
                   "facture_montant_total INTEGER, "                           +
                   "facture_Numero_Modele TEXT, "                              +
                   "facture_Numero_Facture TEXT, "                             +
                   "facture_prestation TEXT, "                                 +
                   "facture_quantite TEXT, "                                   +
                   "facture_commentaires TEXT,"                                +
                   "facture_recommandations TEXT, "                            +
                   "facture_prix_uht TEXT, "                                   +
                   "facture_date_reglement TEXT, "                             +
                   "facture_date_execution TEXT, "                             +
                   "facture_conditions_escompte TEXT "                         +
                  ")" 

Re: Problèmes SQLite - "Values et colomns"

Publié : mer. 08/févr./2017 20:16
par falsam
PCPixMusic a écrit :L'erreur est : "no such column: factures.idfacture"
ton champs se nomme id_factures

Code : Tout sélectionner

psSQLRequest = "CREATE TABLE IF NOT EXISTS factures ("                     +
                   "id_factures INTEGER PRIMARY KEY AUTOINCREMENT Not NULL,
factures.id_facture serait de bon aloi dans ta requête de sélection :wink:

Re: Problèmes SQLite - "Values et colomns"

Publié : mer. 08/févr./2017 20:24
par PCPixMusic
Oui, mais même là j'ai que prénom, nom et travail qui s'affichent.

Code : Tout sélectionner

psSQLRequest = "SELECT factures.id_factures,contacts.contact_prenom, contacts.contact_nom, contacts.contact_job"
   psSQLRequest + " FROM contacts"
   psSQLRequest + " JOIN factures"   
   psSQLRequest + " ON (contacts.id_contacts = factures.id_factures) " 
     
   DatabaseQuery(glDBSQLite,psSQLRequest)  
   
  ;Debug DatabaseError() 
        
   While NextDatabaseRow(glDBSQLite)
     Buffer = "Facture N°" + GetDatabaseString(glDBSQLite, 0) + " " + GetDatabaseString(glDBSQLite, 1) + " " + GetDatabaseString(glDBSQLite, 2)+ " " + GetDatabaseString(glDBSQLite, 3)
     AddGadgetItem(#Listview_0, -1, Buffer) 
     SetGadgetItemData(#Listview_0, CountGadgetItems(#Listview_0)-1, GetDatabaseLong(glDBSQLite, 0))
   Wend  

Re: Problèmes SQLite - "Values et colomns"

Publié : mer. 08/févr./2017 22:34
par falsam

Code : Tout sélectionner

Buffer = "Facture N°" + GetDatabaseString(glDBSQLite, 0) + " " + GetDatabaseString(glDBSQLite, 1) + " " + GetDatabaseString(glDBSQLite, 2)+ " " + GetDatabaseString(glDBSQLite, 3)
Chacun de tes champs sont censés se positionner dans une colonne ?

Re: Problèmes SQLite - "Values et colomns"

Publié : mer. 08/févr./2017 23:37
par PCPixMusic
Voici ce que je souhaite voir dans ListeView, au démarrage du programme (ici une fois que les listes ont été cliquer, DB_Select fonctionne pour l'affichage du numéro de facture dans la listeView, Numéro de Facture Prénom, Nom et Profession) :

Imagehebergeur image

Re: Problèmes SQLite - "Values et colomns"

Publié : mer. 08/févr./2017 23:57
par falsam
Donc tu as tout ce qu'il te faut pour réaliser cette application.

Re: Problèmes SQLite - "Values et colomns"

Publié : jeu. 09/févr./2017 0:19
par PCPixMusic
Oui, toute la base est faite et fonctionelle.

- Il me reste ce problème d'affichage de ces enregistrement-là dans la ListeView au démarrage, tant que je n'ai pas cliqué sur une fiche, le numéro de facture ne s'affiche pas (donc dans la procedure DB_Init). :cry:

- Les images s'effacent quand elles sont hors écran quand je déplace la fenêtre.

Merci je vais pouvoir bien avancer grâce à toi.

Re: Problèmes SQLite - "Values et colomns"

Publié : jeu. 09/févr./2017 0:29
par falsam
Il me reste ce problème d'affichage de ces enregistrement-là dans la ListeView au démarrage, tant que je n'ai pas cliqué sur une fiche, le numéro de facture ne s'affiche pas (donc dans la procedure DB_Init)
J'ai du mal à comprendre.

Tu veux dire que tant que tu ne cliques pas sur un élément de la liste la fiche ne s'affiche pas ?

Re: Problèmes SQLite - "Values et colomns"

Publié : jeu. 09/févr./2017 0:41
par PCPixMusic
Tant que je ne clique par sur un élément de la fiche, le numéro de facture ne s'affiche pas.

Quand le programme s'ouvre sans actions, dans ListeView s'affiche : "Facture N° Anne Girault Pianiste"

Quand je clique sur cette élément, dans ListeView s'affiche : : "Facture N°000564 Anne Girault Pianiste"

ça fonctionne, il manquait factures.facture_Numero_Facture après SELECT.