Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-03-2008
Pedro-Juan Pedro-Juan is offline
Miembro
 
Registrado: ago 2006
Ubicación: Barcelona - España
Posts: 315
Poder: 18
Pedro-Juan Va por buen camino
Question Tipo desconocido en SQL

Hola a tod@s, un saludo.
Tengo una consulta que me da el error de: Project Biblio.exe raised exception class EDatabaseError
with message 'cAut' is of an unknown type, Process
stopped. Use step or run to continue.
Me da el mismo mensage de error con todos los parámetros, excepto con el primero (cPalabra).
Todos los tipos de variable están bien, tanto en la declaración como en las asignaciones previas a la llamada
al procedure.
Lo más curioso: tengo otras consultas idénticas a esta (pero para otros ámbitos dentro de la misma
aplicación) y me funcionan bien, sin problemas.
¿Cómo pueden ser de un tipo desconocido? y ¿porqué funcionan procedures similares en otros ámbitos?
Muchas gracias de antemano a tod@s por vuestra ayuda.

Código Delphi [-]
 
procedure BusarPorCalificacionSQL(cCalificacion,cAutor,cTema,cClasificacion: String);
var cPalabra,cAut,cTem,cClasif: String;
    nParam: Integer;
begin
nParam    := 0;
cPalabra  := Trim(cCalificacion);
cAut      := Trim(cAutor);
cTem      := Trim(cTema);
cClasif   := Trim(cClasificacion);
DataModule.QueryLib.Close;
DataModule.QueryLib.SQL.Clear;
DataModule.QueryLib.SQL.Add('Select * From TITULOS');
DataModule.QueryLib.SQL.Add('Where ((NomCalifCas = :cPalabra) or (NomCalifCat = :cPalabra) or 
                                                                           (NomCalifIng = :cPalabra) or (NomCalifFra = :cPalabra) or 
                                                                           (NomCalifAle = :cPalabra) or (NomCalifIta = :cPalabra) or 
                                                                           (NomCalifPor = :cPalabra))');
