Access - Comparar campos texto de todos los registros

 
Vista:

Comparar campos texto de todos los registros

Publicado por Lucas (12 intervenciones) el 01/02/2007 13:29:06
Hola, estoy haciendo una base de datos sobre socios de una sociedad y necesito poner un campo con el nº de socio. Había pensado poner un campo de texto (textbox) donde ingresar en cada registro el núm. de socio correspondiente, pero me surge el problema sobre cuando haya cientos de registro que se pueda repetir el núm. de socio.

¿Como puedo comparar el campo "nº de socio" con ese mismo campo en todos los registros para evitar duplicar su contenido?

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Comparar campos texto de todos los registros

Publicado por Enrique (1299 intervenciones) el 01/02/2007 15:36:04
Una forma fácil podría ser utilizando la Función Dlookup (DBúsq) y el Evento "Al recibir el enfoque" del campo siguiente en órden de tabulación a "NroSocio", que sería normalmente "Nombre":

Private Sub Nombre_GotFocus()
If DLookup("[NroSocio]", "[TablaSocios]", "[NroSocio] =" & Me.NroSocio) Then
MsgBox "Este Nº de socio ya existe.", vbInformation, "Socios"
NroSocio = Null
NroSocio.SetFocus
Else
Nombre.SetFocus
End If
End Sub

Entiendo que el campo NroSocio será numérico, si fuera de texto cambia la línea del Dlookup por:
If DLookup("[NroSocio]", "[TablaSocios]", "[NroSocio] ='" & Me.NroSocio & "'") Then

Saludos
Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar campos texto de todos los registros

Publicado por Lucas (12 intervenciones) el 01/02/2007 19:24:29
Gracias por contestar, pero no consigo que funcione, he probado de las dos formas, siendo campo con formato para números y con la otra línea de campo en formato texto y me da error, me dice que no coinciden los tipos. Te expongo mi caso en concreto a ver si me puedes decir qué es lo que ocurre.

-Mi campo de NroSocio en el formulario se llama "Texto118"
-La tabla donde están los socios se llama "Tabla1"
-En la tabla1 he creado el correspondiente campo que se llama "Nsocio" y es numérico.

Pues bien, como me dices he puesto el código que me das el Evento al recibir el enfoque del siguiente campo en orden de tabulación, que en mi caso se llama "NombreFiliación" y en esa primera linea de código me da el error que dice que no coinciden los tipos:

If DLookup("[texto118]", "[Tabla1]", "[texto118] =" & Me.Texto118) Then
MsgBox "Este Nº de socio ya existe.", vbInformation, "Socios"
Texto118 = Null
Texto118.SetFocus
Else
NombreFiliación.SetFocus
End If
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar campos texto de todos los registros

Publicado por Juan Amorós (218 intervenciones) el 01/02/2007 19:41:25
Hola Lucas:

Enrique te lo ha explicado MARAVILLOSAMENTE.

No lo has entendido bien, has confundido el formulario con la tabla, cambia tu instrucción por ésta (tal y como te ha dicho Enrique):

' CampoTabla Tabla CampoTabla CampoFormulario

If DLookup("[Nsocio]", "Tabla1", "[Nsocio] =" & Me.Texto118) Then
MsgBox "Este Nº de socio ya existe.", vbInformation, "Socios"
Texto118 = Null
Texto118.SetFocus
Else
NombreFiliación.SetFocus
End If

La instrucción If del principio podría leerse como:

Si el campo [Nsocio], de la Tabla [tabla1], cuyo [Nsocio] = al campo [Texto118] del formulario, entonces saldrá el mensaje descrito en MsgBox, anulará el número de socio "introducido" en el campo Texto118 y devolverá el foco a ese campo para que "vuelva" a introducir otro número de socio, que volveré a comprobar otra vez si existe o no.

De todas las formas CAMBIA el nombre del campo en el FORMULARIO donde RECIBES el número de socio por el MISMO NOMBRE que tiene en la tabla1 (NSocio), con lo que quedaría así:

' Campoformulario

If DLookup("[Nsocio]", "[Tabla1]", "[Nsocio] =" & Me.NSocio) Then
MsgBox "Este Nº de socio ya existe.", vbInformation, "Socios"
NSocio= Null
NSocio.SetFocus
Else
NombreFiliación.SetFocus
End If


Saludos
Juan Amorós
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar campos texto de todos los registros

Publicado por Enrique (1299 intervenciones) el 01/02/2007 22:31:14
Efectivamente es tal como te lo ha explicado Juan, ya mejor imposible, aunque debería haber supuesto que podrías confundir el Nombre del campo de la Tabla con el nombre del campo en el Formulario. De todas formas y si a pesar de todo no lo consigues, sigue preguntando hasta que te salga, no te dés por vencido a la primera de cambio como hacen muchos.

