Detección de duplicados |
Responder
|
| Autor | |
JoseraGR
Nuevo
Unido: 06/Octubre/2020 Localización: Granada Estado: Sin conexión Puntos: 31 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Tema: Detección de duplicadosEnviado: 30/Marzo/2025 a las 21:06 |
|
Buenas
Aqui estamos otra vez con otro tema que tengo, digamos que ando afinando la base de datos que tengo y esto son ya pequeños detalles para que quede mas "fina" la base de datos. La cuestión es que tengo un formulario en el que voy rellenando varios datos del modelo ferroviario que tengo. Todos están relacionados mediante el campo REFERENCIA, el cuan lo tengo como campo clave en todas las tablas, no permitiendo que esté vacío y siendo obligatorio su cumplimentación. Al se campo clave no permite duplicados, y hasta aqui bien. Lo que ocurre es que me dice que el modelo ya existe cuando le doy a salir o paso a cualquier otra acción en el formulario. La cuestión es que quiero que cuando introduzca la REFERENCIA en el cuadro de texto en el evento "al salir", realice una búsqueda por si estuviera duplicado, y en caso de estarlo me diera un mensaje de error. NO se si con todo este rollo me he explicado bien de que es lo que busco. Os dejo aqui el código que he realizado: Private Sub txtReferencia_Exit(Cancel As Integer) Dim vNuevaReferencia As String Dim vReferencia As String Dim dbs As dao.Database Dim rts As dao.Recordset 'Tomamos el valor de la referencia nueva vNuevaReferencia = Forms!F_Principal!txtReferencia.Value 'Inicializa la referencia vReferencia = "" Set dbs = CurrentDb Set rts = dbs.OpenRecordset("T_ModeloGeneral", dbOpenSnapshot) 'comprobamos que la consulta no esta vacia If rts.RecordCount <> 0 Then 'Nos movemos al primer registro rts.MoveFirst 'Recorremos la tabla hasta el final Do Until rts.EOF 'Tomamos el valor de la referencia de cada registro vReferencia = rts.Fields("Referencia").Value 'Verificamos que la nueva referencia no esta ya incluida If vNuevaReferencia <> vReferencia Then 'Movemos el recordset al siguiente registro rts.MoveNext Else If vReferencia <> "" Then 'Mensaje de error al introducir datos MsgBox "LA REFERENCIA INDICADA YA EXISTE", vbOKOnly, "ERROR DATOS" 'Damos como valor vacio a la referencia nueva 'Forms!F_Principal!txtReferencia.Value = "" 'Movemos el recordset al ultimo registro rst.MoveLast End If End If Loop End If 'Cerramos conexiones y liberamos memoria rts.Close dbs.Close Set rts = Nothing Set dbs = Nothing End Sub El problema lo tengo solamente cuando la REFERENCIA esta repetida, se queda colgado y tengo que cerrar la base, pues como me obliga a rellenarlo no me responde en ningún momento. Bueno espero vuestras respuesta a ver que ideas tenéis. Un saludo
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: en línea Puntos: 14428 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 30/Marzo/2025 a las 23:10 |
|
Don Juanjo Luna (Lunasoft) MVP me manda esto ....
¡Hola! Aquí hay algunas sugerencias para mejorar tu código y evitar que se quede colgado cuando la referencia está repetida: Simplificar la lógica de búsqueda: En lugar de recorrer todos los registros, puedes usar una consulta directa para verificar si la referencia ya existe. Evitar el uso de MoveLast: Esto puede causar problemas si el recordset está vacío o si ya estás en el último registro. Aquí tienes una versión mejorada de tu código: Private Sub txtReferencia_Exit(Cancel As Integer) Dim vNuevaReferencia As String Dim dbs As dao.Database Dim rts As dao.Recordset 'Tomamos el valor de la referencia nueva vNuevaReferencia = Forms!F_Principal!txtReferencia.Value Set dbs = CurrentDb 'Realizamos una consulta directa para verificar si la referencia ya existe Set rts = dbs.OpenRecordset("SELECT Referencia FROM T_ModeloGeneral WHERE Referencia = '" & vNuevaReferencia & "'", dbOpenSnapshot) 'Si encontramos registros, la referencia ya existe If Not rts.EOF Then MsgBox "LA REFERENCIA INDICADA YA EXISTE", vbOKOnly, "ERROR DATOS" 'Cancelar la salida del cuadro de texto Cancel = True End If 'Cerramos conexiones y liberamos memoria rts.Close dbs.Close Set rts = Nothing Set dbs = Nothing End Sub Está sin comprobar ...
|
|
![]() |
|
jlsalamanca
Nuevo
Unido: 26/Noviembre/2013 Localización: madrid Estado: Sin conexión Puntos: 35 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 30/Marzo/2025 a las 23:13 |
|
Hola buenas noches,
Supongo que habrá más expertos que yo pero te contesto lo que yo haría en tu caso Primero utilizar el evento después de modificar Segundo utilizar la función dlookup para comprobar si existe la referencia el tú tabla más o menos sería If dlookup("referencia","nombredelatabla en la que está referencia","referencia="& me.txttreferencia)=me.txtreferencia |
|
![]() |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14926 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 31/Marzo/2025 a las 09:02 |
|
Desde la ignorancia: ¿porqué el evento Al salir?
Yo utilizaría el evento Antes de actualizar. Algo así:
Un saludo
|
|
![]() |
|
Responder
|
|
|
Tweet
|
| Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |