2016-12-30 2 views
0

Je suis incapable de comprendre ce que je fais mal ici. J'utilise Qt 5.7.1 et le code est le suivant:QSqlDatabase ne s'ouvre pas

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() est l'impression des chemins d'accès aux répertoires correctement et encore m_db.open() échoue avec l'erreur « base de données Erreur: mémoire Erreur d'ouverture de la base de données ".

+0

Utilisez un débogueur. Définissez un point d'arrêt sur 'sqlite3_open',' sqlite3_open_v2', etc. Vérifiez qu'ils sont appelés avec les arguments corrects. Sous Linux, utiliser 'strace' &' ltrace' pourrait aussi aider. BTW, le bug peut être en dehors des lignes que vous montrez. –

+0

La chose est ... le même code a parfaitement fonctionné quand j'utilisais Qt 5.6. Pourrait-il être un problème avec le pilote 5.7? – user2522981

+0

Etes-vous sûr que votre programme n'a pas [comportement indéfini] (https://en.wikipedia.org/wiki/Undefined_behavior) - peut-être ailleurs? Et vous ne montrez pas tout votre code source. –

Répondre

0

Probablement le point est dbpath, essayez avec

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