Dicho sea de paso, la forma en que has enfocado el tema no me parece la mejor. Se puede conseguir que los números de socio se vayan incrementando automáticamente y que cuando un nº ya exista, en lugar del mensaje advirtiéndolo, se puede hacer que aparezcan todos los datos de ese socio existente y cuando no exista, pasar al cambo Nombre para introducir este y los siguientes datos del socio, o dicho de otra forma, Nº existente = Modo "Modificar" y Nº no existente = Modo "crear nuevo". Claro que en este caso ya nos metemos en código de VBA con cierta complicación. ¿Te atreves a probar ?

Saludos
Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar campos texto de todos los registros

Publicado por Lucas (12 intervenciones) el 02/02/2007 10:34:51
Hola otra vez y muy agradecido a ambos,

efectivamente lo estaba poniendo mal, confudía los campos, he hecho lo que me dijo Juan Amorós y me va de maravilla, también he cambiado el nombre del campo en el formulario, poniendo el mismo de la tabla y así me lio menos.

Gracias Enrique, sobre lo que dices de mejorarlo, la verdad es que me gusta la idea, queda más profesional, pero creo que lo dejaré sencillo como me lo habéis dado y seguiré trabajando con otros controles que el tiempo apremia. Tendré que seguir preguntando sobre otras cosas que me van surgiendo y que no consigo resolver solo.

Muchísimas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar campos texto de todos los registros

Publicado por Lucas (12 intervenciones) el 05/02/2007 00:42:56
Siento decir que una vez probado bien falla cuando cambias de registro. Si se crea un nuevo registro y se introducen datos, funciona bien, pero si se navega por los registros y se le vuelve a dar el foco al campo número de socio (que ya incluye un número), al tabular y entrar en el siguiente campo "Nombre" da el msgbox diciendo lo de que ya existe ese número de socio, y posteriormente al hacer cualquier acción ya da el mensaje de error en tiempo de ejecución.
¿Podrías ayudarme a solucionarlo?
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar campos texto de todos los registros

Publicado por ANGEL MIMBRERA (6 intervenciones) el 25/08/2013 23:40:08
Hola muy buenas:

Alguien me puede echar una mano?
Estoy con un formulario en access 2010 y uno de ellos es un numero de nota y el otro es un trabajo, a la hora de dar de alta un nuevo registro el numero de nota se puede repetir pero el trabajo para el mismo numero de nota no, quiero que aparezca Trabajo repetido y si el trabajo no es repetido que pase al siguiente campo. Alguien me puede echar una mano de como podria realizar esas comparaciones? y como puedo insertarlo en el formulario para cada registro que de de alta?

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar campos texto de todos los registros

Publicado por Enriique (1299 intervenciones) el 06/02/2007 15:26:19
Para que solo compruebe si el socio ya existe cuando estamos en un Nuevo Registro y no lo haga con registros existentes, ponlo así:

If DLookup("[NroSocio]", "[TablaSocios]", "[NroSocio] =" & Me.NroSocio) And Me.NewRecord Then

Saludos
Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar campos texto de todos los registros

Publicado por Lucas (12 intervenciones) el 06/02/2007 16:27:23
Gracias, lo pongo para que compruebe el último registro ya que de la otra forma, al comprobar todos los registros, cuando borras el nº y cambias de campo daba error de síntasis.
NO permite tener el campo en blanco, aunque solucioné el problema que me daba al navegar por los registros, lo solucioné refrescando el campo Nsocio del formulario después del If:

Private Sub Nsocio_AfterUpdate()
If DLookup("[NSocio]", "[Tabla1]", "[NSocio] =" & Me.Nsocio) And Me.NewRecord Then
MsgBox "¡ATENCIÓN! Este Nº de socio ya existe.", vbInformation, "Socios"
Nsocio = Null
Nsocio.SetFocus
Me.Refresh
Else
NombreFiliación.SetFocus
End If
End Sub

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar campos texto de todos los registros

Publicado por Rafael (1 intervención) el 10/02/2014 17:13:13
Saludos,

En mi caso trabajo con campos tipo texto, donde en la tabla "Partidas" tengo el campo "CodPartida" y en el formulario el campo es "Me.CodPartida". El dato introducido es por ejemplo "003-00-015" y es el caso que me dice que no existe y ya probé incluso tomando el dato del mismo formulario, este es el código que uso:

Private Sub Comando4_Click()

MsgBox "Este es el codigo del formulario: " + Me.CodPartida
MsgBox "Este es el codigo del dlookup: " + DLookup("[CodPartida]", "[Partidas]", "[Codpartida]='" & Me.CodPartida & "' ")

If DLookup("[CodPartida]", "[Partidas]", "[Codpartida]= '" & Me.CodPartida & "' ") Then
MsgBox "EXISTE"
Else
MsgBox "NO EXISTE"
End If
End Sub

lo pruebo con un boton de comando, al hacer click

El error que me arroja, en la línea: "If DLookup("[CodPartida]", "[Partidas]", "[Codpartida]= '" & Me.CodPartida & "' ") Then", es: "no coinciden los tipos"

El formulario lo cree a partir de la misma tabla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar