Ir al contenido


Foto

Rescatar Los Parametros de Salida de Un SP aun Dbgrig en Delphi


  • Por favor identifícate para responder
11 respuestas en este tema

#1 TASP290681

TASP290681

    Newbie

  • Miembros
  • Pip
  • 4 mensajes
  • LocationCordoba, Veracruz

Escrito 11 marzo 2009 - 09:21

Mi pregunta es como rescatar los parametros de salida de un procedimiento almacenado a un dbgrid en delphi.. menciono que la sentencia sql funciona y prove con  paramvalue a una variable y me devuelve el primer registro ... pero en el dbgrig no me aparece nada... ya tengo conectado el adoStoreProc al datasourse y el datasourse al dbgrig y nada... no se si hay alguna forma de direccionar los parametros de salida al dbgrid..

gracias por la ayuda y un saludo a este nuevo foro que me integro...........  (y)
  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 11 marzo 2009 - 09:28

Saludos.

No uso MySQL, pero con Firebird e Interbase los procedimientos almacenados que devuelven registros o como ellos les llaman selectable se deben de ejecutar desde un componente descendiente de TDataSet por medio de un Select.

A esto me refiero


delphi
  1. With TQuery, TQuery.SQL do
  2. begin
  3.   Close;
  4.   Clear;
  5.   Add('SELECT * FROM MYPROCEDURE');
  6.   Open;
  7. end;



Así­ te devolverí­a los parámetros de salida, prueba a ver si es el mismo caso.
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.283 mensajes
  • LocationMéxico

Escrito 11 marzo 2009 - 09:31

Hola TASP290681, bienvenido a la comunidad DelphiAccess.

Yo no uso los componentes de procedimientos almacenados, lo que yo hago es usar un Query normal (IBQuery) y llamar al procedimiento almacenado desde el query

Esto es lo que hago en el IBQuery:



sql
  1. SELECT * FROM REPDEPTOSUNO (:E_Inicial,:E_Final,:E_Depto)



Y en el código hago esto:



delphi
  1.         with IBQRepUNDepto do begin
  2.           Close;
  3.           ParamByName('E_Inicial').Value := FInicial.Date;
  4.           ParamByName('E_Final').Value   := FFinal.Date;
  5.           ParamByName('E_Depto').Value   := Edit1.Text;
  6.           Open;
  7.           if RecordCount > 0 then begin
  8.              Result := True;
  9.           end
  10.           else begin
  11.                  Result := False;
  12.           end;
  13.         end;



Intenta de esa forma.

Salud OS

Edito: Ya Rolphy te ha respondido :D
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 11 marzo 2009 - 09:33

Hola, ¿has verificado que el ADOStorProc está activo?, ¿Intentaste cargar los campos persistentes a ver si te da algún error?, ¿por qué no usas un ADOQuery y en su propiedad SQL llamas al procedimiento de esta forma?:



delphi
  1. call Nombre_Procedimiento('parametros1','parametros2')



Saludos.
  • 0

#5 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 11 marzo 2009 - 09:36

Hola amigo, me da mucho gusto que hayas posteado tu pregunta aquí­, Ahora me permito responderte.

Lo que yo hago para darle salida a los parámetros es sacarlos haciendo uso de un select.  Esto lo hago de la forma

  Select ParamOut1, ParamOut2, .., ParamOutN.

Ahora bien si deseas darle salida a los parámetros y a un recorset. entonces solo invocas a los dos selects. No olvides que ADO soporta más de un recorset devuelto por un SP.

Saludos cordiales y bienvenido a esta tu comunidad



  • 0

#6 TASP290681

TASP290681

    Newbie

  • Miembros
  • Pip
  • 4 mensajes
  • LocationCordoba, Veracruz

Escrito 11 marzo 2009 - 09:40

Como Pasar lo parametros si me jala el problema esque no aparecen en el dbgri
por ejemplo a una variable encontre que se pasa asi

sumlts:=DM.spsumlitros.Parameters.ParamValues['@sumlitros'];

y lo muestro y me manda el primer registro .... osea que si esta jalando la conexion porque me esta devolviendo algo y esta bien porque es el primero pero en el dbgrig no muestra nada

,... Gracias a todos...

  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 11 marzo 2009 - 09:43

Como Pasar lo parametros si me jala el problema esque no aparecen en el dbgri
por ejemplo a una variable encontre que se pasa asi

sumlts:=DM.spsumlitros.Parameters.ParamValues['@sumlitros'];

y lo muestro y me manda el primer registro .... osea que si esta jalando la conexion porque me esta devolviendo algo y esta bien porque es el primero pero en el dbgrig no muestra nada

,... Gracias a todos...


Como te mencioné anteriormente, solo necesitas hacer un select de los parámetros en el cuerpo del SP. de esa manera se te devolverá un recorset de una sola fila con los valores contenidos en los parámetros. Al ligar el componente a un dataource y luego a un dbgrid los datos serán mostrados.

Saludos
  • 0

#8 TASP290681

TASP290681

    Newbie

  • Miembros
  • Pip
  • 4 mensajes
  • LocationCordoba, Veracruz

Escrito 11 marzo 2009 - 09:45

Este es mi proc almac.



