Qt en Español

Qt en Español es una comunidad de usuarios para aprender a Programar usando las librerias Qt

Buscar
 
 

Resultados por:
 


Rechercher Búsqueda avanzada

Últimos temas
» Desaparecen objetos del formulario al usar showMaximized()
Sáb Sep 13, 2014 9:54 pm por ljimenez29

» visivilidad de controles
Dom Mayo 18, 2014 5:04 pm por solitarywolf

» Error QT (y no sé que más poner ¬¬)
Jue Sep 26, 2013 4:02 pm por Anónimo

» QT, VTK en VS 2008 C++
Jue Abr 11, 2013 5:19 pm por monicadiaz

» [Ayuda]Programa en PyQt4 en modo Pantalla completa
Sáb Mar 30, 2013 8:56 pm por fortil

» SIGNAL y SLOT
Sáb Mar 02, 2013 5:11 pm por loloqt

» Qt creator 5.0.1 en Windows 8...."Qt creator needs a compiler set up to build. Configure a compiler in the kit options"
Miér Feb 27, 2013 4:23 pm por caliche

» mi aplicacion no me lee la base de datos
Jue Oct 18, 2012 1:55 pm por jldiaz

» QT.Para G19 de Logitech
Dom Oct 14, 2012 3:00 am por novax1

Navegación
 Portal
 Índice
 Miembros
 Perfil
 FAQ
 Buscar
Compañeros
Crear foro
Sondeo

Que nombre te gustaria que se llamara el foro?

27% 27% [ 6 ]
18% 18% [ 4 ]
0% 0% [ 0 ]
55% 55% [ 12 ]

Votos Totales : 22


No estás conectado. Conéctate o registrate

Diferentes esquemas con query.exec()

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

1 Diferentes esquemas con query.exec() el Miér Ene 06, 2010 2:38 pm

Hola, estoy trabajando con QPSQL y basicamente tengo este problema. Hago una consulta inicial a una tabla de un esquema explicitamente:

SELECT fac_suc, fac_tip, fac_stip, fac_nro, fac_fec, fac_hora, fac_clie, fac_itot FROM forumvta.factu WHERE fac_fec ...


Ejecuto con un query.exec(v_sql);

Luego cuando hago el bucle con el query.next() genero otra variable tipo query que ejecuta esta consulta sobre una tabla de otro esquema:

SELECT cc_nom, cc_dom FROM minor.clientes WHERE cc_nro = ...

Cuando lo ejecuto no me devuelve nada. Cuando lo debugeo tampoco, si le paso el .size me tira 0. Si la segunda consulta la hago sobre otra tabla del mismo esquema que la primera consulta entonces si devuelve algo.
Por lo que vi en otros post y googleando, esto pasaba pero cuando mapeaban tablas a QSqlTableModel o QSqlRelationalTableModel no de esta forma.
Si mas o menos entendieron el problema y quieren ver el codigo, lo subo.
Saludos y gracias!

Ver perfil de usuario

2 Re: Diferentes esquemas con query.exec() el Miér Ene 06, 2010 3:50 pm

mmm... no se, si una consulta te devuelve datos y otra no, puede que la tabla no tenga datos, o que no los haya cargado todavía, o fíjate bien en que el SELECT esté bien escrito, haber si te has saltado algunas comillas, por ejemplo

SELECT * FROM mi_tabla WHERE='mi_atributo'

ahora mismo no se me ocurre más.

Ver perfil de usuario http://www.sploft.com

3 Re: Diferentes esquemas con query.exec() el Miér Ene 06, 2010 6:19 pm

No, la consulta esta ok y tiene datos, el tema, estoy seguro es de los esquemas. Le agrege una llama al set search_path=minor; y tampoco funciono .
Probe tambien clonar la conexion y crear el otro query con la otra conexion, tampoco funciono.

Ver perfil de usuario

4 Re: Diferentes esquemas con query.exec() el Jue Ene 07, 2010 11:12 pm

Hola cygnus2k.

No se si puedas copiar el codigo que estas usando para esto que quieres hacer, aparte si puedes postear el query completo.

Para podarte ayudar lo mejor posible.

en lo que pusiste veo que las bases de datos tienes con nombre las tablas <nombre>.<nombre> o estas intentando utilizar 2 esquemas diferentes???

Saludos.

Ver perfil de usuario

5 Re: Diferentes esquemas con query.exec() el Lun Ene 11, 2010 8:56 am

