Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   accesar a funciones de usuarios en modulos de ms access (https://www.clubdelphi.com/foros/showthread.php?t=81121)

Chogo 12-10-2012 21:41:57

accesar a funciones de usuarios en modulos de ms access
 
hola amigos..

necesito su ayuda please, tengo un adoquey con una sentencia sql, esta sentencia utiliza una funcion que programe con vba en un modulo de access.

cuando ejecuto la setencia en delphi atravez del adoquery no funciona. no reconoce la funcion que esta en modulo de access

les agradecere su ayuda.

Casimiro Notevi 12-10-2012 22:58:18

Nuestra bola de cristal está en el taller pasando la revisión ;)
No sabemos qué quieres decir exactamente con "no funciona", ni vemos la sentencia que has puesto, ni podemos adivinar el error que te sale, ni nada de nada :confused:

Chogo 12-10-2012 23:06:50

Disculpe, pense que no seria necesario, porque la sentencia funciona bien dentro de access, pero en delphi no funciona por que no me reconoce la funciones que cree dentro de ms access con vba.

El problema es con la funcion "Dias_sin_fin_semana", esta yo la hize y la almacene en un modulo de access.

Esta query funciona bien en access, pero en delphi no, me dice que no reconoce la funcion

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;

Casimiro Notevi 12-10-2012 23:34:06

Cita:

Empezado por Chogo (Mensaje 446984)
El problema es con la funcion "Dias_sin_fin_semana", esta yo la hize y la almacene en un modulo de access.
Esta query funciona bien en access, pero en delphi no, me dice que no reconoce la funcion

¿Y el código delphi donde la llamas?, ¿cómo es?, ¿no funciona ninguna función o solamente esa?, ¿ha funcionado alguna vez?...

Chogo 13-10-2012 00:36:33

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;
    i:Double;

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

Casimiro Notevi 13-10-2012 00:52:08

Gracias por comentarlo, siempre le puede venir bien a alguien que quiera hacer algo similar :)


La franja horaria es GMT +2. Ahora son las 01:36:14.

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