crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 3:53