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 15-12-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
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.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #2  
Antiguo 15-12-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 15-12-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 15-12-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Genial

Muchas gracias me sirvio perfectamente.

Y si, te explicas de manera excelente

Muchas gracias.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 15-12-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Si lo modifique despues de que pegue el procedimiento.

Gracias de nuevo.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
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
Procedimiento almacenado efelix MS SQL Server 7 21-11-2007 17:53:00
Procedimiento Almacenado scooterjgm Conexión con bases de datos 5 18-01-2005 18:21:32
Procedimiento almacenado y Ado LucianoRey MS SQL Server 11 06-07-2004 22:55:23
Procedimiento Almacenado Ulises Providers 3 30-01-2004 18:14:58
procedimiento almacenado haron Firebird e Interbase 2 29-09-2003 01:09:56


La franja horaria es GMT +2. Ahora son las 01:05:42.


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