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)
-   -   Procedimiento Almacenado (https://www.clubdelphi.com/foros/showthread.php?t=38453)

egostar 15-12-2006 01:36:11

Procedimiento Almacenado
 
Hola amigos

Como les habia comentado, estoy comenzando a hacer mi primera aplicación con base de datos Firebird y ya tengo algunas dudas.

Mi problema es el siguiente:

Necesito mostrar un directorio donde puedo seleccionar a través de un TabControl una letra del alfabeto, si por ejemplo selecciono la letra A me debe de mostrar los nombres que comiencen con esa letra y asi sucesivamente.

He visto que a través de un procedimiento almacenado puedo realizar esta consulta.

Aqui les pongo el procedimiento que generé:


Código SQL [-]
 
ALTER PROCEDURE DIRECTORIO (inicial varchar(1))
returns (
empresa varchar(100),
direccion varchar(100),
ciudad varchar(30),
estado varchar(20))
as
begin
/* Procedure Text */
FOR SELECT EMPRESA,DIRECCION,CIUDAD,ESTADO FROM CLIENTES
WHERE EMPRESA LIKE :inicial
INTO :EMPRESA_RET,:dIRECCION:RET,:CIUDAD_RET,:ESTADO_RET DO
begin
suspend;
end
end

Yo creo que pueden ser dos razones pero no he encontrado que es

La primera es el LIKE, ya que no me permite usar el signo % para usarlo de una manera adecuada.

La segunda es que en la parte dentro del begin --> suspend --> end no se que debo incluir y si ahi debo de regresar los valores y como hacerlo.

Muchas gracias.

Héctor Randolph 15-12-2006 01:51:27

Hola egostar!

Mi recomendación es que uses la cláusula STARTING WITH en lugar de LIKE. Esto es para que obtengas el efecto deseado, me refiero a filtrar por los registros que comienzan con esa letra.

Por otra parte, observando la manera que estás construyendo la sentencia considero que no es necesario crear un procedimiento ya que puedes obtener esto mismo con la sentencia SELECT directamente.

Por esta razón en tu caso no es necesario poner nada entre el BEGIN y el END excepto el SUSPEND que devuelve automáticamente los valores que declaraste con RETURNS.

No se si me explico bien, los procedimientos son útiles cuando deseas hacer una manipulación adicional con los valores antes de devolverlos.

Saludos

Héctor Randolph 15-12-2006 01:57:51

Por cierto, otra cosa más en esta línea tu código seguramente marcará error

Código SQL [-]
INTO :EMPRESA_RET,:dIRECCION:RET,:CIUDAD_RET,:ESTADO_RET DO

Dado que estás tratando de recuperar lo que devuelve el SELECT dentro de variables que no tienes declaradas previamente, puedes corregirlo de esta forma:

Código SQL [-]
ALTER PROCEDURE DIRECTORIO (inicial varchar(1))
returns (
empresa_ret varchar(100),
direccion_ret varchar(100),
ciudad_ret varchar(30),
estado_ret varchar(20))
as
begin
/* Procedure Text */
FOR SELECT EMPRESA,DIRECCION,CIUDAD,ESTADO FROM CLIENTES
WHERE EMPRESA STARTING WITH :inicial
INTO :EMPRESA_RET,:dIRECCION_RET,:CIUDAD_RET,:ESTADO_RET DO
begin
suspend;
end
end

Saludos

egostar 15-12-2006 01:59:49

Genial

Muchas gracias me sirvio perfectamente.

Y si, te explicas de manera excelente

Muchas gracias.

egostar 15-12-2006 02:04:07

Si lo modifique despues de que pegue el procedimiento.

Gracias de nuevo.


La franja horaria es GMT +2. Ahora son las 03:52:20.

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