Jump to content


Photo

accesar a funciones de usuarios en modulos de ms access


  • Please log in to reply
11 replies to this topic

#1 mguzmanhn

mguzmanhn

    Member

  • Miembros
  • PipPip
  • 13 posts

Posted 12 October 2012 - 01:17 PM

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.

les agradecere su ayuda.
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 12 October 2012 - 01:29 PM

Puedes colocar la sentencia  ?

Con eso podremos comprender mejor tu problemática.

Saludos
  • 0

#3 mguzmanhn

mguzmanhn

    Member

  • Miembros
  • PipPip
  • 13 posts

Posted 12 October 2012 - 01:40 PM

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


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;


  • 0

#4 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 12 October 2012 - 02:25 PM

No es posible usar funciones de access con ADO...  :(  :(  :(  tal vez puedas solucionarlo con una vista...

saludox
  • 0

#5 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1750 posts
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Posted 12 October 2012 - 02:27 PM

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


Exacto, ése es el problema. Intenta convertir tu función externa de VisualBASIC a una función INTERNA de Delphi que te envíe los datos procesados para "pegarlos" a tu sentencia SQL.
  • 0

#6 mguzmanhn

mguzmanhn

    Member

  • Miembros
  • PipPip
  • 13 posts

Posted 12 October 2012 - 02:37 PM

El problema que tengo es necesito hacer ese calculo de esos dias y luego filtrar los datos para un reporte. pero si hago mi funcion en delphi no puedo filtrar esos datos por mi valor calculado
  • 0

#7 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1750 posts
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Posted 12 October 2012 - 03:02 PM

El problema que tengo es necesito hacer ese calculo de esos dias y luego filtrar los datos para un reporte. pero si hago mi funcion en delphi no puedo filtrar esos datos por mi valor calculado


¿Y por qué no? A ver, explícanos.

¿Qué tiene de especial ésa función que no se puede reproducir su funcionalidad en Delphi?
  • 0

#8 mguzmanhn

mguzmanhn

    Member

  • Miembros
  • PipPip
  • 13 posts

Posted 12 October 2012 - 03:26 PM

si se puede hacer en delphi, es mas la traduje de delphi  a vba, pero ya resulvi mi problema, pense que no se podia filtrar datos con campos calculados pero ya averigue como.

gracias por su ayuda
  • 0

#9 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 12 October 2012 - 03:31 PM

si se puede hacer en delphi, es mas la traduje de delphi  a vba, pero ya resulvi mi problema, pense que no se podia filtrar datos con campos calculados pero ya averigue como.

gracias por su ayuda


Sería muy bueno amigo mio que compartieras tu solución para otros compáñeros que llegasen a tener el mismo problema...

Saludos..
  • 0

#10 mguzmanhn

mguzmanhn

    Member

  • Miembros
  • PipPip
  • 13 posts

Posted 12 October 2012 - 03:49 PM

Repasando mi problema

hice esta función en un modulo de acces para calcular los días entre dos fecha sin contar sabado y domingo.


delphi
  1. Public Function Dias_sin_fin_semana(Desde As Date, Hasta As Date) As Integer
  2.       Dim dias As Integer
  3.       Dim i As Date
  4.    
  5.       dias = 0
  6.       i = Desde
  7.      
  8.       Do While i <= Hasta
  9.      
  10.           If Weekday(i, 1) >= 2 And Weekday(i, 1) <= 6 Then
  11.                 dias = dias + 1
  12.           End If
  13.           i = i + 1
  14.       Loop
  15.       Dias_sin_fin_semana = dias
  16.  
  17. 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.

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



delphi
  1. function Dias_sin_fin_semana(desde, hasta: double): integer;
  2. var
  3.     dias:integer;
  4.     i:Double;
  5.  
  6. begin
  7.  
  8.       dias:=0;
  9.       i:=desde;
  10.       while  i <= hasta do
  11.       begin
  12.           if (DayOfWeek(i) >=2)  and (DayOfWeek(i) <=6) then
  13.           dias := dias + 1;
  14.           i:=i + 1;
  15.       end;
  16.       result:=dias;
  17.  
  18. end;



Realize mi calculo en delphi usando un campo calculado


delphi
  1. procedure TDmReport_Garantias.REVISION_PROVEECalcFields(DataSet: TDataSet);
  2. begin
  3.       REVISION_PROVEEDIAS.AsFloat:=Dias_sin_fin_semana(REVISION_PROVEEFECHA_ENVIO.AsDateTime,Date);
  4. end;



Aplique mi filtro sobre el campo calculado. usando el evento OnFilterRecord que se ejecuta despues del evento open del TAdoquery.



delphi
  1. procedure TDmReport_Garantias.REVISION_PROVEEFilterRecord(
  2.   DataSet: TDataSet; var Accept: Boolean);
  3. begin
  4.       Accept := REVISION_PROVEEDIAS.AsFloat > 20;
  5.  
  6. end;



Hay que tener el cuidade de poner a True la propiedad Filtered, antes llamar el evento open



delphi
  1. REVISION_PROVEE.Close;
  2. REVISION_PROVEE.Filtered:=True;
  3. REVISION_PROVEE.Open;



Espero me halla explicado bien
  • 0

#11 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 12 October 2012 - 04:00 PM

Muy muy bien explicado :) muchas gracias por comparirnos la solución....

  • 0

#12 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 12 October 2012 - 04:57 PM

Excelente !!! Gracias amigo, si a alguien más se le presenta una duda similar, ya tiene por dónde comenzar a atacar  (y)

Saludox ! :)
  • 0




IP.Board spam blocked by CleanTalk.