3

QT で sqlite データベースにアクセスする際に問題が発生しています。データベースをプロジェクトフォルダーに保存し、次のことを行いました。

.pro file

RESOURCES += \

sqfiles.SOURCES = db.sqlite
sqfiles.path = .

DEPLOYMENT += sqfiles

データベースを開くことができ、有効であると示されていますが、テーブルがないため、検索コマンドを実行できず、このコードを実行した後に次のエラーが発生します。

QSqlQuery query("SELECT * FROM shifts", db);
if(!query.exec())
{
    qDebug() << query.lastError().text();
    qDebug() << "ERROR" << endl;
    return;
}
while(query.next())
{
    QString name = query.value(1).toString();
    qDebug() << name << endl;
}

メッセージ: 「クエリがありません。行をフェッチできません」

QT プロジェクトの外でこのデータベースを開くと、複数のテーブルがあり、クエリを実行できます。

何がうまくいかないのかについての提案やアイデアはありますか? データベースが空であると判断されるのはなぜですか?

4

1 に答える 1

2

これは、テーブルを作成するためのクエリです (SQLITE データベース ブラウザ プログラムを使用)。

CREATE TABLE shifts (ID INTEGER PRIMARY KEY, NUMBER NUMERIC, TEXT TEXT);
INSERT INTO shifts VALUES(1,123,'ABC');
INSERT INTO shifts VALUES(2,456,'DEF');

そして、これは私のQtコードです。

#include <QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("database.db");
    db.open();
    QSqlQuery query;
    query.exec("SELECT * from shifts");
    while (query.next())
    {
        qDebug() << "NUMBER" << query.value(0).toString()
                    << "TEXT" << query.value(1).toString();
    }
    return a.exec();
}

出力

NUMBER "1" TEXT "123" 
NUMBER "2" TEXT "456" 

プロジェクト ファイルに SQLite 情報を追加しませんでした。むしろ、私は を使用QSqlDatabaseして追加しましQT += sqlた。そうそう、SQLITE ドライバーがあることを確認してください。このようにテストします。

qDebug() << QSqlDatabase::drivers();

これが私の出力です。

("QSQLITE", "QMYSQL3", "QMYSQL") 

トド

  • Qt で SQLite ドライバーがインストールされているかどうかを確認します
  • データベース ファイルの名前が正しいかどうかを確認します。相対パスではなく絶対パスを使用してください。
于 2013-04-15T12:36:10.133 に答える