Page 1 sur 1

[Résolu] Comment afficher la liste d'une base de données

Publié : jeu. 15/oct./2015 12:41
par Micoute
Bonjour à tous,

j'ai codé un gestionnaire de base de données, mais je bloque quand je modifie un enregistrement, car je voudrais afficher la base et je ne vois pas comment je peux faire.

Si vous pouviez m'aider, ça me soulagerait de ce fardeau que me cause ce problème et je vous en remercie par anticipation.

Code : Tout sélectionner

;- Enumerations / DataSections
Enumeration Fenetres
  #Fenetre_Principale
  #Fenetre_Creation_Proprietes
  #Fenetre_Modification
EndEnumeration

Enumeration Gadgets
  #Txt_Fichier_de_donnees
  #Txt_Nombre_Champs
  #Txt_Nom_Table
  #Txt_Nom_Champ
  #Txt_Type_Champ
  #Str_Fichier_de_donnees
  #Str_Nombre_Champs
  #Str_Nom_Table
  #Str_Nom_Champ
  #Cmb_Type_Champ
  #Btn_Valider
  #Btn_Valider_Table
  #Btn_Valider_Champs
  #Btn_Valider_Construction
  #Btn_Lister_Elements_Table
  #Btn_Enregistrer
  #Btn_Modifier
  #Base_de_donnees
  
  #Txt_IdTable
  #Txt_BDD
  #Str_BDD
  #Txt_Table
  #Cmb_Table
  #LstIcn  
EndEnumeration

Enumeration Menu
  #Mnu_Fenetre_principale
  #Mnu_Creation_Proprietes
  #Mnu_Selection
  #Mnu_AjouterEnregistrement
  #Mnu_ModifierEnregistrement
  #Mnu_SupprimerEnregistrement
  #Mnu_Quitter
EndEnumeration

Enumeration Polices
  #Police_Txt_BDD
  #Police_Str_BDD
  #Police_Txt_Table
  #Police_Str_Table
  #Police_ListIcon
EndEnumeration  

Structure Champ
  Nom.s
  Type.s
EndStructure

Global Evenement, Nombre_Champs, IdTable, Gadget_0 = 0, Gadget_1
Global.s Fichier_de_donnees, Nom_du_champ, Type_du_champ, Table, ReqSQL
Global.s NewList nom(), NewList Donnee(), TitreApp = "Gestion de bases SQLite"
Global NewList Champs.Champ(), Dim _Texte_Nom(0), Dim _Nom_du_champ(0), Dim _Texte_Type(0), Dim _Type_du_champ(0), Dim Enregistrement.s(50,10), Texte$
Global Flags = #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered

UseSQLiteDatabase()

Declare Erreur(Valeur)
Declare ColorerListe(gadget, gridColor=$006DA7,BgColorP=$FFC8C8,BgColorI=$FF8CFF,FgColorP=$000000,FgColorI=$000000)
Declare Event_SizeWindow()

