Como agregar mensaje de texto al ingresar Rut de proveedor duplicado?

Les quería pedir ayuda con un formulario PROVEEDORES que tengo, y que al momento de agregar un proveedor e ingresar el rut si esta ya ingresado me gustaría que me salga un cuadro de texto indicando que ya existe y que a su vez se completen todos los campos con los datos ya ingresados para ese rut. El campo rut es tipo texto

Respuesta
2

Puedes ver si el proveedor existe usando, por ejemplo, la función DCount():

Private Sub RUT_BeforeUpdate(Cancel As Integer)
If DCount("*", "NombreTabla", "RUT='" & Me.RUT& "'") > 0 Then
MsgBox "El Proveedor ya está registrado",vbInformation,"AVISO"
Set rst = Me.RecordsetClone
rst.FindFirst "RUT='" & Me.RUT& "'"
Me.Undo
Cancel = True
Me.Bookmark = rst.Bookmark
End If
End Sub

Lo que hace el código es buscar si ya existe el rut, y si existe, te lleva al registro, porque entiendo que no quieres crear un registro con los datos duplicados.

Acabo de ver un "error" en el código, hay que separar RUT del & con un espacio:

Private Sub RUT_BeforeUpdate(Cancel As Integer)
If DCount("*", "NombreTabla", "RUT='" & Me.RUT & "'") > 0 Then
  MsgBox "El Proveedor ya está registrado",vbInformation,"AVISO"
  Set rst = Me.RecordsetClone
  rst.FindFirst "RUT='" & Me.RUT & "'"
  Me.Undo
  Cancel = True
  Me.Bookmark = rst.Bookmark
End If
End Sub

Oka, probare el código y te comento, gracias

Ya agregue el código y funciona super bien. muchas gracias por tu ayuda. Aprovecho de preguntar sobre este mismo formulario. Para tener los campos RUT y PROVEEDOR como campos obligatorios antes de guardar toda la información, que código tengo que agregar?. 

No te hace falta ningún código, puedes poner, en la vista diseño de la tabla, esos dos campos como requeridos (seleccionas el campo en la vista diseño de la tabla, y en sus propiedades le pones Requerido: Sí)

Si lo quieres hacer por código, hecha un vistazo a esta pregunta: https://www.todoexpertos.com/preguntas/arlmir6eevs8x3vk/validar-registros-antes-de-guardar-para-nuevo-registro?selectedanswerid=arlxqgmkjkj775kj&nid=9ksqlvkpfrsm9gu9hbvpphkoacjq7umea4rprsmhgkk6hrsqfsu6nf3

Me gusta la idea del código con los colores de los espacios en blanco. El código lo agregue en el evento al perder el enfoque del campo RUT y funciona a la perfección, pero como tengo dos campos  obligatorios me gustaría que el cursor después de aceptar se dirigiera al primer campo vacío. Como lo tengo que hacer?

En la función fncControlaVacios puedes añadir, antes del End Function, estas líneas para que te coloque el cursor en el campo marcado:

If fncControlaVacios = False Then
    For Each ctl In Forms(miForm).Controls ' Para cada control del formulario
        If ctl.Name Like "*Ob" And ctl.BackColor = RGB(246, 110, 96) Then
           ctl.SetFocus
           Exit For
        End If
    Next ctl
End If

¿Agregue todo el código antes del End Function de esta forma pero igual no me coloca el cursor en el campo RUT al presionar aceptar Que estoy haciendo mal?

Public Function fncControlaVacios(miForm As String) As Boolean
Dim ctl As Control
fncControlaVacios = True 

For Each ctl In Forms(miForm).Controls 
If ctl.Name Like "*Ob" Then 
If IsNull(ctl) Or ctl.Value = "" Then 
ctl.BackColor = RGB(246, 110, 96) 
fncControlaVacios = False 
Else
ctl.BackColor = vbWhite 
End If
End If
Next ctl
If fncControlaVacios = False Then
For Each ctl In Forms(miForm).Controls 
If ctl.Name Like "*Ob" And ctl.BackColor = RGB(246, 110, 96) Then
ctl.SetFocus
Exit For
End If
Next ctl
End If
End Function

Pues desconozco por qué no te funciona, porque antes de responder lo probé varias veces y te aseguro que funciona y a mi se me posiciona en el primer campo "obligatorio" que está en blanco...

Que mal, veré que puedo hacer, pero si te imaginas donde puede estar el problema favor de mencionarlo para si puede ser ese. De antemano muchas gracias por tu ayuda. Un abrazo

Encontré el problema, revise paso a paso los códigos indicados en el pdf y me faltaba agregar un código en el evento al activar el registro del formulario. Ahora una vez que presiono el botón aceptar del cursor se dirige al campo Rut, agrego un rut  pero me sigue mostrando el aviso de que esta vacío y no me deja avanzar al otro campo

