Bonjour.
J'écris une application de test avec vos codes d'exemples.
Mais je n'arrive pas à updater les fiches.
Au départ je voulais en créer un certain nombres dés le début, mais ça ne fonctionne pas bien.
Car au lieu que les fiches vides se trouvent à la fin, elles se mettent au début et à la fin.
Merci par avance.
Code : Tout sélectionner
;Sources : https://www.purebasic.fr/french/viewtopic.php?p=200842#p200842
;App Name : Mon test
;HTML File Name : index.html
;JavaScript filename : montest.js
;SpiderBasic library path : core
;Coche la Case Copy SpiderBasic libraries
;CloseDebugOutput()
EnableExplicit 
Enumeration
  #Fenetre_Notes  
  #ID_Canvas
  #SBN
  
  #Bouton_Selection
  
  #Index_Un
  
  #Image_Presentation
  #Image_Nouveau
  #Image_Ouvrir  
  #Image_Import
  
  #Image_Ban
  #Icone_DB
  #Icone_Open_DB
  #Icone_DB_Update
  #Icone_Recherche
  #Icone_Blob
  #Icone_Parametres
  #Icone_A_Propos
  
  #ID_OK
  
  #Prenom_Texte
  #Nom_Texte
  #Entreprise_Texte
  #Adresse_Texte
  #Code_Postal_Texte
  #Ville_Texte
  #Pays_Texte
  #Telephone_Texte
  #Mail_Texte
  #Site_Texte
  
  #Prenom_Entree
  #Nom_Entree
  #Entreprise_Entree
  #Adresse_Entree
  #Code_Postal_Entree
  #Ville_Entree
  #Pays_Entree
  #Telephone_Entree
  #Mail_Entree
  #Site_Entree
  
  #Info_X
  #Info_Y   
  
  #Font_Notes
  
  #Pres
  #Suiv
