** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Control de duplicados
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Control de duplicados

 Responder Responder
Autor
Mensaje
eduard Ver desplegable
Nuevo
Nuevo


Unido: 19/Enero/2014
Localización: Barcelona
Estado: Sin conexión
Puntos: 17
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita eduard Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Control de duplicados
    Enviado: 30/Diciembre/2018 a las 14:49
Hola amigos, quiero hacer un control de duplicados y lo consiguo con DLookup o DCount, excepto si alguna palabra tiene un apóstrofe " ' ", que entonces no funciona, ¿saben como solucionarlo?. Gracias!
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11856
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 30/Diciembre/2018 a las 18:16
Hola,

A falta de ver como construyes el criterio del DLookup o el DCount voy a pensar que lo haces utilizando el apóstrofe como delimitador de texto. Eso representa un problema (como has podido ver).

Una solución pasa por delimitar con las comillas; otra por generar el criterio utilizando BuildCriteria.

1. intCuenta  = DCount("*", "unaTabla", "UnCampo = " & Chr(34) & ElValor & Chr(34))
2. intCuenta  = DCount("*", "unaTabla", BuildCriteria("UnCampo", dbText, "ElValor"))

Prueba y nos cuentas

Un saludo





Xavi, un minyó de Terrassa

Mi web
Arriba
eduard Ver desplegable
Nuevo
Nuevo


Unido: 19/Enero/2014
Localización: Barcelona
Estado: Sin conexión
Puntos: 17
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita eduard Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 30/Diciembre/2018 a las 18:49
Buenas tardes y gracias por contestar...

La expresión siguiente, me genera el error 3075: 

vRepetit = Nz(DLookup("& Chr(34) Client & Chr(34)", "Factura1Clients", "& Chr(34) Client & Chr(34)='" & Chr(34) & Me.Client & Chr(34) & "'"), "")

La expresión siguiente, me genera el error 2471:

vRepetit = Nz(DLookup("Client", "Factura1Clients", BuildCriteria("Client", dbText, "Me.Client")), "")

El campo que contiene el apóstrofe es Client
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11856
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 30/Diciembre/2018 a las 19:30
buff... te sobran Chr(34) y algun apóstrofe

Primera expresión:
vRepetit = Nz(DLookup("Client", "Factura1Clients", "Client =" & Chr(34) & Me!Client & Chr(34)), "")

Segunda expresión:
vRepetit = Nz(DLookup("Client", "Factura1Clients", BuildCriteria("Client", dbText, Me!Client)), "")

Observa las diferencias en cada expresión, porque hay varias cositas

Nos cuentas
Xavi, un minyó de Terrassa

Mi web
Arriba
eduard Ver desplegable
Nuevo
Nuevo


Unido: 19/Enero/2014
Localización: Barcelona
Estado: Sin conexión
Puntos: 17
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita eduard Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 30/Diciembre/2018 a las 20:28
De momento va funcionando bien, pero en cada obstaculo salvado aparece una piedrecita...

    stDocName = "Factura1Clients"
    'stLinkCriteria = "[Client]=" & "'" & Me![Client] & "'"
    stLinkCriteria = "Client =" & Chr(34) & Me!Client & Chr(34)
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Aquí me dice que falta operador...
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11856
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 30/Diciembre/2018 a las 20:38
Pon un punto de interrupción y evalúa lo que contiene stLinkCriteria

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
eduard Ver desplegable
Nuevo
Nuevo


Unido: 19/Enero/2014
Localización: Barcelona
Estado: Sin conexión
Puntos: 17
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita eduard Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 30/Diciembre/2018 a las 20:52
Imposible seguirte, no te entiendo Xavi, lo siento...
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11856
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 31/Diciembre/2018 a las 11:59
Abres la ventana de código
Localizas la linea stLinkCriteria = "Client =" & Chr(34) & Me!Client & Chr(34) y te situas en ella
Pulsas F9. Si no has tuneado el editor aparecerá un punto a la izquierda y la linea con fondo rojo.
Ejecuta la aplicación
Cuando se pare en ese punto, abres la ventana de Inmediato y le preguntas por el valor de stCriteria
? stCriteria

A ver que pone...
Xavi, un minyó de Terrassa

Mi web
Arriba
eduard Ver desplegable
Nuevo
Nuevo


Unido: 19/Enero/2014
Localización: Barcelona
Estado: Sin conexión
Puntos: 17
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita eduard Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 02/Enero/2019 a las 23:19
Pues pone:

StLinkCriteria = “”

Me ayudas un poquito más?
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11856
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 02/Enero/2019 a las 23:44
Te indique el que pusieras el punto de interrupción en la línea dónde se asigna. Normal que no tenga valor...

Ponlo en la linea siguiente (o déjalo dónde está y pulsa F8 una vez cuando se pare) y pregunta el valor.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
eduard Ver desplegable
Nuevo
Nuevo


Unido: 19/Enero/2014
Localización: Barcelona
Estado: Sin conexión
Puntos: 17
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita eduard Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 07/Enero/2019 a las 00:28
Buenas noches y disculpa por el retraso, estas son las opciones que he probado, ninguna me funciona...
(He puesto espacios entre las comillas y las dobles comillas para facilitar la lectura):

stLinkCriteria = "[Client]=" & " ' " & Me![Client] & " ' "

stLinkCriteria  = "[Client]='l'edu' "

stLinkCriteria = "Client =" & Chr(34) & Me!Client & Chr(34)

stLinkCriteria  = "[Client]="l'edu" "

stLinkCriteria = "Client =" & Chr(34) & Me!Client

stLinkCriteria  = "[Client]="l'edu"

stLinkCriteria = "Client =" & " ' " & Chr(34) & Me!Client & Chr(34) & " ' "

stLinkCriteria  = "[Client]=' "l'edu" ' "
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11856
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 08/Enero/2019 a las 08:34
Punto de partida: tu client contiene apostrofes, por lo que es obligada la utilización de Chr(34) para delimitar. El problema puede darse cuando, ademas de apostrofes, aparecen comillas dentro del campo. En ese caso el criterio se puede complicar bastante. Para evitar esa complicación lo que yo hago es controlar la entrada de datos impidiendo los registros con comillas.

En el supuesto de que ningún valor de Me!Client contenga comillas, la segunda construcción que has puesto es la correcta... y no debería devolver lo que has puesto en la cuarta línea ... a no ser que Me!Client contenga l'edu" (pero partíamos del supuesto que no contenia comillas)

Otra forma de construir el criterio con la función BuildCriteria (tal como ya se ve en el segundo post de este hilo)

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
eduard Ver desplegable
Nuevo
Nuevo


Unido: 19/Enero/2014
Localización: Barcelona
Estado: Sin conexión
Puntos: 17
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita eduard Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Enero/2019 a las 14:17
BUENAS TARDES 
stLinkCriteria = "Client =" & Chr(34) & Me!Client & Chr(34), me devuelve l'edu" , a saber por que motivo...

Me estoy volviendo loco con el BuildCriteria...

    stDocName = "Factura1Clients"
    stLinkCriteria = BuildCriteria("Client", dbText, Me!Client)
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Me devuelve error 3077 Error de sintaxis (falta operador) en la expresión

No sé que hacer, ¿alguna idea?

Muchas gracias de antemano...

Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: en línea
Puntos: 5094
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita mounir Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Enero/2019 a las 19:28
Hola!

Mírate este artículo del maestro J.Bengoechea sobre BuildCriteria:

http://jbengoechea.com/ConstruyeCriterio.htm
Un Saludo.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable