Access - Sacar promedio en "Procedimiento de evento" + Access

 
Vista:
sin imagen de perfil

Sacar promedio en "Procedimiento de evento" + Access

Publicado por Miguel (6 intervenciones) el 14/05/2014 16:04:14
Buenos días, tengo un botón en access que cumple la función de promediar unos campos de una tabla, los cuales vienen a ser N1, N2, N3, N4 los cuales ya estan declarados, y me saca el promedio colocando:
1
prom_cl = (u1 + u2 + u3 + u4) / 4
Hasta acá todo bien, pero el problema es que en algunos casos, los alumnos no tienen los 4 campos llenos con notas, y al promerdiar entre 4, no me da el promedio como deberia ser.

Me podrían ayudar con este problema por favor?, deberia tomar los valores de los campos N1, N2, N3, N4, dependiendo si los campos tienen algún valor dentro de ellos, no sé si me dejo entender, pero supongamos que el campo N1 y N4, son los 2 únicos campos que tienen un valor, deberían solo promediar esos 2 campos, muchas gracias por la ayuda anticipada.

Adjunto el código, gracias


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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Private Sub Comando19_Click()
    Dim vcon1 As ADODB.Connection
    Dim alu As ADODB.Recordset
    Dim sql As String
    Dim cod_mat, cod_act, u1, u2, u3, u4, et, prom_cl As Integer
    Dim prom_cn As String
 
    Set vcon1 = CurrentProject.Connection
    Set alu = New ADODB.Recordset
 
        alu.Open "SELECT DISTINCT MAT_COD, ACT_COD, n1, n2, n3, n4,T1ET, idcurso FROM ACTAS_DETALLE;", vcon1, adOpenStatic, adLockReadOnly
        alu.MoveFirst
        Do Until alu.EOF
            cod_mat = alu(0)
            cod_act = alu(1)
            u1 = alu(2)
            u2 = alu(3)
            u3 = alu(4)
            u4 = alu(5)
            et = alu(6)
            cur = alu(7)
            prom_cl = 0
            prom_cn = ""
 
        If (cur = 62 Or cur = 63 Or cur = 59) Then
            Else
                If IsNull(et) Then
                    et = 222
                End If
                    If (u1 = 222 Or u2 = 222 Or u3 = 222 Or et = 222) Then
                        If (cod_act = 1161 Or cod_act = 1163 Or cod_act = 1168 Or cod_act = 1170 Or cod_act = 1175 Or cod_act = 1177) Then
                            prom_cl = 0
                        Else
                            prom_cl = 222
                        End If
                    Else
                        prom_cl = (u1 + u2 + u3 + u4)
                    End If
                End If
                If prom_cl >= 1 And prom_cl <= 10 Then
                    prom_cn = "C"
                ElseIf prom_cl >= 11 And prom_cl <= 12 Then
                    prom_cn = "B"
                ElseIf prom_cl >= 13 And prom_cl <= 18 Then
                    prom_cn = "A"
                ElseIf prom_cl >= 19 And prom_cl <= 20 Then
                    prom_cn = "AD"
                End If
            End If
            sql = "UPDATE DETA_ACTA SET T1PU1=" & prom_cl & ",T1PU1CL='" & prom_cn & "' WHERE MAT_COD=" & cod_mat & " AND ACT_COD=" & cod_act & "; "
            vcon1.Execute (sql)
        alu.MoveNext
        Loop
        alu.Close
        vcon1.Close
        MsgBox ("LOS PROMEDIOS FUERON CALCULADOS SATISFACTORIAMENTE")
 
End Sub
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
Imágen de perfil de Toni

Sacar promedio en "Procedimiento de evento" + Access

Publicado por Toni (129 intervenciones) el 14/05/2014 23:42:25
Hola Miguel,

Leyendo tu pregunta y sin entrar mucho en tu código, prueba a utilizar la función NZ para que si hay algún campo que no tiene valor te lo tenga en cuenta con valor cero.

prom_cl = (u1 + u2 + u3 + u4) / 4

prom_cl = nz(u1,0) + nz(u2,0) + ...etc.. etc...

Yo en esos cálculos siempre lo hago así y no tengo ningún problema.

Saludos
Toni
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
sin imagen de perfil

Sacar promedio en "Procedimiento de evento" + Access

Publicado por Miguel (6 intervenciones) el 15/05/2014 15:43:51
Muchas gracias por la respuesta Toni, nz me está ayudando, pero tengo otra consulta, en este caso como podría hacer para que me divida contando los campos que no tengan valor nulo?, o sea me dejo entende un poquito, para la suma no tengo problemas, pero para la división si.

Un ejemplito

tengo los campos u1, u2, u3, u4

u1 = 10
u2 = null
u3 = null
u4 = 12

el promedio debería de darme solo tomando los campos u1 y u2, pero no todos los casos tienen solo los campos u2 o u3 vacios, pueden haber excepciones las cuales tengan los siguientes campos llenos

u1= 12
u2 = 08
u3 = 11
u4 = null

Entonces lo que necesito, es hacer la suma de los 4 casilleros, pero para sacar el promedio de los 4 campos (o la división de estos), necesito que solo me tome los campos que tengan un valor dentro.

Otra vez muchas gracias Toni, la ayuda es muy agradecida
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
Imágen de perfil de Toni

Sacar promedio en "Procedimiento de evento" + Access

Publicado por Toni (129 intervenciones) el 15/05/2014 19:33:47
Hola,

mira si así te sirve:


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
Private Sub Comando8_Click()
    Dim Contador As Integer
    Dim Sumatotal As Double
 
    If Me.u1.Value > 0 Then
        Sumatotal = Sumatotal + Me.u1.Value
        Contador = Contador + 1
    End If
    If Me.u2.Value > 0 Then
        Sumatotal = Sumatotal + Me.u2.Value
        Contador = Contador + 1
    End If
    If Me.u3.Value > 0 Then
        Sumatotal = Sumatotal + Me.u3.Value
        Contador = Contador + 1
    End If
    If Me.u4.Value > 0 Then
        Sumatotal = Sumatotal + Me.u4.Value
        Contador = Contador + 1
    End If
 
    'para que no de error si no hay datos
    If Contador > 0 Then Me.Tx_promedio.Value = Sumatotal / Contador
 
End Sub

Toni
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
sin imagen de perfil

Sacar promedio en "Procedimiento de evento" + Access

Publicado por Miguel (6 intervenciones) el 19/05/2014 14:45:12
Hola Toni, buen día y muchas gracias por responder, como estoy trabajando en un script de visual, no trabaja con cajas de texto, entonces con lo que me pasaste pude modificarlo de esta forma
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
SumaU1 = (u1 + u2 + u3 + u4)
 
            If IsNull(u1) Then
                ContU1 = 0
                Else
                ContU1 = 1
            End If
            If IsNull(u2) Then
                ContU2 = 0
                Else
                ContU2 = 1
            End If
            If IsNull(u3) Then
                ContU3 = 0
                Else
                ContU3 = 1
            End If
            If IsNull(u4) Then
                ContU4 = 0
                Else
                ContU4 = 1
            End If
 
            ContU1 = Nz(ContU1, 0) + Nz(ContU2, 0) + Nz(ContU3, 0) + Nz(ContU4, 0)
 
            If ContU1 > 0 Then prom_cl = SumaU1 / ContU1 + 0.1
Pero tuve que declarar 4 contadores :S, se puede trabajar con 1 solo contador? quizá con un for?

Gracias por las respuestas
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