Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
sqlite命令可能无法在qt中工作_Qt_Sqlite_Qsqltablemodel - Fatal编程技术网

sqlite命令可能无法在qt中工作

sqlite命令可能无法在qt中工作,qt,sqlite,qsqltablemodel,Qt,Sqlite,Qsqltablemodel,我正在使用Qt和Sqlite3制作一个图书馆管理软件 建造商: db = QSqlDatabase :: addDatabase("QSQLITE"); model = new QSqlTableModel(this, db); db.setDatabaseName(":/lib/libre coupe.db"); db.setHostName("Libre Coupe"); if(db.open()) { QSqlQuery query(db); if (! query.e

我正在使用Qt和Sqlite3制作一个图书馆管理软件

建造商:

db = QSqlDatabase :: addDatabase("QSQLITE");
model = new QSqlTableModel(this, db);

db.setDatabaseName(":/lib/libre coupe.db");
db.setHostName("Libre Coupe");

if(db.open())
{
    QSqlQuery query(db);
    if (! query.exec("CREATE TABLE IF NOT EXISTS books (NAME VARCHAR(100) NOT NULL, AUTHOR VARCHAR(100) NOT NULL, UID VARCHAR(100) NOT NULL) "))
    {
        QMessageBox::information(this, "title", "Unable to use Sqlite");
    }

    if(query.lastError().text() != " ")
        QMessageBox::critical(this, "Oops", query.lastError().text());

    model->setTable("books");
    model->select();

    model->setHeaderData(0, Qt::Horizontal, tr("Name") );
    model->setHeaderData(1, Qt::Horizontal, tr("Author") );
    model->setHeaderData(2, Qt::Horizontal, tr("Uid") );
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);

    if(!query.exec("SELECT * FROM books;"))
        QMessageBox::critical(this, "Oops", query.lastError().text());

    int i = 0;

    while(query.next())
    {
        model->setData(model->index(i, 0), query.value(query.record().indexOf("NAME")));
        model->setData(model->index(i, 1), query.value(query.record().indexOf("AUTHOR")));
        model->setData(model->index(i, 2), query.value(query.record().indexOf("UID")));

        ++i;
    }
}
else
    QMessageBox::critical(this, "Oops!", "Could not open the database");\
我遇到了一个问题,数据库不是自动创建的。因此,我手动创建了它,并将其添加到我的资源中,以便它存在于使用我的应用程序的每台计算机上

我运行了我的应用程序并转到包含“libre coupe.db”的目录。在那里使用终端,我发现没有创建任何表。我没有看到错误消息。当使用terminal直接在Sqlite中键入相同的命令时,我的其他函数(如save)也无法正常工作

我甚至使用了调试器,发现程序确实进入了if条件,即数据库成功打开

我使用以下命令检查表是否存在:

sqlite3 "libre coupe.db"
.tables
第一行:

db.setDatabaseName(":/lib/libre coupe.db");
起始“:”表示您正试图使用Qt的资源系统访问嵌入式二进制资源

但是,SQLite数据库不能存储在Qt资源系统中。如果您的数据库位于/lib/libre coupe.db,则应删除开头的冒号。

第一行:

db.setDatabaseName(":/lib/libre coupe.db");
起始“:”表示您正试图使用Qt的资源系统访问嵌入式二进制资源


但是,SQLite数据库不能存储在Qt资源系统中。如果您的数据库位于/lib/libre-coupe.db,则应删除开头的冒号。

db.setDatabaseName(“:/lib/libre-coupe.db”)
应在db=QSqlDatabase::addDatabase(“QSQLITE”)之后调用,我猜,否则你就重写它。谢谢@vahancho。我也犯了这个错误应在db=QSqlDatabase::addDatabase(“QSQLITE”)之后调用,我猜,否则你就重写它。谢谢@vahancho。我犯了那个错误。事实上,一开始我不知道为什么,但我无法创建数据库。但现在刚刚添加了libre coupe,程序运行正常。非常感谢。事实上,一开始我不知道为什么,但我无法创建数据库。但现在刚刚添加了libre coupe,程序运行正常。谢谢