Prohibir Añadir Registros con un botón y dependiendo de una condición- ACCESS

Llevo muchos días con un problema que no se solucionar y quizás para alguno de vosotros sea de lo más sencillo.

Tengo un formulario donde se van anadiendo registros y quiero que con un botón no se permita añadir más registros. También se tendría que bloquear si el numero de TOTALES supera cierto numero. Hasta ahí ningún problema, el problema es que si cierro la aplicación y la vuelvo a abrir la condición de Me. Allowadditions se renueva. He intentado ponerlo sobre el valor de un campo de los registros del tipo si/no, diciendo que si el campo es igual a SI me permita añadir registros y si el campo es NO que no me permita. El problema es que esta tabla se vacía al final del día y al no haber registros la condición da un error al cargarse el formulario.

Private Sub Button_Block_Click()
Me.Ch_Permission_Eib_Wed = False
Me.AllowAdditions = False
Me.AllowDeletions = False
Me.AllowEdits = False
End Sub
Private Sub Button_Unblock_Click()
Me.Ch_Permission_Eib_Wed = True
Me.AllowAdditions = True
Me.AllowDeletions = True
Me.AllowEdits = True
End Sub
Private Sub Form_AfterInsert()
If Me.Text_Totalbooked.Value >= Me.Text_MaxGuest.Value Then
    maxguestvar = True
Else
    maxguestvar = False
End If
If Me.Ch_Permission_Eib_Wed = False Then
Me.AllowAdditions = False
Me.AllowEdits = False
Me.AllowDeletions = False
Else
             If maxguestvar = True Then
             Me.AllowAdditions = False
             Me.AllowEdits = True
             Me.AllowDeletions = True
             Else
             Me.AllowAdditions = True
             Me.AllowEdits = True
             Me.AllowDeletions = True
             End If
End If
End Sub
Private Sub Form_AfterUpdate()
If Me.Text_Totalbooked.Value >= Me.Text_MaxGuest.Value Then
    maxguestvar = True
Else
    maxguestvar = False
End If
If Me.Ch_Permission_Eib_Wed = False Then
Me.AllowAdditions = False
Me.AllowEdits = False
Me.AllowDeletions = False
Else
             If maxguestvar = True Then
             Me.AllowAdditions = False
             Me.AllowEdits = True
             Me.AllowDeletions = True
             Else
             Me.AllowAdditions = True
             Me.AllowEdits = True
             Me.AllowDeletions = True
             End If
End If
End Sub
Private Sub Form_Load()
If Category = 1 Or Category = 2 Then
      Me.Button_Block.Enabled = True
      Me.Button_Unblock.Enabled = True
Else
      Me.Button_Block.Enabled = False
      Me.Button_Unblock.Enabled = False
End If
If Me.Text_Totalbooked.Value >= 24 Then
    maxguestvar = True
Else
    maxguestvar = False
End If
If Me.Ch_Permission_Eib_Wed = False Then
Me.AllowAdditions = False
Me.AllowEdits = False
Me.AllowDeletions = False
Else
             If maxguestvar = True Then
             Me.AllowAdditions = False
             Me.AllowEdits = True
             Me.AllowDeletions = True
             Else
             Me.AllowAdditions = True
             Me.AllowEdits = True
             Me.AllowDeletions = True
             End If
End If
End Sub

Este seria el codigo sobre los eventos del formulario en el caso donde el campo si/no esta activado y en "Me.Ch_Permission_Eib_Wed" y la suma de totales esta en "Me.Text_Totalbooked.Value". Pero como ya he dicho, si no hay ningun registro da un error ya que no encuentra el ningun valor en dicho campo.

Habia pensado quizas en asignar una variable del tipo boolean y que cambiara apretando el boton. Pero estariamos en las mismas, al cerrar la aplicacion el valor de la variable se perderia. ¿Alguna idea?

1 Respuesta

Respuesta
2

Sergio: La verdad es que ahora no me queda claro si el error lo hace saltar el >> Me.Text_Totalbooked.Value al no tener valor o es el Check. En cualquier caso quizá te propongo primero racionalizar un poco el código y después te hago alguna recomendación, que si no te resuelve el problema, me puedes comentar:

1.- El Código

Private Sub Form_Load()
If Category = 1 Or Category = 2 Then
     Me.Button_Block.Enabled = True
     Me.Button_Unblock.Enabled = True
Else
     Me.Button_Block.Enabled = False
     Me.Button_Unblock.Enabled = False
End If
If Me.Text_Totalbooked.Value >= 24 Then
      maxguestvar = True
Else
     maxguestvar = False
End If
If Me.Ch_Permission_Eib_Wed = False Then
    Call BloqueaTodo           
Else
    If maxguestvar = True Then
     Call EditaElimina                      
    Else
     Call DesbloqueaTodo
    End If
End If
End Sub
Private Sub Button_Block_Click()
Me.Ch_Permission_Eib_Wed = False
Call BloqueaTodo
End Sub
Private Sub Button_Unblock_Click()
Me.Ch_Permission_Eib_Wed = True
Call DesbloqueaTodo
End Sub
Private Sub Form_AfterInsert()
If Me.Text_Totalbooked.Value >= Me.Text_MaxGuest.Value Then
       maxguestvar = True
Else
       maxguestvar = False
End If
If Me.Ch_Permission_Eib_Wed = False Then
    Call BloqueaTodo            
Else
     If maxguestvar = True Then
    Call EditaElimina
     Else
    Call DesbloqueaTodo
     End If
End If
End Sub
Private Sub Form_AfterUpdate()
If Me.Text_Totalbooked.Value >= Me.Text_MaxGuest.Value Then
    maxguestvar = True
Else
    maxguestvar = False
End If
If Me.Ch_Permission_Eib_Wed = False Then
      Call BloqueaTodo
Else
     If maxguestvar = True Then
    Call EditaElimina
     Else
    Call DesbloqueaTodo                         
     End If
End If
End Sub
Sub EditaElimina()
With Me
      .AllowAdditions = False
      .AllowEdits = True
      .AllowDeletions = True
End With
End Sub
Sub DesbloqueaTodo()
With Me
     .AllowAdditions = True
     .AllowEdits = True
     .AllowDeletions = True
End With
End Sub
Sub BloqueaTodo()
With Me
    .AllowAdditions = False
    .AllowEdits = False
    .AllowDeletions = False
End With
End Sub

2.- El Error lo puedes controlar en el Load del Formulario con

If IsNull(Me.Text_Totalbooked) Or IsError(Me.Text_Totalbooked) Then

'Algo

Else

'Otra cosa

End If

Para el Error, mira si quieres éste enlace:

https://support.office.com/en-us/article/IsError-Function-40a89200-138b-4e60-b254-34aea51b2e6b 

Un saludo >> Jacinto

¡Gracias Jacinto! Lo pruebo esta tarde. La verdad es que no pensé en el control de errores. De todos modos el hecho de tener que poner un campo más en la tabla no me acaba de convencer.

Mil gracias. Te cuento luego.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas