Re: Problèmes SQLite - "Values et colomns"
Publié : mer. 08/févr./2017 19:50
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