Russian Qt Forum
Ноябрь 24, 2024, 10:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с переносом данных из in-memory базы в файл (SQLite)  (Прочитано 2910 раз)
pichini
Гость
« : Декабрь 13, 2010, 15:41 »

Всем привет!

Собственно, создаю две базы, для каждой из них свой query. Делаю к одной из них "attach database ..."
Если обе базы не в памяти, то все ок, если же первую создаю как :memory: не могу перенести из нее данные,
при выполнении запроса тест ошибки:  "no such table: table1".

Код
C++ (Qt)
   QSqlDatabase db1 = QSqlDatabase::addDatabase("QSQLITE", "test1");
   //db1.setDatabaseName("test1.db3");
   db1.setDatabaseName(":memory:");
   if (!db1.open()) {
       qDebug() << "Cannot open database:" << db1.lastError();
       return false;
   }
   QSqlDatabase db2 = QSqlDatabase::addDatabase("QSQLITE", "test2");
   db2.setDatabaseName("test2.db3"); //db.setDatabaseName(":memory:");
   if (!db2.open()) {
       qDebug() << "Cannot open database:" << db2.lastError();
       return false;
   }
 
   QSqlQuery query1(db1);
   QSqlQuery query2(db2);
 
   QString   str  = "CREATE TABLE table1 ( "
                        "id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
                        "name   VARCHAR(150) NOT NULL "
                    ");";
   if (!query1.exec(str))
   {
       qDebug() << "Unable to create table1" << query1.lastError().text();
   }
   else
   {
       QString strF = "INSERT INTO  table1 (name) "
                      "VALUES('%1');";
       if (!query1.exec(strF.arg("qqq")))
       {
           qDebug() << "Unable to insert data to table1" << query1.lastError().text();
       }
       if (!query1.exec(strF.arg("www")))
       {
           qDebug() << "Unable to insert data to table1" << query1.lastError().text();
       }
   }    
   str  = "CREATE TABLE table2 ( "
                        "id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
                        "name   VARCHAR(150) NOT NULL "
                    ");";
   if (!query2.exec(str))
   {
       qDebug() << "Unable to create table2" << query2.lastError().text();
   }
 
   str  = "ATTACH DATABASE ':memory:' AS test1";
   if (!query2.exec(str))
   {
       qDebug() << "Unable to attach database" << query2.lastError().text();
   }
 
   str  = "INSERT INTO  table2 (name) SELECT table1.name from table1";
   if (!query2.exec(str))
   {
       qDebug() << "Unable to insert data to table2" << query2.lastError().text();
   }
   else
       qDebug() << "ok";
 
Записан
pichini
Гость
« Ответ #1 : Декабрь 14, 2010, 11:00 »

Вообщем, в случае если делать attach физической базы к in-memory и выполнять insert со стороны in-memory то все ок.
Хз почему...

Код
C++ (Qt)
  str  = "ATTACH DATABASE 'test2.db3' AS test2";
   if (!query1.exec(str))
   {
       qDebug() << "Unable to attach database" << query1.lastError().text();
   }
 
   str  = "INSERT INTO table2 (name) SELECT table1.name FROM table1";
   if (!query1.exec(str))
   {
       qDebug() << "Unable to insert data to table2" << query1.lastError().text();
   }
   else
       qDebug() << "ok";
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.158 секунд. Запросов: 20.