Rescatar Los Parametros de Salida de Un SP aun Dbgrig en Delphi
#1
Escrito 11 marzo 2009 - 09:21
gracias por la ayuda y un saludo a este nuevo foro que me integro...........
#2
Escrito 11 marzo 2009 - 09:28
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
With TQuery, TQuery.SQL do begin Close; Clear; Add('SELECT * FROM MYPROCEDURE'); Open; end;
Así te devolvería los parámetros de salida, prueba a ver si es el mismo caso.
#3
Escrito 11 marzo 2009 - 09:31
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:
SELECT * FROM REPDEPTOSUNO (:E_Inicial,:E_Final,:E_Depto)
Y en el código hago esto:
with IBQRepUNDepto do begin Close; ParamByName('E_Inicial').Value := FInicial.Date; ParamByName('E_Final').Value := FFinal.Date; ParamByName('E_Depto').Value := Edit1.Text; Open; if RecordCount > 0 then begin Result := True; end else begin Result := False; end; end;
Intenta de esa forma.
Salud OS
Edito: Ya Rolphy te ha respondido
#4
Escrito 11 marzo 2009 - 09:33
call Nombre_Procedimiento('parametros1','parametros2')
Saludos.
#5
Escrito 11 marzo 2009 - 09:36
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
#6
Escrito 11 marzo 2009 - 09:40
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...
#7
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
#8
Escrito 11 marzo 2009 - 09:45
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----
#9
Escrito 11 marzo 2009 - 09:47
Saludos
EDITO: me refiero en Delphi no en MySQL , y te invito a leer el uso de las etiquetas del foro que está en mi firma .
#10
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:
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; // Aquí se da salida a los parámetros como un recordset que puede //ser leido por el dbgrid. SELECT @socios AS Socios, @ltsSocios AS LtsSocios, @monedaSocios AS Moneda socios RETURN END
saludos
#11
Escrito 11 marzo 2009 - 10:24
un saludo....
#12
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