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-&gt;setHostName(hostname);
        if(!user.isEmpty())
            db-&gt;setUserName(user);
        if(!pass.isEmpty())
            db-&gt;setPassword(pass);
        if(!dataBaseName.isEmpty())
            db-&gt;setDatabaseName(dataBaseName);
    }
    bool ok = db-&gt;open();
    
    if(!ok) qDebug()&lt;&lt;db-&gt;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?



  • @Rodrigocg,

    Use o setForwardOnly com true. Isso melhora muito a performance.



  • Experimente selecionar campos e não utilizar o curinga *


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.