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 11-08-2005
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
Obtener varios registros de Stored Procedure

Que tal foreros????? ya habia pegado un mensaje en el foro SQL al cual no recibi alguna contestación a lo que creo que no fue clara mi solicitud, la pongo ahora por aqui tratando de ser un poco mas claro, espero no romper con las reglas del Club y si es así ofresco mis disculpas, ya he borrado el mens del foro SQL. Ya he tratado de varias formas y no he obtenido los resultados esperados.

Hace un par de días trate de ayudar a un compañero aui en el club que preguntaba sobre obtener registros de un Procedimiento Almacenado, diciendole que yo habia empleado una consulta simple y me habia funcionado:

Select * From Procedi_Almacenado

y así fue, sólo que cometi el error de no comentar que este codigo lo ejecute en en el editor de SQL en IBExpert mientras hacia pruebas a la base de datos hecha en FB, pero despues al llegar a Delphi(6) me tope con el problema de que al querer meter el contenido de un campo de la base de datos en un ComboBox no obtengo valor alguno, usando el siguiente codigo en el IBQuery:

Código Delphi [-]
MOdulo.IBQuery.Close;
Modulo.IBQuery.SQL.Clear;
Modulo.IBQuery.Add(Select * From Marcas);
Modulo.IBQuery.ExecSql; Tambien trate con: Modulo.IBQuery.Exec SQL;

Me dio error indicandome que empleara Open, cambie ExecSql por Open y ya no me dio error pero tampoco me dio valores.

Intente con:

Código Delphi [-]
Modulo.IBStoredProc1.Prepare;
try
Modulo.IBStoredProc1.ExecProc;
CBMarca.Items.Add(Modulo.IBStoredProc1.ParamByName('Marca').AsString);
finally
Modulo.IBSPProdMarca.UnPrepare;
end;

y solamente me entrega un valor que es justo lo que he leido, pero también lei que para obtener varios registros se emplea una consulta, como la mencionada arriba, con lo que no estoy segura si la he implementado bien y/o si se emplea algun componente aparte. En el modulo tengo un IBDataBase, un IBTransaction, un IBStoredProc y un IBQuery.

Este es el Procedimiento almacenado:
Código SQL [-]
CREATE PROCEDURE MARCAS 
 
RETURNS (MARCA VARCHAR(15)) AS
 
begin
 
for select distinct Marca
 
from productos
 
Into :Marca do
 
begin
If Marca is Null Then
Exit;
Suspend;
 
end
 
end




Les agradesco de antemano alguna idea o pista que me puedan proporcionar.
Gracias

Última edición por Phacko fecha: 12-08-2005 a las 01:22:01. Razón: corrección
Responder Con Cita
  #2  
Antiguo 12-08-2005
cahp cahp is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 90
Poder: 21
cahp Va por buen camino
Hola,

te puede asegurar que :
Código SQL [-]
select *
from marcas
desde delphi con un ibquery y despues ibquery.open.

siendo marcas
Código SQL [-]
CREATE PROCEDURE MARCAS 
returns (MARCA VARCHAR(15))
AS 

begin
for
   select distinct Marca
   from productos
   into :Marca
do
   begin
      if (:Marca is null) then exit;
      suspend;
   end
end
funciona perfectamente, devuelve tantas lineas como hay distintas en la tabla productos.

Saludos.
Responder Con Cita
  #3  
Antiguo 12-08-2005
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
resp

Ese codigo esta perfecto tu problema debe ser otro.

Lo unico que puedo es decirte que tienes codigo redundante
Código SQL [-]
CREATE PROCEDURE MARCAS 
returns (MARCA VARCHAR(15))
AS 
begin
  for select distinct Marca
    from productos
    Where Marca is not Null
    into :Marca
  do
    suspend;
end
Aunque pienso que podrias hacer la consulta directamente ya que no veo el caso para el suo del procedimiento
Código SQL [-]
select distinct Marca
from productos
 Where Marca is not Null
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #4  
Antiguo 12-08-2005
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
Continúa el problema.....

Que tal???? primero que todo, gracias por su ayuda.

Iniciaré por decir que olvidé mencionar que uso pocedimientos almecenados porque la base de datos se va a emplear en red y aunque no son muchos clientes, decidi comenzar a trabajar en el servidor con ésto, de una vez por todas.

Bien, pues ya habia utilizado IBQuery.OPen y seguian vastos, ya que no me agrega ningun dato a la lista, Cambie el control ComboBox por un DBLookUpComboBox pero únicamente agrego un elemento a la lista, he intentado variando codigo pero nada, cuando no me da error no agrega elementos a la lista esta es la forma en la que llamo al procedimiento almacenado desde delphi ya sea mediante un boton o al activar la form:
Código Delphi [-]
  Modulo.IBQProdMarca.Open;
  CBMarca.Items.Add(Modulo.IBQProdMarca.ParamByName('marca').AsString);

y en el componente IBQProdMarca tengo el siguiente codigo:
Código SQL [-]
 Select *
From Marcas

el procedimiento almacenado aun es el anotado al inicio de este hilo, vuelvo a comentar que si ejecuto el Procedimiento almacenado con:
Código Delphi [-]
Modulo.IBSPProdMarca.ExecProc;
se agrega únicamente un elemento a la lista, pero si utilizo la consulta como la he indicado no agrega elemento alguno.

Sera necesario eliminar el componente IBStoredProc del modulo de datos? ya no se ni lo que digo.

Les agradesco de antemano su ayuda, Gracias.
Responder Con Cita
  #5  
Antiguo 17-08-2005
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
El problema no es la consulta sino como agregar los datos....

Que tal??? de nuevo aqui.

El procedimiento almacenado funciona bien al igual que la consulta, lo verifique usando un DBGrid en el cual se muestran los resultados como se esperaba, el problema es que se necesita en un ComboBox, ya que se requiere seleccionar alguna de estas opciones que se obtienen de la base de datos y tambien se debe permitir agregar nuevos datos a la base, tecleados a travez del mismo ComboBox.

El codigo que utilizo para hacer la llamada y agregar los resultados de la consulta al ComboBox es el siguiente:
Código Delphi [-]
Modulo.IBQProdMarca.Open;
CBMarca.Items.Add(Modulo.IBQProdMarca.ParambyName('marca').AsString);

y da el error:
El proyecto a originado una excepción clase EDataBaseError con el mensaje "IBQProdMarca:Parameter 'marca' no encontrado......

lo da en la linea donde trato de llenar el ComboBox, cambie el codigo y nada, por lo que mi duda es, ¿como hacer referencia al valor que me retorna la consulta sobre el procedimiento almacenado para rellenar el ComboBox?

Gracias de antemano.
Responder Con Cita
  #6  
Antiguo 17-08-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Prueba con este código:

Código Delphi [-]
Modulo.IBQuery.Close;
Modulo.IBQuery.SQL.Clear;
Modulo.IBQuery.Add('Select * From Marcas');
Modulo.IBQuery.Open;
while not Modulo.IBQuery.Eof do
begin
  CBMarca.Items.Add(Modulo.IBQuery.FieldByName('Marca').AsString);
  Modulo.IBQuery.Next
end;
Modulo.IBQuery.Close

Saludos...
Responder Con Cita
  #7  
Antiguo 19-08-2005
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
Perfecto....

Que tal???

Muchas gracias Marcos, todo a la perfección.

Reitero, gracias por tu ayuda.

Buen día.
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


La franja horaria es GMT +2. Ahora son las 16:37:44.


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