Access - Problemas con DMax

   
Vista:

Problemas con DMax

Publicado por Vicente (29 intervenciones) el 18/05/2009 22:01:22
Hola a todos:

Tengo un formulario en el que quiero insertar un contador no autonumérico, de manera que como máximo se puedan dar de alta 10 alumnos por cada población (son 12 poblaciones). Para ello intento utilizar la función DMax y donde creo que estoy fallando es en el criterio, valor que obtengo de la columna 0 de un combo (el de las poblaciones). Os copio aqui el código para ver si me podeis ayudar. He revisado la ayuda de Access y no me saca del error.

Private Sub cuadro_poblaciones_AfterUpdate()

Dim criterio As Byte

criterio = Me.cuadro_poblaciones.Column(0)

Me.autonumerico = DMax("[autonumerico]", "Alumnos", "[id_poblacion] = criterio")

End Sub

Donde autonumerico (byte) es donde aparecerá ese código máximo para esa población en concreto, elegida en el combo. Luego ya limitaré a 10 el máximo de este autonumérico e iré sumando 1, si aún no ha llegado a 10.

Agradeciendo de antemano vuestra colaboración

Vicente
Valencia (España)
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

RE:Problemas con DMax

Publicado por Jefferson (381 intervenciones) el 18/05/2009 23:58:56
Hola, Vicente

Amigo cual es el error, porque el codigo esta bien....

Desde Venezuela
Jefferson
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

RE:Problemas con DMax

Publicado por Vicente (29 intervenciones) el 19/05/2009 09:48:50
Hola Jefferson

Eso pensaba yo, que está bien el código, ya no sé si pensar si es por el tipo de datos o que. Sin embargo, cuando sustituyo la variable criterio, por un número, funciona de maravilla y lo curioso es que dicha variable si toma el valor correcto. En fin, el error que me da es el siguiente:

Se ha producido el error '2471' en tiempo de ejecución:

La expresión que ha especificado como parámetro de la consulta produjo el error 'criterio'

Y ya digo, al depurar el código, la variable criterio (byte) recibe el valor deseado, pero al utilizarla como parámetro de consulta, me da este error.

Gracias por tu tiempo

Vicente
Valencia (España)
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

RE:Problemas con DMax

Publicado por Vicente (29 intervenciones) el 19/05/2009 10:15:06
Acabo de encontrar cómo hacer para que no dé el error y es quitando las comillas del parámetro de consulta, dejándolo como sigue:

Me.autonumerico = DMax("[autonumerico]", "Alumnos", [id_poblacion] = criterio)

Aunque ahora el error es otro. Es decir, no me tiene en cuenta el parámetro, simplemente me devuelve el máximo valor de toda la tabla, sin tener en cuenta el id_poblacion y mucho menos cuando lo cambio en el combo. Bueno seguiré investigando y cualquier ayuda será bien recibida.

Saludos

Vicente
Valencia (España)
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

RE:Problemas con DMax

Publicado por Enrique (1299 intervenciones) el 19/05/2009 13:16:16
Hola:
Si en lugar de usar un criterio pusieras directamente un número, estaría bien como lo tienes:
Me.autonumerico = DMax("[autonumerico]", "Alumnos", "[id_poblacion] = 5")

pero al usar una variable como criterio, la cosa cambia un poco:
Me.autonumerico = DMax("[autonumerico]", "Alumnos", "[id_poblacion] =" & criterio)

Observa que las comillas se trasladan hasta justo después del signo igual y se enlaza el criterio mediante un signo &.

En caso de que te falle, prueba cambiando la definición de la variable criterio de As Byte por As Integer.

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

RE:Problemas con DMax

Publicado por Vicente (29 intervenciones) el 19/05/2009 14:46:22
Hola Enrique

Gracias por tu aclaración, ha funcionado perfectamente. Ahora el problema que tengo es que como es un "autonumérico", cuando ya hay algún valor previo el sumarle 1 unidad no me da ningún problema, que sí surge cuando parto de un valor en blanco, es decir, si para alguna población ya hay algún alumno registrado, la función

Dim criterio As Byte

criterio = Me.cuadro_poblaciones.Column(0)

Me.autonumerico = DMax("[autonumerico]", "Alumnos", "[id_poblacion] =" & criterio) + 1

funciona perfectamente, pero si en esa población no hay ningún alumno registrado, el autonumérico previo es cero o nulo (eso no lo tengo muy claro), entonces no suma nada, es decir, no aparece un 1 como primer alumno registrado de esa población, solo lo deja en blanco.

Repito, gracias

Saludos

Vicente
(Valencia) España
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

RE:Problemas con DMax

Publicado por Enrique (1299 intervenciones) el 19/05/2009 16:18:48
Hola Vicente:

Prueba con esto:

If Me.RecordsetClone.RecordCount > 0 Then
Me.autonumerico = DMax("[autonumerico]", "Alumnos", "[id_poblacion] =" & criterio) + 1
Else
Me.Autonumerico = 1
End If

Ya me dirás si te vale o tendremos que hacer alguna rectificación pués aunque no lo he probado, creo que te servirá

Saludos
Enrique
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

RE:Problemas con DMax

Publicado por Vicente (29 intervenciones) el 19/05/2009 16:55:17
Hola Enrique:

Muchas gracias por tu ayuda y tu tiempo. También he probado lo siguiente que va en tu linea y también me ha funcionado, lo que dejo aquí también por si sirve:

Dim criterio As Byte
criterio = Me.cuadro_poblaciones.Column(0)

If IsNull(Me.autonumerico) Then
Me.autonumerico = 1
Else
Me.autonumerico = DMax("[autonumerico]", "Alumnos", "[id_poblacion] =" & criterio) + 1

End If

Ambas formas me han funcionado bien, así que muchas gracias por la orientación.

Saludos

Vicente
Valencia (España)
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

RE:Problemas con DMax

Publicado por Enrique (1299 intervenciones) el 19/05/2009 16:56:03
Estoy pensando que como el RecorsetClone seguramente no va a tener en cuenta el criterio de restricción de registros que aplicas, va a contar todos los registros cargados en el Recordset del Formulario y no va a funcionar. En ese caso cambia por esto otro:

Dim Busca
Busca = Dlookup("[autonumerico]", "Alumnos", "[id_poblacion] =" & criterio)
If Busca >0 Then
Me.autonumerico = DMax("[autonumerico]", "Alumnos", "[id_poblacion] =" & criterio) + 1
Else
Me.Autonumerico = 1
End If

Te lo estoy escribiendo de memoria, sin probarlo. Si no funciona hay otras alternativas.

Enrique
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

RE:Problemas con DMax

Publicado por Vicente (29 intervenciones) el 19/05/2009 17:20:25
Hola Enrique

En mi nota anterior me dejé una parte del código que he comprobado que luego es necesario incluir y veo que seguimos más o menos coincidiendo y eso me alegra, significa que ya voy aprendiendo algo de vosotros
Es la siguiente:

Dim criterio As Byte

criterio = Me.cuadro_poblaciones.Column(0)
Me.autonumerico = DMax("[autonumerico]", "Alumnos", "[id_poblacion] =" & criterio)


If IsNull(Me.autonumerico) Then
Me.autonumerico = 1
Else
Me.autonumerico = DMax("[autonumerico]", "Alumnos", "[id_poblacion] =" & criterio) + 1

End If

Saludos y gracias

Vicente
Valencia (España)
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