Formulario Introd. New registro, si existe ese registro no controlo como poner otro

Tengo un formulario para introducir registros nuevos, si no existe el nuevo código perfecto. El problema es en el caso que exista: pongo aviso MsgBox, borro el cuadro de texto (se llama igual que el campo de la base de dato) y regreso al cuadro de texto para poner nuevo registro.

Lo que ocurre e que una vez validamos el MsgBox no sale de este procedimiento y da error de : "El valor infringe una regla de validación para el campo o registro", tampoco borra del cuadro de texto el dato que pusimos.

Agradezco de antemano la ayuda bien con mi código o con otro que pueda ser valido, pues llevo horas cambiándolo pero soy novato y cada vez me lio más.

Rafa

Private Sub SIP_AfterUpdate()
Pacientes.Seek "=", SI
If Not Pacientes.NoMatch Then
MsgBox "Num. De historia ya existente.", 48
SI = " "
End If
Me.SI.SetFocus
Cancel = True
End Sub

1

1 respuesta

Respuesta
1

La verdad es que hay algo que no me cuadra en tu explicación, dado que el dices que el campo se llama sí, pero el código está asignado a un control llamado SIP.

Vayamos por partes:

Si introduces una regla de validación en el campo tienes dos elementos operando sobre el campo: uno, el propio Access, y dos, tu código VB. Eso provoca conflictos. Solución: u operas con la regla de validación o validas a través del propio código.

Voy a suponer lo siguiente (tú después deberás cambiar mis suposiciones por los nombres que tengas en tu BD):

La tabla que contiene la información se llama "TPacientes"

El campo que guarda el número de historia se llama SI, y es coincidente con el del formulario (Propiedades del campo -> Pestaña Otras -> Nombre). Además, ese campo tiene un tipo de datos numérico.

Supongamos que la regla de validación fuera que el valor debe ser mayor que cero.

En primer lugar, eliminas la regla de validación, ya que la controlaremos a través del código.

En segundo lugar el código que debes asignarle al evento "Después de actualizar" sería:

...

Private sub...
'Declaramos las variables
Dim nSI as Long, nSIT as Variant
'Cogemos el valor introducido en el campo
nSI = nz(me.SI.Value,-1)
'Si el valor está en blanco salimos
If nSI=0 then Exit Sub
'Aquí la regla de validación:
'Si el valor introducido es menor que cero avisamos, borramos el valor introducido
'y saltamos a 'Borramos'
If nSI<0 Then
msgbox "No se admiten valore negativos",vbinformation,"ERROR"
Goto Borramos
End If
'Buscamos si el valor ya existe en la tabla
nSIT = dlookup("[SI]","TPacientes","[SI]=" & nSI)
'Si devuelve valor es que ya existe. Avisamos y saltamos a 'Borramos'
If not isnull(nSIT) Then
MsgBox "El valor introducido ya existe",vbInformation,"DUPLICADO"
goto Borramos
End If
'Salimos del proceso "normal"
Exit Sub
Borramos:
me.SI.Value=null
End Sub

...

Evidentemente este es un código de ejemplo que no sé si se adapta totalmente a las características de tu BD. Si tienes algún probema me comentas.

En primer lugar Muchas Gracias por tu aclaración y disculpas llevo varios días sin poder conectarme.

Tienes toda la razón, el campo mi campo se llama SI, pero no me había fijado que en la pregunta lo apunte como SI, gracias.

La explicación dada es muy clara y ahora comprendo los errores, y puedo comunicarte que termino de aplicarlo y funciona.

Felicidades, es Impresionante tu pagina.

Muchas gracias.

Rafael

Reitero tienes una estupenda pagina Web, muchas gracias por la ayuda que prestas.

Es muy bueno recordar y aprender lo mínimo necesario, me encanto "Cosas que es bueno saber antes de programar una base de datos".

Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas