PB revopie base sqlite in-memory vers fichier

Signaler
-
Messages postés
493
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
24 mai 2017
-
Bonjour,

Je désire travailler sur une base sqlite 3, fichier situé sur mon disque dur.
Je parviens à créer son equivalent in-memory, sur laquelle je fais les actions demandées (tris, identifications de doublons, etc.)
Comme ma base contient plus de 10 000 enregistrement je préfère travailler in-memory...
Par contre lorsque j'ai terminé sur une table et que je veux la transférer de la base in-memory dans l'autre cela ne marche pas.
J'ai donc ma base sur fichier ouverte et une base in-memory créée par
$file_db = new PDO('sqlite:monfichier.sqlite');
    // Set errormode to exceptions
    $file_db->setAttribute(PDO::ATTR_ERRMODE, 
                            PDO::ERRMODE_EXCEPTION);
$memory_db = new PDO('sqlite::memory:');
   // Set errormode to exceptions
   $memory_db->setAttribute(PDO::ATTR_ERRMODE, 
                              PDO::ERRMODE_EXCEPTION);
/**************************************
* Copie table en mémoire pour travail *
**************************************/
    $theresult = $memory_db->exec('ATTACH DATABASE "monfichier.sqlite" as filedb');
    $thequery = 'CREATE TABLE Travail_n AS SELECT * FROM filedb.Fichier_n';
    $theresult = $memory_db->exec($thequery);


J'ai créé cette table Travail_n dans ma base in-memory que je souhaite retransférer vers mon fichier après l'avoir modifiée.
plus loin mes instructions qui "coincent"
$thequery = "ATTACH DATABASE ':memory:' as mem_base";
$thetst=$file_db->prepare($thequery);
$theresult = $thetst->execute();
echo '
attach : '.$theresult.'
';


me donne comme résultat
attach : 1
alors que ce devrait être 0 (si tout s'est bien déroulé)

Si j'enchaîne avec l'instruction qui m'intéresse (recopier la table dans le fichier du disque)
$theresult = $file_db->exec('CREATE TABLE Travail_fini as Select * from mem_base.Travail_n');
echo '
Create table : '.$theresult.'
';


J'ai
SQLSTATE[HY000]: General error: 1 no such table: mem_base.Travail_n

Ce qui indique bien que la table n'a pas été créée, donc que mon attach n'a pas fonctionné.
J'ai vérifié que mon fichier était accessible en écriture à tous, donc je ne devrais pas avoir de problèmes d'accès.
Si j'agis directement sur la base $file_db tout se passe normalement...

Où ai-je faux ? Merci aux experts

2 réponses

Messages postés
493
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
24 mai 2017
2

$theresult = $memory_db->exec('ATTACH DATABASE "monfichier.sqlite" as filedb');
$thequery = 'CREATE TABLE Travail_n AS SELECT * FROM filedb.Fichier_n';
$theresult = $memory_db->exec($thequery);


Tu initialisés la variable $theresult deux fois.
L'un n'écrase pas l'autre, est-ce normal ?


stéph
Messages postés
493
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
24 mai 2017
2
J'imagine que oui car elle est exécuté sorry, j'ai été trop vite.

stéph