Re: Créer et mettre à jour une base de données Sqlite
Publié : sam. 13/sept./2014 10:25
Mdr ta l'âge de boire au moins ?
Forums PureBasic - Français
https://www.purebasic.fr/french/
Etant plus vieux que toi, je suis apte pour cet exerciceMetalOS a écrit :Mdr ta l'âge de boire au moins ?
Code : Tout sélectionner
Enumeration
#Database
EndEnumeration
Global ReqSql.s, Buffer.s
;Base de données
Procedure QueryBudget()
;La base de données est créee en mémoire
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) ;Exécution de la requête
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 ""
;Répartition budgétaire
Debug "Répartition budgétaire"
ReqSql = "SELECT Poste, COUNT(poste), SUM(Montant) FROM budget GROUP BY Poste ORDER BY poste ASC"
DatabaseQuery(#Database, ReqSql)
While NextDatabaseRow(#Database)
Buffer = "le poste " + Str(GetDatabaseLong(#Database, 0))
Buffer + " apparait " + Str(GetDatabaseLong(#Database, 1)) + " Fois "
Buffer + "pour un montant de " + Str(GetDatabaseLong(#Database, 2)) + " Euros"
Debug Buffer
Wend
Else
Debug DatabaseError()
EndIf
EndProcedure
UseSQLiteDatabase()
QueryBudget()
Code : Tout sélectionner
For n = 1 To 10
Code : Tout sélectionner
For n = 1 To 10000
Code : Tout sélectionner
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")
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, "Statistiques")
GadgetToolTip(#BtnMC_Ouvrir,"Statistique de 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
Procedure DB_Count()
Protected psSQLRequest.s
psSQLRequest = "SELECT categorie, COUNT(categorie), FROM mc GROUP BY categorie ORDER BY categorie ASC"
If DatabaseQuery(glDBSQLite, psSQLRequest)
While NextDatabaseRow(glDBSQLite)
Buffer$ = "la catégorie" + GetDatabaseString(glDBSQLite, 4)
Buffer$ + " apparait " + GetDatabaseString(glDBSQLite, 4) + " Fois "
Wend
FinishDatabaseQuery(glDBSQLite)
Else
MessageRequester("Main-Courante évènementielle - DB_Count", DatabaseError())
EndIf
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
Case #BtnMC_Ouvrir
DB_Count()
EndSelect
EndSelect
Until quitForm1
CloseWindow(#Window_Form3)
EndIf
End
Code : Tout sélectionner
Procedure DB_Count()
Protected psSQLRequest.s
psSQLRequest = "SELECT categorie, COUNT(categorie), FROM mc GROUP BY categorie ORDER BY categorie ASC"
If DatabaseQuery(glDBSQLite, psSQLRequest)
While NextDatabaseRow(glDBSQLite)
Buffer$ = "la catégorie" + GetDatabaseString(glDBSQLite, 4)
Buffer$ + " apparait " + GetDatabaseString(glDBSQLite, 4) + " Fois "
Wend
FinishDatabaseQuery(glDBSQLite)
Else
MessageRequester("Main-Courante évènementielle - DB_Count", DatabaseError())
EndIf
EndProcedure
Code : Tout sélectionner
Procedure DB_Count()
Protected psSQLRequest.s
psSQLRequest = "SELECT categorie, COUNT(categorie) FROM mc GROUP BY categorie ORDER BY categorie ASC"
If DatabaseQuery(glDBSQLite, psSQLRequest)
While NextDatabaseRow(glDBSQLite)
Buffer$ = "la catégorie" + GetDatabaseString(glDBSQLite, 4)
Buffer$ + " apparait " + GetDatabaseString(glDBSQLite, 4) + " Fois "
Debug Buffer$
Wend
FinishDatabaseQuery(glDBSQLite)
Else
MessageRequester("Main-Courante évènementielle - DB_Count", DatabaseError())
EndIf
EndProcedure
Code : Tout sélectionner
Buffer$ = "la catégorie" + GetDatabaseString(glDBSQLite, 4)
Code : Tout sélectionner
Procedure DB_Count()
Protected psSQLRequest.s
psSQLRequest = "SELECT categorie, COUNT(categorie) FROM mc GROUP BY categorie ORDER BY categorie ASC"
If DatabaseQuery(glDBSQLite, psSQLRequest)
While NextDatabaseRow(glDBSQLite)
Buffer$ = "la catégorie " + GetDatabaseString(glDBSQLite, 0)
Buffer$ + " apparait " + GetDatabaseString(glDBSQLite, 1) + " Fois "
Debug Buffer$
Wend
FinishDatabaseQuery(glDBSQLite)
Else
MessageRequester("Main-Courante évènementielle - DB_Count", DatabaseError())
EndIf
EndProcedure
la catégorie DIVERS apparait 1 Fois
la catégorie FEU apparait 4 Fois
la catégorie FUITE D'EAU apparait 1 Fois
la catégorie VERIFICATIONS apparait 2 Fois
Oui, il suffit d'utiliser la commande SQLShade a écrit : ven. 08/mars/2024 6:25 salut tous le monde
merci falsam pour se fabuleux tuto sa m'aide super bien,
j'ai une question bête, ou j n'est pas vu de réponse, je voulais savoir si c'était possible de modifier le nombre de colonne une fois la table créer ?
par exemple comme dans l'exemple que tu a donner tu a la colonne nom, prénom, âge est il possible d'ajouté par exemple une colonne tel, une fois la table créer ?
Code : Tout sélectionner
ALTER TABLE nom_table ADD nom_colonne type_donnees