FireDac Phys Sqlite - Cannot Vacuum - Sql statements in progress
Bonjour,
Afin de ré-indexer/réorganiser ma base de données à partir du programme, en fin de journée de travail, alors que tout les tableaux de saisie sont clos, j'utilise ce code :
Code:
1 2 3 4 5
| DataModule1.Connexion.Commit;
DataModule1.Connexion.ExecSQL('PRAGMA page_size=16384');
DataModule1.Connexion.ExecSQL('PRAGMA auto_vacuum = true');
DataModule1.Connexion.ExecSQL('PRAGMA auto_vacuum = INCREMENTAL');
DataModule1.Connexion.ExecSQL('VACUUM'); |
or je reçois systématiquement la même erreur : FireDac Phys Sqlite - Cannot Vacuum - Sql statements in progress
Quelqu'un a-t-il déjà rencontré ce problème ? Dans l'affirmative, je suis preneur.
Bonne journée.
FireDac Phys Sqlite - Cannot Vacuum - Sql statements in progress
Bonjour Sergio,
Merci pour ta réponse. Je me suis posé la question du forum... Vaccuum = SQLite, d'où mon choix.
La base de données n'est pas en mode CacheUpDate, j'ai cru comprendre que c'était inutile avec SQLite.
Dans mon idée, Commit était plutôt réservé aux données, non aux règles de la BDD. J'ai testé avec un Commit entre chaque, même message d'erreur. J'ai pensé agir sur une DDD fermée mais il ne me paraît pas logique travailler avec une connexion fermée.
Pour l'utilisation du TFDScript, jamais utilisé ! Je vais tester...
Encore merci.
FireDac Phys Sqlite - Cannot Vacuum - Sql statements in progress
Bonjour Sergio,
Désolé pour la tardiveté de ma réponse. Je devais tester le FDScript mais un problème de termites m'a fortement préoccupé et bien occupé. Merci néanmoins pour les pistes proposées.
Je vais tester les 2 solutions avec une BDD ayant eu des mouvements.
FireDac Phys Sqlite - Cannot Vacuum - Sql statements in progress
Hello Sergio,
Sauf erreur de ma part FDScript.ExecuteAll retourne un résultat booléen, c'est peut-être le moyen de savoir si le Vacuum a été exécuté.
Merci encore, je teste maintenant le Sweep et je garderai ce qui me paraîtra le plus approprié.
FireDac Phys Sqlite - Cannot Vacuum - Sql statements in progress
Bonjour Sergio,
Pour les termites, on remercie les Américains qui nous les ont laissées en 1942-1943... C'est une véritable plaie !
Comme tu le dits, les deux options sont effectivement exécutées mais pas moyen de savoir si le Vacuum a réellement été effectué. Je comprends de ta réponse qu'il faut charger la taille de la BDD avant l'appel à Vacuum et le comparer après l'appel... Me prenant la tête en ce moment avec des requêtes imbriquées en SQL, je profiterai d'une modification de l'applicatif pour intégrer ça, cela me semble pas trop complexe.
Encore merci pour tes solutions avisées.
FireDac Phys Sqlite - Cannot Vacuum - Sql statements in progress
Salut SergioMaster,
Je saute d'un problème à l'autre et que je n'ai pas encore testé la vérification des tailles de fichier avant et après le Vacuum... Lorsque l'on est encore en activité, il faudrait des minutes de 90 secondes, des heures de 90 minutes et des journées de 36 heures pour tout explorer !
Quant au TFDPhysSQLiteDriver (il est, à mon humble avis, indispensable avec SQLite) en sus du TFDSQLiteValidate, cela ne m'apparaît pas problématique.
Pour ce qui est des auto_vacuum=true et auto_vacuum=INCREMENTAL, sauf erreur de ma part et d'après ce que je peux lire et (essayer de) comprendre, le premier autoriserait la duplication de la BDD et le second indiquerait le mode de duplication (NONE-FULL-INCREMENTAL) avec réduction ou non de la BDD. J'avoue avoir quelques difficultés à bien discriminer la différence entre les deux. Peut-être convient-il de supprimer une instruction ? Ceci étant, je continue de chercher.
Merci néanmoins pour les pistes, cela m'ouvre des perspectives à explorer.