[Résolu] Pourquoi ça ne sauvegarde pas ?
Publié : jeu. 31/mars/2016 18:11
				
				Bonsoir à tous,
je souhaite faire un logiciel pour prendre des rendez-vous, car je fréquente beaucoup le corps médical et j'aimerais savoir pourquoi, il ne sauvegarde pas alors qu'il est sensé le faire à la fermeture du programme.
			je souhaite faire un logiciel pour prendre des rendez-vous, car je fréquente beaucoup le corps médical et j'aimerais savoir pourquoi, il ne sauvegarde pas alors qu'il est sensé le faire à la fermeture du programme.
Code : Tout sélectionner
;Planning Json.pb
EnableExplicit
;{- Enumérations / DataSections
Enumeration Fenetres
  #Fenetre_principale
  #Base_de_donnees
EndEnumeration
Enumeration Gadgets
  #LstIcn
  #Dte_Quand
  #Txt_Qui
  #Txt_AvecQui
  #Txt_Ville
  #Txt_Heure
  #Txt_Duree
  #Txt_Note
  #Str_Qui
  #Str_AvecQui
  #Str_Ville
  #Str_Heure
  #Str_Duree
  #Edt_Note
  #Btn_Nouveau
  #Btn_Enregistrer
  #Btn_Supprimer
  #Btn_Selectionner
  #Btn_Quitter
  #Ctn
EndEnumeration
;}
Structure DB
  Quand.s
  Qui.s
  Avec_Qui.s
  Ou.s
  Heure.s
  Duree.s
  Note.s