EndEnumeration
Global FileName.s = "notes.db"
Global DataBase
;Global.i FenX =  DesktopHeight(#Fenetre_Notes) / 2 + 50
;Global.i FenY =  DesktopWidth(#Fenetre_Notes) + 400
Global.i FenX =  448
Global.i FenY =  720
Global.i Largeur_String = (FenX / 2) + 12
Global.i Taille_Caractere = 20
Global.i MouseX,MouseY
Global.s Prenom_Entree,Nom_Entree,Entreprise_Entree,Adresse_Entree,Code_Postal_Entree
Global.s Ville_Entree,Pays_Entree,Telephone_Entree,Mail_Entree,Site_Entree
Global.s Fichier_SBN,db_sbn
Global.i IndexFiches = 1,La_Fiche = 1
      
ExamineDesktops()
;Plan de l'application
Declare Start()
Declare InsertRecords()                               ;Insertion de quelques enregistrements
Declare SelectRecords(index.i)                               ;Selection des enregistrements
Declare SaveDatabase()                                ;Sauvegarde de la base de données en local storage
Declare onReadFile(Status, Filename$, File, SizeRead) ;CallBack si lecture d'un fichier en local storage
Declare onSaveFile(Status, Filename$, File, SizeRead) ; Callback si ecriture d'un fichier en local storage
Declare Affiche_Strings()
; Lecture de la 
Procedure Start()
  Debug "Lecture de la base de données en cours ...."
  ReadFile(0, FileName, @onReadFile(), #PB_LocalStorage)
EndProcedure
;Insertion de quelques enregistements 
Procedure InsertRecords()
  Protected.i Index
  
  DatabaseUpdate(DataBase, "Insert Into notes (prenom,nom,entreprise,adresse,code_postal,ville,pays,telephone,mail,site) Values ('Marie', 'Durand','Marie flûte', '25 Avenue Melody','11100', 'Narbonne', 'France','06.52.31.12.21','contact@mariedurand.fr','mariedurand.fr')")  
  DatabaseUpdate(DataBase, "Insert Into notes (prenom,nom,entreprise,adresse,code_postal,ville,pays,telephone,mail,site) Values ('Julie', 'Magic','Juju Couture', '10 Rue des arts', '26200', 'Montélimar','France','07.21.88.90.16','contact@jujucouture.fr','jujucouture.fr')")  
  DatabaseUpdate(DataBase, "Insert Into notes (prenom,nom,entreprise,adresse,code_postal,ville,pays,telephone,mail,site) Values ('Pierre','Rock', 'Pierrot Soft', '27 Rue du prog',  '34000', 'Montpellier','France','06.50.48.29.78','contact@pierrotsoft.fr','pierrotsoft.fr')")  
  
  For Index = 1 To 2
    DatabaseUpdate(DataBase, "Insert Into notes(prenom,nom,entreprise,adresse,code_postal,ville,pays,telephone,mail,site) Values ('','','','','','','','','','')")  
  Next
    
EndProcedure
Procedure UpdatetRecords(La_Fiche.i)
  Protected psSQLRequest.s
  psSQLRequest = "UPDATE notes SET "
  psSQLRequest + "contact_prenom='"+GetGadgetText(#Prenom_Entree)+"', "
  psSQLRequest + "contact_nom='"+GetGadgetText(#Nom_Entree)+"', "  
  psSQLRequest + "contact_entreprise='"+GetGadgetText(#entreprise_Entree)+"', "
  psSQLRequest + "contact_adresse='"+GetGadgetText(#adresse_Entree)+"', "
  psSQLRequest + "contact_code_postal='"+GetGadgetText(#code_postal_Entree)+"', "
  psSQLRequest + "contact_ville='"+GetGadgetText(#ville_Entree)+"', "
  psSQLRequest + "contact_pays='"+GetGadgetText(#pays_Entree)+"', "
  psSQLRequest + "contact_telephone='"+GetGadgetText(#telephone_Entree)+"', "     
  psSQLRequest + "contact_mail='"+GetGadgetText(#mail_Entree)+"', "
  psSQLRequest + "contact_site='"+GetGadgetText(#site_Entree)+"'"   
  psSQLRequest + " WHERE id_notes="+Str(La_Fiche)  
  DatabaseUpdate(DataBase,psSQLRequest)
  
  Debug psSQLRequest
EndProcedure
;Selection des enregistrements
Procedure SelectRecords(index.i)
  Protected ReqSql.s = "select prenom,nom,entreprise,adresse,code_postal,ville,pays,telephone,mail,site From notes order by nom"   
  
  
  If DatabaseQuery(DataBase, ReqSql)
    ;While NextDatabaseRow(DataBase)      
    
    For IndexFiches = 1 To index 
      NextDatabaseRow(DataBase)      
      ;Debug GetDatabaseString(DataBase, 0) + " , " + GetDatabaseString(DataBase, 1)    
      
      Prenom_Entree = GetDatabaseString(DataBase, 0)      
      Nom_Entree = GetDatabaseString(DataBase, 1)           
      Entreprise_Entree = GetDatabaseString(DataBase, 2)
      Adresse_Entree = GetDatabaseString(DataBase, 3)
      Code_Postal_Entree = GetDatabaseString(DataBase, 4)
      Ville_Entree = GetDatabaseString(DataBase, 5)
      Pays_Entree = GetDatabaseString(DataBase, 6)
      Telephone_Entree = GetDatabaseString(DataBase, 7)
      Mail_Entree = GetDatabaseString(DataBase, 8)
      Site_Entree = GetDatabaseString(DataBase, 9)
    Next    
    
    Affiche_Strings()
    
      ;IndexFiches = IndexFiches + 1
    ;Wend    
    
    FinishDatabaseQuery(DataBase)
  Else
    Debug "Une erreur c'est produite : " + DatabaseError()
  EndIf  
EndProcedure
Procedure SaveDatabase()
  Protected *Buffer = ExportDatabaseMemory(DataBase)
  
  If CreateFile(0, FileName, @onSaveFile(), #PB_LocalStorage)
    WriteData(0, *Buffer, 0, MemorySize(*Buffer))
    CloseFile(0)
  EndIf
EndProcedure
; CallBack si lecture d'un fichier en local storage
Procedure onReadFile(Status, Filename.s, File, SizeRead)
  Protected *Buffer, ReqSql.s
  
  Select Status
      
    Case #PB_Status_Loaded
      ; La base de données existe 
      ; - Memorisation de la base dans un buffer de travail
      ; - Visualisation des enregistrements
      Debug "Ouverture de la base de données " + Filename 
      
      ; Mémorisation de la base de données dans un buffer 
      *Buffer = ExportFileMemory(File)
      
      ; Ouverture de la base de données 
      DataBase = OpenDatabase(#PB_Any, *Buffer)
      If DataBase
        SelectRecords(La_Fiche)
      EndIf
      
    Case #PB_Status_Error
      ; La base de données n'existe pas
      ; - Création de la base de données 
      ; - Insertion de quelques enregistrements 
      ; - Visualisation des enregistrements
      ; - Sauvegarde des données en Local Storage
      Debug "Création de la base de données " + Filename 
      
      DataBase = OpenDatabase(#PB_Any)
      
      If DataBase
        ; Creation de la table SQlite
        ReqSql = "create table notes (id_notes INTEGER PRIMARY KEY AUTOINCREMENT Not NULL,prenom TEXT, nom TEXT,entreprise TEXT, adresse TEXT, code_postal TEXT, ville TEXT, pays TEXT, telephone TEXT, mail TEXT, site TEXT)"
        
        DatabaseUpdate(DataBase, ReqSql)        
        ; Insertion de quelques enregistrements 
        InsertRecords()                
        ; Visualisation des enregistrements
        SelectRecords(La_Fiche)        
        ; Sauvegarde de la base de données en "Local Storage"
        SaveDataBase()
        
        CloseDatabase(DataBase)
      Else
        
        Debug "Impossible d'ouvrir la base de données !!"
      EndIf
  EndSelect
EndProcedure
; Callback si ecriture d'un fichier en local storage
Procedure onSaveFile(Status, Filename.s, File, SizeRead)
  Select Status
    Case #PB_Status_Saved
      Debug "Fichier " + Filename.s + "(" + SizeRead + " bytes) sauvegardé" 
      
    Case #PB_Status_Error
      Debug "Impossible de sauvegarder le fichier " + Filename
  EndSelect
EndProcedure
Procedure PosClic(MouseX.i,MouseY.i, x0.i,y0.i,x1.i,y1.i)   
  If MouseX >= x0 And MouseX <= x0+x1 And MouseY >= y0 And MouseY <= y0+y1
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf  
EndProcedure
Procedure Charges_Images()  
  LoadImage(#Icone_DB,"/Icones/01-Precedente.png")
  LoadImage(#Icone_Open_DB,"/Icones/02-Suivante.png")
  LoadImage(#Icone_DB_Update,"/Icones/03-db_update.png")
  LoadImage(#Icone_Recherche,"/Icones/04-recherche.png")
  LoadImage(#Icone_Blob,"/Icones/05-blob.png")
  LoadImage(#Icone_Parametres,"/Icones/06-parametres.png")
  LoadImage(#Icone_A_Propos,"/Icones/07-a_propos.png")
EndProcedure
Procedure CadreCel(X1.i,Y1.i,FacX.i,FacY.i,Color.i)
  LineXY(X1,Y1,X1+FacX,Y1,Color) ;Ligne Horizontale Haut 1
  LineXY(X1,Y1,X1,Y1+FacY,Color) ;Ligne Verticale Gauche 1
 
  LineXY(X1,Y1+1,X1+FacX,Y1+1,Color) ;Ligne Horizontale Haut 2
  LineXY(X1+1,Y1,X1+1,Y1+FacY,Color) ;Ligne Verticale Gauche 2
 
 
  LineXY(X1+FacX-1,Y1,X1+FacX-1,Y1+FacY,Color) ;Ligne Verticale Droite 1
  LineXY(X1,Y1+FacY-1,X1+FacX,Y1+FacY-1,Color) ;Ligne Horizontale Bas 1
 
  LineXY(X1+FacX,Y1,X1+FacX,Y1+FacY,Color) ;Ligne Verticale Droite 2
  LineXY(X1,Y1+FacY,X1+FacX,Y1+FacY,Color) ;Ligne Horizontale Bas 1   
EndProcedure
Procedure BarreIcones()
  CadreCel(0,0,64,64,#White)
  CadreCel(64,0,64,64,#White)
  CadreCel(128,0,64,64,#White)
  CadreCel(192,0,64,64,#White)    
  CadreCel(256,0,64,64,#White)      
  CadreCel(320,0,64,64,#White)    
  CadreCel(384,0,64,64,#White)
EndProcedure
Procedure Affiche_Strings()                    
  StringGadget(#Prenom_Entree,     150,110,Largeur_String,40,Prenom_Entree)
  StringGadget(#Nom_Entree,        150,150,Largeur_String,40,Nom_Entree)
  StringGadget(#Entreprise_Entree, 150,190,Largeur_String,40,Entreprise_Entree)
  StringGadget(#Adresse_Entree,    150,230,Largeur_String,40,Adresse_Entree)
  StringGadget(#Code_Postal_Entree,150,270,Largeur_String,40,Code_Postal_Entree)
  StringGadget(#Ville_Entree,      150,310,Largeur_String,40,Ville_Entree)
  StringGadget(#Pays_Entree,       150,350,Largeur_String,40,Pays_Entree)
  StringGadget(#Telephone_Entree,  150,390,Largeur_String,40,Telephone_Entree)
  StringGadget(#Mail_Entree,       150,430,Largeur_String,40,Mail_Entree)
  StringGadget(#Site_Entree,       150,470,Largeur_String,40,Site_Entree)
EndProcedure 
      
Procedure GadgetEvent()
  Protected.i Index
  
  Select EventGadget()
    Case #ID_Canvas
      MouseX = GetGadgetAttribute(#ID_Canvas, #PB_Canvas_MouseX)
      MouseY = GetGadgetAttribute(#ID_Canvas, #PB_Canvas_MouseY)
            
    ;Case #ID_OK :  End
  EndSelect      
  
      If PosClic(MouseX,MouseY,0,0,64,64) 
        BarreIcones()
        CadreCel(0,0,64,64,#Blue)        
      EndIf
      
      If PosClic(MouseX,MouseY,64,0,64,64) 
        BarreIcones()
        CadreCel(64,0,64,64,#Blue)        
      EndIf
      
      If PosClic(MouseX,MouseY,128,0,64,64) 
        BarreIcones()
        CadreCel(128,0,64,64,#Blue)        
      EndIf
      
      If PosClic(MouseX,MouseY,192,0,64,64)
        BarreIcones()
        CadreCel(192,0,64,64,#Blue)        
      EndIf
      
      If PosClic(MouseX,MouseY,256,0,64,64) 
        BarreIcones()
        CadreCel(256,0,64,64,#Blue)        
      EndIf
      
      If PosClic(MouseX,MouseY,320,0,64,64) 
        BarreIcones()
        CadreCel(320,0,64,64,#Blue)        
      EndIf      
      
      If PosClic(MouseX,MouseY,384,0,64,64) 
        BarreIcones()
        CadreCel(384,0,64,64,#Blue)      
      EndIf
      
  Select EventType()     
    Case #PB_EventType_LeftButtonDown
       BarreIcones()
      
      If PosClic(MouseX,MouseY,0,0,64,64) ; Nouvelle base de données SQLite3
        If La_Fiche > 1
          La_Fiche = La_Fiche - 1
          SelectRecords(La_Fiche)
        EndIf
      EndIf
      
      If PosClic(MouseX,MouseY,64,0,64,64) ; Ouvrir une base de données SQlite3        
        If La_Fiche < 1001
          La_Fiche = La_Fiche + 1
          SelectRecords(La_Fiche)
        EndIf   
      EndIf
      
      If PosClic(MouseX,MouseY,128,0,64,64) ; Mettre à jour une base de donnée SQlite3                 
        UpdatetRecords(Index)                
        MessageRequester("Mise à jour de la base de données")
      EndIf
      
      If PosClic(MouseX,MouseY,192,0,64,64) ; Recherche dans la base de données SQlite 3       
        ;MessageRequester("Nouvelle base de données SQLite3")
      EndIf
      
      If PosClic(MouseX,MouseY,256,0,64,64) ; Import Image BLOB   
        ;MessageRequester("Nouvelle base de données SQLite3")
      EndIf
      
      If PosClic(MouseX,MouseY,320,0,64,64) ; Parametres
        CadreCel(320,0,64,64,#Blue)
        ;MessageRequester("Nouvelle base de données SQLite3")
      EndIf      
      
      If PosClic(MouseX,MouseY,384,0,64,64) ; A Propos        
        MessageRequester("Notysoft Notes SQlite3 - v1.00")
      EndIf
      
  EndSelect
  
  Select EventGadget()    
      
    Case #Index_Un
      La_Fiche = 1
      SelectRecords(La_Fiche)
      
  ;  Case #Pres      
  ;    If La_Fiche > 1
  ;      La_Fiche = La_Fiche - 1
  ;      SelectRecords(La_Fiche)
  ;    EndIf
    
  ;  Case #Suiv      
  ;    If La_Fiche < 1001
  ;      La_Fiche = La_Fiche + 1
  ;      SelectRecords(La_Fiche)
  ;    EndIf      
  EndSelect
  
EndProcedure
Procedure Fenetre_Notes()    
  If OpenWindow(#Fenetre_Notes, 0, 0, FenX,FenY, "Notysoft Note - 1.00",#PB_Window_BorderLess)       
    ;If OpenWindow(#Fenetre_Notes, 0, 0, FenX,FenY, "Notysoft Note - 1.00",#PB_Window_Background)       
      CanvasGadget(#ID_Canvas,0,0,FenX,FenY)      
      LoadFont(#Font_Notes, "Arial",Taille_Caractere)               
      SetGadgetFont(#PB_Default, FontID(#Font_Notes))      
      
      If StartDrawing(CanvasOutput(#ID_Canvas))
        DrawImage(ImageID(#Icone_DB),0,0,64,64)
        DrawImage(ImageID(#Icone_Open_DB),64,0,64,64)
        DrawImage(ImageID(#Icone_DB_Update),128,0,64,64)
        DrawImage(ImageID(#Icone_Recherche),192,0,64,64)
        DrawImage(ImageID(#Icone_Blob),256,0,64,64)
        DrawImage(ImageID(#Icone_Parametres),320,0,64,64)
        DrawImage(ImageID(#Icone_A_Propos),384,0,64,64)
        BarreIcones()
        StopDrawing()
      EndIf                                                    
      
    TextGadget(#Prenom_Texte,        20,110,130,40,"Prenom",#PB_Text_Border)
    TextGadget(#Nom_Texte,           20,150,130,40,"Nom",#PB_Text_Border)
    TextGadget(#Entreprise_Texte,    20,190,130,40,"Entreprise",#PB_Text_Border)
    TextGadget(#Adresse_Texte,       20,230,130,40,"Adresse",#PB_Text_Border)
    TextGadget(#Code_Postal_Texte,   20,270,130,40,"Code Postal",#PB_Text_Border)
    TextGadget(#Ville_Texte,         20,310,130,40,"Ville",#PB_Text_Border)
    TextGadget(#Pays_Texte,          20,350,130,40,"Pays",#PB_Text_Border)
    TextGadget(#Telephone_Texte,     20,390,130,40,"Telephone",#PB_Text_Border)
    TextGadget(#Mail_Texte,          20,430,130,40,"Mail",#PB_Text_Border)
    TextGadget(#Site_Texte,          20,470,130,40,"Site",#PB_Text_Border)   
    
    Affiche_Strings()
    
    TextGadget(#Info_X,20 ,550,130,40,Str(FenX),#PB_Text_Border)
    TextGadget(#Info_Y,150,550,Largeur_String,40,Str(DesktopHeight(#Fenetre_Notes)),#PB_Text_Border)
  
    ;ButtonGadget(#ID_OK, (FenX/2)-40, FenY-80, 80, 50, "Ok")      
    
    ;ButtonGadget(#Pres,(FenX/2)-120, FenY-80, 120, 50,"Précédente")      
    ;ButtonGadget(#Suiv,(FenX/2), FenY-80, 120, 50,   "Suivante")         
    
    ButtonGadget(#Index_Un,(FenX/2)-120, FenY-80, 200, 50,"Index 1")      
    
    BindEvent(#PB_Event_Gadget, @GadgetEvent())
    
    IndexFiches = 1
    
  CompilerIf #PB_Compiler_OS <> #PB_OS_Web
    Repeat 
      LoadFont(#Font_Notes, "Arial",Taille_Caractere)
      Event = WaitWindowEvent() 
    Until Event = #PB_Event_CloseWindow  ; If the user has pressed on the window close button
  CompilerEndIf
      
    EndIf
  EndProcedure      
  
  Start() 
  Charges_Images()   
  BindEvent(#PB_Event_Loading,@Fenetre_Notes())