Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT 5.01 QSqlDatabase连接,执行QSqlQuery,但在sqlite数据库中找不到任何内容_C++_Qt_Sqlite_Qsqlquery - Fatal编程技术网

C++ QT 5.01 QSqlDatabase连接,执行QSqlQuery,但在sqlite数据库中找不到任何内容

C++ QT 5.01 QSqlDatabase连接,执行QSqlQuery,但在sqlite数据库中找不到任何内容,c++,qt,sqlite,qsqlquery,C++,Qt,Sqlite,Qsqlquery,正如标题中所述,我已经为QT编写了连接到sqlite数据库的代码 bool FilterData::initDatabase(){ QDir d; _db = new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE")); _db->setDatabaseName("OMBI.db"); return _db->open(); } void FilterData::loadFromDB(){ i

正如标题中所述,我已经为QT编写了连接到sqlite数据库的代码

bool FilterData::initDatabase(){
    QDir d;
    _db = new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE"));
    _db->setDatabaseName("OMBI.db");
    return _db->open();
}

void FilterData::loadFromDB(){
    if(initDatabase()){
    //set up the query
    QSqlQuery query(*_db);
    //vectors for storing results from the query
    QVector<QString>* measures = new QVector<QString>();
    QVector<QString>* title = new QVector<QString>();
    QVector<QString>* type = new QVector<QString>();

    query.prepare("SELECT * FROM measures");
    query.exec();


    while (query.next()) {
        measures->push_front(query.value(0).toString());
        title->push_front(query.value(1).toString());
        type->push_front(query.value(2).toString());
    }

    std::cout<<"Passed reading query results"<<std::endl;

    std::cout<<measures->size()<<std::endl;
    emit measuresReady(*measures, *title, *type);
}
}
数据库连接并打开得很好,但是在测试查询结果时。首先, query.next、query.isValid、query.isActive和query.isSelect均为false。OMBI.db已被放置在QT的项目文件夹中,因为这是我第一次使用QT,我不确定这是否是正确的协议

我一直试图找到一个解决这个问题的方法太久了,我已经搜索了很多,但都没有结果。希望你们中的一些大师能让我明白我做错了什么

编辑:


我已确定exec失败,query.lastError报告没有查询无法获取行。我现在正试图确定是什么导致查询如此惨败。我检查了_db->lastError,但它是空的,我认为这是一件好事

检查exec是否返回true,如果不是,则检查query.lastError返回的内容。顺便说一句:你正在泄漏向量,只需在堆栈上创建它们我知道泄漏的情况,但是我要求向量在插槽完成之前是可用的,所以我现在就这样做。我检查了exec和lastError的结果,exec失败,报告了最后一个错误,没有查询无法获取行。我目前正在研究这可能是什么原因。我要求向量在插槽完成之前是可用的-您通过值或引用传递向量,无论如何,我看不到任何可能的问题。在直接连接中使用MeasureReady时,默认情况下,所有插槽都会在向量被销毁之前执行,如果在排队连接中使用,即使通过常量引用传递,向量也会被复制。我的问题是如何正确读取数据库中的查询,不关我的事。如果您能就此提供更多建议,我将不胜感激。请检查您是否正在实际打开现有的OMBI.db。如果文件不存在,则QSQLDABASE::open不会失败,而是在适当的位置创建一个新的OMBI.db文件。在您的代码中,它将是当前工作目录QDir::currentPath。尝试使用绝对路径进行测试。