Incrementar el valor de un campo en Access

Tengo un formulario el cual recopila el ingreso de personas a una diferentes salas de computo (6 salas para ser exactos), en el formulario hay un cuadro combinado en el cual selecciono la sala a la cual ingresara la persona y un cuadro de texto que especifica el número del equipo asignado, al seleccionar una sala especifica he logrado que en el cuadro de texto del numero de sala aparezca el numero del equipo asignado consecutivamente según el número de personas a ingresar. El problema es que al seleccionar otra sala el consecutivo de los equipos no se reinicia si no que toma el siguiente, ¿cómo puedo hacer que cada vez que se realice una selección diferente de sala el numero de equipo se reinicie (para el caso en que sea el primer acceso a dicha sala) o retome el consecutivo para esa sala en especifico?

El código que he usado en el evento después de actualizar en el combo salas es el siguiente:

Private Sub CboSala_AfterUpdate()
Dim Nsal As String

Nsal = Me.CboSala.Value

If Nsal = Me.CboSala.Value Then
Me.Maquina = Nz(DMax("Maquina", "Accesos")) + 1
Else
Me.Maquina = 1
End If

End Sub

1 Respuesta

Respuesta
2

La comparación que haces en el if no tiene sentido, porque siempre se cumplirá la condición al darle dentro del procedimiento el valor a la variable NSal.

Lo que has de hacer es declarar la variable a nivel de módulo y darle valor antes de actualizar el combo. Además te falta ponerle como criterio a DMax que coja el máximo de la sala activa.

Es decir, el código de tu módulo del formulario sería así:

Option Compare Database
Dim Nsal As String
Private Sub CboSala_BeforeUpdate(Cancel As Integer)
Nsal = Me.CboSala.Value
End Sub
Private Sub CboSala_AfterUpdate()
If Nsal = Me.CboSala.Value Then
Me.Maquina = Nz(DMax("Maquina", "Accesos","Sala='" & Nsal & "'")) + 1
Else
Me.Maquina = 1
End If
End Sub

Un saludo.


¡Gracias! 

Hola 

Sveinbjorn El Rojo

Muchas gracias, ya mismo lo he probado y funciona correctamente.

Hola Sveinbjorn

Disculpa que te moleste de nueva cuenta, pero necesito nuevamente tu ayuda en relación al apoyo anterior.

Una vez que ya he ingresado a los usuarios a la respectiva sala (con el uso del código anterior) ahora tengo lo siguiente: Como hago para reiniciar el contador de Maquinas asignadas una vez que determinada sala se desocupa y ahora ingresa un grupo nuevo?

Se me ocurrió crear un botón CmdLimpiar dentro del mismo formulario Accesos ,el cual, después de seleccionar la respectiva sala a "reusar" , "limpie" o reinicie el valor del campo Maquina a 1, de entrada lo hace, pero al seleccionar nuevamente la misma sala  para asignar la maquina consecutiva no me aparece la numero 2, si no que toma el consecutivo de la ultima asignación de dicha sala, como puedo lograr que retome el consecutivo cada vez que limpie determinada sala?

DMax() siempre devuelve el valor máximo del campo. Tu lo que necesitas es el último valor de ese campo, y para eso tienes la función DLast(). Solo tienes que cambiar una por otra. Se usan de la misma forma.

Hola otra vez

He hecho lo que indicas, incluso ya lo intente con Dmin. Pero en la segunda elección de la misma sala continua escribiendo el consecutivo de la ultima asignación de sala. 

Mi código simplón es este:

Private Sub CmdLimpia_Click()
If Nsal = Me.CboSala.Value Then
Me.Maquina = 1

Me.Maquina = Nz(DLast("Maquina", "Accesos", "Sala='" & Nsal & "'"))
End If
End Sub

No me has entendido: lo que te decía era que cambies la función DMax por DLast en el evento después de actualizar del cuadro combinado en el que seleccionas la sala.

El código que pones para el botón no tiene mucho sentido para reiniciar el conteo de la sala (te sobra la linea del DLast)

Otra forma en que podrías hacerlo es usar DMax con más de un criterio para hacer la cuenta, siempre que tengas como mínimo 3 campos (maquina, sala y equipo)

Por ejemplo, para saber el máximo del campo máquina de cada combinación de sala y equipo:

Nz(DLast("Maquina", "Accesos", "Sala='" & Nsal & "' AND Equipo='" & Equipo & "'"))

¡Gracias! 

Tenias razón, estaba entendiendo otra cosa

Con esa pequeña pero gran modificación ya funciona sin problema

Eres mi ídolo!!!   Gracias y saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas