QSqlQuery demora muito... o que fazer?
-
Boa Tarde!!
Me deparei hoje com um problema estranho com o QSqlQuery.
Na hora de pegar o resultado, ele demora muito. nao sei se é porque tem 3200 rows o resultado...o codigo é o seguinte:
@
QSqlQuery query("Sistema",_db_safe);query.prepare("SELECT * FROM Alpha01.dbo.RelacaoRodas();"); if(query.exec()) { //ta muito lento essa operacao while (query.next()) { int cod = query.value("codigo").toInt(); int quant = query.value("QuantidadeTotal").toInt(); _rel_rod.insert(cod,quant); // qDebug()<<cod<<quant; } }
@
Dentro do loop é onde ele demora...
A conexão é feita atravez da internet usando o driver QODBC
como podemos ver nesse codigo:@
bool MainWindow::conectar(QSqlDatabase *db,QString driver,QString apelido,QString hostname,QString dataBaseName,QString user,QString pass)
{
*db = QSqlDatabase::addDatabase(driver,apelido);if(driver.compare("QODBC")==0) { db->setDatabaseName("DRIVER={SQL Server};SERVER="+hostname+";UID="+user+"; PWD="+pass); } else { if(!hostname.isEmpty()) db->setHostName(hostname); if(!user.isEmpty()) db->setUserName(user); if(!pass.isEmpty()) db->setPassword(pass); if(!dataBaseName.isEmpty()) db->setDatabaseName(dataBaseName); } bool ok = db->open(); if(!ok) qDebug()<<db->lastError(); return ok;
}
@Usando o DBVisualizer a consulta inteira leva 6 segudos e eu não sei se quando usamos o exec() do qsqlquery ele pega todos os dados de uma vez, ou se pega um por um quando uso o next() para depois pegar o valorusando o value("coluna").
alguem?
-
Ainda continua lento ? Já tentou conectar no modo nativo pelo driver do Qt sem ser por ODBC ?
Abraços.
-
O que e' o _rel_rod?
-
Use o setForwardOnly com true. Isso melhora muito a performance.