ACCESSoTOTAL / Dudas

En este repositorio resolvemos tus dudas sobre los proyectos que estás realizando en Access y VBA
1 stars 1 forks source link

operar con datos entre registros #24

Open lunasoft2001 opened 1 year ago

lunasoft2001 commented 1 year ago

Descripción del problema: operar con datos entre registros

Para operar con datos entre registros puedes visitar este enlace: Tecsys Proyectos Informáticos S.L. (accessaplicaciones.com)

Si utilizas subconsultas, el proceso se va a ralentizar una barbaridad. Mihura propone usar una función para realizar estas operaciones.

La función en tu caso sería esta:

'---------------------------------------------------------------------------------------------
' Autor : JUANJO LUNA -Lunasoft- usando ejemplo de JESUS MANSILLA CASTELLS -Mihura-
' Fuente: https://accessaplicaciones.com/ejemplos.html#sq03
'---------------------------------------------------------------------------------------------
Public Function RT_DividirSQL(nDato) As Double
'variable que no se pierde entre las distintas llamadas
Static nDIVISION As Double

     If IsNull(nDato) Or nDIVISION = 0 Then 'si nDato es nulo o cero: Funcion = cero y inicializar
         RT_DividirSQL = 0
        GoTo Inicializar
     End If

     RT_DividirSQL = nDato / nDIVISION

Inicializar:
     nDIVISION = Nz(nDato, 0)

End Function

El uso de Static te permite almacenar el valor del registro anterior. y con los if devolvemos 0 en caso de desbordamiento (divisiones nulas)

Para que funcione correctamente, debemos usar una consulta con un primer registro NULO que inicialice la variable static. Por eso en el sql comenzaremos con un where 1=0 UNION y la consulta en sí.

La consulta sql quedaría así:

SELECT Operaciones.IdOperacion, Operaciones.Fecha, Operaciones.Precio, RT_DividirSQL(null) AS Division
FROM Operaciones WHERE 1=0
UNION SELECT Operaciones.IdOperacion, Operaciones.Fecha, Operaciones.Precio,RT_DividirSQL([Precio]) AS Division
FROM Operaciones;

Archivos: sumacontinua.zip

Termino diciendo que en el fondo la respuesta es de Mihura, que se ha molestado en leer tu pregunta y guiarme para llegar a la respuesta correcta con fines didácticos, ya que tenía interés por aprender este tipo de lógica.

MUUUUUUUchas gracias maestro.