6

QODBC を使用してリモートの MSSQL Server データベースにクエリを実行し、結果セットが返されましたが、レコードごとに 1 つずつ SQL Server にクエリを送信しているように見えます。これは、結果セットを反復するのに非常に時間がかかります。Qt からクエリを実行すると、完了するまでに約 15 秒かかります。SQL Server Management Studio で同じクエリを実行したところ、結果が返されるまでに 1 秒かかりました。私が使用しているコードは次のとおりです。

QString connectionTemplate = "DRIVER={SQL SERVER};SERVER=server;DATABASE=db;";
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC3", "db");
db.setDatabaseName(connectionTemplate);
db.setUserName("user");
db.setPassword("password");

if (db.open()) {
    qDebug() << "OK!";
    QSqlQuery * query = new QSqlQuery(db);
    query->exec("SELECT [UserName]"
                "  FROM [dbo].[Users]");


    while(query->next())
    {
        QString userName = query->value(0).toString();
        qDebug() << userName;
    }

    db.close();
}
else {
    qDebug() << db.lastError().text();
}

結果セット全体をメモリにキャプチャし、メモリ内でループする方法はありますか? アプリケーションが結果セットを繰り返すのにそれほど時間がかからないようにしたいと思います。

4

1 に答える 1

6

結果を反復処理する速度を改善する方法を見つけました。setForwardOnly実行する前に最初にSQLを準備する必要があり、trueに設定する必要があることを忘れていました。

QSqlQuery * query = new QSqlQuery(db);
query->setForwardOnly(true);
query->exec("SELECT [UserName]"
            "  FROM [dbo].[Users]");
于 2013-07-16T12:46:40.787 に答える