Perdón por molestar pero encontré el problema, revise paso a paso los códigos indicados en el pdf y me faltaba agregar un código en el evento al activar el registro del formulario. Ahora una vez que presiono el botón aceptar del cursor se dirige al campo Rut, agrego un rut  pero me sigue mostrando el aviso de que esta vacío y no me deja avanzar al otro campo

Este es el código que agregue en el evento al salir del campo Rut, podrá  estar ahí el error, ya que en la información en pdf  tu mencionas  que hay que dejarlo en el evento antes de actualizar. tampoco agregue los códigos que están en los botones, ya que solo tengo un botón guardar pero con macro incrustada y no se como agregarlo a ese botón el código que indicas

Private Sub RUTOb_Exit(Cancel As Integer)
If fncControlaVacios(Me.Name) = False Then
MsgBox "Los campos resaltados son obligatorios y debe introducir algún " _
& "valor para continuar.", vbExclamation + vbOKOnly, "ERROR: Campos vacíos"
Cancel = True
End If
End Sub

Private Sub Form_current()
Call subRestauraCajasVacias(Me.Name)
End Sub

Perdón por molestar pero encontré el problema, revise paso a paso los códigos indicados en el pdf y me faltaba agregar un código en el evento al activar el registro del formulario. Ahora una vez que presiono el botón aceptar del cursor se dirige al campo Rut, agrego un rut  pero me sigue mostrando el aviso de que esta vacío y no me deja avanzar al otro campo

Este es el código que agregue en el evento al salir del campo Rut, podrá  estar ahí el error, ya que en la información en pdf  tu mencionas  que hay que dejarlo en el evento antes de actualizar. tampoco agregue los códigos que están en los botones, ya que solo tengo un botón guardar pero con macro incrustada y no se como agregarlo a ese botón el código que indicas

Private Sub RUTOb_Exit(Cancel As Integer)
If fncControlaVacios(Me.Name) = False Then
MsgBox "Los campos resaltados son obligatorios y debe introducir algún " _
& "valor para continuar.", vbExclamation + vbOKOnly, "ERROR: Campos vacíos"
Cancel = True
End If
End Sub

A ver, si tienes un ejemplo explicado paso a paso y que funciona perfectamente, en el que se indican los códigos a utilizar y en qué eventos poner los códigos, ¿por qué no lo haces así? No puedes pretender poner los códigos en los eventos que te apetezca y esperar que funcione a la perfección, porque cada evento tiene unas particularidades propias y los códigos deben de ir en consecuencia.

Por cierto, el "error" que comentas no es que tengas el campo rut vacío, sino que tienes el campo proveedor vacío. Como has puesto el código en el evento incorrecto, te pasa eso.

Solo te puedo decir que sigas el ejemplo al pie de la letra

Oka, muchas gracias por tu ayuda. un abrazo

Estimado,  ya corregí todo los detalles mencionados, pero quería preguntar si al llenar todos los campos y presionar Enter en el ultimo campo, se guardan todos los datos. ¿Es posible agregar un código para que al momento de pasar el ultimo campo me pregunte si o no quiero guardar los registros?. De antemano gracias.

No te acostumbres a encadenar preguntas diferentes bajo el mismo "hilo". Por esta vez te respondo, de manera muy genérica. Si tienes más dudas sobre este mismo tema, plantéalas en una nueva pregunta.

Para que te pregunte si quieres guardar o no, lo suyo es que el formulario esté desconectado (o sea independiente) de la tabla, y guardar los datos a través de SQLs. Como parece que no es el caso, y no es algo rápido de explicar (en internet hay mucho sobre el tema, si te interesa), prueba a poner, en el evento "antes de actualizar" del formulario lo siguiente:

If MsgBox("¿Quieres guardar los datos",vbQuetion+vbYesNo,"CONFIRMA")=vbYes Then
  'NO haces nada, porque por defecto ya los guarda
Else
  Cancel=True
  me.undo
End If

Eso lo puedes poner a continuación del If que ya tienes para controlar los campos obligatorios, o lo puedes meter dentro de ese if añadiendo un Else.

Perdón, no sabia que tenia que hacer otra pregunta, no volverá a ocurrir. muchas gracias por tu ayuda.

Si las dudas no son sobre el mismo tema, debes hacerlas en preguntas diferentes por lo siguiente: imagina que hay otro usuario que quiere saber cómo hacer para preguntar antes de guardar los datos. Si entra a esta web y usa el buscador, no le saldrá la solución, porque está bajo na pregunta que se llama "Como agregar mensaje de texto al ingresar Rut de proveedor duplicado?", que no tiene nada que ver con su duda..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas