Créer et mettre à jour une base de données Sqlite
Re: Créer et mettre à jour une base de données Sqlite
Je vient de mettre un code sur le poste d'avant.
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Créer et mettre à jour une base de données Sqlite
RemplaceMetalOS a écrit :Je vient de mettre un code sur le poste d'avant.
Code : Tout sélectionner
psSQLRequest + SqliteString+GetGadgetText(#EditeurMC))+"'"
psSQLRequest + ")"
Code : Tout sélectionner
psSQLRequest + SqliteString(GetGadgetText(#EditeurMC))+")"
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Créer et mettre à jour une base de données Sqlite
Désolé mais j'ai toujours une erreur
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Créer et mettre à jour une base de données Sqlite
Mais non!!! Je viens de saisir deux evements avec apostrophe et guillemet et je n'ai pas d'erreur.MetalOS a écrit :Désolé mais j'ai toujours une erreur
Ton code corrigé
Code : Tout sélectionner
Global glDBSQLite.l
Global glListviewItemSelected.l = -1
Global glImageMemory.l
;- Window Constants
Enumeration 1
#Window_Form3
EndEnumeration
#WindowIndex=#PB_Compiler_EnumerationValue
;- Gadget Constants
Enumeration 1
;Window_Form3
#TextHeaderMC
#TextNumMC
#StringNumMC
#TextCategorieMC
#ComboCategorieMC
#TextDateMC
#String_DateMC
#TextHeureMC
#StringHeureMC
#TextRequerantMC
#StringRequerantMC
#TextLieuMC
#StringLieuMC
#TextSujetMC
#StringSujetMC
#EditeurMC
#ListMC
#BtnMC_Enregistrer
#BtnMC_Ouvrir
#BtnMC_Supprimer
#BtnMC_Fermer
#ListingMC
EndEnumeration
#GadgetIndex=#PB_Compiler_EnumerationValue
Procedure.i Window_Form3()
If OpenWindow(#Window_Form3,302,164,790,560,"Main-courante évènementielle expresse :",#PB_Window_ScreenCentered|#PB_Window_Invisible)
TextGadget(#TextHeaderMC,0,0,790,20," Gestion main-courante évènementielle expresse")
SetGadgetFont(#TextHeaderMC, Font0)
SetGadgetColor(#TextHeaderMC, #PB_Gadget_BackColor, RGB(42, 85, 134))
SetGadgetColor(#TextHeaderMC, #PB_Gadget_FrontColor, RGB(223, 233, 245))
TextGadget(#TextNumMC,10,32,60,15,"Numéro")
StringGadget(#StringNumMC,70,30,100,20,"", #PB_String_ReadOnly)
GadgetToolTip(#StringNumMC,"Numérotation automatique")
TextGadget(#TextCategorieMC,180,32,55,15,"Catégorie :")
ComboBoxGadget(#ComboCategorieMC,235,30,200,20,#PB_ComboBox_UpperCase);{
AddGadgetItem(#ComboCategorieMC, -1, "FEU")
AddGadgetItem(#ComboCategorieMC, -1, "SECOUR A VICTIME(S)")
AddGadgetItem(#ComboCategorieMC, -1, "FUITE D'EAU")
AddGadgetItem(#ComboCategorieMC, -1, "VERIFICATIONS")
AddGadgetItem(#ComboCategorieMC, -1, "ASC OU MC")
AddGadgetItem(#ComboCategorieMC, -1, "DEGRADATION")
AddGadgetItem(#ComboCategorieMC, -1, "INCIDENT TECHNIQUE")
AddGadgetItem(#ComboCategorieMC, -1, "AGRESSION VERBALE")
AddGadgetItem(#ComboCategorieMC, -1, "LITIGE")
AddGadgetItem(#ComboCategorieMC, -1, "EVACUATION")
AddGadgetItem(#ComboCategorieMC, -1, "VOL AVEC PLAINTE")
AddGadgetItem(#ComboCategorieMC, -1, "VOL SANS PLAINTE")
AddGadgetItem(#ComboCategorieMC, -1, "BAGARRE")
AddGadgetItem(#ComboCategorieMC, -1, "PRISE DE SERVICE")
AddGadgetItem(#ComboCategorieMC, -1, "FIN DE SERVICE")
AddGadgetItem(#ComboCategorieMC, -1, "RONDE DE SECURITE")
AddGadgetItem(#ComboCategorieMC, -1, "PERCEPTION DE CLES")
AddGadgetItem(#ComboCategorieMC, -1, "REINTEGRATION DE CLES")
AddGadgetItem(#ComboCategorieMC, -1, "DIVERS")
GadgetToolTip(#ComboCategorieMC,"Sélectionnez la catégorie")
;}
TextGadget(#TextDateMC,450,32,30,15,"Date")
Date$ = FormatDate("%dd / %mm / %yyyy", Date())
StringGadget(#String_DateMC, 480, 30, 120, 20, Date$, #PB_String_ReadOnly)
GadgetToolTip(#String_DateMC,"Sélectionnez la date de la MC")
TextGadget(#TextHeureMC,620,32,35,15,"Heure")
StringGadget(#StringHeureMC,655,30,50,20,FormatDate("%hh h %ii",Date()), #PB_String_ReadOnly)
GadgetToolTip(#StringHeureMC,"Heure de réquisition")
TextGadget(#TextRequerantMC,10,57,60,15,"Requérant")
StringGadget(#StringRequerantMC,70,55,210,20,"")
GadgetToolTip(#StringRequerantMC,"Nom et prénom si disponible")
TextGadget(#TextLieuMC,290,57,50,15,"Lieu")
StringGadget(#StringLieuMC,350,55,400,20,"")
GadgetToolTip(#StringLieuMC,"Adresse de l'intervention / des faits")
TextGadget(#TextSujetMC,10,82,50,15,"Sujet")
StringGadget(#StringSujetMC,70,80,400,20,"")
GadgetToolTip(#StringSujetMC,"Indiquez succintement le sujet de cette main-courante")
EditorGadget(#EditeurMC, 10, 105, 770, 200, #PB_Editor_WordWrap)
SetGadgetFont(#EditeurMC, Font1)
SetGadgetColor(#EditeurMC, #PB_Gadget_BackColor, RGB(253, 251, 212))
SetGadgetColor(#EditeurMC, #PB_Gadget_FrontColor, RGB(29, 29, 118))
GadgetToolTip(#EditeurMC,"Saisi du Compte-rendu des évènements")
;Dans ce listing on y met que les infos de fichier, pas la MC elle même.
ListIconGadget(#ListMC,10,310,770,200,"Numéro",120, #PB_ListIcon_FullRowSelect)
AddGadgetColumn(#ListMC, 1, "Date", 100)
AddGadgetColumn(#ListMC, 2, "Heure", 70)
AddGadgetColumn(#ListMC, 3, "Catégorie", 150)
AddGadgetColumn(#ListMC, 4, "Sujet", 300)
AddGadgetColumn(#ListMC, 5, "Requérant", 200)
AddGadgetColumn(#ListMC, 6, "Lieu", 250)
AddGadgetColumn(#ListMC, 7, "Compte rendu", 500)
ButtonGadget(#BtnMC_Enregistrer, 10, 520, 80, 25, "Enregistrer")
GadgetToolTip(#BtnMC_Enregistrer,"Enregistrer la main courante")
ButtonGadget(#BtnMC_Ouvrir, 100, 520, 80, 25, "Ouvrir")
GadgetToolTip(#BtnMC_Ouvrir,"Ouvrir la main courante sélectionnée")
ButtonGadget(#BtnMC_Fermer, 700, 520, 80, 25, "Fermer")
GadgetToolTip(#BtnMC_Fermer,"Quitter Main-Courante Express")
HideWindow(#Window_Form3,0)
ProcedureReturn WindowID(#Window_Form3)
EndIf
EndProcedure
;****Fin procédures impression****
Procedure DB_Init()
Protected plFile.l
Protected psSQLRequest.s
UseSQLiteDatabase()
If FileSize(#PB_Compiler_FilePath+"MainCourante.sqlite") < 0
plFile = CreateFile(#PB_Any, #PB_Compiler_FilePath+"MainCourante.sqlite")
If plFile
CloseFile(plFile)
EndIf
EndIf
glDBSQLite = OpenDatabase(#PB_Any, "MainCourante.sqlite", "", "", #PB_Database_SQLite)
If glDBSQLite = 0
MessageRequester("Main-Courante évènementielle", DatabaseError())
End
ElseIf plFile
psSQLRequest = "CREATE TABLE IF NOT EXISTS mc ("
psSQLRequest + "id_mc INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "
psSQLRequest + "mcnum TEXT Not NULL," ;Numéro de main-courante
psSQLRequest + "date TEXT Not NULL," ;Date
psSQLRequest + "heure TEXT Not NULL," ;heure
psSQLRequest + "categorie TEXT Not NULL,";Catégories
psSQLRequest + "sujet TEXT Not NULL,";Sujet
psSQLRequest + "requerant TEXT Not NULL,";Requérant
psSQLRequest + "lieu TEXT Not NULL,";lieu
psSQLRequest + "compterendu TEXT Not NULL";Compte rendue de la main-courante
psSQLRequest + ")"
; Debug psSQLRequest
If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
MessageRequester("Main-Courante évènementielle - DB_Init()", DatabaseError())
EndIf
EndIf
If DatabaseQuery(glDBSQLite, "SELECT * FROM mc") <> 0
While NextDatabaseRow(glDBSQLite)
AddGadgetItem(#ListMC, CountGadgetItems(#ListMC), GetDatabaseString(glDBSQLite, 1) +Chr(10)+ GetDatabaseString(glDBSQLite, 2) +Chr(10)+ GetDatabaseString(glDBSQLite, 3) +Chr(10)+ GetDatabaseString(glDBSQLite, 4) +Chr(10)+ GetDatabaseString(glDBSQLite, 5) +Chr(10)+ GetDatabaseString(glDBSQLite, 6) +Chr(10)+ GetDatabaseString(glDBSQLite, 7) +Chr(10)+ GetDatabaseString(glDBSQLite, 8))
SetGadgetItemData(#ListMC, CountGadgetItems(#ListMC)-1, GetDatabaseLong(glDBSQLite, 0))
Wend
FinishDatabaseQuery(glDBSQLite)
EndIf
EndProcedure
Procedure.s SqliteString(Buffer.s)
Buffer=Chr(34)+ReplaceString(Buffer, Chr(34), Chr(34)+Chr(34)) + Chr(34)
ProcedureReturn Buffer
EndProcedure
Procedure DB_InsertMC()
Protected psSQLRequest.s
psSQLRequest = "INSERT INTO mc (mcnum, date, heure, categorie, sujet, requerant, lieu, compterendu)"
psSQLRequest + "VALUES ("
psSQLRequest + SqliteString(GetGadgetText(#StringNumMC))+ ","
psSQLRequest + SqliteString(GetGadgetText(#String_DateMC))+ ","
psSQLRequest + SqliteString(GetGadgetText(#StringHeureMC))+ ","
psSQLRequest + SqliteString(GetGadgetText(#ComboCategorieMC))+ ","
psSQLRequest + SqliteString(GetGadgetText(#StringSujetMC))+ ","
psSQLRequest + SqliteString(GetGadgetText(#StringRequerantMC))+ ","
psSQLRequest + SqliteString(GetGadgetText(#StringLieuMC)) + ","
psSQLRequest + SqliteString(GetGadgetText(#EditeurMC)) +")"
If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
Debug psSQLRequest
MessageRequester("Main-Courante évènementielle - DB_InsertMC()", DatabaseError())
EndIf
ClearGadgetItems(#ListMC)
If DatabaseQuery(glDBSQLite, "SELECT * FROM mc") <> 0
While NextDatabaseRow(glDBSQLite)
AddGadgetItem(#ListMC, CountGadgetItems(#ListMC), GetDatabaseString(glDBSQLite, 1) +Chr(10)+ GetDatabaseString(glDBSQLite, 2) +Chr(10)+ GetDatabaseString(glDBSQLite, 3) +Chr(10)+ GetDatabaseString(glDBSQLite, 4) +Chr(10)+ GetDatabaseString(glDBSQLite, 5) +Chr(10)+ GetDatabaseString(glDBSQLite, 6) +Chr(10)+ GetDatabaseString(glDBSQLite, 7) +Chr(10)+ GetDatabaseString(glDBSQLite, 8))
SetGadgetItemData(#ListMC, CountGadgetItems(#ListMC)-1, GetDatabaseLong(glDBSQLite, 0))
Wend
FinishDatabaseQuery(glDBSQLite)
EndIf
;actualisation automatique du numéro
SetGadgetText(#StringNumMC,"MC"+FormatDate("%yyyy", Date())+"_"+Str(CountGadgetItems(#ListMC) + 1))
EndProcedure
;- Main Loop
If Window_Form3()
DB_Init()
;actualisation automatique du numéro
SetGadgetText(#StringNumMC,"MC"+FormatDate("%yyyy", Date())+"_"+Str(CountGadgetItems(#ListMC) + 1))
Define quitForm1=0
Repeat
EventID =WaitWindowEvent()
MenuID =EventMenu()
GadgetID =EventGadget()
WindowID =EventWindow()
Select EventID
Case #PB_Event_CloseWindow
If WindowID=#Window_Form3
quitForm1=1
EndIf
Case #PB_Event_Gadget
Select GadgetID
Case #BtnMC_Fermer
End
Case #BtnMC_Enregistrer
A$ = GetGadgetText(#StringNumMC)
B$ = GetGadgetText(#String_DateMC)
C$ = GetGadgetText(#StringHeureMC)
D$ = GetGadgetText(#ComboCategorieMC)
E$ = GetGadgetText(#StringSujetMC)
F$ = GetGadgetText(#StringRequerantMC)
G$ = GetGadgetText(#StringLieuMC)
H$ = GetGadgetText(#EditeurMC)
I$ = ""
If A$ = I$
MessageRequester("Attention", "Certains champ du formulaire de main-courante sont vide. Compléter le formulaire pour pouvoir enregistrer une nouvelle main-courante.", #PB_MessageRequester_Ok)
ElseIf B$ = I$
MessageRequester("Attention", "Certains champ du formulaire de main-courante sont vide. Compléter le formulaire pour pouvoir enregistrer une nouvelle main-courante.", #PB_MessageRequester_Ok)
ElseIf C$ = I$
MessageRequester("Attention", "Certains champ du formulaire de main-courante sont vide. Compléter le formulaire pour pouvoir enregistrer une nouvelle main-courante.", #PB_MessageRequester_Ok)
ElseIf D$ = I$
MessageRequester("Attention", "Certains champ du formulaire de main-courante sont vide. Compléter le formulaire pour pouvoir enregistrer une nouvelle main-courante.", #PB_MessageRequester_Ok)
ElseIf E$ = I$
MessageRequester("Attention", "Certains champ du formulaire de main-courante sont vide. Compléter le formulaire pour pouvoir enregistrer une nouvelle main-courante.", #PB_MessageRequester_Ok)
ElseIf F$ = I$
MessageRequester("Attention", "Certains champ du formulaire de main-courante sont vide. Compléter le formulaire pour pouvoir enregistrer une nouvelle main-courante.", #PB_MessageRequester_Ok)
ElseIf G$ = I$
MessageRequester("Attention", "Certains champ du formulaire de main-courante sont vide. Compléter le formulaire pour pouvoir enregistrer une nouvelle main-courante.", #PB_MessageRequester_Ok)
ElseIf H$ = I$
MessageRequester("Attention", "Certains champ du formulaire de main-courante sont vide. Compléter le formulaire pour pouvoir enregistrer une nouvelle main-courante.", #PB_MessageRequester_Ok)
Else
Resultat = MessageRequester("MAIN-COURANTE n° "+GetGadgetText(#StringNumMC),"Vous allez enregistrer cette main-courante que vous ne pourrez modifier."+Chr(13)+"S'il vous reste des informations à vérifier ou des éléments à corriger, faites le avant."+Chr(13)+"Enregistrer maintenant ?", #PB_MessageRequester_YesNo)
If Resultat = 6
DB_InsertMC()
; on remet les champs à zéro et on actualise le compteur après enregistrement
ClearGadgetItems(#EditeurMC)
SetGadgetText(#StringNumMC,"MC"+FormatDate("%yyyy", Date())+"_"+Str(CountGadgetItems(#ListMC) + 1))
SetGadgetText(#ComboCategorieMC,"")
SetGadgetText(#StringHeureMC,FormatDate("%hh h %ii",Date()))
SetGadgetText(#StringRequerantMC,"")
SetGadgetText(#StringLieuMC,"")
SetGadgetText(#StringSujetMC,"")
ElseIf Resultat = 7
;annulé
EndIf
EndIf
EndSelect
EndSelect
Until quitForm1
CloseWindow(#Window_Form3)
EndIf
End
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Créer et mettre à jour une base de données Sqlite
Je ne comprend pas j'ai pourtant fais la même modif que toi et ca ne fonctionne pas mais quand je fais un copier/coller de la procédure ca fonctionne. Bref merci falsam
Re: Créer et mettre à jour une base de données Sqlite
Quand ça veut pas, ça veut pas !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Créer et mettre à jour une base de données Sqlite
falsam, si je me base sur mon exemple et t'il possible de générer un graphique (camembert ou courbe) pour comparer le nombre des différentes catégories enregistrer dans ma base et si oui comment ? Les graphiques peuvent ils être fait avec le canevas gadget ou il faut une lib pour ça ?
Re: Créer et mettre à jour une base de données Sqlite
Bonjour Metalos
en cherchant à "Chart" tu va trouver des libs dédiées aux graphiques sur les forums
Regarde cette lib, l'exemple image est en 2D, mais depuis son code à été amélioré en ajoutant le relief
http://www.purebasic.fr/english/viewtop ... 14&t=59038
Cordialement
en cherchant à "Chart" tu va trouver des libs dédiées aux graphiques sur les forums
Regarde cette lib, l'exemple image est en 2D, mais depuis son code à été amélioré en ajoutant le relief
http://www.purebasic.fr/english/viewtop ... 14&t=59038
Cordialement
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Créer et mettre à jour une base de données Sqlite
Un exemple basé sur une base de données stockant des données budgétaires.MetalOS a écrit :générer un graphique (camembert ou courbe) pour comparer le nombre des différentes catégories enregistrer dans ma base et si oui comment ? Les graphiques peuvent ils être fait avec le canevas gadget ou il faut une lib pour ça ?
Pour cette première partie de cet exercice, nous allons
- Créer une base de données qui stockera une table budget
- Chaque enregistrement de cette table sera composé d'un poste budgétaire et d'un montant
- On va faire simple : Le poste budgétaire est 1 ou 2 (Recette ou Dépense)
Les commentaires sont dans le code.
Code : Tout sélectionner
Enumeration
#Database
EndEnumeration
Global ReqSql.s
;Base de données
Procedure CalcBudget()
If OpenDatabase(#Database, ":memory:", "", "")
Debug "Connected"
;Création de la table budget
ReqSql = "CREATE TABLE budget("
ReqSql + "poste INTEGER," ;Poste budgétaire
ReqSql + "montant INTEGER" ;Montant
ReqSql + ");"
DatabaseUpdate(#DataBase, ReqSql) ;Exécution de la requéte
Debug DatabaseError()
;Ajout d'un jeu de test de 10 enregistrements
;. Poste 1 = Dépense, Poste 2 = Recette
;. Pour chacun de ces postes, on affecte un montant compris entre 10 et 100
For n = 1 To 10
ReqSql = "INSERT INTO budget (poste, montant) values ("
ReqSql + Chr(34) + Random(2,1) + Chr(34)+Chr(44) ;Numéro de poste budgétaire aléatoire 1 ou 2
ReqSql + Chr(34) + Random(100, 10) + Chr(34)+")" ;Montant aléatoire compris entre 10 et 100
DatabaseUpdate(#Database, ReqSql)
Next
;Visualisation des enregistrements de la table budget
Debug "Visualisation du jeu de test"
ReqSql = "SELECT * FROM budget ORDER BY poste ASC" ;
DatabaseQuery(#Database, ReqSql)
While NextDatabaseRow(#Database)
Debug "Poste " + Str(GetDatabaseLong(#Database, 0)) + " => " + Str(GetDatabaseLong(#Database, 1)) + " Euros"
Wend
;Calcul du montant total
ReqSql = "SELECT SUM(montant) FROM budget"
DatabaseQuery(#Database, ReqSql)
NextDatabaseRow(#Database)
MontantTotal = GetDatabaseLong(#Database, 0)
Debug "Montant total "+ MontantTotal + #CRLF$
;Calcul de la répartition budgétaire
Debug "Répartition budgétaire"
ReqSql = "SELECT poste, SUM(montant) FROM budget GROUP BY poste"
DatabaseQuery(#Database, ReqSql)
While NextDatabaseRow(#Database)
Debug "Total poste " + Str(GetDatabaseLong(#Database, 0)) + " => " + Str(GetDatabaseLong(#Database, 1)) + " Euros "
Wend
Else
Debug DatabaseError()
EndIf
EndProcedure
UseSQLiteDatabase()
CalcBudget()
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Créer et mettre à jour une base de données Sqlite
Ajoutons maintenant un graphique sous la forme d'un camembert.
Code : Tout sélectionner
Enumeration
#Database
EndEnumeration
Enumeration Windows
#MainForm
EndEnumeration
Enumeration Gadgets
#Canvas
#Control
EndEnumeration
Global ReqSql.s
Structure PosteBudgetaire
Poste.i
Montant.i
Repartition.f ;C'est un pourcentage
EndStructure
Global NewList Budget.PosteBudgetaire(), MontantTotal
;Graphique
Procedure Pie(x, y, start.f, finish.f, radius.f, color = 0)
Protected x0, y0, x1, y1, xf, yf
If start > finish : start - 360 : EndIf
If finish - start > 360 : finish = start + 360 : EndIf
DrawingMode(#PB_2DDrawing_Outlined)
Circle(x, y, radius, color)
x0 = x + Cos(Radian(start)) * radius
y0 = y + Sin(Radian(start)) * radius
x1 = x + Cos(Radian(finish)) * radius
y1 = y + Sin(Radian(finish)) * radius
LineXY(x0, y0, x, y, color)
LineXY(x, y, x1, y1, color)
xf = radius/2 * (Cos(Radian((start+finish)/2))) + x
yf = radius/2 * (Sin(Radian((start+finish)/2))) + y
FillArea(xf, yf, color, color ! 1)
EndProcedure
;Base de données
Procedure CalcBudget()
If OpenDatabase(#Database, ":memory:", "", "")
;Création de la table budget
ReqSql = "CREATE TABLE budget("
ReqSql + "poste INTEGER," ;Poste budgétaire
ReqSql + "montant INTEGER" ;Montant
ReqSql + ");"
DatabaseUpdate(#DataBase, ReqSql)
;Ajout d'un jeu de test
For n = 1 To 10
ReqSql = "INSERT INTO budget (poste, montant) values ("
ReqSql + Chr(34) + Random(2,1) + Chr(34)+Chr(44);Numéro de poste budgétaire aléatoire 1 ou 2
ReqSql + Chr(34) + Random(100, 10) + Chr(34)+")" ;Montant aléatoire compris entre 100 et 1000
DatabaseUpdate(#Database, ReqSql)
Next
;Visualisation des enregistrements de la table budget
AddGadgetItem(#Control, -1, "■ Visualisation du jeu de test")
ReqSql = "SELECT * FROM budget ORDER BY poste ASC" ;
DatabaseQuery(#Database, ReqSql)
While NextDatabaseRow(#Database)
AddGadgetItem(#Control, -1, "Poste " + Str(GetDatabaseLong(#Database, 0)) + " => " + Str(GetDatabaseLong(#Database, 1)) + " Euros")
Wend
;Calcul du montant total
ReqSql = "SELECT SUM(montant) FROM budget"
DatabaseQuery(#Database, ReqSql)
NextDatabaseRow(#Database)
MontantTotal = GetDatabaseLong(#Database, 0)
AddGadgetItem(#Control, -1, LSet("", 50 ,"="))
AddGadgetItem(#Control, -1, "Montant total "+ MontantTotal + " Euros")
AddGadgetItem(#Control, -1, "")
;Calcul de la répartition budgétaire
AddGadgetItem(#Control, -1, "■ Répartition budgétaire")
ReqSql = "SELECT poste, SUM(montant) FROM budget GROUP BY poste"
DatabaseQuery(#Database, ReqSql)
While NextDatabaseRow(#Database)
AddElement(Budget())
Budget()\Poste = GetDatabaseLong(#Database, 0)
Budget()\Montant = GetDatabaseLong(#Database, 1)
Budget()\Repartition = Round((Budget()\Montant / MontantTotal)*100, #PB_Round_Nearest)
AddGadgetItem(#Control, -1, "Total poste " + Str(GetDatabaseLong(#Database, 0)) + " => " + Str(GetDatabaseLong(#Database, 1)) + " Euros (" + Budget()\Repartition + "%)")
Wend
Else
MessageRequester("Ooops", "Une erreur à l'ouverture de la base de données " + DatabaseError())
EndIf
EndProcedure
;Représentation graphique du résultat
Procedure DrawResult()
Protected DrawStart.f, DrawFinish.f, Radius.f = 150
StartDrawing(CanvasOutput(#Canvas))
Box(0, 0, 400, 400, RGB(233, 231, 225))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(150, 20, "Recette/Dépense", RGB(0, 0, 0))
ForEach Budget()
DrawingMode(#PB_2DDrawing_Default)
DrawFinish = DrawStart + (360 *Budget()\Repartition) / 100
Select Budget()\Poste
Case 1 ;Recete
Pie(200, 200, DrawStart, DrawFinish, Radius, RGB(110, 185, 64))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(10, 370, "Recette " + Str(budget()\Repartition) + " %", RGB(110, 185, 64))
Case 2 ;Dépense
Pie(200, 200, DrawStart, DrawFinish, Radius, RGB(226, 43, 23))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(250, 370, "Dépense " + Str(budget()\Repartition) + " %", RGB(226, 43, 23))
EndSelect
DrawStart + (360 * Budget()\Repartition) / 100
Next
StopDrawing()
EndProcedure
Procedure MainForm_Show()
If OpenWindow(#MainForm, 0, 0, 800, 450, "Mon budget")
CanvasGadget(#Canvas, 10, 10, 400, 400)
ListViewGadget(#Control, 420, 10, 370, 400)
ProcedureReturn #True
EndIf
EndProcedure
If MainForm_Show()
UseSQLiteDatabase()
CalcBudget()
DrawResult()
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Créer et mettre à jour une base de données Sqlite
Super falsam je vais regarder ça merci
Re: Créer et mettre à jour une base de données Sqlite
Désolé kernadec j'ai oublié de te remercier pour le lien. merci
Falsam pour dessiner le graphique ça fonctionne bien mais je n'arrive toujours pas à savoir comment comptabiliser le nombre de fois ou je retrouve les même catégorie dans ma base de donnés (toujours en me basant sur mon code d'exemple).
Falsam pour dessiner le graphique ça fonctionne bien mais je n'arrive toujours pas à savoir comment comptabiliser le nombre de fois ou je retrouve les même catégorie dans ma base de donnés (toujours en me basant sur mon code d'exemple).
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Créer et mettre à jour une base de données Sqlite
Ce que tu veux faire, c'est compter le nombre de fois ou apparaît une catégorie dans ta base de données.MetalOS a écrit :comment comptabiliser le nombre de fois ou je retrouve les même catégorie dans ma base de donnés (toujours en me basant sur mon code d'exemple).
En préambule : Je reprend le code simplifié que j'ai posté car que ce soit une catégorie ou un poste budgétaire, cela revient au même et le code est réduit à l'essentiel.
Pour la compréhension du code, les ordre SQL sont en majuscule.
A faire:
Sélectionner "SELECT" l'ensemble des enregistrement de ta table en ne tenant compte que du poste budgétaire.
Regrouper les postes budgétaires "GROUP BY poste".
Pour chaque poste budgétaire, compter le nombre de fois ou il apparaît "COUNT(poste)"
Et enfin pour la présentation, trier les postes dans l'ordre ascendant "ORDER BY poste ASC"
C'est parti pour le code
Code : Tout sélectionner
Enumeration
#Database
EndEnumeration
Global ReqSql.s
;Base de données
Procedure CalcBudget()
If OpenDatabase(#Database, ":memory:", "", "")
Debug "Connected"
;Création de la table budget
ReqSql = "CREATE TABLE budget("
ReqSql + "poste INTEGER," ;Poste budgétaire
ReqSql + "montant INTEGER" ;Montant
ReqSql + ");"
DatabaseUpdate(#DataBase, ReqSql) ;Exécution de la requéte
Debug DatabaseError()
;Ajout d'un jeu de test de 10 enregistrements
;. Poste 1 = Dépense, Poste 2 = Recette
;. Pour chacun de ces postes, on affecte un montant compris entre 10 et 100
For n = 1 To 10
ReqSql = "INSERT INTO budget (poste, montant) values ("
ReqSql + Chr(34) + Random(2,1) + Chr(34)+Chr(44) ;Numéro de poste budgétaire aléatoire 1 ou 2
ReqSql + Chr(34) + Random(100, 10) + Chr(34)+")" ;Montant aléatoire compris entre 10 et 100
DatabaseUpdate(#Database, ReqSql)
Next
;Visualisation des enregistrements de la table budget
Debug "Visualisation du jeu de test"
ReqSql = "SELECT * FROM budget ORDER BY poste ASC" ;
DatabaseQuery(#Database, ReqSql)
While NextDatabaseRow(#Database)
Debug "Poste " + Str(GetDatabaseLong(#Database, 0)) + " => " + Str(GetDatabaseLong(#Database, 1)) + " Euros"
Wend
Debug ""
;Combien de fois apparait un poste budgétaire (Ou une quatégorie)
Debug "Dénombrement"
ReqSql = "SELECT Poste, COUNT(poste) FROM budget GROUP BY Poste ORDER BY poste ASC"
DatabaseQuery(#Database, ReqSql)
While NextDatabaseRow(#Database)
Debug "le poste " + Str(GetDatabaseLong(#Database, 0)) + " apparait " + Str(GetDatabaseLong(#Database, 1)) + " Fois "
Wend
Else
Debug DatabaseError()
EndIf
EndProcedure
UseSQLiteDatabase()
CalcBudget()
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Créer et mettre à jour une base de données Sqlite
Super merci falsam je te sauterais bien dessus pour te remercier mais je suis marié lol merci.
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Créer et mettre à jour une base de données Sqlite
Un jour je viendrais peut être dans ta région. Tu dois surement connaitre un bon troquetMetalOS a écrit :Super merci falsam je te sauterais bien dessus pour te remercier mais je suis marié lol merci.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%