ya resolvi mi problema , voy repasar mi problema y la soluccion
hice esta función en un modulo de acces para calcular los días entre dos fecha sin contar sabado y domingo.
Código:
Public Function Dias_sin_fin_semana(Desde As Date, Hasta As Date) As Integer
Dim dias As Integer
Dim i As Date
dias = 0
i = Desde
Do While i <= Hasta
If Weekday(i, 1) >= 2 And Weekday(i, 1) <= 6 Then
dias = dias + 1
End If
i = i + 1
Loop
Dias_sin_fin_semana = dias
End Function
Luego use esta función en una query de access que quize utilizar en delphi, pero mis compañeros del foro me explicaron que no puedo usar esta funciones desde delphi.
Código SQL
[-]
SELECT
proveedores.Nombre AS proveedor,
Clientes.Nombre AS cliente,
REG_GARANTIA.serie,
REG_GARANTIA.Codpro,
REG_GARANTIA.Producto,
REG_GARANTIA.Problema,
REG_GARANTIA.estado_telefono,
REG_GARANTIA.FECHA_INGRESO,
REG_GARANTIA.FECHA_ENVIO,
Dias_sin_fin_semana(REG_GARANTIA.FECHA_ENVIO,DATE()) AS DIAS
FROM
(REG_GARANTIA INNER JOIN Clientes ON REG_GARANTIA.CodCli=Clientes.CodCli) INNER JOIN proveedores ON REG_GARANTIA.ID_PROVEEDOR=proveedores.registro
WHERE
REG_GARANTIA.ID_ESTADO)=2;
asi que decidi eliminar esa funcion de la query y cree la funcion en delphi para hacer el calculo en delphi, pero necesitaba hacer un filtro de registros. usando el mismo campo calculado
aqui esta mi funcion en delphi
Código Delphi
[-]
function Dias_sin_fin_semana(desde, hasta: double): integer;
var
dias:integer;
iouble;
begin
dias:=0;
i:=desde;
while i <= hasta do
begin
if (DayOfWeek(i) >=2) and (DayOfWeek(i) <=6) then
dias := dias + 1;
i:=i + 1;
end;
result:=dias;
end;
Realize mi calculo en delphi usando un campo calculado
Código Delphi
[-]
procedure TDmReport_Garantias.REVISION_PROVEECalcFields(DataSet: TDataSet);
begin
REVISION_PROVEEDIAS.AsFloat:=Dias_sin_fin_semana(REVISION_PROVEEFECHA_ENVIO.AsDateTime,Date);
end;
Aplique mi filtro sobre el campo calculado. usando el evento OnFilterRecord que se ejecuta despues del evento open del TAdoquery.
Código Delphi
[-]
procedure TDmReport_Garantias.REVISION_PROVEEFilterRecord(
DataSet: TDataSet; var Accept: Boolean);
begin
Accept := REVISION_PROVEEDIAS.AsFloat > 20;
end;
Hay que tener el cuidade de poner a True la propiedad Filtered, antes llamar el evento open
Código Delphi
[-]
REVISION_PROVEE.Close;
REVISION_PROVEE.Filtered:=True;
REVISION_PROVEE.Open;
Espero me halla explicado bien