SQLite dans le local-storage du navigateur.
Re: SQLite dans le local-storage du navigateur.
Je doute que SB le fasse un jour. Parce que ça voudrait dire que tous les programmes développés avec auraient tous les les même failles.
Dès qu'on rentre dans le domaine du serveur, on joue avec des règles de sécurité qui sont assez importantes, autant utiliser des normes qui sont développés et mise à jour rapidement et par de grande communautés que par un seul gars. C'est pas contre Fred, je refuserai de déployer un serveur développé par une seule personne quelle qu'elle soit. En l'état, un petit nginx (ou apache) -> un serveur PB en fast CGI = la meilleure sécurité disponible. Et on parle ici de 3 outils (dont deux, SB et PB, sont quasi jumeaux), pas de 25 et 52 pirouettes.
Dès qu'on rentre dans le domaine du serveur, on joue avec des règles de sécurité qui sont assez importantes, autant utiliser des normes qui sont développés et mise à jour rapidement et par de grande communautés que par un seul gars. C'est pas contre Fred, je refuserai de déployer un serveur développé par une seule personne quelle qu'elle soit. En l'état, un petit nginx (ou apache) -> un serveur PB en fast CGI = la meilleure sécurité disponible. Et on parle ici de 3 outils (dont deux, SB et PB, sont quasi jumeaux), pas de 25 et 52 pirouettes.
- Crystal Noir
- Messages : 891
- Inscription : mar. 27/janv./2004 10:07
Re: SQLite dans le local-storage du navigateur.
A partir du moment où on veut faire du web de toute façon on rentre dans le monde du serveur. C'est pour cela que ce genre d'appli correspond bien à Java. Mais Java ce n'est pas forcément simple (et il n'y a pas que Java d'ailleurs pour ce genre d'appli). Mais rien n'est impossible. A voir dans le temps.
Re: SQLite dans le local-storage du navigateur.
Si si, un serveur sécurisé, qui tourne sur toutes les configurations (hardware et software), et qui correspond à tous les besoin, c'est impossible.
En fait, chacune de ces 3 propositions est déjà impossible en soit, donc les trois ensembles...
En fait, chacune de ces 3 propositions est déjà impossible en soit, donc les trois ensembles...
- Crystal Noir
- Messages : 891
- Inscription : mar. 27/janv./2004 10:07
Re: SQLite dans le local-storage du navigateur.
Pourquoi toutes les configurations ? Il ne me viendrait pas à l'idée de faire tourner un serveur web ou java sous windows (à part en local dev mais pas en production).
Re: SQLite dans le local-storage du navigateur.
Parce qu'on utilise pas tous le même OS ni le même jeu d'instruction?
Je connais des serveurs sous Linux (et ça veut surtout dire sous une chié distributions différentes...), d'autres sous FreeBSD et d'autres encore sous Windows (même si ça ne te vient pas à l'idée, il y a des gens qui sont bloqués par des applications spécialisés...); je connais des serveurs en i386, d'autre en AMD64 et même certain en ARM...
Je connais des serveurs sous Linux (et ça veut surtout dire sous une chié distributions différentes...), d'autres sous FreeBSD et d'autres encore sous Windows (même si ça ne te vient pas à l'idée, il y a des gens qui sont bloqués par des applications spécialisés...); je connais des serveurs en i386, d'autre en AMD64 et même certain en ARM...
- Crystal Noir
- Messages : 891
- Inscription : mar. 27/janv./2004 10:07
Re: SQLite dans le local-storage du navigateur.
En fait on parle pas du tout de la même chose ^^ Toi tu parles de coder un serveur ou d'une app qui utilise l'os et ses jeux d'instructions moi je te parle d'utiliser l'existant (apache, tomcat...) pour handle des messages/requêtes pour une webapp (peu importe l'os derrière, le message est universel et utilise la technologie web). Un message ou une requête que tu vas balancer à tomcat, que tu aies fedora, mint , desbian ou autre chose on s'en fout, c'est tomcat qui gère.
Mais dans le cas que tu présentes, c'est différent effectivement.
Mais dans le cas que tu présentes, c'est différent effectivement.
Re: SQLite dans le local-storage du navigateur.
Je crois surtout que tu ne comprends pas ce dont tu parles : je t'ai parlé d'utiliser l'existant au dessus et tu n'étais pas d'accord. Ensuite, ça ne change rien : tout le monde n'utilise pas Tomcat (parce que c'est sous Java...), tout le monde n'utilise pas Apache (parce que c'est lent, lourd et chiant à configurer). Tout le monde n'a pas la même config.
- Crystal Noir
- Messages : 891
- Inscription : mar. 27/janv./2004 10:07
Re: SQLite dans le local-storage du navigateur.
Sisi je comprend très bien ce dont je parle, seulement depuis le début on est pas sur la même longueur d'onde, donc ce n'est pas grave On va pas se friter pour une histoire de serveur ^^ D'autant plus qu'on est passé de l'utilisation possible de SB sur un sujet plus général. Pour l'existant tomcat était juste un exemple.
Mon idée était un peu de savoir les possibilités de SB et de ce qu'il propose "out in a box".
Cela dit, peu importe les avis sur le comment faire ou comment gérer, ma question de départ était purement sur SB, notamment sur ce qu'il propose concernant la persistance des données. Etant donné que pour le moment il n'agit uniquement que du côté client, la réponse (local storage etc...) est tout à fait logique. Merci.
Mon idée était un peu de savoir les possibilités de SB et de ce qu'il propose "out in a box".
Cela dit, peu importe les avis sur le comment faire ou comment gérer, ma question de départ était purement sur SB, notamment sur ce qu'il propose concernant la persistance des données. Etant donné que pour le moment il n'agit uniquement que du côté client, la réponse (local storage etc...) est tout à fait logique. Merci.
- Crystal Noir
- Messages : 891
- Inscription : mar. 27/janv./2004 10:07
Re: SQLite dans le local-storage du navigateur.
Désolé pour le double post !
Je me permet de rebondir sur le sujet, j'ai pas mal étudié ce soir, la doc de sb et le forum officiel sur des sujets particuliers. Revenant de pas mal de Java et JSP où le tout fonctionne un peu "out in a box" dans le sens où finalement t'as un serveur, un code java, et des view jsp qui fonctionnent ensemble, d'un côté la partie métier qui comprend d'ailleurs toutes les classes et méthodes de ton projet, la partie DAO (classes et méthodes bdd), une partie contrôleur pour faire la liaison entre les demandes utilisateurs et la partie métier et DAO, et le côté jsp/web pour le retour utilisateur, UI etc.., le tout s'orchestrant sur un serveur type tomcat (ou glassfish).
Avec cette idée en tête je me disais qu'on aurait pu avoir une sorte d'organisation un peu de ce style sur SB (et j'ai vite oublié l'idée quand on a parlé du fait que finalement SB ne fonctionne que du côté client sans aucune composante serveur).
J'ai vu quelques exemples d'interfaçage avec php et le http request qui peut être une solution pour une connexion bdd (ou tout autre chose) sur le serveur sur lequel tourne l'appli sb. J'ai aussi vu Spiderbyte mais la doc étant en allemand je n'ai pas trop regardé comment cela marche.
Gardant cette idée et ce pattern en tête en fait j'étais pas du tout dans le bon axe, ce qui explique qu'on parlait tous les deux finalement de choses complètement différentes ! La lobotomisation Java de ces dernières années a laissé des traces Donc je présente toutes mes excuses pour cette incompréhension ! Mea culpa.
Je me permet de rebondir sur le sujet, j'ai pas mal étudié ce soir, la doc de sb et le forum officiel sur des sujets particuliers. Revenant de pas mal de Java et JSP où le tout fonctionne un peu "out in a box" dans le sens où finalement t'as un serveur, un code java, et des view jsp qui fonctionnent ensemble, d'un côté la partie métier qui comprend d'ailleurs toutes les classes et méthodes de ton projet, la partie DAO (classes et méthodes bdd), une partie contrôleur pour faire la liaison entre les demandes utilisateurs et la partie métier et DAO, et le côté jsp/web pour le retour utilisateur, UI etc.., le tout s'orchestrant sur un serveur type tomcat (ou glassfish).
Avec cette idée en tête je me disais qu'on aurait pu avoir une sorte d'organisation un peu de ce style sur SB (et j'ai vite oublié l'idée quand on a parlé du fait que finalement SB ne fonctionne que du côté client sans aucune composante serveur).
J'ai vu quelques exemples d'interfaçage avec php et le http request qui peut être une solution pour une connexion bdd (ou tout autre chose) sur le serveur sur lequel tourne l'appli sb. J'ai aussi vu Spiderbyte mais la doc étant en allemand je n'ai pas trop regardé comment cela marche.
Gardant cette idée et ce pattern en tête en fait j'étais pas du tout dans le bon axe, ce qui explique qu'on parlait tous les deux finalement de choses complètement différentes ! La lobotomisation Java de ces dernières années a laissé des traces Donc je présente toutes mes excuses pour cette incompréhension ! Mea culpa.
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: SQLite dans le local-storage du navigateur.
Patrick88 insistant sur le chat de Purebasic , et bien que Poshu a déja posté une réponse sur une base de données persistante, je poste un autre exercice de base de données persistante.
J'ai crée un APK du code et exécuté l'application sous Android puis j'ai passé CCleaner (version Android).
La base de données n'a pas été détruite.
Explication dans le code
J'ai crée un APK du code et exécuté l'application sous Android puis j'ai passé CCleaner (version Android).
La base de données n'a pas été détruite.
Explication dans le code
Code : Tout sélectionner
EnableExplicit
Global FileName.s = "games.sqlite"
Global DataBase
;Plan de l'application
Declare Start()
Declare InsertRecords() ;Insertion de quelques enregistrements
Declare SelectRecords() ;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
Start()
; 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()
DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Command & Conquer : Alerte Rouger', '1996')")
DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Doom', '1993')")
DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Worms', '1995')")
DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Quake', '1996')")
DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Wolfenstein 3D', '1992')")
DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Duke Nukem 3D', '1996')")
DatabaseUpdate(DataBase, "Insert Into games (game, year) Values ('Blood', '1997')")
EndProcedure
;Selection des enregistrements
Procedure SelectRecords()
Protected ReqSql.s = "select year, game From games order by year"
If DatabaseQuery(DataBase, ReqSql)
While NextDatabaseRow(DataBase)
Debug GetDatabaseString(DataBase, 0) + " : " + GetDatabaseString(DataBase, 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()
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 des jeux
ReqSql = "create table games (game TEXT, year TEXT)"
DatabaseUpdate(DataBase, ReqSql)
; Insertion de quelques enregistrements
InsertRecords()
; Visualisation des enregistrements
SelectRecords()
; 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
Dernière modification par falsam le jeu. 09/août/2018 14:04, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: SQLite dans le local-storage du navigateur.
Le code suivant permet de visualiser les données
Code : Tout sélectionner
EnableExplicit
Global FileName.s = "games.sqlite"
Global DataBase
;Plan de l'application
Declare Start()
Declare SelectRecords(DataBase)
Declare onReadFile(Status, Filename.s, File, SizeRead)
Start()
Procedure Start()
ReadFile(0, FileName, @onReadFile(), #PB_LocalStorage)
EndProcedure
Procedure SelectRecords(DataBase)
Protected ReqSQL.s = "select * from games"
If DatabaseQuery(DataBase, ReqSQL)
While NextDatabaseRow(DataBase)
Debug GetDatabaseString(DataBase, 1) + "," + GetDatabaseString(DataBase, 0)
Wend
FinishDatabaseQuery(DataBase)
Else
Debug "DatabaseQuery() failed" + DatabaseError()
EndIf
EndProcedure
Procedure onReadFile(Status, Filename.s, File, SizeRead)
Protected *Buffer
Select Status
Case #PB_Status_Loaded
Debug "File loaded: " + Filename
; Get all the file as a new buffer
*Buffer = ExportFileMemory(File)
DataBase = OpenDatabase(#PB_Any, *Buffer)
If DataBase
SelectRecords(DataBase)
EndIf
Case #PB_Status_Error
Debug "La base de données " + FileName + " n'existe pas"
EndSelect
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: SQLite dans le local-storage du navigateur.
Mmmerci Falsam (ça a eu du mal à sortir...) en attendant que tu ME fasses en exemple qui utilise une base de donnée SQLite (je t'avais gentiment suggéré, je suis pas KCC)
j'étais en train de reprendre l'exemple "localForage.sb" du dossier "examples" de SpiderBasic qui crée un fichier et y ajoute des lignes et les relit
je l'ai modifié en remplaçant le opendialog par une boite de dialog XML comme l'exemple "Simple resizable dialog"...
hum, bon ... j'ai du mal à piger à quoi sert la procedure onSaveFile vu que le fichier ce crée avec SaveDatabase
je suppose que c'est dans le cas ou il y aurait des erreurs, histoire de les intercepter et de les traiter
mais alors pourquoi il n'y a pas un appel à la création du fichier dans le cas de #PB_Status_Error ??
Patrick
j'étais en train de reprendre l'exemple "localForage.sb" du dossier "examples" de SpiderBasic qui crée un fichier et y ajoute des lignes et les relit
je l'ai modifié en remplaçant le opendialog par une boite de dialog XML comme l'exemple "Simple resizable dialog"...
hum, bon ... j'ai du mal à piger à quoi sert la procedure onSaveFile vu que le fichier ce crée avec SaveDatabase
je suppose que c'est dans le cas ou il y aurait des erreurs, histoire de les intercepter et de les traiter
mais alors pourquoi il n'y a pas un appel à la création du fichier dans le cas de #PB_Status_Error ??
Patrick
Re: SQLite dans le local-storage du navigateur.
Mon implémentation habituelle : https://forums.spiderbasic.com/viewtopi ... 1393#p5384.
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: SQLite dans le local-storage du navigateur.
La procédure SaveDatabase() lance la sauvegarde de la base de données et fait appel à la procédure onSaveFile() quand la sauvegarde est terminée ou qu'il y a une erreur durant la sauvegarde. L'un ne va pas sans l'autre.Patrick88 a écrit :j'ai du mal à piger à quoi sert la procedure onSaveFile vu que le fichier ce crée avec SaveDatabase
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: SQLite dans le local-storage du navigateur.
donc c'est bien ce que j'avais compris, si y'a erreur durant la sauvegarde, faut pas "juste" afficher un message "ça a foiré..." et bast' mais traiter l'erreur, chercher pourquoi...falsam a écrit :La procédure SaveDatabase() lance la sauvegarde de la base de données et fait appel à la procédure onSaveFile() quand la sauvegarde est terminée ou qu'il y a une erreur durant la sauvegarde. L'un ne va pas sans l'autre.
ça correspond grosso modo au try - catch du C# VB.net Javascript etc
vu également.
Par défaut, Internet Explorer alloue 10 Mo par espace de stockage, et les autres navigateurs (Firefox, Chrome, Opera, Safari) 5 Mo par domaine.
source -> dans le paragraphe "Examen et espace alloué" https://www.alsacreations.com/article/l ... orage.html
Patrick