Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Spanish
  4. QSqlQuery::value: not positioned on a valid record al ejecutar una vista

QSqlQuery::value: not positioned on a valid record al ejecutar una vista

Scheduled Pinned Locked Moved Unsolved Spanish
7 Posts 4 Posters 1.6k Views
  • 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.
  • J Offline
    J Offline
    JAVH
    wrote on last edited by JAVH
    #1

    Que tal, hace poco quise migrar una base de datos mysql a un hosting (GoDaddy), después de batallar con permisos de usuario por fin logré subir en su totalidad la base de datos, mi sistema funciona, a excepción de unas vistas que no logro hacer que se ejecuten, pensaba que era problemas de permisos de usuario, pero gestores como HeidiSQL y Dbeaver pueden ejecutar estas vistas sin problemas.

    Tengo estas rutinas que hice para agilizar un poco la conexión

    QString TDataBase::Conecta(QString Driver, QString Alias, QString Host, QString DataBaseName, int Puerto, QString User, QString Password)
    {
        if(Conectado==false)
        {
            //QSqlDatabase Base;
            if(QSqlDatabase::contains(Alias))
                Base=QSqlDatabase::database(Alias);
            else
                Base=QSqlDatabase::addDatabase(Driver,Alias);
    
            Base.setHostName(Host);
            Base.setDatabaseName(DataBaseName);
            Base.setPort(Puerto);
            Base.setUserName(User);
            Base.setPassword(Password);
            Base.open();
    
            if(!Base.open())
                return Base.lastError().text();
            else
                return "0";
            Conectado=true;
        }
        else
            return Base.lastError().text();
    }
    //---------------------------------------------
    QString TDataBase::Consulta(QString Alias, QString Comando)
    {
        QSqlQuery Consul(QSqlDatabase::database(Alias));
        Query=Consul;
        Query.clear();
        Query.prepare(Comando);
        if(Query.exec())
        {
            Query.next();
            return "0";
        }
        else
        {
            Consul.lastError();
            return "-1";
        }
    }
    

    Y en un módulo intento ejecutar una vista

    Data.Conecta("QMYSQL","ConSQL",Var.DbServer,Var.DbName,3306,Var.DbUser,"sqlsa");
    Data.Consulta("ConSQL","select codigo,descripcion,status,Estado,vendido,fecha,reimpresion,fecventa,elaboro,vendedor,estadero from vis_infoprod where codigo='"+ui->EdtSearCode->text()+"'");
    

    Sin embargo en mi programa me arroja este error:

    QSqlQuery::value: not positioned on a valid record
    

    Sin embargo, al ejecutar en una base de datos local la vista se ejecuta sin problemas, incluso probé la base de datos en otro servidor de pruebas (Heliohost.org) y también funciona sin problemas, incluso verifiqué la conexión remota y en efecto, la conexión se realiza sin problemas, también ejecuté la vista copiando el código de esta y sólo de esta manera logro que se ejecute, pero de esta manera es muy problemático y pierdo una funcionalidad importante de la base de datos.

    Lo único que me queda pensar es que posiblemente el query tarda en ejecutarse y el servidor cierre la conexión, quisiera saber si hay alguna manera de "prolongar" el tiempo de espera, agradezco de antemano cualquier ayuda.

    JonBJ 1 Reply Last reply
    0
    • L Offline
      L Offline
      Ladis
      wrote on last edited by Ladis
      #2

      Buenas tardes.
      Si no me equivoco, de memoria debes poner Query.first() antes de poder hacer un Query.next() y no se que te devolverá si el consulta tiene 0 o 1 resultados.

      1 Reply Last reply
      1
      • J JAVH

        Que tal, hace poco quise migrar una base de datos mysql a un hosting (GoDaddy), después de batallar con permisos de usuario por fin logré subir en su totalidad la base de datos, mi sistema funciona, a excepción de unas vistas que no logro hacer que se ejecuten, pensaba que era problemas de permisos de usuario, pero gestores como HeidiSQL y Dbeaver pueden ejecutar estas vistas sin problemas.

        Tengo estas rutinas que hice para agilizar un poco la conexión

        QString TDataBase::Conecta(QString Driver, QString Alias, QString Host, QString DataBaseName, int Puerto, QString User, QString Password)
        {
            if(Conectado==false)
            {
                //QSqlDatabase Base;
                if(QSqlDatabase::contains(Alias))
                    Base=QSqlDatabase::database(Alias);
                else
                    Base=QSqlDatabase::addDatabase(Driver,Alias);
        
                Base.setHostName(Host);
                Base.setDatabaseName(DataBaseName);
                Base.setPort(Puerto);
                Base.setUserName(User);
                Base.setPassword(Password);
                Base.open();
        
                if(!Base.open())
                    return Base.lastError().text();
                else
                    return "0";
                Conectado=true;
            }
            else
                return Base.lastError().text();
        }
        //---------------------------------------------
        QString TDataBase::Consulta(QString Alias, QString Comando)
        {
            QSqlQuery Consul(QSqlDatabase::database(Alias));
            Query=Consul;
            Query.clear();
            Query.prepare(Comando);
            if(Query.exec())
            {
                Query.next();
                return "0";
            }
            else
            {
                Consul.lastError();
                return "-1";
            }
        }
        

        Y en un módulo intento ejecutar una vista

        Data.Conecta("QMYSQL","ConSQL",Var.DbServer,Var.DbName,3306,Var.DbUser,"sqlsa");
        Data.Consulta("ConSQL","select codigo,descripcion,status,Estado,vendido,fecha,reimpresion,fecventa,elaboro,vendedor,estadero from vis_infoprod where codigo='"+ui->EdtSearCode->text()+"'");
        

        Sin embargo en mi programa me arroja este error:

        QSqlQuery::value: not positioned on a valid record
        

        Sin embargo, al ejecutar en una base de datos local la vista se ejecuta sin problemas, incluso probé la base de datos en otro servidor de pruebas (Heliohost.org) y también funciona sin problemas, incluso verifiqué la conexión remota y en efecto, la conexión se realiza sin problemas, también ejecuté la vista copiando el código de esta y sólo de esta manera logro que se ejecute, pero de esta manera es muy problemático y pierdo una funcionalidad importante de la base de datos.

        Lo único que me queda pensar es que posiblemente el query tarda en ejecutarse y el servidor cierre la conexión, quisiera saber si hay alguna manera de "prolongar" el tiempo de espera, agradezco de antemano cualquier ayuda.

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #3

        @JAVH said in QSqlQuery::value: not positioned on a valid record al ejecutar una vista:
        además

            Base.open();
        
            if(!Base.open())
        

        no es una buena idea, aunque probablemente funcione.

        if(!Base.open())
            ....
        

        o

        Base.open();
        if(!Base.isOpen())  // o if(!Base.isOpenError()) 
            ....
        

        ?

        1 Reply Last reply
        0
        • J Offline
          J Offline
          JAVH
          wrote on last edited by JAVH
          #4

          @Ladis said in QSqlQuery::value: not positioned on a valid record al ejecutar una vista:

          Buenas tardes.
          Si no me equivoco, de memoria debes poner Query.first() antes de poder hacer un Query.next() y no se que te devolverá si el consulta tiene 0 o 1 resultados.

          Si, de hecho le hice unas modificaciones, por si sólo es un registro

          QString TDataBase::Consulta(QString Alias, QString Comando)
          {
              QSqlQuery Consul(QSqlDatabase::database(Alias));
              Query=Consul;
              Query.clear();
              Query.prepare(Comando);
              if(Query.exec())
              {
                  if(Query.size()==1)
                      Query.first();
                  else
                      Query.next();
                  return "0";
              }
              else
              {
                  Consul.lastError();
                  return "-1";
              }
          }
          

          @JonB said in QSqlQuery::value: not positioned on a valid record al ejecutar una vista:

          @JAVH said in QSqlQuery::value: not positioned on a valid record al ejecutar una vista:
          además

              Base.open();
          
              if(!Base.open())
          

          no es una buena idea, aunque probablemente funcione.

          if(!Base.open())
              ....
          

          o

          Base.open();
          if(!Base.isOpen())  // o if(!Base.isOpenError()) 
              ....
          

          ?

          Lo he revisado y sí hace la conexión, de hecho en todo este tiempo es la primera vez que se me presenta este tipo de problemas, incluso en otro hosting web (heliohost) la vista se ejecuta sin problemas, pero no en godaddy, pensaba que sería una restricción de godaddy pero gestores como heidisql y dbeaver ejecutan estas vistas remotamente sin problemas.

          Lo raro de todo esto es que el query de la vista no se ejecuta, sin embargo si cargo el código de la vista como si fuera un query normal ahí sí se ejecuta y me muestra los datos, estaba pensando que posiblemente la vista es más lenta que un query y se llegara a cerrar la conexión antes, ya no sé qué a qué se deba.

          Al alguna rutina o algo extra que se deba hacer cuando la base de datos es remota??

          Saludos.

          1 Reply Last reply
          0
          • L Offline
            L Offline
            Ladis
            wrote on last edited by
            #5

            Buenas tardes.
            Supongo que te falta código en medio porque si no la funcion no tiene mucho sentido. De todas formas el query.first() hay que ejecutarlo.
            Además te recomiendo el uso se query.numRowsAffected() en lugar de query.size() por si no es soportado por ese servidor de base de datos.
            Un saludo.

            1 Reply Last reply
            0
            • J Offline
              J Offline
              JAVH
              wrote on last edited by
              #6

              El detalle es que, si paso el código de mi vista a un query normal, se muestra sin problemas, incluso he subido la misma base de datos a otro hosting y las vistas que en el hosting anterior no se ejecutan aquí sí corren sin problemas, veré si hay algun problema en la codificación que es lo único que se me ocurre o en nombres de tablas.

              Saludos.

              juankiJ 1 Reply Last reply
              0
              • J JAVH

                El detalle es que, si paso el código de mi vista a un query normal, se muestra sin problemas, incluso he subido la misma base de datos a otro hosting y las vistas que en el hosting anterior no se ejecutan aquí sí corren sin problemas, veré si hay algun problema en la codificación que es lo único que se me ocurre o en nombres de tablas.

                Saludos.

                juankiJ Offline
                juankiJ Offline
                juanki
                Moderators
                wrote on last edited by
                #7

                Hola @JAVH

                ¿No será cosa del hosting? Si en uno funciona y en otro no, puede que sea algún tema de configuración o algo en el hosting que no funciona.

                Un saludo

                Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
                Procura escribir correctamente y sin faltas de ortografía.

                Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

                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