Asi esta como anda ahora, usando el mismo esquema.

Código:

void Mcapos::actualizatabla()
{
    int row=0;
    int num_items2=0;
    QDate fecha = QDate::currentDate();
    QString cadfec = fecha.toString();
    cadfec = fecha.toString("yyyy-MM-dd");
    cadfec = "2009-11-06";
    QSqlQuery query;

    QString v_sql;
    QString v_sql2;
    v_sql+="select fac_suc, fac_tip, fac_stip, fac_nro, fac_fec, fac_hora, fac_clie, fac_itot from forumvta.factu where fac_fec = '";
    v_sql+=cadfec ;
    v_sql+="' and fac_imp = '0' order by fac_fec desc ";
    query.exec(v_sql);
    int num_items=query.size();
    QSqlRecord rec = query.record();

    ModeloEncolado = new QStandardItemModel(num_items, 9, this);
    ModeloEncolado->setHeaderData(0, Qt::Horizontal, tr("Suc"));
    ModeloEncolado->setHeaderData(1, Qt::Horizontal, tr("Tipo"));
    ModeloEncolado->setHeaderData(2, Qt::Horizontal, tr("STip"));
    ModeloEncolado->setHeaderData(3, Qt::Horizontal, tr("Orden"));
    ModeloEncolado->setHeaderData(4, Qt::Horizontal, tr("Fecha"));
    ModeloEncolado->setHeaderData(5, Qt::Horizontal, tr("Hora"));
    ModeloEncolado->setHeaderData(6, Qt::Horizontal, tr("Puesto"));
    ModeloEncolado->setHeaderData(7, Qt::Horizontal, tr("Cliente"));
    ModeloEncolado->setHeaderData(8, Qt::Horizontal, tr("Importe"));
    int nameCol1 = rec.indexOf("fac_suc"); // index of the field "name"
    int nameCol2 = rec.indexOf("fac_tip"); // index of the field "name"
    int nameCol3 = rec.indexOf("fac_stip"); // index of the field "name"
    int nameCol4 = rec.indexOf("fac_nro"); // index of the field "name"
    int nameCol5 = rec.indexOf("fac_fec"); // index of the field "name"
    int nameCol6 = rec.indexOf("fac_hora"); // index of the field "name"
    int nameCol7 = rec.indexOf("fac_clie"); // index of the field "name"
    int nameCol8 = rec.indexOf("fac_itot"); // index of the field "name"
    row=0;
    while (query.next())
    {
        ModeloEncolado->setData(ModeloEncolado->index(row, 0, QModelIndex()), query.value(nameCol1).toString());
        ModeloEncolado->setData(ModeloEncolado->index(row, 1, QModelIndex()), query.value(nameCol2).toString());
        ModeloEncolado->setData(ModeloEncolado->index(row, 2, QModelIndex()), query.value(nameCol3).toString());
        ModeloEncolado->setData(ModeloEncolado->index(row, 3, QModelIndex()), query.value(nameCol4).toString());
        ModeloEncolado->setData(ModeloEncolado->index(row, 4, QModelIndex()), query.value(nameCol5).toString());
        ModeloEncolado->setData(ModeloEncolado->index(row, 5, QModelIndex()), query.value(nameCol6).toString());

        QString v_factura = query.value(nameCol4).toString();
        QString v_puesto =" ";
        v_puesto+= v_factura[1];
        ModeloEncolado->setData(ModeloEncolado->index(row, 6, QModelIndex()), v_puesto);

        QString v_cliente = query.value(nameCol7).toString();
        v_sql2="select cli_nom, cli_domcom from forumvta.clientes where cli_cod = '";
        v_sql2+=v_cliente ;
        v_sql2+="' ;";
        //ACA  intente cambiar por otra conexion db2 y tampoco funciono
        QSqlQuery query_clie(db);

        query_clie.exec(v_sql2);

        num_items2=query_clie.size();
        QSqlRecord rec_clie = query_clie.record();

        int nameColdesc = rec_clie.indexOf("cli_nom");
       
        v_cliente+=" - ";

        while (query_clie.next())
        {
            v_cliente+=query_clie.value(nameColdesc).toString();
        }


        ModeloEncolado->setData(ModeloEncolado->index(row, 7, QModelIndex()), v_cliente);
        ModeloEncolado->setData(ModeloEncolado->index(row, 8, QModelIndex()), query.value(nameCol8).toString());
        row++;
    }

    ui->vistaencolado->setModel(ModeloEncolado);
    ui->vistaencolado->hasAutoScroll();
    ui->vistaencolado->resizeColumnToContents(7);
}

