Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа с SQLite
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
DAVID
Здравствуйте!
Функция подключения к БД у меня выглядит следующим образом:
static bool createConnection ()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("SQLITE");
    if (!db.open()) return false;
    ....
    ....
}

Вопрос такой: если в программе потребуется задать новое имя для БД (QSqlDatabase::setDatabaseName())
правильно ли использовать следующий код:
static bool createConnection ()
{
    db.close();
    db.setDatabaseName("SQLITE_2");
    if (!db.open()) return false;
    ....
    ....
}

А можно ли написать так:
static bool createConnection ()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("SQLITE");
    db.setDatabaseName("SQLITE_2");
    db.setDatabaseName("SQLITE_3");
    if (!db.open()) return false;
    ....
    ....
}
Iron Bug
Непонятно, что предполагалось в 3-м примере. Переписывание имени базы в классе три раза не имеет никакого смысла.

Ещё есть особенность SQLite c открытием базы. В самом SQLIte в некоторых функциях открытия если базы не существует, SQLite её просто создаст. А есть и функция с явными флагами. Тут я флагов не вижу, поэтому подозреваю, что база будет просто создана. Это лучше проверить на практике.
DAVID
Цитата(Iron Bug @ 3.4.2014, 11:24) *
Непонятно, что предполагалось в 3-м примере

Каждая БД имеет свои таблицы



Цитата(Iron Bug @ 3.4.2014, 11:24) *
подозреваю, что база будет просто создана

Так и должно быть, вопрос в том правильно ли написан код
Iron Bug
в приведённом примере будет открыта последняя указанная база. зачем этот перебор имён - непонятно.
при открытии несуществующей базы она пуста. ну, может, Qt создаёт таблицы и т.д. в своих классах, нo сам SQLite их не создаёт.
DAVID
Цитата(Iron Bug @ 3.4.2014, 13:33) *
зачем этот перебор имён - непонятно.

а мне не понятно как правильно открыть все три базы одновременно. Если есть предложения то пожалуйста. Уже посоветовали делать что то типо этого:
static bool createConnection ()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("one");
    if (!db.open()) return false;

    QSqlDatabase db2 = QSqlDatabase::addDatabase("QSQLITE");
    db2.setDatabaseName("two");
    if (!db2.open()) return false;

    QSqlDatabase db3 = QSqlDatabase::addDatabase("QSQLITE");
    db3.setDatabaseName("three");
    if (!db3.open()) return false;
    ....
    ....
}

Может у кого то еще идеи...

Цитата(Iron Bug @ 3.4.2014, 13:33) *
при открытии несуществующей базы она пуста

В отношении этого проблем нет. При открытии несуществующей БД она автоматически создается, это понятно

Вопрос в том как это правильно сделать
Iron Bug
Цитата(DAVID @ 3.4.2014, 16:13) *
Уже посоветовали делать что то типо этого

И правильно посоветовали. В чём проблема? На один хэндлер открывается одна база. И других вариантов тут нет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.