Access - ayuda con Dmax y varios criterios

   
Vista:

ayuda con Dmax y varios criterios

Publicado por Luis (24 intervenciones) el 12/03/2016 05:02:45
Estimados:
Estoy intentado usar dmax para buscar en la tabla asientos el ultimo numero se registra en el campo Ncomprob e incrementarlo en 1, de acuerdo al mes y año del campo fecha. Para esto muestra error al escribir el código que se indica a continuación:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Fecha_AfterUpdate()
Dim Folioo As Integer
Dim Anyo As Integer
Dim Mesyo As Integer
Anyo = Year(Me.Fecha)
Mesyo = Month(Me.Fecha)
If IsNull(Me.Fecha) Then
        MsgBox "La Fecha debe de tener un valor y ahora es Nulo", vbCritical, "FALTA FECHA"
        Exit Sub
End If
Folioo = DMax("[NComprob]", "[asientos]", "(((Month(Fecha))=Mesyo)AND((year(Fecha))=Anyo))") + 1
NComprob = Folioo
End Sub

Agradeciendo la ayuda, les saluda
Luis
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

ayuda con Dmax y varios criterios

Publicado por Emilio (6 intervenciones) el 12/03/2016 08:21:41
Hola!

en primer lugar yo verificaría la existencia de la fecha antes de calcular mes y año, ahí tienes dos posibles errores.
En segundo lugar al construir el criterio del DMax veo demasiados paréntesis, sobra la mayoría y sobre todo faltan espacios por delante y detrás del AND.

Aparte de ello, sin saber cual es el mensaje de error, y donde se produce, todo es dar palos de ciego.

Saludos
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

ayuda con Dmax y varios criterios

Publicado por Enrique Heliodoro (1663 intervenciones) el 12/03/2016 09:29:11
Si el mes y año son parte del mismo dato, deberían ir juntos y no diferenciados.

Dado que se parte de una fecha, obtener ese dato es sencillo: la función FORMAT.

Tenemos este evento:

Private Sub Fecha_AfterUpdate()
.......
End Sub


Lo iremos rellenando paso a paso
Verificamos que hay un dato que es una fecha valida, si no lo es : mensaje y salida
IF Not IsDate (Me.Fecha) Then MsgBox "La Fecha debe de tener un valor y ahora es Nulo", vbCritical, "FALTA FECHA": Exit Sub

Private Sub Fecha_AfterUpdate()
IF Not IsDate (Me.Fecha) Then MsgBox "La Fecha debe de tener un valor y ahora es Nulo", vbCritical, "FALTA FECHA": Exit Sub
.......
End Sub

Solo se precisa una variable (y apurando se podría prescindir de ella) para obtener año+mes y es de texto (que es lo que devuelve FORMAT)
Dim MFecha As String

Private Sub Fecha_AfterUpdate()
IF Not IsDate (Me.Fecha) Then MsgBox "La Fecha debe de tener un valor y ahora es Nulo", vbCritical, "FALTA FECHA": Exit Sub

Dim MFecha As String
.......
End Sub

Le damos valor a la variable:
MFecha = Format (Me.Fecha, "YYMM")

Private Sub Fecha_AfterUpdate()
IF Not IsDate (Me.Fecha) Then MsgBox "La Fecha debe de tener un valor y ahora es Nulo", vbCritical, "FALTA FECHA": Exit Sub
Dim MFecha As String

MFecha = Format (Me.Fecha, "YYMM")
.......
End Sub

Para obtener el mayor de los actuales utilizamos DMax y como condición comparamos el dato calculado con homónimo en la tabla:
"Format ([Fecha], 'YYMM') = '" & MFecha & "'"

Con lo que el Dmax debería ser algo como:
DMax("[NComprob]", "[asientos]", "Format (Fecha, 'YYMM') = '" & MFecha & "'")

Pero ... puede ser el primero y el resultado de DMax seria un NULL (no hay ninguno en la tabla), lo tratamos con NZ
Nz( DMax("[NComprob]", "[asientos]", "Format (Fecha, 'YYMM') = '" & MFecha & "'") , 0)

Obtenemos un numero (el mayor de los existentes o un cero para el primero), lo incrementamos:
Nz( DMax("[NComprob]", "[asientos]", "Format (Fecha, 'YYMM') = '" & MFecha & "'") , 0) + 1

Y ya incrementado, se lo asignamos a su destino definitivo:
Me.NComprob = Nz( DMax("[NComprob]", "[asientos]", "Format (Fecha, 'YYMM') = '" & MFecha & "'") , 0) + 1

Private Sub Fecha_AfterUpdate()
IF Not IsDate (Me.Fecha) Then MsgBox "La Fecha debe de tener un valor y ahora es Nulo", vbCritical, "FALTA FECHA": Exit Sub
Dim MFecha As String
MFecha = Format (Me.Fecha, "YYMM")

Me.NComprob = Nz( DMax("[NComprob]", "[asientos]", "Format ([Fecha], 'YYMM') = '" & MFecha & "'") , 0) + 1
End Sub


Verifica la sintaxis, pues esta escrito aquí y al vuelo
No me parece correcto utilizar Fecha como nombre de un campo, es una palabra reservada del sistema (Fecha <=> Date) y en ocasiones eso puede ser problemático, si aun se esta a tiempo, se debería de rectificar ese futuro problema.
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