Esta es la funcion que actualiza la tabla. No es la mas optima, pero bueno, centremonos en el problema...

Ver perfil de usuario

6 Re: Diferentes esquemas con query.exec() el Dom Feb 28, 2010 3:07 pm

Parece que el problema está en dos secciones del código, en aquellas que creas una QSqlQuery, las líneas son

Código:
    cadfec = "2009-11-06";
    QSqlQuery query;

Código:
        //ACA  intente cambiar por otra conexion db2 y tampoco funciono
        QSqlQuery query_clie(db);

Lo que ocurre es que cuando se tiene una sola conexión a una base de datos esta se considera la bd por defecto, entonces a cualquier objeto QSqlQuery que se crea se le asigna la base de datos existente, pero al tener más de una conexión a bases de datos siempre debemos especificar la bd a que queremos utilizar con cada consulta.

Entonces para solucionar tu problema sólo especifica la bd que consultarás con cada objeto QSqlQuery que declares.

Ver perfil de usuario

7 Re: Diferentes esquemas con query.exec() el Miér Mar 03, 2010 2:02 pm

Pero es que asi lo indique con el constructor

//ACA intente cambiar por otra conexion db2 y tampoco funciono
QSqlQuery query_clie(db);


Aparte, usando un solo conector tampoco funcionaba.

Ver perfil de usuario

8 Re: Diferentes esquemas con query.exec() el Miér Mar 03, 2010 3:29 pm

No entendí esto:

Pero es que asi lo indique con el constructor

Pero lo que yo intentaba decirte es que debes especificar la bd a la que te quieres conectar en TODAS las QSqlQuery que vayas a crear, en el código que pusiste aquí no lo estás haciendo para la primera.

Pusiste así:
Código:
    cadfec = "2009-11-06";
    QSqlQuery query;
Debería ser:
Código:
    cadfec = "2009-11-06";
    QSqlQuery query(db1);
Conservando como está la línea:
Código:
//ACA  intente cambiar por otra conexion db2 y tampoco funciono
        QSqlQuery query_clie(db);

Ver perfil de usuario

9 Re: Diferentes esquemas con query.exec() el Jue Mar 04, 2010 10:51 am

Lo que quise decir es que cuando hice el segundo query, al inicializar el objeto QSqlQuery lo hize con el conector a la db2, pero al crear una segunda conexion al motor, al ejecutar el programa me tira estos mensajes:

Starting /root/mcacontrol/mcacontrol...
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.

O sea no me quiere tomar la segunda conexion.

Ver perfil de usuario

10 Re: Diferentes esquemas con query.exec() el Jue Mar 04, 2010 2:06 pm

Debido a los mensajes:

Código:
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.

Sigo pensando que es lo que te dije:

Lo que ocurre es que cuando se tiene una sola conexión a una base de datos esta se considera la bd por defecto, entonces a cualquier objeto QSqlQuery que se crea se le asigna la base de datos existente, pero al tener más de una conexión a bases de datos siempre debemos especificar la bd a que queremos utilizar con cada consulta.

Pero lo que yo intentaba decirte es que debes especificar la bd a la que te quieres conectar en TODAS las QSqlQuery que vayas a crear, en el código que pusiste aquí no lo estás haciendo para la primera.

Te dejo un ejemplo en el que se hacen dos conexiones a dos bd's distintas en el mismo host para ver si te puedes basar en ese para corregir el tuyo, bajalo de aqui:

http://www.programacion-linux.com/otros/prueba_bds.tar.gz

Ver perfil de usuario

11 Re: Diferentes esquemas con query.exec() el Vie Mar 05, 2010 9:42 am

El tema, es que las dos conexiones las queria hacer a la misma base para probar lo de los esquemas distintos, pero ya fue. Al final me acepto otro query de otro esquema con la misma conexion. Pero igual no me permite hacer 2 veces una conexion a la misma base, o por lo menos con los mismos parametros, para probar la segunda conexion le cambie el ip por el del ip externo, y el primero con el de 127.0.0.1, luego la base del primero use la de postgres y la de la segunda conexion use template1 que es una copia, asi si me tomo la segunda DB.
Muchas gracias a todos!

Ver perfil de usuario

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.