Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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++ C++;QT:QSqlQuery::prepare:数据库未打开_C++_Sql_Qt_Sqlite - Fatal编程技术网

C++ C++;QT:QSqlQuery::prepare:数据库未打开

C++ C++;QT:QSqlQuery::prepare:数据库未打开,c++,sql,qt,sqlite,C++,Sql,Qt,Sqlite,很抱歉之前有任何明显的问题重叠,但我已经在这个网站上搜索了所有可能的问题,寻找我问题的答案,但没有一个有效。主要问题是,我似乎无法打开SQLITE3数据库来搜索它并显示到QTableView。我的代码如下: void MainWindow::on_searchBButton_clicked() { qDebug() << QSqlDatabase::drivers(); //Setup the search query and open database //toolboxData

很抱歉之前有任何明显的问题重叠,但我已经在这个网站上搜索了所有可能的问题,寻找我问题的答案,但没有一个有效。主要问题是,我似乎无法打开SQLITE3数据库来搜索它并显示到QTableView。我的代码如下:

void MainWindow::on_searchBButton_clicked() {
qDebug() << QSqlDatabase::drivers();

//Setup the search query and open database
//toolboxData = QSqlDatabase::addDatabase("QSQLITE");
//toolboxData.setDatabaseName(":/Resources/Resources/ToolSearch.db");
QString searchStr;
searchStr = ui->basicSearchInput->text();

//Filter out any hyphens
for (int i = 0; i < searchStr.length(); ++i) {
    if (searchStr[i] == QLatin1Char('-')) searchStr[i] = QLatin1Char(' ');
}

//Do the actual searching now
QString sQry;

QSqlQueryModel *model = new QSqlQueryModel();

QSqlDatabase toolboxDb = QSqlDatabase::addDatabase("QSQLITE");
//toolboxDb.setDatabaseName(":/Resources/Resources/ToolSearch.db");
toolboxDb.setDatabaseName("C:\\New folder\\ToolSearch.db");
bool db_ok = toolboxDb.open();

if (!QFile::exists("C:\\New folder\\ToolSearch.db"))
    qDebug() << "This file does not exist";

if (!db_ok)
    qDebug() << "Connection Failed\n";

QSqlQuery *qry = new QSqlQuery(toolboxDb);

sQry += "SELECT * FROM ToolSearch WHERE keywords MATCH :searchTerm UNION SELECT * FROM ToolSearch WHERE name MATCH :searchTerm UNION ";
sQry += "SELECT * FROM ToolSearch WHERE category MATCH :searchTerm UNION SELECT * FROM ToolSearch WHERE subcategory MATCH :searchTerm ";
sQry += "UNION SELECT * FROM ToolSearch WHERE sources MATCH :searchTerm UNION SELECT * FROM ToolSearch WHERE usagetype :searchTerm UNION ";
sQry += "SELECT * FROM ToolSearch WHERE cost MATCH :searchTerm";

qry->prepare(sQry);

//Add the necessary single quotes to the given string
searchStr = '\'' + searchStr + '\'';

qry->bindValue(":searchTerm", searchStr);

qry->exec();
model->setQuery(*qry);
ui->searchResults->setModel(model);
ui->searchResults->show(); }

但是,我在我的代码中有几乎完全相同的打开数据库的代码,甚至使用绝对地址测试它,而不是使用“:/Resources/Resources/ToolSearch.db”行中的相对地址。另外,qDebug()的输出也没有相同的代码。错误信息会准确地告诉您丢失了哪一行。对不起,我有这一行,出于某种原因,以前删除了它,因为它事先不起作用。但是,当我用绝对地址(C:\\NewFolder\\ToolSearch.db)重新添加bool db_ok=db.open()行时,它可以工作,但当我将其更改为相对地址(:\\Resources\\Resources\\ToolSearch.db)时,即使我仍然检查文件是否存在,它也会失败。这似乎将问题缩小到访问resources文件夹中的数据库,但问题仍然存在,因为我需要它是相对的。有什么想法吗?这个路径既不是相对的,也不是有效的。我不明白为什么路径无效,因为我转到我的resources.qrc文件,直接将路径复制到剪贴板上,然后将其粘贴到代码中。我之前也使用以下行对图像执行了此操作:QPixmap imagePix(“:/Resources/Resources/image.png”);而且效果很好。当我构建项目的早期版本,然后在另一台机器上运行它时,它也可以从该路径访问文件,这与我尝试访问数据库的路径相同。此外,QFile::exists行仍然表示我正在查找的文件确实存在。错误消息告诉您数据库未打开,因此您认为您在发布的代码中在哪里打开了数据库?此外,如果打开数据库失败,
QSqlDatabase
提供获取最新错误的方法。
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("C:\\SomeFolder\\SomeFile.db");
bool db_ok = db.open();