Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Portuguese
  4. QSqlQuery demora muito... o que fazer?
Forum Updated to NodeBB v4.3 + New Features

QSqlQuery demora muito... o que fazer?

Scheduled Pinned Locked Moved Portuguese
5 Posts 5 Posters 3.0k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    Rodrigocg
    wrote on last edited by
    #1

    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?

    T 1 Reply Last reply
    0
    • joaopagottoJ Offline
      joaopagottoJ Offline
      joaopagotto
      wrote on last edited by
      #2

      Ainda continua lento ? Já tentou conectar no modo nativo pelo driver do Qt sem ser por ODBC ?

      Abraços.

      1 Reply Last reply
      0
      • J Offline
        J Offline
        josexavierpt
        wrote on last edited by
        #3

        O que e' o _rel_rod?

        1 Reply Last reply
        0
        • R Rodrigocg

          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&#40;&#41;&#41;
                  {
                      //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?

          T Offline
          T Offline
          TioRoy
          wrote on last edited by
          #4

          @Rodrigocg,

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

          1 Reply Last reply
          0
          • E Offline
            E Offline
            Eloi
            wrote on last edited by
            #5

            Experimente selecionar campos e não utilizar o curinga *

            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved