Imprimir página | Cerrar ventana

Control de duplicados

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84199
Fecha de impresión: 19/Abril/2019 a las 00:46


Tema: Control de duplicados
Publicado por: eduard
Asunto: Control de duplicados
Fecha de publicación: 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!



Respuestas:
Publicado por: xavi
Fecha de publicación: 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

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: eduard
Fecha de publicación: 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


Publicado por: xavi
Fecha de publicación: 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

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: eduard
Fecha de publicación: 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...


Publicado por: xavi
Fecha de publicación: 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

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: eduard
Fecha de publicación: 30/Diciembre/2018 a las 20:52
Imposible seguirte, no te entiendo Xavi, lo siento...


Publicado por: xavi
Fecha de publicación: 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

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: eduard
Fecha de publicación: 02/Enero/2019 a las 23:19
Pues pone:

StLinkCriteria = “”

Me ayudas un poquito más?


Publicado por: xavi
Fecha de publicación: 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

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: eduard
Fecha de publicación: 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" ' "


Publicado por: xavi
Fecha de publicación: 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

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: eduard
Fecha de publicación: 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...



Publicado por: mounir
Fecha de publicación: 19/Enero/2019 a las 19:28
Hola!

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

http://jbengoechea.com/ConstruyeCriterio.htm" rel="nofollow - http://jbengoechea.com/ConstruyeCriterio.htm

-------------
Un Saludo.



Imprimir página | Cerrar ventana