Access - duda con contador

 
Vista:

duda con contador

Publicado por samuel (2 intervenciones) el 11/01/2006 13:21:24
Hola,
mi problema es el siguiente:
he creado un contador para que a cada nuevo registro calcule a partir de la tabla su valor . Para ello en el evento beforeinsert he introducido este código:

Private Sub Form_BeforeInsert(Cancel As Integer)
'Dim dbs As Database, rst As Recordset

Dim criterio As String
Dim bien As String
If Me.NewRecord then
numero_bien.SetFocus
criterio = [Forms]![FORMULARIO_TECNO]![ibercaja]
numero = Nz(DMax("[numero_bien]", "patrapa_bienes", "[ibercaja] = '" & criterio & "'")) + 1
numero_bien.Text = CStr(numero)
End If
End Sub

numero_bien seria el campo contador y me interesaria mostrarlo por pantalla pero al hacer
numero_bien.Text = CStr(numero) me vuelve a ejecutar el beforeinsert creandose un bucle infinito.

Alguien se le ocurre alguna forma de poder mostrar este contador??
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 Alejandro

Cómo mostrar un contador en un formulario sin causar un bucle infinito

Publicado por Alejandro (4142 intervenciones) el 15/06/2023 22:36:09
El problema que estás experimentando se debe a que al modificar el valor de "numero_bien.Text" en el evento "BeforeInsert", se desencadena nuevamente el evento "BeforeInsert", lo que genera un bucle infinito. Para evitar esto, puedes utilizar el evento "Form_Current" en lugar del evento "BeforeInsert" para mostrar el contador en pantalla. A continuación, te proporciono una solución modificada:

1. Abre el formulario en modo de diseño en Access.
2. Haz clic derecho en el encabezado del formulario y selecciona "Ver código" para abrir el editor de VBA.
3. Encuentra el evento "Form_BeforeInsert" y comenta o elimina todo el código que tienes allí.
4. Agrega el siguiente código al evento "Form_Current":

1
2
3
4
5
6
7
8
9
10
Private Sub Form_Current()
    Dim criterio As String
    Dim bien As String
 
    If Me.NewRecord Then
        criterio = [Forms]![FORMULARIO_TECNO]![ibercaja]
        numero = Nz(DMax("[numero_bien]", "patrapa_bienes", "[ibercaja] = '" & criterio & "'")) + 1
        Me.numero_bien.Value = CStr(numero)
    End If
End Sub

5. Guarda y cierra el editor de VBA.
6. Guarda el formulario y prueba nuevamente.

Con esta solución, el contador se actualizará y mostrará correctamente en el campo "numero_bien" sin causar un bucle infinito. El evento "Form_Current" se dispara cada vez que se selecciona o se mueve a un registro diferente en el formulario, lo que permite que el contador se actualice adecuadamente sin causar problemas.

Espero que esta solución resuelva tu problema y te permita mostrar el contador en el formulario sin generar un bucle infinito.
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