Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   realizar busqueda con un SP (https://www.clubdelphi.com/foros/showthread.php?t=38007)

fedelphi 29-11-2006 13:49:05

realizar busqueda con un SP
 
Hola a todos, quiero realizar una busqueda en una tabla mediante un Stored procedure del cual no obtengo registros cuando hago la consulta. Me conecto mediante dbExpress con un sqlquery, un DatasetProvider, un clientdataset y un datasource para mostrar la respuesta en un dbgrid. el SP es asi
Código SQL [-]
PROCEDURE BUSCA_CLIENTE ( PA_APELLIDO Varchar(20) )
RETURNS (    
         ID_CLIENTE Integer, 
         NOMBRE Varchar(25),
         TELEFONO Varchar(15), 
         APELLIDO Varchar(20), 
         DIRECCION Varchar(30) )
AS
BEGIN
FOR
  SELECT id_cliente, nombre, telefono, apellido, direccion
  FROM CLIENTES      WHERE apellido=:pa_apellido
  INTO :id_cliente, :nombre, :telefono, :apellido, :direccion
  do SUSPEND;
y lo llamo al presionar enter en un Edit
Código Delphi [-]
 DataModule2.SQLQuery1.Close;
 DataModule2.SQLQuery1.ParamByName('pa_apellido').AsString:=Edit1.Text;
 Datamodule2.SQLQuery1.Open;
 DataModule2.SQLQuery1.Refresh;

y el SQL en el sqlQuery es
Código SQL [-]
select * from busca_cliente(:pa_apellido)

Si aqui coloco
Código SQL [-]
 select * from clientes
me devuelve todos los registros y los veo correctamente, pero al tratar de llamar al SP o realizar
Código SQL [-]
select * from clientes where apellido=:PA_Apellido
no obtengo ningun registro :eek::(. Muchas gracias por la ayuda!!!
Fede

DarKraZY 29-11-2006 13:59:32

Cuando haces esto en SQL
Código SQL [-]
WHERE apellido= : parametro // supongamos que : va seguido de parametro
La consulta devolverá sólo aquellos registros que coincidan exactamente.

Además del = también dispones de "LIKE", "STARTING WITH" y alguno más que no recuerdo ahora.

Problamente sea que no coincide y por eso no devuelve nada la consulta.

Saludos!

fedelphi 29-11-2006 15:02:03

Muchas gracias por tu respuesta Darkrazy, pero hice una prueba mas, reemplace el parametro en el SP por un string que existe en la tabla, entonces el select del SP quedo asi
Código SQL [-]
SELECT id_cliente, nombre, telefono, apellido, direccion FROM CLIENTES WHERE APELLIDO='apellido del cliente'
y me lo muestra en el dbgrid, pero al ingresarlo como parametro no obtengo ningun registro. Intente probarlo con LIKE pero no se la sintaxis de este operador con un parametro.
Fede

RONPABLO 29-11-2006 15:27:56

El like funciona así: where campoX like ('%Cadena%'), aunq para estar aun mas seguro yo le agregaria un upper, en su consulta quedaría algo como esto:

Código SQL [-]
SELECT id_cliente, nombre, telefono, apellido, direccion  FROM CLIENTES WHERE upper(APELLIDO) like(upper('%' || :APELLIDO || '%'))

fedelphi 29-11-2006 16:04:58

gracias ronpablo, funciono perfectamente el LIKE, pero sigo en la misma situacion, haciendolo con un string funciona, pero al hacerlo con el parametro no tengo registros. Hay algo que configurar en el parametro?, hay otras maneras de pasarlo?, me parece que viene por ahi, en fin rewalmente no se que mas probar.

fedelphi 29-11-2006 21:28:25

Despues de romperme la cabeza haciendo pruebas, leyendo y sobre todo aprendiendo, encontre la solución; el problema es donde estaba realizando el refresh, lo correcto es:
Código Delphi [-]
DataModule2.SQLClientDataSet1.Refresh;


La franja horaria es GMT +2. Ahora son las 20:22:40.

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