Créer et mettre à jour une base de données Sqlite
Re: Créer et mettre à jour une base de données Sqlite
Mdr ta l'âge de boire au moins ?
- 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
Etant plus vieux que toi, je suis apte pour cet exerciceMetalOS a écrit :Mdr ta l'âge de boire au moins ?
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
Allez soyons fou. On va reprendre le code précédent qui nous permettait de de compter le nombre de fois ou apparaît un poste budgétaire et nous allons, pour chacun des postes, calculer le montant total.
On rabâche encore une fois la séquence de traitement
Sélectionner "SELECT" l'ensemble des enregistrement de ta table.
Regrouper les postes budgétaires "GROUP BY poste".
Pour chaque poste budgétaire, compter le nombre de fois ou il apparaît "COUNT(poste)"
Pour chaque poste budgétaire, faire la somme des montants "SUM(Montant)"
Et enfin pour la présentation, trier les postes dans l'ordre ascendant "ORDER BY poste ASC"
Le codePour vous montrer la puissance de Pure Basic et de SQL, remplacerpar
On rabâche encore une fois la séquence de traitement
Sélectionner "SELECT" l'ensemble des enregistrement de ta table.
Regrouper les postes budgétaires "GROUP BY poste".
Pour chaque poste budgétaire, compter le nombre de fois ou il apparaît "COUNT(poste)"
Pour chaque poste budgétaire, faire la somme des montants "SUM(Montant)"
Et enfin pour la présentation, trier les postes dans l'ordre ascendant "ORDER BY poste ASC"
Le code
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
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
Cool, perso je ne doute pas de la puissance de PB.
Re: Créer et mettre à jour une base de données Sqlite
J'ai du mal à comprendre avec ton exemple falsam pour l'exploiter dans mon code.
Dans mon Window j'ai un combobox avec plusieurs valeurs.
J'aimerais savoir combien de fois je retrouve 'FEU' dans ma base de données sqlite et ceci pour chaque valeurs.
exemple de résultats:
FEU = 1 fois
SECOUR A VICTIME(S) = 5 fois
FUITE D'EAU = 10 fois
VERIFICATIONS = 0 fois
...
J'ai un peut de mal la dessus.
Dans mon Window j'ai un combobox avec plusieurs valeurs.
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")
exemple de résultats:
FEU = 1 fois
SECOUR A VICTIME(S) = 5 fois
FUITE D'EAU = 10 fois
VERIFICATIONS = 0 fois
...
J'ai un peut de mal la dessus.
Re: Créer et mettre à jour une base de données Sqlite
Personne n'a d'idée ?
Re: Créer et mettre à jour une base de données Sqlite
Je devient fou avec ses base de données. Je ne comprend pas comment compter le nombre de fois ou chaque catégorie apparaît dans ma base. Voici mon code ou la procédure DB_Count() devrait me retourner le résultat, mais rien ne fonctionne.
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
- 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
Bonjour Métal OS. Aurais tu une base de données test que je pourrais telecharger?
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
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
■ Malgré cette correction tu n'auras toujours pas d'affichage car tu n'utilises pas de debug pour afficher ta variable Buffers$ (haha). Je rigole mais ça m'arrive aussi parfois d'oublier d'utiliser debug devant une variable que je souhaite afficher.
■ Deux corrections et le code devient
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
Ta requête retourne un tableau de x lignes (ou rangée : Row en anglais) et x Colonnes
La numérotation de chacune des rangée et colonnes commencera par 0
Dans ta requête tu sélectionnes categorie et COUNT(categorie) (je sens que tu vois déjà ton erreur)
categorie sera la première colonne (Colonne 0)
COUNT(categorie) sera la seconde colonne (Colonne 1)
Hors tu demandes d'afficher la colonne 4
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
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
Putain comment c'est simple quand tu à la solution Si tu savais le nombre de nuit que j'ai passer dessus à m'arracher les cheveux (même si j'en ai pas beaucoup lol). Merci falsam de ton aide une fois de plus.
Re: Créer et mettre à jour une base de données Sqlite
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 ?
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 ?
- Mindphazer
- Messages : 635
- Inscription : mer. 24/août/2005 10:42
Re: Créer et mettre à jour une base de données Sqlite
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
Bureau : Win10 64bits
Maison : Macbook Pro M1 14" SSD 512 Go / Ram 16 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Maison : Macbook Pro M1 14" SSD 512 Go / Ram 16 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Re: Créer et mettre à jour une base de données Sqlite
merci beaucoup