Código en access para impedir que un registro avance si el primero queda vacio

Primero:

Como puedo hacer para que un campo de un formulario no avance si antes cumpla con la obligatoriedad de ser llenado, cabe indicar que ciertos campos son necesarios de llenar y otros no.

¿Qué código debo utilizar y en que evento?

Segundo:

Tengo un subformulario con un campo de cuadro combinado llamado "ID_Producto", el mismo que me permite seleccionar la cuenta del producto hacer ingresado, eh creado un código para que el mismo producto no se me registre, pero me falta un detalle que no me permita seguir sino elijo otra opción de cuenta, y a su vez cuando me arroje el mensaje de aviso, me borre la opción repetida seleccionada, para que el espacio quede en blanco y no se cometa el error de guardar o dar paso.

Private Sub ID_Producto_AfterUpdate()

If Not IsNull(DLookup("ID_Producto", "Compras_Detalle", "[ID_Producto]=" & ID_Producto.Column(0) & " and [ID_Compra]=" & Me.ID_Compra)) Then

MsgBox "El producto ya fue incluido en ésta factura de compra", vbInformation, "PRODUCTO DUPLICADO"

Exit Sub

End If

End Sub

Saludos

César Bustos

ECUADOR

1 respuesta

Respuesta
1

Para la primera pregunta, si en la tabla en la que se basa el formulario, le pones la opción Requerido a sí en los campos que quieres que sean obligatorios, ya lo tienes.

Si lo quieres controlar desde el formulario, programa el evento Antes de actualizar:

If IsNull(me.Nombre del campo) Then Cancel = True

Respecto a la segunda:

If Not IsNull(DLookup("ID_Producto", "Compras_Detalle",
"[ID_Producto]=" & ID_Producto.Column(0) & " and [ID_Compra]="
& Me.ID_Compra)) Then
MsgBox "El producto ya fue incluido en ésta factura de compra", vbInformation, "PRODUCTO DUPLICADO"

Me.ID_Producto=Null

Me.ID_Producto.SetFocus

Exit Sub
End If

Hola

Te comento cuando ingreso eso dos valores me arroja el siguiente error.

Se ha producido el error '-2147352567 (80020009)' en tiempo de ejecución:

Ha intentado asignar el valor null a una variable que no es el tipo de datos Variant

Te adjunto la base de datos, el procedimiento lo hice en el subformulario GuíaRemisión_Detalle del campo ID_Producto

http://www.filebig.net/files/7WdAxjYb5M

Saludos

Ponlo en el evento antes de actualizar de este modo:

If Not IsNull(DLookup("ID_Producto", "Compras_Detalle",
"[ID_Producto]=" & ID_Producto.Column(0) & " and [ID_Compra]="
& Me.ID_Compra)) Then
MsgBox "El producto ya fue incluido en ésta factura de compra", vbInformation, "PRODUCTO DUPLICADO"
Cancel=true
Exit Sub
End If

Me funciona bien, pero me arroja un mensaje adicional, como podría evitar eso, y simplemente me salga el mensaje creado.

Saludos

¿El mensaje adicional que te sale es de sistema (de Access)?

Si es así, pon, antes del if: DoCmd.SetWarnings False

y despues del end if: DoCmd.SetWarnings True

El mensaje que me arroja es de sistema, es el siguiente:

El valor infringe la regla de validación para el campo o registro.
Por ejemplo, es posible que haya cambiado una regla de validación sin comprobar si los datos existentes coinciden con la nueva regla de validación.

Haga clic en Deshacer para restaurar el valor anterior o escriba un valor que cumpla la regla de validación para el campo o registro.

Saludos

Ese mensaje es, seguramente, porque en la tabla le tienes puesta una regla de validación, o el cmapo es una clave principal.

Se te debería quitar con el código que te digo:

DoCmd.SetWarnings False

If Not IsNull(DLookup("ID_Producto", "Compras_Detalle",
"[ID_Producto]=" & ID_Producto.Column(0) & " and [ID_Compra]="
& Me.ID_Compra)) Then
MsgBox "El producto ya fue incluido en ésta factura de compra", vbInformation, "PRODUCTO DUPLICADO"
Cancel=true
Exit Sub
End If

DoCmd.SetWarnings True

me sigue saliendo el mismo mensaje

Pues tendrás que comprobar en la tabla, si el campo ID_Producto tiene alguna regla de validación y quitarla, pues no se me ocurre ninguna otra forma de evitar el mensaje.

Hola:

Te comento eh revisado el archivo y el formulario y el campo ID_Producto no tiene ninguna regla de validación, no se cual podría ser el problema, te adjunto la base

http://www.filebig.net/files/bLBreb5wp4

Me podrías ayudar con un código para que el usuario no ingrese valores que no correspondan a los ingresados en los cuadros combinados, a pesar que los datos provengan de una lista de valores

Saludos

Hola que tal:

Te hago 2 preguntas:

Primero:

Me sigue saliendo el mensaje adicional:

El valor infringe la regla de validación para el campo o registro. Por ejemplo, es posible que haya cambiado una regla de validación sin comprobar si los datos existentes coinciden con la nueva regla de validación.
Haga clic en Deshacer para restaurar el valor anterior o escriba un valor que cumpla la regla de validación para el campo o registro

Esto a pesar de haber ingresado:

Si es así, pon, antes del if: DoCmd.SetWarnings False
y después del end if: DoCmd.SetWarnings True

Segundo:

Que código puedo utilizar para evitar el ingreso de datos duplicados al momento de su ingreso, en un campo de un formulario, me arroje un mensaje y este no me permita continuar al siguiente campo si antes no efectúe el cambio.

Saludos

He aquí la solución a tus dos problemas:

Private Sub ID_Producto_BeforeUpdate(Cancel As Integer)
DoCmd.SetWarnings False
If Not IsNull(DLookup("ID_Producto", "GuíaRemisión_Detalle", "[ID_Producto]=" & ID_Producto.Column(0) & " and [ID_GuíaRemisión]=" & Me.ID_GuíaRemisión)) Then
MsgBox "El producto ya fue incluido en ésta factura de compra", vbInformation, "PRODUCTO DUPLICADO"
DoCmd.SetWarnings True
Cancel = True
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas