Russian Qt Forum

Qt => Базы данных => Тема начата: Alexsandr от Январь 15, 2012, 14:53



Название: Относительный путь к базе данных
Отправлено: Alexsandr от Январь 15, 2012, 14:53
Возникла следующая проблема, файл бд лежит в папке с исходниками, если прописать полный путь всё работает, но если прописываю относительный путь бд не подключается. Бд добавлена в файл ресурсов, префикс "/".
Код:
inline bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
   db.setDatabaseName(":/DB.db");

    if(!db.open())
    {
        QMessageBox::critical(0,"Connection error!","Connection failed!");
        return false;
    }
    return true;
}
Но самое интересное, если закинуть бд в корень диска или флешки, и прописать путь:
Код:
db.setDatabaseName("/DB.db");
т.е. без двоетичия, то всё работает нормально.


Название: Re: Относительный путь к базе данных
Отправлено: andrew.k от Январь 15, 2012, 14:59
Ну вот же точно такая тема (http://www.prog.org.ru/topic_20590_0.html) два дня назад была.
Читай и делай выводы.


Название: Re: Относительный путь к базе данных
Отправлено: popper от Январь 16, 2012, 00:09
Если БД закинута в файл ресурсов, то она может быть доступна только на чтение. Возможно, метод
Код:
db.open()
пытается получить доступ на чтение-запись, и получает отказ?
Попробуй перед открытием установить
Код:
db.setConnectOptions("QSQLITE_OPEN_READONLY");


Название: Re: Относительный путь к базе данных
Отправлено: interv от Январь 16, 2012, 12:14
Скорее всего папка запуска не соответствует папки приложения, лечиться:
Код:
#include <QDebug>
#include <QDir>

  ...

qDebug()<<QDir::currentPath(); //Показываем текущюю папку
QDir::setCurrent(qApp->applicationDirPath()); //Меняем текущюю папку на папку приложения
qDebug()<<QDir::currentPath(); //Показываем текущюю папку