Re: Créer et mettre à jour une base de données Sqlite
Publié : mar. 12/août/2014 22:28
Je vient de mettre un code sur le poste d'avant.
Forums PureBasic - Français
https://www.purebasic.fr/french/
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))+")"
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
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
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 ?
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()
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
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).
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()
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.