crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QSQLITE
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 4.5.2009, 5:57
  Frigolem, я эту проблему иначе решил, просто проверяю существует ли файл, средствами QFile.
Frigolem Дата 3.5.2009, 21:15
  Само ядро (sqlite3.c), на которое ссылается драйвер, воспринимает имя БД как имя файла и напрямую использует его всюду.

Qt'шный драйвер sqlite использует при открытии БД метод sqlite_open16, который не подразумевает передачу параметров открытия... :unsure:
При этом рядом стоящая альтернативная функция sqlite_open_v2 позволяет в качестве аргумента задать режим SQLITE_OPEN_READONLY (вместо SQLITE_OPEN_READWRITE) и таким образом получить ошибку при попытке открытия несуществующей БД.
Для _open16 видимо ещё не реализовали.

Наверно разработчики ядра не сильно об этом парятся, так как имя БД напрямую используют как имя файла.
Возможно и нам пока что не стоит... :huh:


Также есть один косвенный метод -- использовать QSqlDatabase::tables
Она возвращает список таблиц в БД. Соответственно в новосозданной БД таблиц быть не должно. :)
Жаль только, что таки как минимум оставляет после себя сделанный файл БД (с размером в 0 байт), если такового не было... :unsure:

Вот примерчик:
    // Тестовые ведьмовста
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName( "default.db" );
    if( !db.open() )
    {
        qDebug() << "Ne smoglo otkryt: " << db.lastError();
    }
    else
    {
        if( db.tables().isEmpty() )
        {
        qDebug() << "NEMA";
        }
        else
        {
        qDebug() << "Chto-to est";
        }
    }
Tonal Дата 29.4.2008, 7:34
  Ну самой-то SQLite можно указать и другое поведение. Но вот можно ли это через драйвер Qt...
Litkevich Yuriy Дата 29.4.2008, 7:27
  Тут обнаружил такую штуку, никогда со встраиваемыми БД не работал с SQLITE в том числе.
если написать такие строчки кода:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("app.db");

то если БД нет то будет создана, нашел это удобным, но не всегда.
Можно ли проверить существует БД или нет?

Как вариант проверять наличие файла, но хотел средствами для работы с БД.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 4:25