Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2013
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Query no funciona... ¡A veces!

En un programa con C++ Builder 5 tengo este query en un base de datos Firebird:
Código SQL [-]
SELECT * FROM Ls01 A, Auxiliar C 
WHERE A.CodPrv = 45 AND A.Situacion IN (0, 1, 2) AND A.Junta = C.Valor AND C.Tipo = 2 
ORDER BY NomJun, Apellidos, Nombre, Referencia
Si lo ejecuto dentro de un programa no me da ningún resultado; sin embargo, si lo pruebo en IBManager EXACTAMENTE con las mismas tablas si me saca filas, que por otra parte es el resultado lógico y por más vueltas que estoy dando no soy capaz de encontrar la razón ¿Alguna idea y/o ayuda? Ls01 es una vista sobre varias tablas y Auxiliar es una tabla sin índices.

Última edición por Angel.Matilla fecha: 12-02-2013 a las 11:39:50.
Responder Con Cita
  #2  
Antiguo 12-02-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Que lo estás ejecutando en bases de datos distintas
Responder Con Cita
  #3  
Antiguo 12-02-2013
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
O te has olvidado de hacer el Open del Query...

Muestra el código que utilizas para ejecutar el SQL, que no somos adivinos...
Responder Con Cita
  #4  
Antiguo 13-02-2013
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Perdón; tenéis razón:
Código SQL [-]
Query->Close(); Query->SQL->Add("SELECT * FROM Ls01 A, Auxiliar C 
WHERE A.CodPrv = :CodPrv AND A.Situacion IN (0, 1, 2) AND A.Junta = C.Valor AND C.Tipo = 2
ORDER BY NomJun, Apellidos, Nombre, Referencia");
Query->ParamByName("CodPrv")->AsInteger = nCodPrv;
Query->Open();
Así está puesto en el programa. CodPrv es un entero sin signo y está bien definido (en este caso el valor es 45 porque es el código de Toledo) y Query es un TIBQuery asociado a la base de datos Firebird, lógicamente.
Responder Con Cita
  #5  
Antiguo 13-02-2013
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Explico el proceso completo. Este query lo uso para generar unos listados y la consulta depende de las opciones que elige el usuario, pero la SELECT es la misma en todos los casos. Esa tabla Auxiliar la uso para guardar los valores que se escogen en el formulario (por ejemplo el código de población) y monto esto:
Código:
Query->Close();
Query->SQL->Text = "SELECT * FROM Ls01 A";

qAuxil->Close();
qAuxil->SQL->Text = "SELECT DISTINCT Tipo FROM Auxiliar WHERE Usuario = :Usuario";
qAuxil->ParamByName("Usuario")->AsString = NombreUser;                    
qAuxil->Open();
for (; !qAuxil->Eof; qAuxil->Next())
     Query->SQL->Text = Query->SQL->Text + ", Auxiliar " + CHAR(65 + fPersonas->qAuxil->FieldByName("Tipo")->AsInteger);
Query y qAuxil son sendos TIBQuery y en la tabla Auxiliar sólo se guardan dos tipos: 1 y 2. De esta forma, si hubiera valores de ambos tipos, el query sería por ejemplo:
Código:
SELECT * FROM Ls01 A, Auxiliar B, Auxiliar C
WHERE A.CodPrv= :CodPrv
AND B.Tipo = 1 AND B.Usuario = :Usuario AND A.Profesion = B.Valor
AND C.Tipo = 2 AND C.Usuario = :Usuario AND A.Junta = C.Valor
El programa se ejecuta sin errores; he probado todos los casos para la tabla Auxiliar: sin datos, sólo con un tipo de datos (bien 1 bien 2) y con ambos tipos. En todos los casos el query se monta bien, pero al ejecutarlo es como si la tabla Auxiliar se hubiera vaciado y no es así. En ningún punto del código se hace un DELETE sobre dicha tabla.
Responder Con Cita
  #6  
Antiguo 13-02-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que no se entiende lo que explicas, Angel.Matilla.
Por lógica, si tienes un select que unas veces trae unos datos y otras veces trae otros datos distintos, tan sólo tienes varias posibilidades:

- que no sea el mismo select
- que sea el mismo select, pero los parámetros sean distintos
- que sea el mismo select, y lo ejecutes en bases de datos distintas

No puede haber más opciones, o sea, no puedes ejecutar un select con unos parámetros en una misma base de datos y que te devuelva datos distintos. Lógicamente.

Deberías detener el programa justo antes de lanzar el query y mirar la sentencia completa en ambos casos, para ver si está formada correctamente.

La otra opción es que nos pases la BD y probemos nosotros
Responder Con Cita
  #7  
Antiguo 13-02-2013
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Gracias prola respuesta Casimiro.
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Creo que no se entiende lo que explicas, Angel.Matilla.
Lo que he puesto es el código de cómo monto el query.
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Por lógica, si tienes un select que unas veces trae unos datos y otras veces trae otros datos distintos, tan sólo tienes varias posibilidades:

- que no sea el mismo select
- que sea el mismo select, pero los parámetros sean distintos
- que sea el mismo select, y lo ejecutes en bases de datos distintas

No puede haber más opciones, o sea, no puedes ejecutar un select con unos parámetros en una misma base de datos y que te devuelva datos distintos. Lógicamente.

Deberías detener el programa justo antes de lanzar el query y mirar la sentencia completa en ambos casos, para ver si está formada correctamente.
Ninguna de las tres opciones que das es correcta: es el mismo select con los mismos parámetros y la misma base de datos. No es que unas veces traiga resultados y otras no, es que dentro del programa no devuelve nada y en IBManager sí. Para comprobarlo paro la ejecución justo antes de hacer el open() y copio el contenido del query para ejecutarlo en IBManager.
Cita:
Empezado por Casimiro Notevi Ver Mensaje
La otra opción es que nos pases la BD y probemos nosotros
No tengo inconveniente en pasarte el programa (está hecho en Builder 5) y la base de datos; dime como y dónde.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Query MySQL: ¿Por qué no funciona? Angel.Matilla MySQL 4 27-06-2012 13:08:03
Query Access no funciona con ADO Delfino Conexión con bases de datos 6 15-06-2007 11:05:44
Quiero liberar my query para usar el mismo varias veces zcatzz Conexión con bases de datos 7 27-01-2007 23:39:45
Componente Pdf (PdfLib_TLB) a veces no funciona fidel OOP 1 06-06-2006 14:45:46
autorefresh no funciona en query y dbgrid ilichhernandez Conexión con bases de datos 6 08-11-2005 19:32:00


La franja horaria es GMT +2. Ahora son las 10:01:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi