Mensaje por registro Duplicado con índice compuesto

Tengo la tabla INSCRIPCIONES con un índice con 3 campos, Torneo, Fecha_Nro (que están cargados en forma oculta en el formulario), Registro (que se ingresa en un formulario), configurado como Primary key única. La tabla se carga a partir de un formulario que posee un botón GRABAR. Al presionar el botón, si los datos ingresados No duplica, graba en la tabla y blanquea todos los campos, pero si es duplicado no graba, blanquea todos los campos y no sale ningún mensaje. Es decir el control de duplicados se hace bien, pero necesito que se notifique cuando se intentó ingresar un registro duplicado. Lo ideal es que lo haga al perder el enfoque del campo Registro ya que ese cargan más datos.

1 respuesta

Respuesta

Debes tener el indice haciendo referencia al los tres campos, como principal sin duplicados. En el formulario utilizas el evento Al Ocurrir Error y agregas:

if DataErr=3022 then

msgbox "Ya existe el registro",vbCritical,"Grabando"

endif

response=AcDataErrcontinue

Si, en la tabla INSCRIPCIONES tengo los 3 campos con la llave indicando que es clave principal (PrimaryKey) y única, para que no permita duplicado (esto funciona) pero el mensaje sigue sin aparecer, es mas, no aparece ni siquiera el mensaje de Access de registro duplicado. Investigando un poco encontré el siguiente código para poner en el evento Al perder el enfoque del campo del formulario Reg_FCA (así al pasar a completar otro campo antes de grabar, valida duplicado):


Private Sub Reg_FCA_LostFocus()
Dim Db As Database
Dim Rst As Recordset
Set Db = CurrentDb()
Set Rst = Db.OpenRecordset("INSCRIPCIONES")
r.Index = "Torneo" + "Nro_Fecha" + "Registro_FCA" 'Campos clave de la tabla INSCRIPCIONES
r.Seek "=", [Torneo], [Nro_Fecha], [Reg_FCA] 'Campos del formulario
If Not Rst.NoMatch Then MsgBox "Registro ya existe"
Cancel = True
End If
End Sub

El problema es que produce el error 424 "Se requiere un objeto", supongo que es porque no estoy escribiendo bien el r.Index y no encuentro como hacerlo.

Desde ya, muchas gracias

Saludos

Mejor create una consulta sql como: (En el evento Antes de Actualizar) adiciona este código

Dim db AS Database

Dim rs As Recordset T

Dim Stql AS Srtring

Stql="SELECT Torneo,Nro_Fecha,Registro_FCA "

Stql=Stql & " FROM INSCRIPCIONES;"

Set db=currentdb

set rs=db.openrecordset(Sql)

IF rs.Recordcoun>0 then

Msgbox "Ya existe el registro",vbiinformation

rs.close

db.close

set rs=nothing

set db=nothing

Cancel=true

Endif

Referente al error 424 "se requiere un objeto" es por que tienes que hacer referencia a DAO 3.6 Library. Lo puedes hacer cuando estés en código elige referencias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas