Page 1 sur 1

Enable to open database....

Publié : ven. 27/juil./2018 21:36
par omega
Bonsoir à tous,
Le message est clair mais ce que je ne comprends pas c'est que ce message s'affiche de temps en temps d'une manière bizarre... et pas à chaque fois sinon ça m'aurait facilité la tâche pour porter les corrections... De quoi s'agit il puisque la base de données est bel et bien ouverte convenablement sans problème, autrement, c'est à dire si la base n'était pas ouverte, ce message s'affiche à chaque fois que je lance mon programme et non pas DE TEMPS EN TEMPS...
Y a t il d'autres raisons pour lesquels ce message s'affiche?
Je travaille tous les jours avec ce programme et le message s'affiche irrégulièrement (4 jours après, 1 semaine, parfois un mois après, parfois 3 fois par jours... INCROYABLE MAIS VRAI ! Pourtant je n'ai rien changé au programme...
Voici les parties du code où ce message s'affiche

Code : Tout sélectionner

Idbl=0
Dbs$ = "Data\bl.db"
If Not OpenDatabase(Idbl, Dbs$, "", "")
   MessageRequester("Info", "Ouverture " + Dbs$ + " impossible!")
   End
EndIf
.....
..... ; plus loin...
.....
;Enregistrer le bl
sql="SELECT * FROM fbl where numdoc=" + Chr(34) + numdoc$ + Chr(34)
CheckDatabaseQuery(idbl,sql)
If NextDatabaseRow(idbl)
   sql= "Update fbl set "
   sql+ " datedoc="   + Chr(34) + date$       + Chr(34) + ","   
   sql+ " datenum="  + Chr(34) + datenum$ + Chr(34) + ","   
   sql+ " codeCF="    + Chr(34) +  codeCF$   + Chr(34) + " "   
   sql+ " where numdoc=" + Chr(34) + numdoc$ + Chr(34)
   CheckDatabaseUpdate(idbl,sql)
Endif
**** LE MESSAGE D'ERREUR INDIQUE CETTE LIGNE >>[color=#FF0080] Enable de open Database ... Update fbl set ...[/color] ect..


A signaler que cette partie de mise à jour de la table (FBL) marche dans la plupart des cas (environ à 90%) plusieurs enregistrements ont été mis à jour correctement...


Merci de votre aide

Re: Enable to open database....

Publié : sam. 28/juil./2018 10:12
par Marc56
Ta procédure CheckDatabaseQuery() se termine bien par un FinishDatabaseQuery(#Database) ?
Faute de quoi au bout d'un certain nombre de requêtes, ton nombre d'accès concomitants est atteint.

Re: Enable to open database....

Publié : sam. 28/juil./2018 10:55
par microdevweb
A mon avis essayé de mettre à jour la Bd dans une boucle qui lit la Bd et avec la même occurrence n'est pas idéal et tu doit certainement avoir le message "database is locked"

Solution ? Ouvrir une nouvelle instance de la base de donnée avec OpenDatabase dans ta procédure CheckDatabaseUpdate

Re: Enable to open database....

Publié : sam. 28/juil./2018 12:47
par omega
Bonjour
Ta procédure CheckDatabaseQuery() se termine bien par un FinishDatabaseQuery(#Database) ?
Non, je n'ai jamais utilisé FinishDatabaseQuery() car le programme a été développé sou Pb 4, il y a longtemps, je viens juste de le mettre à niveau (Pb5.62), il marche bien sans cette instruction (FinishDatabaseQuery).
Merci

Re: Enable to open database....

Publié : sam. 28/juil./2018 13:04
par Marc56
https://www.purebasic.com/french/docume ... story.html

16 Décembre 2008 : Version 4.30

- Ajouté: FinishDatabaseQuery(), DatabaseID()

Si ça a été ajouté, c'est qu'il y a une raison, donc commence par là, ce n'est qu'une seule ligne à ajouter.

Si tu recompiles un programme vieux de 10 ans (et oui PB 4 = 2008) avec le compilateur actuel et qu'il y a des "erreurs", il faut prendre en compte les modifications effectuées depuis dans le compilateur lui-même.

Et tant qu'à mettre à jour, profite pour remplacer les multiples quotes par SetDatabase(string, double etc...). Tu n'auras plus à te soucier des caractères bizarres qui peuvent engendrer des erreurs

Les messages d'erreurs "systématiquement aléatoires" c'est à 99.9% une erreur de codage.
Si tu voyais le monitoring en temps réel d'un serveur de base de données: c'est effrayant ce que ça produit les applications codées sans libération de ressources.

Re: Enable to open database....

Publié : sam. 28/juil./2018 17:30
par omega
Mais pourquoi je n'ai pas eu d'erreur au niveau compilation sans FinishDatabaseQuery?
De toute façon, je vais corriger et tester et attendre au moins 48 heures pour voir si le message réapparait.
Merci Marc pour cette information.

Re: Enable to open database....

Publié : dim. 29/juil./2018 8:55
par microdevweb
Il ne s'agit pas d'une erreur de compilation. Tu aurais exactement la même erreur avec avec java. Sqlite ne digère pas un update sur une base de données ouverte et qui à reçu une requête query.

Re: Enable to open database....

Publié : dim. 29/juil./2018 21:50
par omega
Il ne s'agit pas d'une erreur de compilation. Tu aurais exactement la même erreur avec avec java. Sqlite ne digère pas un update sur une base de données ouverte et qui à reçu une requête query.
Tu veux dire qu'il faut d'abord fermer le Query avant d'utiliser Update? (C'est à dire utiliser FinishDatabaseQuery()?)

Re: Enable to open database....

Publié : lun. 30/juil./2018 6:44
par Marc56
Oui, car depuis SQLite 3.7 (2012), toutes les requêtes en update se font automatiquement dans une transaction et les transactions en SQLite ne peuvent êtres imbriquées

Explication:
https://www.sqlite.org/lang_transaction.html

Re: Enable to open database....

Publié : lun. 30/juil./2018 9:45
par poshu
Wow, très bon lien ça, merci Marc566!

Re: Enable to open database....

Publié : lun. 30/juil./2018 10:14
par omega
Merci à tous

@Marc56: le lien est très utile! Merci beaucoup