controlar que no haya registros duplicados

paky
06 de Febrero del 2004
hola, trabajo con visual basic 6.0 y access 2000. Para acceder a la base de datos utilizo el control ADO. Mi problema es que cuando doy de alta a un registro con un identificativo nº1, si vuelvo a dar de alta al mismo registro me aparece un mensaje de error (por el tema de los registros duplicados). ¿CÓMO CONTROLO ESE ERROR? GRACIAS

gerardoian
06 de Febrero del 2004
Hola Paky este es el codigo que necesitas.

Do While Not Rs.EOF 'Rs es tu Recordset
If Textbox.Text = Rs!identificador Then
MsgBox "No se puede el mismo" _ & "identificador ", vbCritical, "Error"
Textbox.Text = ""
Textbox.SetFocus
Exit Sub
End If
Rs.MoveNext
Loop

Este codigo iria en el click del boton que usas
para guardar el registro, antes de dar el alta.
Espero que te sirva!!!

Telemann
06 de Febrero del 2004
Paki:
Puedes usar también una consulta para saber si existe ya un registro con el mismo Id, si necesitas que lo indique el usuario (aunque recomiendo que evites eso en la medida de lo posible, mejor un autonumérico). Un ejemplo seria el siguiente:

' Asumimos que tienes un datagrid asociado a un ADO data control abierto y con registros:

Private Function HayRegistroDuplicado(ByVal NombreTabla as String, ByVal Valor as Long) as Boolean

Dim Rs as Recordset

Set Rs = New Recordset
Rs.ActiveConnection = <adoDC>.Recordset.ActiveConnection

' Asumimos que el CampoId es numérico, por tanto no va entrecomillado en la comparación "Where"

Rs.Source = "Select Count (*) from " & NombreTabla & " Where CampoID = " & valor

Rs.Open

' En el Select Count sólo hay un campo, cuyo ordinal es cero. Devolverá True si existen registros con el Id.

HayRegistroDuplicado = (Rs.Fields(0).Value > 0)

Rs.Close

End Function

Puedes invocar una función de este tipo antes de guardar el registro, por ejemplo:

If HayRegistroDuplicado("MiTabla", 1234) Then
MsgBox "ID duplicado", vbOkOnly
Else
' ... guardar ...
End If

Salud.

Mauricoi
06 de Febrero del 2004
Antes de escribir la base de datos yo realizo una busqueda con una sentencia sql buscando si ya existe la clave principal en la base de datos. en caso de que asi sea mando el mensaje de error. Si no existe entonces se puede grabar sin problemas
Saludos

anonimus
06 de Febrero del 2004
No puedes dar de alta al mismo registro 2 veces;
explica para que quieres dar de alta dos veces el mismo registro... acuerdate que el campo identificativo debe ser unico y no permitir vacios



webJose
06 de Febrero del 2004
No he usado mucho ADO, pero si lo que aparece es un mensaje de error, entonces lo que debe hacer es algo como esto:

on error resume next
rs.update
if (err.number=<# de error esperado>) Then
msgbox "El mensaje deseado debe aparecer aquí"
elseif (err.number<>0)then
msgbox "Ocurrio un error inesperado." & vbcrlf & vbcrlf & err.description
endif
on error goto 0 'o a una etiqueta de manejo de errores global al procedimiento.