DataModule.QueryLib.Params[nParam].AsString := cPalabra;
if ((nNumItemIndexA = 1) and (cAut <> '')) then begin
     DataModule.QueryLib.SQL.Add('And NOMAUTOR1 = :cAut or NOMAUTOR2 = :cAut or 
                                                                          NOMAUTOR3 = :cAut or NOMAUTOR4 = :cAut or 
                                                                          NOMAUTOR5 = :cAut or NOMAUTOR6 = :cAut');
     Inc(nParam);
     DataModule.QueryLib.Params[nParam].AsString := cAut;
     Inc(nParam);
     DataModule.QueryLib.Params[nParam].AsString := cAut;
     Inc(nParam);
     DataModule.QueryLib.Params[nParam].AsString := cAut;
     Inc(nParam);
     DataModule.QueryLib.Params[nParam].AsString := cAut;
     Inc(nParam);
     DataModule.QueryLib.Params[nParam].AsString := cAut;
     Inc(nParam);
     DataModule.QueryLib.Params[nParam].AsString := cAut;
end;
if ((nNumItemIndexB = 1) and (cTem <> '')) then begin
     Inc(nParam);
     DataModule.QueryLib.SQL.Add('AND (Tema = :cTem)');
     DataModule.QueryLib.Params[nParam].AsString := cTem;
end;
if ((nNumItemIndexC = 1) and (cClasif <> '')) then begin
     Inc(nParam);
     DataModule.QueryLib.SQL.Add('AND (Clasificacion = :cClasif)');
     DataModule.QueryLib.Params[nParam].AsString := cClasif;
end;
DataModule.QueryLib.SQL.Add('AND (IsConte = ''No'')');
if(F_Main.sRadioGGrid.ItemIndex = 0) then  DataModule.QueryLib.SQL.Add('Order By TITULO');
if(F_Main.sRadioGGrid.ItemIndex = 1) then  DataModule.QueryLib.SQL.Add('Order By NUMERO');
DataModule.QueryLib.Open;
end;
__________________
Este mundo es el camino para el otro, que es morada sin cesar. Mas cumple tener buen tino para andar esta jornada sin errar. (J. Manrique)
Responder Con Cita
  #2  
Antiguo 06-03-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, Has intentado mover el trim?:

Código Delphi [-]
procedure BusarPorCalificacionSQL(cCalificacion,cAutor,cTema,cClasificacion: String);
var cPalabra,cAut,cTem,cClasif: String;
    nParam: Integer;
begin
nParam    := 0;
cPalabra  := cCalificacion;
cAut      := cAutor;
cTem      := cTema;
cClasif   := cClasificacion;
DataModule.QueryLib.Close;
DataModule.QueryLib.SQL.Clear;
DataModule.QueryLib.SQL.Add('Select * From TITULOS');
DataModule.QueryLib.SQL.Add('Where ((NomCalifCas = :cPalabra) or (NomCalifCat = :cPalabra) or 
                                                                           (NomCalifIng = :cPalabra) or (NomCalifFra = :cPalabra) or 
                                                                           (NomCalifAle = :cPalabra) or (NomCalifIta = :cPalabra) or 
                                                                           (NomCalifPor = :cPalabra))');
DataModule.QueryLib.Params[nParam].AsString := cPalabra;
if ((nNumItemIndexA = 1) and (cAut <> '')) then begin
     DataModule.QueryLib.SQL.Add('And NOMAUTOR1 = :cAut or NOMAUTOR2 = :cAut or 
                                                                          NOMAUTOR3 = :cAut or NOMAUTOR4 = :cAut or 
                                                                          NOMAUTOR5 = :cAut or NOMAUTOR6 = :cAut');
     Inc(nParam);
     DataModule.QueryLib.Params[nParam].AsString := Trim(cAut);
     Inc(nParam);
     DataModule.QueryLib.Params[nParam].AsString := Trim(cAut);
     Inc(nParam);
     DataModule.QueryLib.Params[nParam].AsString := Trim(cAut);
     Inc(nParam);
     DataModule.QueryLib.Params[nParam].AsString := Trim(cAut);
     Inc(nParam);
     DataModule.QueryLib.Params[nParam].AsString := Trim(cAut);
     Inc(nParam);
     DataModule.QueryLib.Params[nParam].AsString := Trim(cAut);
end;
if ((nNumItemIndexB = 1) and (cTem <> '')) then begin
     Inc(nParam);
     DataModule.QueryLib.SQL.Add('AND (Tema = :cTem)');
     DataModule.QueryLib.Params[nParam].AsString := cTem;
end;
if ((nNumItemIndexC = 1) and (cClasif <> '')) then begin
     Inc(nParam);
     DataModule.QueryLib.SQL.Add('AND (Clasificacion = :cClasif)');
     DataModule.QueryLib.Params[nParam].AsString := cClasif;
end;
DataModule.QueryLib.SQL.Add('AND (IsConte = ''No'')');
if(F_Main.sRadioGGrid.ItemIndex = 0) then  DataModule.QueryLib.SQL.Add('Order By TITULO');
if(F_Main.sRadioGGrid.ItemIndex = 1) then  DataModule.QueryLib.SQL.Add('Order By NUMERO');
DataModule.QueryLib.Open;
end;

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #3  
Antiguo 06-03-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Mayormente ese error salta cuando no le das un valor a uno de los parámetros. En tu caso, el parámetro cAut de seguro no recibe un valor.


Saludos...
Responder Con Cita
  #4  
Antiguo 06-03-2008
Pedro-Juan Pedro-Juan is offline
Miembro
 
Registrado: ago 2006
Ubicación: Barcelona - España
Posts: 315
Poder: 18
Pedro-Juan Va por buen camino
Question

Muchas gracias, pero está todo correcto (bueno, es evidente que algo falla) quiero decir que el error, después de poner comentarios a varias líneas me lo señala en esta, es decir la primera vez que encuentra cAut:

Código Delphi [-]
DataModule.QueryLib.SQL.Add('And NOMAUTOR1 = :cAut or NOMAUTOR2 = :cAut or 
                                                                          NOMAUTOR3 = :cAut or NOMAUTOR4 = :cAut or 
                                                                          NOMAUTOR5 = :cAut or NOMAUTOR6 = :cAut');
Por cierto que no lo había dicho:
Delphi6
Interbase 5.1

he cambiado el Trim y comprobado que los parámetros reciban contenido. Todo bien.

pero sigue dando el error.
Gracias
__________________
Este mundo es el camino para el otro, que es morada sin cesar. Mas cumple tener buen tino para andar esta jornada sin errar. (J. Manrique)

Última edición por Pedro-Juan fecha: 06-03-2008 a las 22:25:18.
Responder Con Cita
  #5  
Antiguo 06-03-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Parametros

Y que tal si pruebas lo siguiente:

Código Delphi [-]
DataModule.QueryLib.Parambyname('CPALABRA').AsString := cPalabra;
....
DataModule.QueryLib.Parambyname('CAUT').AsString := Trim(cAut);
....
DataModule.QueryLib.Parambyname('CTEM').AsString := cTem;

Saludos

P.D. Hey este es mi post Nº 100.....je,je, poco a poco se anda lejos. Mi proxima meta: 250.

Última edición por jcarteagaf fecha: 06-03-2008 a las 22:35:16. Razón: Recien vi que era mi post 100
Responder Con Cita
  #6  
Antiguo 06-03-2008
Pedro-Juan Pedro-Juan is offline
Miembro
 
Registrado: ago 2006
Ubicación: Barcelona - España
Posts: 315
Poder: 18
Pedro-Juan Va por buen camino
Thumbs up

Muchas gracias a todos.

jcarteagaf, gracias, la primera compilación que he hecho con tu propuesta me ha funcionado bien. Deduzco que era innecesario (en este caso) numerar los parámetros. Esto lo hace más fácil, pues he suprimido nParam y todo ha ido muy bien. Gracias.
__________________
Este mundo es el camino para el otro, que es morada sin cesar. Mas cumple tener buen tino para andar esta jornada sin errar. (J. Manrique)
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
StarTeam, ese desconocido [Gunman] Varios 5 31-01-2007 18:10:54
Consulta con tipo desconocido Pskotler C++ Builder 2 28-08-2006 02:14:53
DLL con nombre desconocido ixMike Varios 2 28-06-2006 11:05:02
Caracter desconocido... Xianto Varios 3 07-01-2005 15:46:08
Es un camino desconocido Oxa78 Varios 11 25-11-2004 09:47:03


La franja horaria es GMT +2. Ahora son las 08:07:29.


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