;Création des propriétés de la base de données
Procedure Ouvrir_Fenetre_Creation_Proprietes()
  If OpenWindow(#Fenetre_Creation_Proprietes, 0, 0, 420, 210, "Création Propriétés d'une Base de données", Flags)
    TextGadget(#Txt_Fichier_de_donnees, 10, 15, 95, 20, "Fichier de données")
    StringGadget(#Str_Fichier_de_donnees,110, 15, 280, 20, "")
    ButtonGadget(#Btn_Valider, 325, 45, 60, 20, "Valider")
    ;Table
    TextGadget(#Txt_Nom_Table, 10, 105, 100, 20, "Nom de la table :")
    StringGadget(#Str_Nom_Table, 120, 105, 100, 20, "")
    ButtonGadget(#Btn_Valider_Table, 325, 105, 60, 20, "Valider")
    ;Création champs
    TextGadget(#Txt_Nombre_Champs, 10, 75, 100, 20, "Nombres de champs :")
    StringGadget(#Str_Nombre_Champs, 120, 75, 100, 20, "")
    ButtonGadget(#Btn_Valider_Champs, 325, 75, 60, 20, "Valider")
    ;Construction champs
    ComboBoxGadget(#Cmb_Type_Champ, 100, 160, 200, 20)
    AddGadgetItem(#Cmb_Type_Champ, -1, "DEC")
    AddGadgetItem(#Cmb_Type_Champ, -1, "DOUBLE")
    AddGadgetItem(#Cmb_Type_Champ, -1, "FLOAT")
    AddGadgetItem(#Cmb_Type_Champ, -1, "NUMERIC")
    AddGadgetItem(#Cmb_Type_Champ, -1, "REAL")
    AddGadgetItem(#Cmb_Type_Champ, -1, "INT")
    AddGadgetItem(#Cmb_Type_Champ, -1, "INTEGER")
    AddGadgetItem(#Cmb_Type_Champ, -1, "WORD")
    AddGadgetItem(#Cmb_Type_Champ, -1, "CHAR")
    AddGadgetItem(#Cmb_Type_Champ, -1, "VARCHAR")
    AddGadgetItem(#Cmb_Type_Champ, -1, "TEXT")
    AddGadgetItem(#Cmb_Type_Champ, -1, "BLOB")
    AddGadgetItem(#Cmb_Type_Champ, -1, "BINARY")
    TextGadget(#Txt_Nom_Champ, 10, 140, 90, 20, "Nom du champ :")
    TextGadget(#Txt_Type_Champ, 10, 160, 90, 20, "Type du champ :")
    StringGadget(#Str_Nom_Champ, 100, 140, 200, 20, "")
    ButtonGadget(#Btn_Valider_Construction, 325, 155, 60, 20, "OK")
    SetActiveGadget(#Str_Fichier_de_donnees)
    DisableGadget(#Str_Nom_Table, 1)
    DisableGadget(#Str_Nombre_Champs, 1)
    DisableGadget(#Str_Nom_Champ, 1)
    DisableGadget(#Cmb_Type_Champ, 1)
  EndIf
EndProcedure
;Création de la base de données
Procedure Creation_de_la_base()
  If CreateFile(#Base_de_donnees, Fichier_de_donnees)
    CloseFile(#Base_de_donnees)
  Else
    Erreur(0)
  EndIf
  
  ;Ouverture de la base de données et création de la table
  If OpenDatabase(#Base_de_donnees, Fichier_de_donnees, "", "", #PB_Database_SQLite)
    
    ;création de la base
    ForEach Champs()
      Texte$ + Champs()\Nom + " " + Champs()\Type + ", "
    Next
    Texte$ = Left(Texte$, Len(Texte$)-2)
    ReqSQL = "Create table " + Table + "(IdTable INTEGER PRIMARY KEY AUTOINCREMENT, " + Texte$ + ")"
    
    ;éxécution de la requête
    DatabaseUpdate(#Base_de_donnees, ReqSQL)
    
    ;La création de la base de données est terminée ... pour le moment
    CloseDatabase(#Base_de_donnees)
    MessageRequester("Information", "Création de la base " + Fichier_de_donnees + " terminée ")
  Else
    Erreur(1)
  EndIf
EndProcedure
;Ouverture d'une base de données quelconque
Procedure OuvrirUneBaseDeDonnees()   
  FichierParDefaut$ = "*.SQL"
  Filtre$ = "SQlite (*.Sqlite)|*.SQL*"
  Filtre  = 0
  Fichier_de_donnees = OpenFileRequester("Sélectionnez le fichier à charger", FichierParDefaut$, Filtre$, Filtre)
  
  If Fichier_de_donnees
    
    ; Liste des tables
    OpenDatabase(#Base_de_donnees, Fichier_de_donnees, "", "", #PB_Database_SQLite)
    SetGadgetText(#Str_BDD,Fichier_de_donnees)
    ReqSQL = "SELECT * FROM sqlite_master ORDER BY type Desc, name Asc"
    If DatabaseQuery(#Base_de_donnees, ReqSQL)      
      Index = 0
      While NextDatabaseRow(#Base_de_donnees)
        If LCase(GetDatabaseString(#Base_de_donnees, 0)) = "table"
          Table = GetDatabaseString(#Base_de_donnees, 1)
          AddGadgetItem(#Cmb_Table, -1, Table)
          Index + 1
        EndIf
      Wend
    Else
      Erreur(1)
    EndIf
    HideGadget(#Btn_Lister_Elements_Table, 0)
    SetGadgetText(#Cmb_Table, Table) 
  Else
    MessageRequester("Information", "La sélection a été annulée.", 0)
  EndIf
  
EndProcedure
;Affichage des enregistrements de la table choisie
Procedure ListerEnregistrements_Table()
  ResizeWindow(#Fenetre_Principale, #PB_Ignore, WindowX(#Fenetre_Principale)-200, #PB_Ignore, 400)
  ListIconGadget(#LstIcn, 10, 65, WindowWidth(#Fenetre_Principale)-20, WindowHeight(#Fenetre_Principale)-95, "", 0, #PB_ListIcon_FullRowSelect)
  SetGadgetFont(#LstIcn, LoadFont(#Police_ListIcon, "Arial", 10, #PB_Font_HighQuality))
  
  ;lister la structure d'une table
  Protected ReqSql.s = ""
  Index = 0
  Table = GetGadgetText(#Cmb_Table)
  ClearGadgetItems(#LstIcn)
  ReqSql = "Pragma table_info(" + Chr(34) + Table + Chr(34) + ")"
  If DatabaseQuery(#Base_de_donnees, ReqSql)
    While NextDatabaseRow(#Base_de_donnees)
      AddElement(Champs())
      Champs()\Nom = GetDatabaseString(#Base_de_donnees, 1)  ;nom
      Index + 1
    Wend
    FinishDatabaseQuery(#Base_de_donnees)
  Else
    MessageRequester("Erreur","La base de données " + FichierBdd + " a été refermée", #MB_ICONERROR)
  EndIf
  
  ;Créer l'en-tête de la ListIcon
  Index = 0
  ForEach Champs()
    AddGadgetColumn(#LstIcn, Index, Champs()\Nom, 200)
    
    ; Justifier les Colonnes 0 = à gauche, 1 = centré, 2 = à droite
    ;JustifierColonne(#LstIcn, Index, 0)
    Index + 1
  Next 
  ; lister les éléments d'un table et remplir la ListIcon
  Donnee$ = ""
  i = 0
  If DatabaseQuery(#Base_de_donnees, "SELECT * FROM " + table)
    While NextDatabaseRow(#Base_de_donnees)
      For Index = 0 To ListSize(Champs()) - 1
        AddElement(Donnee())
        Donnee() = GetDatabaseString(#Base_de_donnees, Index)
        ReDim Enregistrement(50,i)
        Enregistrement(Index, i) = Donnee()
        Donnee$ + Donnee() + Chr(10)
        
        ;redimentionner les colonnes automatiquement
        SendMessage_(GadgetID(#LstIcn), #LVM_SETCOLUMNWIDTH, Index, #LVSCW_AUTOSIZE)
      Next
      i + 1
      AddGadgetItem(#LstIcn, -1, Donnee$ + #LF$)
      Donnee$ = ""
    Wend
    ;ColorerListe(#LstIcn)
    IdTable = CountGadgetItems(#LstIcn)
    
    ReDim Enregistrement(50, IdTable)  
  Else
    Erreur(2)
  EndIf
  DisableGadget(#Cmb_Table,1)
EndProcedure
;Ajouter des éléments dans la base de données ouverte
Procedure Ajouter_Elements()
  HideGadget(#LstIcn, 1)
  Nombre_Champs = IdTable
  
  ;Adapter nos tableaux au nombre de champs
  ReDim _Texte_Nom(Nombre_Champs)
  ReDim _Nom_du_champ(Nombre_Champs)
  ReDim _Texte_Type(Nombre_Champs)
  ReDim _Type_du_champ(Nombre_Champs)
  i = 1
  ForEach Champs()
    _Texte_Nom(I) = TextGadget(#PB_Any, 10, (80+(25*i)), 90, 20, Champs()\Nom + " : ")
    _Nom_du_champ(I) = StringGadget(#PB_Any, 100, (80+(25*i)), 300, 20, "")
    i+1
  Next
  ButtonGadget(#Btn_Enregistrer, (WindowWidth(#Fenetre_Principale)-160)/2, (100+(25*i)), 160, 25, "Enregistrer")
  
  SetGadgetText(_Nom_du_champ(1), Str(IdTable))
  SetActiveGadget(_Nom_du_champ(2))
EndProcedure
;Enregistrement des élements ajoutés précédemment
Procedure Enregistrer()
  i = 1
  ForEach Champs()
    HideGadget(_Texte_Nom(i),1)
    HideGadget(_Nom_du_champ(i),1)
    i+1
  Next
  HideGadget(#Btn_Enregistrer,1)
  
  ReqSQL = "INSERT INTO " + Chr(34) + Table + Chr(34) + " ("
  
  ForEach Champs()
    ReqSQL + Chr(34) + Champs()\Nom + Chr(34) + ","
  Next
  
  ReqSQL = Left(ReqSQL, Len(ReqSQL)-1) + ") VALUES ("
  
  i = 1
  ForEach Champs()
    ReqSQL + Chr(34) + GetGadgetText(_Nom_du_champ(i)) + Chr(34) + ", "
    i + 1
  Next
  
  ReqSQL = Left(ReqSQL, Len(ReqSQL)-2) + ")"
  
  If DatabaseQuery(#Base_de_donnees, ReqSQL) <> 0
    DatabaseUpdate(#Base_de_donnees, ReqSQL)
    MessageRequester("Information", "Enregistrement effectué", #MB_ICONINFORMATION) 
    
  Else
    MessageRequester("Erreur", DatabaseError())
  EndIf
  
  HideGadget(#LstIcn, 0)
  ListerEnregistrements_Table()
  
EndProcedure
;Valider le nombre de champs et les créer
Procedure Valider_Champs()
  SetActiveGadget(#Str_Nom_Table)
  If Nombre_Champs < 2
    Nombre_Champs = Val(GetGadgetText(#Str_Nombre_Champs))
  EndIf  
  If Nombre_Champs > 0
    DisableGadget(#Str_Nom_Table, 0)  
    
    ;Adaptons nos tableaux aux nombre de champs
    ReDim _Texte_Nom(Nombre_Champs)
    ReDim _Nom_du_champ(Nombre_Champs)
    ReDim _Texte_Type(Nombre_Champs)
    ReDim _Type_du_champ(Nombre_Champs)
    
    ;Rajoutons des gadgets
    If Nombre_Champs > 1
      X = 0
      For i = 2 To Nombre_Champs
        _Texte_Nom(i) = TextGadget(#PB_Any, 10, (100+(40*i)), 90, 20, "Nom du champ :")
        _Nom_du_champ(i) = StringGadget(#PB_Any, 100, (100+(40*i)), 100, 20, "")
        _Texte_Type(i) = TextGadget(#PB_Any, 10, 120+(40*i), 90, 20, "Type du champ :")
        _Type_du_champ(i) = ComboBoxGadget(#PB_Any, 100, 120+(40*i), 200, 20)
        AddGadgetItem(_Type_du_champ(i), -1, "DEC")
        AddGadgetItem(_Type_du_champ(i), -1, "DOUBLE")
        AddGadgetItem(_Type_du_champ(i), -1, "FLOAT")
        AddGadgetItem(_Type_du_champ(i), -1, "NUMERIC")
        AddGadgetItem(_Type_du_champ(i), -1, "REAL")
        AddGadgetItem(_Type_du_champ(i), -1, "INT")
        AddGadgetItem(_Type_du_champ(i), -1, "INTEGER")
        AddGadgetItem(_Type_du_champ(i), -1, "WORD")
        AddGadgetItem(_Type_du_champ(i), -1, "CHAR")
        AddGadgetItem(_Type_du_champ(i), -1, "VARCHAR")
        AddGadgetItem(_Type_du_champ(i), -1, "TEXT")
        AddGadgetItem(_Type_du_champ(i), -1, "BLOB")
        AddGadgetItem(_Type_du_champ(i), -1, "BINARY")
        X + 40
      Next  
      ResizeWindow(#Fenetre_Creation_Proprietes, #PB_Ignore, #PB_Ignore, #PB_Ignore, WindowHeight(#Fenetre_Creation_Proprietes) + X)
    EndIf
  EndIf
EndProcedure
;Remplir la liste et créer la base de données
Procedure Valider_Construction()
  For i = 1 To Nombre_Champs
    AddElement(Champs())
    Nom_du_champ =  GetGadgetText(#Str_Nom_Champ)
    Type_du_champ = GetGadgetText(#Cmb_Type_Champ)
    Champs()\Nom = Nom_du_champ
    Champs()\Type = Type_du_champ
    If i > 1
      Champs()\Nom = GetGadgetText(_Nom_du_champ(i))
      Champs()\Type = GetGadgetText(_Type_du_champ(i))
      HideGadget(_Nom_du_champ(i),1)
      HideGadget(_Type_du_champ(i),1)
    EndIf
  Next
  
  Creation_de_la_base() 
  
  ;Faire réapparaître la fenêtre principale
  HideWindow(#Fenetre_Principale, 0)
EndProcedure
;Mise en place d'un nouvel enregistrement
Procedure Nouvel_Enregistrement()
  SetGadgetText(#Txt_IdTable,"")
EndProcedure
;Modifier les éléments de l'enregistrement courant
Procedure Modifier_Elements()
  HideWindow(#Fenetre_Principale, 1)
  ;HideGadget(#LstIcn, 1)
  IdTable = GetGadgetState(#LstIcn)
  If OpenWindow(#Fenetre_Modification, 0, 0, WindowWidth(#Fenetre_Principale), WindowHeight(#Fenetre_Principale), "Modification de l'enregistrement " + IdTable, Flags)
    ;Mettre dans le gadget la valeur de l'enregistrement avant modification
    i = 0
    ForEach Champs()
      Gadget_1 = TextGadget(#PB_Any, 10, (10+(25*i)), 90, 20, Champs()\Nom + " : ")
      StringGadget(Gadget_0 + i, 100, (10+(25*i)), 300, 20, "")
      SetGadgetText(Gadget_0 + i, Enregistrement(Gadget_0 + i,IdTable))
      i + 1
    Next
    
    ButtonGadget(#Btn_Modifier, (WindowWidth(#Fenetre_Modification)-160)/2, (100+(25*i)), 160, 25, "Modifier")
  EndIf
EndProcedure
;Modification d'un enregistrement
Procedure Sauvegarder_Modification()
    ;tenir compte de la modification
    i = 0
    ForEach Champs()
      Enregistrement(i,IdTable) = GetGadgetText(i)
      i + 1
    Next
    
  ReqSQL = "UPDATE " + Table + " SET "
  i = 0
  ForEach Champs()
    ReqSQL + Chr(34) + Champs()\Nom + Chr(34) + " = " + Chr(34) + Enregistrement(i,GetGadgetState(#LstIcn)) + Chr(34) + ","
    i + 1
  Next
  ReqSQL = Left(ReqSQL, Len(ReqSQL)-1)
  ReqSQL + " WHERE IdTable = " + GetGadgetState(#LstIcn)
  Debug ReqSQL
  If DatabaseUpdate(#Base_de_donnees, ReqSQL)
    MessageRequester(TitreApp, "Enregistrement modifié")
  Else
    Erreur(2)
  EndIf
  HideWindow(#Fenetre_Modification, 1)
  HideWindow(#Fenetre_Principale, 0)
EndProcedure
;Supprimer un enregistrement
Procedure Supprimer_Enregistrement()
  ReqSQL = "DELETE FROM " + Chr(34) + Table + Chr(34) + " WHERE IdTable = " + GetGadgetState(#LstIcn)
  
  If DatabaseUpdate(#Base_de_donnees, ReqSQL)
    Nouvel_Enregistrement()
    ListerEnregistrements_Table()
    MessageRequester(TitreApp, "Enregistrement supprimé")
  Else
    Erreur(2)
  EndIf  
EndProcedure
;Procédure principale
Procedure Ouvrir_Fenetre_principale()
  If OpenWindow(#Fenetre_Principale, 452, 311, 700, 125, "Gestion d'une base de données SQLite", Flags)
    If CreateMenu(#Mnu_Fenetre_principale, WindowID(#Fenetre_Principale))
      MenuTitle("Fichier")
      MenuItem(#Mnu_Creation_Proprietes, "Création des propriétés d'une base" + Chr(9) + "Ctrl+C")
      AddKeyboardShortcut(#Fenetre_Principale, #PB_Shortcut_Control|#PB_Shortcut_C, #Mnu_Creation_Proprietes)
      MenuItem(#Mnu_Selection, "Ouvrir une base existante" + Chr(9) + "Ctrl+O")
      AddKeyboardShortcut(#Fenetre_Principale, #PB_Shortcut_Control|#PB_Shortcut_O, #Mnu_Selection)
      MenuBar()
      MenuItem(#Mnu_Quitter, "Quitter" + Chr(9) + "Ctrl+Q")
      AddKeyboardShortcut(#Fenetre_Principale, #PB_Shortcut_Control|#PB_Shortcut_Q, #Mnu_Quitter)
      MenuTitle("Enregistrement")
      MenuItem(#Mnu_AjouterEnregistrement, "Ajouter un enregistrement" + Chr(9) + "Ctrl+A")
      AddKeyboardShortcut(#Fenetre_Principale, #PB_Shortcut_Control|#PB_Shortcut_A, #Mnu_AjouterEnregistrement)     
      MenuItem(#Mnu_ModifierEnregistrement, "Modifier un enregistrement" + Chr(9) + "Ctrl+M")
      AddKeyboardShortcut(#Fenetre_Principale, #PB_Shortcut_Control|#PB_Shortcut_M, #Mnu_ModifierEnregistrement)
      MenuItem(#Mnu_SupprimerEnregistrement, "Supprimer un enregistrement" + Chr(9) + "Ctrl+U")
      AddKeyboardShortcut(#Fenetre_Principale, #PB_Shortcut_Control|#PB_Shortcut_U, #Mnu_SupprimerEnregistrement)
    EndIf
    
    ;Gadgets    
    TextGadget(#Txt_BDD, 10, 10, 105, 20, "Base de données")
    StringGadget(#Str_BDD, 120, 10, WindowWidth(#Fenetre_Principale)-(120+GadgetX(#Txt_BDD)), 20, "")
    TextGadget(#Txt_Table, 10, 35, 105, 20, "Table")
    ComboBoxGadget(#Cmb_Table, 120, 35, WindowWidth(#Fenetre_Principale)-(120+GadgetX(#Txt_Table)), 25)
    ListIconGadget(#LstIcn, 10, 20, 0, 0, "", 0)
    ButtonGadget(#Btn_Lister_Elements_Table, (WindowWidth(#Fenetre_Principale)-160)/2, 70, 160, 25, "Lister les éléments de la table")
    TextGadget(#Txt_IdTable, 10, WindowWidth(#Fenetre_Principale) - 30, 60, 20, "")
    
    ; Polices Gadgets
    SetGadgetFont(#Txt_BDD, LoadFont(#Police_Txt_BDD, "Arial", 10, #PB_Font_HighQuality))
    SetGadgetFont(#Str_BDD, LoadFont(#Police_Str_BDD, "Arial", 10, #PB_Font_HighQuality))
    SetGadgetFont(#Txt_Table, LoadFont(#Police_Txt_Table, "Arial", 10, #PB_Font_HighQuality))
    SetGadgetFont(#Cmb_Table, LoadFont(#Police_Str_Table, "Microsoft Sans Serif", 10, #PB_Font_HighQuality))
    
    BindEvent( #PB_Event_SizeWindow, @Event_SizeWindow() )
    
    HideGadget(#Btn_Lister_Elements_Table, 1)
  EndIf  
EndProcedure

Ouvrir_Fenetre_principale()

;- Boucle événementielle
Repeat
  Evenement = WaitWindowEvent()
  Select Evenement
      ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Btn_Valider
          If GetGadgetText(#Str_Fichier_de_donnees) <> ""
            If GetExtensionPart(GetGadgetText(#Str_Fichier_de_donnees)) = ""
              Fichier_de_donnees = GetGadgetText(#Str_Fichier_de_donnees) + ".SQLite"
            EndIf  
            DisableGadget(#Str_Nombre_Champs, 0)
            SetActiveGadget(#Str_Nombre_Champs)
          EndIf
          
        Case #Btn_Valider_Champs
          Valider_Champs()
          
        Case #Btn_Valider_Table
          Table = GetGadgetText(#Str_Nom_Table)
          DisableGadget(#Str_Nom_Champ, 0)
          DisableGadget(#Cmb_Type_Champ, 0)
          SetActiveGadget(#Str_Nom_Champ)
          
          ;Construction_Champs()
        Case  #Btn_Valider_Construction
          Valider_Construction()
          
        Case #Btn_Lister_Elements_Table
          HideGadget(#Btn_Lister_Elements_Table, 1)
          ListerEnregistrements_Table()
          
        Case #Btn_Enregistrer
          Enregistrer()
          
        Case #Btn_Modifier
          Sauvegarder_Modification()  
          
      EndSelect
      
    Case #PB_Event_Menu
      Select EventMenu()
          ;Fichier
        Case #Mnu_Creation_Proprietes
          HideWindow(#Fenetre_Principale, 1)
          Ouvrir_Fenetre_Creation_Proprietes()
          
        Case #Mnu_Selection
          OuvrirUneBaseDeDonnees()
          
        Case #Mnu_AjouterEnregistrement
          Ajouter_Elements()
          
        Case #Mnu_ModifierEnregistrement
          Modifier_Elements()
        Case #Mnu_SupprimerEnregistrement
          Supprimer_Enregistrement()
          
        Case #Mnu_Quitter
          End
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_Principale
          CloseWindow(#Fenetre_Principale)
          Break
        Case #Fenetre_Creation_Proprietes
          CloseWindow(#Fenetre_Creation_Proprietes)
          HideWindow(#Fenetre_Principale, 0)
        Case #Fenetre_Modification
          CloseWindow(#Fenetre_Modification)
          HideWindow(#Fenetre_Principale, 0)
      EndSelect
  EndSelect
ForEver

;Gestion des erreurs
Procedure Erreur(Valeur)
  Select Valeur
    Case 0 ;Erreur de creéation
      MessageRequester(TitreApp, "Erreur pendant la création")
    Case 1 ;Base non accessible
      MessageRequester(TitreApp, "La base n'est pas accessible " + DatabaseError())
    Case 2 ;Erreur dans la requête
      MessageRequester(TitreApp, "Erreur dans la requête " + DatabaseError())
  EndSelect
  
  ;sortie de l'application
  End
EndProcedure  
;Coloration alternée
Procedure ColorerListe(gadget, gridColor=$006DA7,BgColorP=$FFC8C8,BgColorI=$FF8CFF,FgColorP=$000000,FgColorI=$000000)
  Protected Nb=CountGadgetItems(gadget)
  If SendMessage_(GadgetID(gadget),#LVM_GETCOUNTPERPAGE,0,0)>Nb
    ;Nb=SendMessage_(GadgetID(gadget),#LVM_GETCOUNTPERPAGE,0,0)
    For N=CountGadgetItems(gadget) To Nb-1
      AddGadgetItem(gadget,-1,"")
    Next
  EndIf
  SetGadgetColor(gadget,#PB_Gadget_LineColor,gridColor)
  For N=1 To Nb
    If N & 1
      SetGadgetItemColor(gadget,N-1,#PB_Gadget_BackColor,BgColorI)
      SetGadgetItemColor(gadget,N-1,#PB_Gadget_FrontColor,FgColorI)
    Else
      SetGadgetItemColor(gadget,N-1,#PB_Gadget_BackColor,BgColorP)
      SetGadgetItemColor(gadget,N-1,#PB_Gadget_FrontColor,FgColorP)
    EndIf
  Next
EndProcedure
;Redimensionnement de la fenêtre et des gadgets
Procedure Event_SizeWindow()
  ResizeGadget(#Str_BDD, #PB_Ignore,#PB_Ignore, WindowWidth(#Fenetre_Principale)-(120+GadgetX(#Txt_BDD)), #PB_Ignore)
  ResizeGadget(#Cmb_Table, #PB_Ignore, #PB_Ignore, WindowWidth(#Fenetre_Principale)-(120+GadgetX(#Txt_Table)), #PB_Ignore)
  ResizeGadget(#LstIcn,#PB_Ignore,#PB_Ignore,WindowWidth(#Fenetre_Principale)-(GadgetX(#Txt_Table)*2), WindowHeight(#Fenetre_Principale)-(GadgetHeight(#Txt_BDD)+GadgetHeight(#Txt_Table)+55))
EndProcedure

Re: Comment afficher la liste des enregistrement d'un base

Publié : jeu. 15/oct./2015 12:56
par microdevweb
Bonjour Micoute,

Je comprend pas bien ton problème quel est la partie de ton code qui bloque?

Re: Comment afficher la liste des enregistrement d'un base

Publié : jeu. 15/oct./2015 13:03
par microdevweb
Mais voici déjà une petite correction Ligne 174, j'ai ajouté MCW en commentaire

Code : Tout sélectionner

Procedure ListerEnregistrements_Table()
      ResizeWindow(#Fenetre_Principale, #PB_Ignore, WindowX(#Fenetre_Principale)-200, #PB_Ignore, 400)
      UseGadgetList(GetActiveWindow()) ; MCW
      ListIconGadget(#LstIcn, 10, 65, WindowWidth(#Fenetre_Principale)-20, WindowHeight(#Fenetre_Principale)-95, "", 0, #PB_ListIcon_FullRowSelect)
      SetGadgetFont(#LstIcn, LoadFont(#Police_ListIcon, "Arial", 10, #PB_Font_HighQuality))
      
      ;lister la structure d'une table
      Protected ReqSql.s = ""
      Index = 0
      Table = GetGadgetText(#Cmb_Table)
      ClearGadgetItems(#LstIcn)
      ReqSql = "Pragma table_info(" + Chr(34) + Table + Chr(34) + ")"
      If DatabaseQuery(#Base_de_donnees, ReqSql)
            While NextDatabaseRow(#Base_de_donnees)
                  AddElement(Champs())
                  Champs()\Nom = GetDatabaseString(#Base_de_donnees, 1)  ;nom
                  Index + 1
            Wend
            FinishDatabaseQuery(#Base_de_donnees)
      Else
            MessageRequester("Erreur","La base de données " + FichierBdd + " a été refermée", #MB_ICONERROR)
      EndIf
      
      ;Créer l'en-tête de la ListIcon
      Index = 0
      ForEach Champs()
            AddGadgetColumn(#LstIcn, Index, Champs()\Nom, 200)
            
            ; Justifier les Colonnes 0 = à gauche, 1 = centré, 2 = à droite
            ;JustifierColonne(#LstIcn, Index, 0)
            Index + 1
      Next
      ; lister les éléments d'un table et remplir la ListIcon
      Donnee$ = ""
      i = 0
      If DatabaseQuery(#Base_de_donnees, "SELECT * FROM " + table)
            While NextDatabaseRow(#Base_de_donnees)
                  For Index = 0 To ListSize(Champs()) - 1
                        AddElement(Donnee())
                        Donnee() = GetDatabaseString(#Base_de_donnees, Index)
                        ReDim Enregistrement(50,i)
                        Enregistrement(Index, i) = Donnee()
                        Donnee$ + Donnee() + Chr(10)
                        
                        ;redimentionner les colonnes automatiquement
                        SendMessage_(GadgetID(#LstIcn), #LVM_SETCOLUMNWIDTH, Index, #LVSCW_AUTOSIZE)
                  Next
                  i + 1
                  AddGadgetItem(#LstIcn, -1, Donnee$ + #LF$)
                  Donnee$ = ""
            Wend
            ;ColorerListe(#LstIcn)
            IdTable = CountGadgetItems(#LstIcn)
            
            ReDim Enregistrement(50, IdTable) 
      Else
            Erreur(2)
      EndIf
      DisableGadget(#Cmb_Table,1)
EndProcedure

Re: Comment afficher la liste des enregistrement d'un base

Publié : jeu. 15/oct./2015 14:24
par Micoute
Merci infiniment microdevweb.

Re: Comment afficher la liste des enregistrement d'un base

Publié : jeu. 15/oct./2015 14:25
par microdevweb
Content de t'avoir aidé si c'était la ton problème.