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 10000Code : 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 
EndProcedureCode : 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 
EndProcedureCode : 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 
EndProcedurela 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