PDA

View Full Version : Slow Microsoft Access QSqlQuery (possible bug)



yeikos
12th May 2014, 10:55
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>

#include <QDebug>
#include <QTime>

int main(int argc, char *argv[]) {

QCoreApplication a(argc, argv);

QTime time;
QString command;

command = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};";
command += "FIL={MS Access};DBQ=C:/database.accdb";

QSqlDatabase sql = QSqlDatabase::addDatabase("QODBC3");

sql.setDatabaseName(command);

qDebug() << "open" << sql.open();

// Slow query

QSqlQuery query("SELECT name + 'x' FROM users", sql);

time.start();

while(query.next()) query.value(0);

qDebug() << "query1 (slow)" << QString::number(time.elapsed()) + "ms";

// Others slow queries:
// SELECT 'x' FROM users
// SELECT '' FROM users
// SELECT CStr('x') FROM users

// Normal query

QSqlQuery query2("SELECT name FROM users", sql);

time.start();

while(query2.next()) query2.value(0);

qDebug() << "query2" << QString::number(time.elapsed()) + "ms";

return a.exec();

}

open true
query1 (slow) "408ms"
query2 "6ms"
The problem happen when I try select a virtual field (SELECT 'str') or a field concatenated with literal string (SELECT field + 'str').

The database is only an example with one table (users), two fields (id, name) and 1000 records.

Greetings and thanks.