1

データベースに接続するウィジェットがあります:

Widget::Widget(QWidget *parent)
{
    QString databaseName = "name";
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(databaseName);
    db.setHostName("localhost");
    if(!db.open())
        qDebug()<<"ret error";
}

ウィジェットを閉じた後にデータベース接続を削除したいと思います(現在、次のような警告が表示されます:) QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection is still in use...。いくつかのトピックを読み、それらからいくつかの解決策を評価しようとしましたが、どれもうまくいきません。私のコード:

void Widget::closeEvent(QCloseEvent *e)
{
    QSqlDatabase db = QSqlDatabase::database();
    QString connection = db.connectionName();
    db.close();
    QSqlDatabase::removeDatabase(connection);
    qDebug()<<"error: "<<db.lastError().text();
}

私が得るエラーは次のとおりです。Driver not loaded Driver not loaded

これを行う正しい方法は何ですか?

編集:

別の方法:

void Widget::someMethod()
{
    QSqlDatabase db = QSqlDatabase::database();
    QSqlQuery query(db);
    query.exec("some query");
}
4

1 に答える 1

1

addDatabase() で接続名パラメーター (2 番目のパラメーター) を指定してみてください。これで問題が解決するはずです。

試すことができる変更されたコードは次のとおりです。

Widget::Widget(QWidget *parent)
{
    QString databaseName = "name";
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "test_db_connection" );
    db.setDatabaseName(databaseName);
    db.setHostName("localhost");
    if(!db.open())
        qDebug()<<"ret error";
}

これは、参照として使用できる sqlite データベースの私のマシンからの完全な作業コードです。

local_db = QSqlDatabase::addDatabase("QSQLITE","localdb");
local_db.setDatabaseName("localdb.sqlite");
local_db_query = QSqlQuery(local_db);
local_db_query.prepare( "SELECT * FROM sample_table" );
local_db_query.exec();
于 2013-02-05T05:54:53.377 に答える