Sqlite database disk image is malformet
- microdevweb
- Messages : 1798
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Sqlite database disk image is malformet
Bonjour à tous,
Voici le soucis pour logiciel client voici le message quand on essaye d'ouvrir la base de données. "database disk image is malformet", je n'ai aucune idée de ce qui à peu se passer. J'ai bien trouvé des logiciels pour la lire, mais payant (180 dollars) si je veux sauvegarder la base de données.
Merci de vos suggestions.
Voici le soucis pour logiciel client voici le message quand on essaye d'ouvrir la base de données. "database disk image is malformet", je n'ai aucune idée de ce qui à peu se passer. J'ai bien trouvé des logiciels pour la lire, mais payant (180 dollars) si je veux sauvegarder la base de données.
Merci de vos suggestions.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Sqlite database disk image is malformet
Voila ce que c'est que de faire de la pseudo POO sur une base de données.
Charge la version de http://sqlitebrowser.org/
Puis regarde ce lien https://sysinfotools.com/blog/fix-error ... malformed/ (Step 3 et 4)
Charge la version de http://sqlitebrowser.org/
Puis regarde ce lien https://sysinfotools.com/blog/fix-error ... malformed/ (Step 3 et 4)
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%
- microdevweb
- Messages : 1798
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Sqlite database disk image is malformet
Merci falsam,
J'avais déjà regardé ce lien, mais tous le problème est la même DB Broswer ne veux ouvrir la db. Donc je ne voie pas comment envoyé la requête
J'avais déjà regardé ce lien, mais tous le problème est la même DB Broswer ne veux ouvrir la db. Donc je ne voie pas comment envoyé la requête
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
-
- Messages : 24
- Inscription : jeu. 18/févr./2010 21:52
- Localisation : Darmstadt - Allemagne
- Contact :
Re: Sqlite database disk image is malformet
Bonjour,
avec Firefox j'utilise Add-On SQLite Manager
avec Firefox j'utilise Add-On SQLite Manager
Win 10 - PB 5.31 et 5.71
- microdevweb
- Messages : 1798
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Sqlite database disk image is malformet
Merci Marcel,
Cela peut être utilise.
Cela peut être utilise.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Sqlite database disk image is malformet
Cela ne t’aidera pas, cela aurait dû être fait avant, mais normalement tout système professionnel utilisant une base de donnée doit faire une sauvegarde en binaire et un dump.
Donc même sur une petite application, prévoir une copie (horodatée) qui se fait automatiquement à l'ouverture.
(Aparté pour les débutants en base de données)
- La sauvegarde en binaire (= copie) est effectuée en fin de journée car elle nécessite que la base soit arrêtée.
- Le dump (appelé aussi "déchargement de base de donnée") peut par contre être effectué à chaud.
Le "Dump" est un fichier texte qui contient toute les commandes qu'on devrait taper à la main si on voulait créer la base.
Pour faire le Dump complet d'une base SQLite(on peut ajouer un pipe pour comprimer en même temps)
Le Dump est plus lent, mais sera toujours lisible et permet aussi de migrer facilement.
Sur les plus gros systèmes, on fait une sauvegarde en binaire à partir de la copie de base effectuée par le système de journalisation, ce qui évite de devoir arrêter la base.
Avec PB, la copie est facile à faire puisqu'il suffit d'un simple FileCopy() avant d'ouvrir la base.
Donc même sur une petite application, prévoir une copie (horodatée) qui se fait automatiquement à l'ouverture.
(Aparté pour les débutants en base de données)
- La sauvegarde en binaire (= copie) est effectuée en fin de journée car elle nécessite que la base soit arrêtée.
- Le dump (appelé aussi "déchargement de base de donnée") peut par contre être effectué à chaud.
Le "Dump" est un fichier texte qui contient toute les commandes qu'on devrait taper à la main si on voulait créer la base.
Pour faire le Dump complet d'une base SQLite
Code : Tout sélectionner
sqlite3.exe base_de_données .dump > fichier_text
Le Dump est plus lent, mais sera toujours lisible et permet aussi de migrer facilement.
Sur les plus gros systèmes, on fait une sauvegarde en binaire à partir de la copie de base effectuée par le système de journalisation, ce qui évite de devoir arrêter la base.
Avec PB, la copie est facile à faire puisqu'il suffit d'un simple FileCopy() avant d'ouvrir la base.
- microdevweb
- Messages : 1798
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Sqlite database disk image is malformet
@Marc56,
Il y avais heureusement un système de backup manuel et à la fermeture. Donc fort heureusement peut de données on été perdue et ont peux ainsi être restaurées.
Il y avais heureusement un système de backup manuel et à la fermeture. Donc fort heureusement peut de données on été perdue et ont peux ainsi être restaurées.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Sqlite database disk image is malformet
Je n'ai jamais essayé, mais il semble que SQLite fait aussi de la journalisation
https://sqlite.org/tempfiles.html
Dans le cas contraire, tu peux aussi créer ton propre journal et sauvegardant au niveau de ton programme chaque requête elle-même (et non pas son résultat) dans un simple fichier texte.
En cas de problème, tu corriges le fichier journal, puis tu le réinjecte (<) dans la sauvegarde du jour précédent.
Ça permet aussi de mettre ça sous le nez de des utilisateurs qui disent toujours "j'ai touché à rien pourtant ?"
https://sqlite.org/tempfiles.html
Dans le cas contraire, tu peux aussi créer ton propre journal et sauvegardant au niveau de ton programme chaque requête elle-même (et non pas son résultat) dans un simple fichier texte.
En cas de problème, tu corriges le fichier journal, puis tu le réinjecte (<) dans la sauvegarde du jour précédent.
Ça permet aussi de mettre ça sous le nez de des utilisateurs qui disent toujours "j'ai touché à rien pourtant ?"
- microdevweb
- Messages : 1798
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Sqlite database disk image is malformet
Ha c'est vrai que c'est pas con... Mais pour ce soft, cela représenterais peut-être beaucoup de travail, quoique toutes les requête passe par un module db donc se serais faisable.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Sqlite database disk image is malformet
Tu ajoutes juste 3 lignesmicrodevweb a écrit :Ha c'est vrai que c'est pas con... Mais pour ce soft, cela représenterais peut-être beaucoup de travail, quoique toutes les requête passe par un module db donc se serais faisable.
Exemple basé sur celui de la doc https://www.purebasic.com/french/docume ... se.pb.html
Ne pas oublier:
- Mettre le log en mode ajout à la fin (#PB_File_Append) (inutile avec ça de faire un FileSeek)
- Ajouter un ; à la fin de chaque ligne si le code n'en met pas
- Ajouter un saut de ligne.
Code : Tout sélectionner
UseSQLiteDatabase()
Procedure CheckDatabaseUpdate(Database, Query$)
; --- Sauvegarde de la requête
OpenFile(0, GetTemporaryDirectory() + "SQL_Log.sql", #PB_File_Append)
WriteString(0, Query$ + ";" + #CRLF$)
CloseFile(0)
; ---
Result = DatabaseUpdate(Database, Query$)
If Result = 0
Debug DatabaseError()
EndIf
ProcedureReturn Result
EndProcedure
DatabaseFile$ = GetTemporaryDirectory()+"Database.sqlite"
If CreateFile(0, DatabaseFile$)
CloseFile(0)
If OpenDatabase(0, DatabaseFile$, "", "")
CheckDatabaseUpdate(0, "CREATE TABLE food (name CHAR(50), weight INT)")
CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('apple', '10')")
CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('pear', '5')")
CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('banana', '20')")
If DatabaseQuery(0, "SELECT * FROM food WHERE weight > 7")
While NextDatabaseRow(0)
Debug GetDatabaseString(0, 0)
Wend
FinishDatabaseQuery(0)
EndIf
CloseDatabase(0)
Else
Debug "Can't open database !"
EndIf
Else
Debug "Can't create the database file !"
EndIf
http://www.sqlite.org/download.html
Version actuelle pour Windows: sqlite-tools-win32-x86-3210000.zip
Puis envoyer le fichier log dans la base
Code : Tout sélectionner
sqlite3.exe Database.sqlite < SQL_Log.sql