2016-12-30 3 views
0

Я не могу понять, что я делаю неправильно здесь. Я использую Qt 5.7.1 и код выглядит следующим образом:QSqlDatabase не открывается

QString filePath = QCoreApplication::applicationDirPath(); 
    QString dbPath = QDir(filePath).absoluteFilePath("../../../Database"); 

    m_db = QSqlDatabase::addDatabase("QSQLITE", "user_connection"); 
    m_db.setDatabaseName(dbPath + "/Sensor_Objects.db"); 

    qDebug() << filePath << " & " << dbPath; 

    if (!m_db.open()) 
     qDebug() << "Database Error: " + m_db.lastError().text(); 
    else 
    { 
     qDebug() << "Database: connection ok"; 
     createDatabase("Sensor_Objects"); 
     m_db.close(); 
    } 

QDebug() печатает пути к директориям правильно и в то же m_db.open() завершается с ошибкой «Ошибка базы данных: из памяти Ошибка открытия базы данных ".

+0

использовать отладчик. Установите точку останова на 'sqlite3_open',' sqlite3_open_v2' и т. Д. Убедитесь, что они вызываются с правильными аргументами. В Linux также может помочь использование 'strace' &' ltrace'. Кстати, ошибка может быть вне строк, которые вы показываете. –

+0

Дело в том, что тот же код работал отлично, когда я использовал Qt 5.6. Это может быть проблема с драйвером 5.7? – user2522981

+0

Вы уверены, что у вашей программы нет [неопределенного поведения] (https://en.wikipedia.org/wiki/Undefined_behavior) - возможно, в другом месте? И вы не показываете весь исходный код. –

ответ

0

Вероятно, точка DBPATH, попробуйте с

m_db.setDatabaseName(dbPath.toLatin1() + "/Sensor_Objects.db");