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())