Access - totalizar un campo en un formulario en el que hay filtros

 
Vista:

totalizar un campo en un formulario en el que hay filtros

Publicado por vicente (23 intervenciones) el 01/09/2018 14:33:55
Hola. Empezaré desde el principio.
Por veces anteriores sabréis que estoy con una BD Biblioteca que creo muy avanzada para lo que pretendía sin tener ningún conocimiento de Access y menos en Visual Basic.
Ahora mismo estoy finalizándola –La BD-, pero me van surgiendo ideas, igual descabelladas, pero que creo conveniente intentar resolverlas porque dan un empaque a toda la BD.
Como es una biblioteca de una empresa –como ya dije en algún otro momento- y que la compra de nuevos libros se genera por el alquiler del libro a los empleados o las donaciones que estos hacen, he pensado que se podría tener una atención con aquellos que su contribución haya sido generosa a lo largo del tiempo, bien sea porque es un asiduo lector/a o a su generosidad en el “día del libro”, para lo que he generado una consulta que tiene los campos :”NIF, Usuario” de la tabla usuarios y de la tabla Donaciones los campos UsuarioD, DNI_NIF, Fecha, DonaciónD, IdSituaciones y un campo Tot_donaciones: DSuma("DonaciónD";"[Consulta donaciones]";"usuari"). La consulta está vinculada a un formulario CONSULTA DE DONACIONES el cual tiene dos filtros, uno por el empleado, y otro para fechas (nicial y final).
El formulario funciona “PARCIALMENTE” correctamente con la siguiente formulación:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Private Sub cmdFiltrar_Click()
    Dim Filtro As String
    Dim Usuari As String
    If Not IsNull(Me.Usuari) And Me.Usuari <> "" Then
        Usuari = "Usuari LIKE '*" & Me.Usuari & "*'"
        Me.Section(0).Visible = True
    Else
        Usuari = ""
    End If
    If IsNull(Me.txtFechaInicio) And IsNull(Me.txtFechaFin) Then
        Fecha = ""
    Else
        Fecha = "Fecha BETWEEN #" & Format(Nz(Me.txtFechaInicio, #1/1/1900#), "mm-dd-yyyy") & _
                    "# AND #" & Format(Nz(Me.txtFechaFin, #12/31/9999#), "mm-dd-yyyy") & "#"
    End If
    If Usuari <> "" Then
        Filtro = Usuari
    End If
      If Fecha <> "" Then
        If Filtro <> "" Then
            Filtro = Filtro & " AND " & Fecha
        Else
            Filtro = Fecha
        End If
    End If
 
    If Filtro <> "" Then
        Me.[Subformulario búsqueda del donante].Form.Filter = Filtro
 
        Me.[Subformulario búsqueda del donante].Form.FilterOn = True
    Else
        Me.[Subformulario búsqueda del donante].Form.FilterOn = False
    End If
 
End Sub

SIGUIENDO PARA QUITAR FILTROS CON LA SIGUIENTE INSTRUCCIÓN:
1
2
3
4
5
6
7
8
Private Sub cmdQuitarFiltro_Click()
Me.Section(0).Visible = True
       Me.[Subformulario búsqueda del donante].Form.Filter = ""
       Me.[Subformulario búsqueda del donante].Form.FilterOn = False
 
    Me.Usuari = Null
    Me.txtFechaInicio = Null
    Me.txtFechaFin = Null

Me gustaría saber de qué manera puedo hacer para que dependiendo del filtro que utilice, uno, dos o ninguno, el campo Tot_donaciones apareciera con las cantidades donadas por el empleado, por el empleado en el tiempo acotado o si no hay acotamiento el importe total recaudado por el concepto “DONACIÓN”.

Anteriormente y antes de encontrar la solución indicada arriba utilizaba la consulta “Consulta de_donaciones” con un filtro Como "*" & [Forms]![Donaciones]![Usuari] & "*" y la instrucción al comando consultar era la que sigue:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Dim CuentaRegistro As Integer
Me.Section(0).Visible = False
DoCmd.Requery
Me.Refresh
If IsNull(Me![Usuari]) Then
    MsgBox "Debe de introducir un dato, repita la consulta.", vbExclamation, "CONSULTA FALLIDA"
 
    Me!Usuari.SetFocus
    Else
 
    CuentaRegistro = DCount("*", "Consulta donaciones")
    Me!encontrados = CuentaRegistro
   If CuentaRegistro >= 1 Then
    Me.Section(0).Visible = True
      [Subformulario búsqueda del donante].SetFocus
     Else
    MsgBox "REGISTRO NO ENCONTRADO, VUELVA A INTENTARLO.", vbExclamation, "Búsqueda Fallida"
 
    Me!Usuari.SetFocus
    Me!Usuari = Null
    Me.Section(0).Visible = False
   End If
End If

Con esta instrucción conseguía el número de apuntes y el importe donado por el empleado pero ahora no sé de que manera conjugar ambas formulaciones para que el resultado sea el esperado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

totalizar un campo en un formulario en el que hay filtros

Publicado por Anonimo (3330 intervenciones) el 01/09/2018 22:24:30
Si lo que se necesita es conocer la forma de calcular los datos de un formulario filtrado, se hace igual que los de un formulario sin filtrar.

Si el formulario es continuo:
.- el total de registros filtrados:
Un cuadro de texto independiente, su origen de datos
=Count(*)
(es probable que lo traduzca 'al idioma local')

Una suma de cualquiera de sus campos:
Un cuadro de texto independiente, su origen de datos
= Sum([nombre del campo])
(también puede ser traducido al idioma local)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

totalizar un campo en un formulario en el que hay filtros

Publicado por vicente (23 intervenciones) el 09/09/2018 19:35:07
Muchas gracias por tu tiempo Anónimo.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar