Hola a todos, muchos saludos. Trabajo con delphi 7 y Microsoft Sql Server 2000. Tengo el siguiente procedimiento almacenado:
Código SQL
[-]
CREATE PROCEDURE spEdadCuentasporPagar
@Edad int,
@Edad1 int = NULL
AS
IF (@Edad1 IS Null)
begin
SELECT @Edad1 = 0
end
IF (@Edad >= 90)
BEGIN
SELECT IdFactura, Descripcion, IdProveedor, Importe, DATEDIFF(day, FechaRecepcion, GETDATE()) AS Dia, Aplicada
FROM Facturas
WHERE (Aplicada = 0) AND DATEDIFF(day, FechaRecepcion, GETDATE())>=@Edad
END
ELSE
BEGIN
SELECT IdFactura, Descripcion, IdProveedor, Importe, DATEDIFF(day, FechaRecepcion, GETDATE()) AS Dia, Aplicada
FROM Facturas
WHERE (Aplicada = 0) AND DATEDIFF(day, FechaRecepcion, GETDATE())>=@Edad AND DATEDIFF(day, FechaRecepcion, GETDATE())<=@Edad1
END
GO
Que me devuelve un conjunto de registros que cumplen con la condición que lleva implicita el procedimiento. Y tengo otro procedimeinto almacenado construído de la sgte forma:
Código SQL
[-]
CREATE PROCEDURE spImporteTotalEdadCuentasxPagar
(@Dias integer,
@Dias1 integer,
@Importe money OUTPUT)
AS
SELECT @Importe=IsNull(Sum(Importe),0)
FROM Facturas
WHERE(Aplicada=0) AND DATEDIFF(day,FechaRecepcion, GETDATE())>=@Dias AND DATEDIFF(day,FechaRecepcion, GETDATE())<=@Dias1
GO
El primer procedimiento me devuelve el conjunto de facturas que están sin pagar dentro del rango de días que se le específique, que puede ser 0-30,30-60,60-90 y mas de 90 días. Y el segundo lo cnstruí con la finalidad de que me devoviera el importe total de las facturas sin pagar. Esto funciona bien en sql server 2000, es decir cada procedimiento por separado lo ejecuto pasandóle los parámetros correspondientes y me dan los resultados deseados. Ahora en delphi tengo un formulario con un ado connection, un ado stored procedure, un dbgrid, tres edit y un botón de comando y por supuesto un data source, a través del siguiento código logro que el dbgrid se me llene con los datos que me devuelve el primer procedimiento almecenado:
Código Delphi
[-]
begin
ADOSPEdadCuentas.Close;
ADOSPEdadCuentas.Parameters.ParamByName('@Edad').Value := StrToInt(EditEdad2.Text);
if StrToIntDef(EditEdad2.Text,0) = 90 then
begin
ADOSPEdadCuentas.Parameters.ParamByName('@Edad1').Value := VarNull;
end
else
ADOSPEdadCuentas.Parameters.ParamByName('@Edad1').Value := StrToInt (EditEdad1.Text);
ADOSPEdadCuentas.Open;
end;
El segundo procedimiento almacenado lo tengo nada más para que me devuelva el total de las facturas sin pagar, y pienso asignarle el valor de este parámetro a un edit, ahora mi duda es la siguiente puedo manipular ambos procedimientos dentro de las mismas líneas de códigos anteriores?. Puesto como pueden pareciar este segundo procedimiento almacenado tiene un parámetro de salida y para hecerlo tendría que ejecutar el método execpro para que funcione, al menos eso es lo que tengo entendido, el hecho es que se me complica un tanto esto y aveces cuando trato de hacerlo me genera varios errorres. Ojala me hayan enetendido y puedan ayudarme a encontrar una solución. A lo mejor en vez de dos con un solo procedmiento almecenado yo podría resolver esto. Pero hasta el momento no se como hacerlo. Muchas gracias y disculpen mi desconocimiento.