sql
  1. ALTER PROCEDURE [dbo].[sumltssoc]
  2. @fecha1 datetime,
  3. @fecha2 datetime,
  4. @ltsSocios DECIMAL(8,2) output,
  5. @monedaSocios DECIMAL(8,2) output,
  6. @Socios VARCHAR output
  7.  
  8. AS
  9. BEGIN
  10.  
  11. SELECT @socios=CVE_SOC, @ltsSocios=SUM(LITROS), @monedaSocios=SUM(lts_moneda)  FROM tcapdiesel
  12. WHERE fecha_carga BETWEEN @fecha1 AND @fecha2
  13. GROUP BY cve_soc
  14.  
  15. RETURN
  16.  
  17. END



y en delphi le paso los parametros asi

   

delphi
  1. dm.ADOCon.BeginTrans;
  2.     DM.spsumcompra.Prepared:=false;
  3.     DM.spsumcompra.Parameters.ParamByName('@fecha1').Value:=DateToStr(DateTimePicker1.Date);
  4.     DM.spsumcompra.Parameters.ParamByName('@fecha2').Value:=DateToStr(DateTimePicker2.Date);
  5.     DM.spsumcompra.Prepared:=true;
  6.     DM.spsumcompra.ExecProc;
  7.     dm.ADOCon.CommitTrans;




aki reviso si esta devolviendo algo

     

delphi
  1. sumltscompra:=DM.spsumcompra.Parameters.ParamValues['@sumltscom'];



y efectivamente me devuelve el`primer registro pero en el dbgrid nada  nada...

     

delphi
  1. ShowMessage('litros '+FloatToStr(sumltscompra));



mi pregunta es asi como se capturta un dato a una variable ... hay una manera de colocarlos en un dbgrid??

Saludos----
  • 0

#9 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 11 marzo 2009 - 09:47

Creo que debes quitar la "@", no es necesario, intentalo sin ella.

Saludos

EDITO: me refiero en Delphi no en MySQL :D, y te invito a leer el uso de las etiquetas del foro que está en mi firma ;).
  • 0

#10 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 11 marzo 2009 - 09:49

Este es mi proc almac.

ALTER PROCEDURE [dbo].[sumltssoc]
@fecha1 datetime,
@fecha2 datetime,
@ltsSocios Decimal(8,2) output,
@monedaSocios Decimal(8,2) output,
@Socios varchar output

AS
BEGIN

SELECT @socios=CVE_SOC, @ltsSocios=SUM(LITROS), @monedaSocios=SUM(lts_moneda)  FROM tcapdiesel
where fecha_carga between @fecha1 and @fecha2
group by cve_soc

RETURN

END

y en delphi le paso los parametros asi

    dm.ADOCon.BeginTrans;
    DM.spsumcompra.Prepared:=false;
    DM.spsumcompra.Parameters.ParamByName('@fecha1').Value:=DateToStr(DateTimePicker1.Date);
    DM.spsumcompra.Parameters.ParamByName('@fecha2').Value:=DateToStr(DateTimePicker2.Date);
    DM.spsumcompra.Prepared:=true;
    DM.spsumcompra.ExecProc;
    dm.ADOCon.CommitTrans;


aki reviso si esta devolviendo algo

      sumltscompra:=DM.spsumcompra.Parameters.ParamValues['@sumltscom'];

y efectivamente me devuelve el`primer registro pero en el dbgrid nada  nada...

      ShowMessage('litros '+FloatToStr(sumltscompra));

mi pregunta es asi como se capturta un dato a una variable ... hay una manera de colocarlos en un dbgrid??

Saludos----


Si la hay, serí­a de la siguiente manera:





sql
  1. ALTER PROCEDURE [dbo].[sumltssoc]
  2. @fecha1 datetime,
  3. @fecha2 datetime,
  4. @ltsSocios DECIMAL(8,2) output,
  5. @monedaSocios DECIMAL(8,2) output,
  6. @Socios VARCHAR output
  7.  
  8. AS
  9. BEGIN
  10.  
  11. SELECT @socios=CVE_SOC, @ltsSocios=SUM(LITROS), @monedaSocios=SUM(lts_moneda)  FROM tcapdiesel
  12. WHERE fecha_carga BETWEEN @fecha1 AND @fecha2
  13. GROUP BY cve_soc;
  14.  
  15. // Aquí­ se da salida a los parámetros como un recordset que puede
  16. //ser leido por el dbgrid.
  17.  
  18. SELECT @socios AS Socios, @ltsSocios AS LtsSocios, @monedaSocios AS Moneda socios
  19.  
  20. RETURN
  21.  
  22. END



saludos
  • 0

#11 TASP290681

TASP290681

    Newbie

  • Miembros
  • Pip
  • 4 mensajes
  • LocationCordoba, Veracruz

Escrito 11 marzo 2009 - 10:24

Enlo cierto mi estimado poliburro ya seve algo en el dbgrig del conjunto de registros solo me muestra el ultimo registro en el dbgrig ... ya voy por menos jejejeje

un saludo....
  • 0

#12 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 11 marzo 2009 - 10:27

Enlo cierto mi estimado poliburro ya seve algo en el dbgrig del conjunto de registros solo me muestra el ultimo registro en el dbgrig ... ya voy por menos jejejeje

un saludo....


Es un gusto ayudar amigo. Esperamos verte mucho más seguido por estos rumbos. Saludos
  • 0