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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: как скопировать БД?  (Прочитано 6682 раз)
alex-v
Гость
« : Сентябрь 25, 2010, 15:06 »

есть база данных sqlite в памяти.

Код:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "memoryDB");
db.setDatabaseName(":memory:");

Требуется сделать точную её копию в файл на диске. Как бы это реализовать?
Записан
Denjs
Гость
« Ответ #1 : Сентябрь 25, 2010, 16:18 »

Cоздать вторую БД на диске и перегрузить дамп. по моему так.

Вроде как можно и сразу (не проверял, см ccылки )
типа так:
Код:
ATTACH DATABASE New.db AS new;
CREATE TABLE new.stuff AS (SELECT * FROM table)
http://ru.efreedom.com/Question/1-566009/%D0%94%D0%B0%D0%BC%D0%BF-%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-%D1%87%D0%B0%D1%81%D1%82%D0%B8-%D0%B1%D0%B0%D0%B7%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-sqlite

http://www.sqlite.org/lang_attach.html
« Последнее редактирование: Сентябрь 25, 2010, 16:27 от Denjs » Записан
alex-v
Гость
« Ответ #2 : Сентябрь 25, 2010, 17:01 »

Cоздать вторую БД на диске и перегрузить дамп. по моему так.

а как это реализовать? пример кода можно?

Цитировать
Вроде как можно и сразу (не проверял, см ccылки )

за ссылки спасибо. почитал. но что-то не получается ничего реализовать. Подскажите пример кода.
спасибо.

p.s. Что-то не могу также понять, для чего нужно "ATTACH DATABASE" ...
« Последнее редактирование: Сентябрь 25, 2010, 17:08 от alex-v » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Сентябрь 25, 2010, 17:31 »

>>для чего нужно "ATTACH DATABASE"
ATTACH - прикрепить
прикрепляет одну БД к другой, и тогда с таблицами можно работать, как если бы они были в одной БД
Записан

Юра.
alex-v
Гость
« Ответ #4 : Сентябрь 25, 2010, 17:40 »

ATTACH - прикрепить
прикрепляет одну БД к другой, и тогда с таблицами можно работать, как если бы они были в одной БД

спасибо за разъяснение, только не могу что-то сообразить как мне этим пользоваться в моём случае... может кто поможет?
« Последнее редактирование: Сентябрь 25, 2010, 17:44 от alex-v » Записан
Marat(Qt)
Гость
« Ответ #5 : Сентябрь 25, 2010, 18:23 »

Вариант:
взять QSqlQuery(пусть будет query1) прикрепленный к базе ":memory:" и QSqlQuery, прикрепленный к "file.sql"(query2).
С помощью query1 делаете "SELECT * FROM table_name", потом с помощью query2 делаете "INSERT INTO ..." используя данные из query1.

Как я понял, выше вам предлагали более изящный вариант. Хотя я с трудом представляю его в Qt. В моем понимании - один QSqlQuery работает с одной БД, но никак не с двумя.
Записан
alex-v
Гость
« Ответ #6 : Сентябрь 25, 2010, 18:28 »

Вариант:
взять QSqlQuery(пусть будет query1) прикрепленный к базе ":memory:" и QSqlQuery, прикрепленный к "file.sql"(query2).
С помощью query1 делаете "SELECT * FROM table_name", потом с помощью query2 делаете "INSERT INTO ..." используя данные из query1.

Как я понял, выше вам предлагали более изящный вариант. Хотя я с трудом представляю его в Qt. В моем понимании - один QSqlQuery работает с одной БД, но никак не с двумя.

можно и так. Но проблема в том, что так не получиться сделать точную копию БД. Ведь нам надо знать как таблица из источника создавалась (create table ...), с какими параметрами и т.п. Нужно еще как-то все индексы скопировать... Это всё нужно как-то учесть...
Записан
alex-v
Гость
« Ответ #7 : Сентябрь 25, 2010, 21:50 »

Обнаружил, что в системной таблице "sqlite_master" в БД хранится описание создания всех таблиц (create table...).
Это мне в помощь. Видимо надо делать в ручную - командами sql.
Спасибо участникам темы.
Записан
Denjs
Гость
« Ответ #8 : Сентябрь 26, 2010, 00:00 »

Обнаружил, что в системной таблице "sqlite_master" в БД хранится описание создания всех таблиц (create table...).
Это мне в помощь. Видимо надо делать в ручную - командами sql.
Спасибо участникам темы.
ух ты ^_^ )))
а в разделе документации http://www.sqlite.org/ есть много чего интересного )))) заглядывайте )...
Записан
Marat(Qt)
Гость
« Ответ #9 : Сентябрь 26, 2010, 02:05 »

Обнаружил, что в системной таблице "sqlite_master" в БД хранится описание создания всех таблиц (create table...).
Это мне в помощь. Видимо надо делать в ручную - командами sql.
Спасибо участникам темы.
ух ты ^_^ )))
а в разделе документации http://www.sqlite.org/ есть много чего интересного )))) заглядывайте )...
Вы это про документацию? Несколько неожиданный ответ
Записан
Jo
Гость
« Ответ #10 : Сентябрь 27, 2010, 19:06 »

Тоже возникала подобная задача.

Как сделать на с++: http://www.sqlite.org/backup.html
но именно средствами Qt не знаю..
Записан
alex-v
Гость
« Ответ #11 : Сентябрь 27, 2010, 19:20 »

все просто. В системной таблице sqlite_master - вся информация для экспорта (параметры таблиц и индексов).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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