EndStructure
Global NewList MaBase.DB()
Global Evenement, EvenementFenetre, EvenementGadget, TypeEvenement, EvenementMenu
;Application 
#TitreApplication = "Planning par Micoute"
;Base de données
#Fichier_de_donnees = "D:\Programmation\Donnees\Planning.Json"
; Déclaration des variables
Global.s Date_Quand, Qui, AvecQui, Ville, Heure, Duree, Note
Global Texte$, Couleur, Couleur2, Couleur3, Resultat, ElemGadget
Declare Event_SizeWindow()
Declare ChargerRDV()
Declare NouveauRDV()
Declare SelectionnerRDV()
Declare SupprimerRDV()
Declare Mise_a_jour_RDV()
Declare ModifierEnregistrement()
Declare SauvegardeRDV()
Declare Ouvrir_Fenetre_principale()
Procedure Event_SizeWindow()
  ResizeGadget(#LstIcn, #PB_Ignore, #PB_Ignore, WindowWidth(#Fenetre_principale) - 20, WindowHeight(#Fenetre_principale) - 305)
  ResizeGadget(#Ctn, #PB_Ignore, GadgetY(#LstIcn) + GadgetHeight(#LstIcn), WindowWidth(#Fenetre_principale), WindowHeight(#Fenetre_principale) - 20)
  ResizeGadget(#Str_Qui, 80, 10, GadgetWidth(#Ctn) -100, 20)
  ResizeGadget(#Str_AvecQui,0, 10, GadgetWidth(#Ctn) -100, 20)
  ResizeGadget(#Str_AvecQui, 80, 45, GadgetWidth(#Ctn) - 100, 20)
  ResizeGadget(#Str_Ville, 80, 75, GadgetWidth(#Ctn) - 100, 20)
  ResizeGadget(#Edt_Note, 80, 170, GadgetWidth(#Ctn) - 100, 40)
  
  ResizeGadget(#Btn_Enregistrer, (GadgetWidth(#Ctn) * 0.3)-15, 225, 60, 20)
  ResizeGadget(#Btn_Supprimer, (GadgetWidth(#Ctn) * 0.5)-15 , 225, 60, 20)
  ResizeGadget(#Btn_Selectionner, (GadgetWidth(#Ctn) * 0.7)-15 , 225, 60, 20)
  ResizeGadget(#Btn_Quitter, GadgetWidth(#Ctn) - 60, 225, 40, 20)
EndProcedure
;Ouverture de la base de données 
Procedure ChargerRDV()  
  If ReadFile(#Base_de_donnees, #Fichier_de_donnees)
    CloseFile(#Base_de_donnees)
    
    ;Analyser les données JSON à partir d'un fichier
    LoadJSON(#Base_de_donnees, #Fichier_de_donnees)
    
    ;Extraire les éléments dans la liste spécifiée
    ExtractJSONList(JSONValue(#Base_de_donnees), MaBase())
    
    ;Affichage de la liste des Renvez-vous
    ForEach MaBase()
      With MaBase()
        AddGadgetItem(#LstIcn, -1, \Quand + #LF$ + \Qui + #LF$ + \Avec_Qui + #LF$ + \Ou + #LF$ + \Heure + #LF$ + \Duree + #LF$ + \Note)
        SetGadgetItemData(#LstIcn, CountGadgetItems(#LstIcn) - 1, ListIndex(MaBase()))
      EndWith
    Next
  EndIf
EndProcedure
;Mise en place d'un nouvel enregistrement
Procedure NouveauRDV()
  SetWindowData(#Fenetre_principale, 0) ;C'est une création
  SetGadgetState(#Dte_Quand, Date())
  SetGadgetText(#Str_Qui, "")
  SetGadgetText(#Str_AvecQui, "")
  SetGadgetText(#Str_Ville, "")
  SetGadgetText(#Str_Heure, "")
  SetGadgetText(#Str_Duree, "")
  SetGadgetText(#Edt_Note, "")
EndProcedure
Procedure SelectionnerRDV()
  Protected Element = GetGadgetState(#LstIcn)  
  
  If Element <> -1
    SelectElement(MaBase(), GetGadgetItemData(#LstIcn, Element))
    With MaBase()
      SetGadgetText(#Dte_Quand, \Quand)
      SetGadgetText(#Str_Qui, \Qui)        
      SetGadgetText(#Str_AvecQui, \Avec_Qui)
      SetGadgetText(#Str_Ville, \Ou)
      SetGadgetText(#Str_Heure, \Heure)
      SetGadgetText(#Str_Duree, \Duree)
      SetGadgetText(#Edt_Note, \Note)
    EndWith
  EndIf  
  
  ;C'est une modification de RDV
  SetWindowData(#Fenetre_principale, 1)
EndProcedure
;Suppression d'un enregistrement
Procedure SupprimerRDV()
  If MessageRequester("Information", "Etes-vous certain de vouloir supprimer ce RDV ?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
    SetWindowData(#Fenetre_principale, 3) ;C'est une suppression
    Mise_a_jour_RDV()
  EndIf 
EndProcedure
;Mise à jour des rendez-vous
Procedure Mise_a_jour_RDV()
  Date_Quand = Str(GetGadgetState(#Dte_Quand))
  Qui = GetGadgetText(#Str_Qui)
  AvecQui = GetGadgetText(#Str_AvecQui)
  Ville = GetGadgetText(#Str_Ville)
  Heure = GetGadgetText(#Str_Heure)
  Duree = GetGadgetText(#Str_Duree)
  Note = GetGadgetText(#Edt_Note)
  
  Select GetWindowData(#Fenetre_principale)
    Case 0 ;Création d'un RDV
      AddElement(MaBase())
      With MaBase()
        \Quand = Date_Quand
        \Qui = qui
        \Avec_Qui = AvecQui
        \Ou = Ville
        \Heure = Heure
        \Duree = Duree
        \Note = Note
        AddGadgetItem(#LstIcn, ListIndex(MaBase()), \Quand + #LF$ + \Qui + #LF$ + \Avec_Qui + #LF$ + \Ou + #LF$ + \Heure + #LF$ + \Duree + #LF$ + \Note)
      EndWith
      
    Case 1 ;Modification d'un contact
      With MaBase()
        \Quand = Date_Quand
        \Qui = qui
        \Avec_Qui = AvecQui
        \Ou = Ville
        \Heure = Heure
        \Duree = Duree
        \Note = Note
        AddGadgetItem(#LstIcn, ListIndex(MaBase()), \Quand + #LF$ + \Qui + #LF$ + \Avec_Qui + #LF$ + \Ou + #LF$ + \Heure + #LF$ + \Duree + #LF$ + \Note)
      EndWith
      NouveauRDV()
      
    Case 3 ;Suppression d'un RDV
      RemoveGadgetItem(#LstIcn, ListIndex(MaBase()))
      DeleteElement(MaBase())
      
      ;Mise à jour des index ListIcon <-> MaBase()
      ForEach MaBase()
        SetGadgetItemData(#LstIcn, ListIndex(MaBase()), ListIndex(MaBase()))
      Next
      
  EndSelect  
EndProcedure
;Sauvegarde des rendez-vous à la fermeture de l'application
Procedure SauvegardeRDV()
  ;Création d'un fichier JSON
  CreateJSON(#Base_de_donnees)
  
  ;Insertion de la liste chaînée "MaBase" dans le fichier JSON
  InsertJSONList(JSONValue(#Base_de_donnees), MaBase())
  
  ;Sauvegarde du fichier
  SaveJSON(#Base_de_donnees, #Fichier_de_donnees)
EndProcedure  
Procedure Ouvrir_Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 0, 0, 500, 560, #TitreApplication + " © 31 mars 2016", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    ListIconGadget(#LstIcn, 10, 40, 475, 255, "Quand", 80, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
    AddGadgetColumn(#LstIcn, 1, "Qui", 100)
    AddGadgetColumn(#LstIcn, 2, "Avec qui", 100)
    AddGadgetColumn(#LstIcn, 3, "Où", 100)
    AddGadgetColumn(#LstIcn, 4, "Heure", 45)
    AddGadgetColumn(#LstIcn, 5, "Durée", 45)
    AddGadgetColumn(#LstIcn, 6, "Note", 350)
    DateGadget(#Dte_Quand, 10, 10, 80, 20, "%dd/%mm/%yyyy", Date())
    ContainerGadget(#Ctn, 10, 300, 480, 245)
    TextGadget(#Txt_Qui, 0, 10, 20, 20, "Qui:", #PB_Text_Right)
    TextGadget(#Txt_AvecQui, 0, 50, 50, 20, "Avec qui:", #PB_Text_Right)
    TextGadget(#Txt_Ville, 0, 80, 75, 20, "Endroit ou Ville", #PB_Text_Right)
    TextGadget(#Txt_Heure, 0, 115, 35, 20, "Heure:", #PB_Text_Right)
    TextGadget(#Txt_Duree, 0, 145, 35, 20, "Durée:", #PB_Text_Right)
    TextGadget(#Txt_Note, 0, 185, 30, 20, "Note:", #PB_Text_Right)
    StringGadget(#Str_Qui, 80, 10, 395, 20, "")
    StringGadget(#Str_AvecQui, 80, 45, 395, 20, "")
    StringGadget(#Str_Ville, 80, 75, 396, 20, "")
    StringGadget(#Str_Heure, 80, 110, 35, 20, "")
    StringGadget(#Str_Duree, 80, 140, 35, 20, "")
    EditorGadget(#Edt_Note, 80, 170, GadgetWidth(#Ctn) - 85, 40)  ;395, 40)
    ButtonGadget(#Btn_Nouveau, 0, 225, 50, 20, "Nouveau")
    ButtonGadget(#Btn_Enregistrer, 100, 225, 60, 20, "Enregistrer")
    ButtonGadget(#Btn_Supprimer, 220, 225, 55, 20, "Supprimer")
    ButtonGadget(#Btn_Selectionner, 321, 225, 63, 20, "Sélectionner")
    ButtonGadget(#Btn_Quitter, 435, 225, 40, 20, "Quitter")
    CloseGadgetList()
    
    Couleur = $EAFAEA
    SetWindowColor(#Fenetre_principale, Couleur)
    
    SetGadgetColor(#Txt_Qui, #PB_Gadget_BackColor, Couleur)
    SetGadgetColor(#Txt_AvecQui, #PB_Gadget_BackColor, Couleur)
    SetGadgetColor(#Txt_Ville, #PB_Gadget_BackColor, Couleur)
    SetGadgetColor(#Txt_Heure, #PB_Gadget_BackColor, Couleur)
    SetGadgetColor(#Txt_Duree, #PB_Gadget_BackColor, Couleur)
    SetGadgetColor(#Txt_Note, #PB_Gadget_BackColor, Couleur)
    
    couleur2 = $EAEAFA
    SetGadgetColor(#Str_Qui, #PB_Gadget_BackColor, couleur2)
    SetGadgetColor(#Str_AvecQui, #PB_Gadget_BackColor, couleur2)
    SetGadgetColor(#Str_Ville, #PB_Gadget_BackColor, couleur2)
    SetGadgetColor(#Str_Heure, #PB_Gadget_BackColor, couleur2)
    SetGadgetColor(#Str_Duree, #PB_Gadget_BackColor, couleur2)
    SetGadgetColor(#Edt_Note, #PB_Gadget_BackColor, couleur2)
    
    couleur3 = $FAEAEA
    SetGadgetColor(#LstIcn, #PB_Gadget_BackColor, couleur3)
    
    BindEvent( #PB_Event_SizeWindow, @Event_SizeWindow() )
  EndIf
EndProcedure
;Lancer la procédure principale  
Ouvrir_Fenetre_principale()
;Ouverture de la base de données 
ChargerRDV()
;{- Boucle événementielle
Repeat
  Evenement = WaitWindowEvent()
  Select Evenement
      ; ///////////////////
    Case #PB_Event_Gadget
      EvenementGadget = EventGadget()
      TypeEvenement = EventType()
      If EvenementGadget = #LstIcn
        ;        VoirEnregistrement()
      ElseIf EvenementGadget = #Btn_Nouveau ;Nouveau Rdv
        NouveauRDV()
      ElseIf EvenementGadget = #Btn_Enregistrer ;Ajout ou modification d'un Rdv
        Mise_a_jour_RDV()          
      ElseIf EvenementGadget = #Btn_Supprimer ; Suppression d'un Rdv
        SupprimerRDV()
      ElseIf EvenementGadget = #Btn_Selectionner
        SelectionnerRDV()
      ElseIf EvenementGadget = #Btn_Quitter
        CloseWindow(#Fenetre_principale)
        Break
      EndIf
      ; ////////////////////////
    Case #PB_Event_CloseWindow
      EvenementFenetre = EventWindow()
      If EvenementFenetre = #Fenetre_principale
        CloseWindow(#Fenetre_principale)
        SauvegardeRDV()
        Break
      EndIf
  EndSelect
ForEver
;}