FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Diferente comportamiento de un query
Buenos días. A ver si alguien me puede dar una explicación porque llevo días luchando con ese mensaje y no sé como resolverlo. Estoy ejecutando este query en un BB.DD. FB 2.5.6:
Sé que el query es un poco complejo, pero el problema no es ese. El problema es que si lo ejecuto desde la aplicación me da el error SQLCODE -804: Incorrect values within SQLDA structure pero si lo ejecuto desde SQL Manager, con los mismos valores en todos los parámetros en ambos casos, se ejecuta correctamente y me da los resultados que quiero y no entiendo por qué ese diferente comportamiento. |
#2
|
||||
|
||||
¿Podemos ver el código de tu programa donde se asigna esa sentencia y los parámetros?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
||||
|
||||
Como no, pero es un poco lío.
Código:
cAux = "AND Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv"; switch (((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Nivel) { case 2: cAux = cAux + " AND Municipio IN (SELECT Codigo FROM Dl01 WHERE CodPrv = A.CodPrv AND CodPar = :Codigo)"; break; case 4: cAux = cAux + " AND Municipio = :Codigo"; break; } cAux = cAux + ")"; fMenu->Auxiliar->Close(); fMenu->Auxiliar->SQL->Text = "SELECT A.Sigla,"; fMenu->Auxiliar->SQL->Add("COALESCE(B.Votos, 0) Votos1, (SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv AND Proceso = :Proceso1 " + cAux + ") Total1," fMenu->Auxiliar->SQL->Add("COALESCE(C.Votos, 0) Votos2, (SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv AND Proceso = :Proceso2 " + cAux + ") Total2, CASE WHEN A.Codigo = -3 THEN 0 WHEN Codigo < 0 THEN A.Codigo ELSE 1 END Orden"); fMenu->Auxiliar->SQL->Add("FROM Partidos A LEFT JOIN (SELECT Partido, SUM(Votos) Votos FROM Resultados WHERE CodPrv = :PrvIns AND Proceso = :Proceso1 " + StringReplace(cAux, "A.CodPrv", ":PrvIns", oReplace) + " GROUP BY Partido) B ON B.Partido = A.Codigo"); fMenu->Auxiliar->SQL->Add("LEFT JOIN (SELECT Partido, SUM(Votos) Votos FROM Resultados WHERE CodPrv = :PrvIns AND Proceso = :Proceso2 " + StringReplace(cAux, "A.CodPrv", ":PrvIns", oReplace) + " GROUP BY Partido) C ON C.Partido = A.Codigo"); fMenu->Auxiliar->SQL->Add("WHERE A.CodPrv = :PrvIns AND (B.Votos > 0 OR C.Votos > 0) ORDER BY Orden DESC, Votos1 DESC, Votos2 DESC, Sigla"); lPrueba = false; for (nItem = 0; nItem < SelRes->Items->Count; nItem ++) if (SelRes->Items->Item[nItem]->Checked) { fMenu->Auxiliar->ParamByName("Proceso1")->AsInteger = StrToInt(SelRes->Items->Item[nItem]->SubItems->Strings[0]); fMenu->Auxiliar->ParamByName((lPrueba ? (String)"Proceso2" : (String)"Proceso1"))->AsInteger = StrToInt(SelRes->Items->Item[nItem]->SubItems->Strings[0]); lPrueba = !lPrueba; } if (((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Nivel > 1) fMenu->Auxiliar->ParamByName("Codigo")->AsInteger = ((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Codigo; fMenu->Auxiliar->ParamByName("PrvIns")->AsString = ((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Provincia; if (((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Nivel < 4 && StrToIntDef(PadMun->Text, 0) > 0) fMenu->Auxiliar->ParamByName("Padron")->AsInteger = StrToIntDef(PadMun->Text, 0); fMenu->Auxiliar->Open();
|
#4
|
||||
|
||||
Ya las tablas que se usan son estas:
|
#5
|
||||
|
||||
Pon un "breakpoint" en la línea:
fMenu->Auxiliar->Open(); Y mira con el debug qué valor tiene "SQL". Puede ser que con las concatenaciones haya código "pegado", algo como: "order byCampoTal" en lugar de "order by CampoTal", por poner un ejemplo.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#6
|
||||
|
||||
No, lo había pensado pero el código que he usado en SQL Manager está copiado en ese punto. Es más: he probado pegando tal cual el código que he usado en SQL Manager en la aplicación y sigue dando el mismo error.
Última edición por Casimiro Notevi fecha: 19-04-2022 a las 14:16:11. |
#7
|
||||
|
||||
Míralo, por si acaso, ya que esos programas sqlmanager, ibexpert, etc. suelen tener controles para evitar esas cosas.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#8
|
||||
|
||||
Gracias. Lo comprobaré.
|
#9
|
||||
|
||||
No pierdes nada comprobándolo, aunque resulte que no sea eso finalmente.
Es que una vez me pasaba eso mismo y resultó que era el problema.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#10
|
||||
|
||||
Tienes razón. Ya te diré.
|
#11
|
||||
|
||||
Tienes algunos parámetros repetidos.
Creo recordar que no se puede repetir el nombre de los parametros porque se grilla el chino. :Proceso1 :Proceso2 :PrvIns Cambia los nombres y prueba. Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#12
|
||||
|
||||
Lo había pensado e hice la prueba, pero sigue dando el mismo error. Lo que me sorprende es que en el SQL Manager funciona perfectamente.
|
#13
|
||||
|
||||
A ver si algún parámetro no tiene un valor correcto o algo así.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#14
|
||||
|
||||
Gracias a todos por vuestras respuestas. Al final, y después de días probando, encontré la solución dándole "la vuelta" al query y en vez de la monstruosidad que puse el primer día me ha quedado algo mucho más sencillo y fácil de ejecutar:
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Un comportamiento extraño. | TiammatMX | Varios | 5 | 03-09-2013 23:54:07 |
comportamiento de extracFileName diferente segun configuracion Windows | alquimista | Varios | 7 | 02-05-2012 19:18:46 |
Comportamiento diferente segun conexión LAN o WIFI | MON___ | Redes | 1 | 15-01-2008 00:12:50 |
Comportamiento de componentes MDO | peccatum | Firebird e Interbase | 6 | 18-10-2007 21:08:42 |
Comportamiento de los Packages | unicode | OOP | 2 | 07-09-2003 19:22:38 |
|