Imprimir página | Cerrar ventana

Comillas en SQL con Dcount

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=85705
Fecha de impresión: 26/Marzo/2026 a las 15:42


Tema: Comillas en SQL con Dcount
Publicado por: Antonalo
Asunto: Comillas en SQL con Dcount
Fecha de publicación: 26/Diciembre/2020 a las 19:09
Buenas tardes amigos y feliz Navidad.

Supongo que estáis saturados de este tema pero no encuentro la solución por mi mismo.

Tengo una tabla EMAILS con campos IdPersona (numérico) y EmailActivado (SI/NO) ( y otros campos que no vienen a cuento)

Otra tabla OPERACIONES con campos IdPersona y Parte (con valores 1, 2 y 3)

Quiero, mediante código, ejecutar una consulta de actualización
que me actualice a EmailActivado= verdadero  todos los registros de la tabla EMAILS cuyo IdPersona aparezca en la tabla OPERACIONES y que Parte sea 1. Entonces  utilizo el dcount que cuenta los registros de la tabla OPERACIONES  que  cumplen ambas condiciones y me basta con que la cuenta sea >0

Para ello he construido una consulta de actualización que en la vista  SQL me pone:

UPDATE EMAILS SET EMAILS.EmailActivado = True
WHERE (((DCount("Idpersona","OPERACIONES","Idpersona=" & [Emails].[IdPersona] & "AND Parte = 1"))>0));


La consulta funciona bien, pero yo no quiero una consulta, quiero el código VBA, para ejecutarlo con un botón y  no crear más objetos en mi base y, lo más importante, aprender.

 El problema fundamental es que los argumentos de DCount con sus comillas, me rompen la cabeza y no acierto a poner las comillas simples y dobles en su sitio por más pruebas que hago. 
 
Por cierto ¿puede ser que access esté añadiendo algún paréntesis innecesario?










Respuestas:
Publicado por: rokoko
Fecha de publicación: 26/Diciembre/2020 a las 19:42
Ejecuta esa consulta por vba.....

DoCmd.RunSQl..........


Publicado por: Antonalo
Fecha de publicación: 26/Diciembre/2020 a las 19:50
Ya, pero de esa manera no consigo dos objetivos importantes.
- no crear un nuevo objeto en mi base ( en este cado una consulta)
- no consigo aprender nada nuevo, el manejo de las comillas en este caso.
 mi idea es algo parecido a esto en VBA:

CurrentDb.Execute "UPDATE EMAILS SET EMAILS.EmailActivado = True" _
& " WHERE DCount('" & "Idpersona" & "'," & "OPERACIONES" & "," & "Idpersona='" & [EMAILS].[IdPersona] & "'" & " AND Parte = 1" & ")>0;"

Pero esto no funciona, ni puede funcionar porque no consigo razonar donde tengo que modificar con comillas simples dobles.. En otras cosas más sencillas sí, pero aquí me pierdo.
 



Publicado por: rokoko
Fecha de publicación: 26/Diciembre/2020 a las 20:00
Acabo de probar la consulta con esas tablas y si, algo pasa con las comillas, pero le he buscado la vuelta de otra forma.  Haz la consulta con las dos tablas relacionandolas por idPersona y criterio 1.........y ejeculala con DoCmd.runSQL.......

Creo que es una forma mas sencilla de hacerlo...Prueba a ver....


Publicado por: rokoko
Fecha de publicación: 26/Diciembre/2020 a las 20:13
Yo utilizo mucho el generador de consultas y luego las ejecuto por vba....en este caso no me he parado a mirar lo de las comillas y lo he hecho con una consulta diferente y ejecutandola cor DoCmd.runSQl  o CurrentDb.Execute.....


Veo bastante mas complicado utilizar el Dcount y ademas creo que gastara mas recursos.......pero para gustos los colores....Si tengo un rato indago lo de las comillas por curiosidad....

Saludos


Publicado por: Antonalo
Fecha de publicación: 26/Diciembre/2020 a las 20:38

Gracias rokoko, entiendo que sugieres que crée una consulta en la que intervengan las dos tablas. Ya probé, pero es un poco más complejo. Tengo 51 personas que en la tabla OPERACIONES tienen algún registro cuya parte es = 1 pero algunos tienen más de un registro con lo cual me salen muchos más que 51, tendría que hacer un sumatorio, agrupar por, pero como quiero que luego me salgan esos 51 registro en un subformulario con el campo activado, para desactivar algunos, no me deja editar con el sumatorio... bueno un rollo. Total que la solución que he encontrado para lo que yo quiero es el DCount
pero aquí me encuentro con el problema de las comillas, y que no quiero, a no ser que no haya otro remedio, crear una consulta porque ya tengo la base saturada de formularios, consultas etc..

Lo que necesito es que alguien me oriente como hacer para que las funciones como DCount, Dsuma, DBúsq (Lookup) en las que intervienen argumentos que ya llevan comillas, se puedan introducir  con código VBA,  cuando quieres crear un consulta de actualización o de lo que sea, y uno de los campos de esa consulta es un campo calculado mediante alguna de estas funciones.

 


Publicado por: mounir
Fecha de publicación: 26/Diciembre/2020 a las 22:16
Hola!

Aquí te dejo enlace de dos ejemplos que transforman SQL a VBA.

https://sites.google.com/a/bengoechea.net/accessxxi/enlaces-1/descargas/jbwzSQL2VBA.rar?attredirects=0&d=1" rel="nofollow - https://sites.google.com/a/bengoechea.net/accessxxi/enlaces-1/descargas/jbwzSQL2VBA.rar?attredirects=0&d=1

https://sites.google.com/site/jjjt1973/de-sql-a-vba-access" rel="nofollow - https://sites.google.com/site/jjjt1973/de-sql-a-vba-access

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


Publicado por: rokoko
Fecha de publicación: 26/Diciembre/2020 a las 22:41
Publicado originalmente por mounir mounir escribió:

Hola!

Aquí te dejo enlace de dos ejemplos que transforman SQL a VBA.

https://sites.google.com/a/bengoechea.net/accessxxi/enlaces-1/descargas/jbwzSQL2VBA.rar?attredirects=0&d=1" rel="nofollow - https://sites.google.com/a/bengoechea.net/accessxxi/enlaces-1/descargas/jbwzSQL2VBA.rar?attredirects=0&d=1

https://sites.google.com/site/jjjt1973/de-sql-a-vba-access" rel="nofollow - https://sites.google.com/site/jjjt1973/de-sql-a-vba-access
Clap no se me habia ocurrido hacerlo con el complemento de Chea, y con Jefferson tambien lo he sacado, hay se ve bien lo de las comillas.......


Publicado por: Antonalo
Fecha de publicación: 26/Diciembre/2020 a las 23:02
Genial, lo he probado y funciona

el primer enlace no me funciona porque debe ser una version superior a la mía, tengo acess 2007 y no puede abrir el archivo, pero el segundo enlace sí

mi cadena de la consulta me la ha transformado en algo de lo que he extraído la clausula where  y queda:

CurrentDb.Execute "UPDATE EMAILS SET EMAILS.EmailActivado = True" _
& "  WHERE (((DCount(""Idpersona"",""OPERACIONES"",""Idpersona="" & [Emails].[IdPersona] & ""AND Parte = 1""))>0));"

 Y funciona a la perfección, muchas gracias rokoko, y mounir, esto me va a abrir muchas puertas, y lo que es mejor...LO ENTIENDO.

podéis  cerrar cuando queráis





Publicado por: VIMIPAS
Fecha de publicación: 27/Diciembre/2020 a las 00:07
Buenas noches a todos.

¿Podéis esperar a cerrar el hilo hasta que analice unas pruebas que estoy haciendo.?

Lo pido por favor a los moderadores y siempre y cuando Antonalo esté de acuerdo.

Gracias por la atención que me dispenséis en cualquier caso.

Saludos....

PD: sigo haciendo pruebas mientras tanto.

-------------
Gracias


Publicado por: mounir
Fecha de publicación: 27/Diciembre/2020 a las 10:44
Hola!

Si en realidad es fácil crear tu propio conversor, tal como lo explia Allen Browne en su web:

http://allenbrowne.com/ser-71.html" rel="nofollow - http://allenbrowne.com/ser-71.html .

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


Publicado por: rokoko
Fecha de publicación: 27/Diciembre/2020 a las 11:42
Publicado originalmente por mounir mounir escribió:

Hola!

Si en realidad es fácil crear tu propio conversor, tal como lo explia Allen Browne en su web:

http://allenbrowne.com/ser-71.html" rel="nofollow - http://allenbrowne.com/ser-71.html .

ClapClap   que buena!!!!!


Publicado por: rokoko
Fecha de publicación: 27/Diciembre/2020 a las 12:18
Siguiendo las instrucciones de la web lo he hecho.

https://www.dropbox.com/s/il2vlx1kfv8tcz4/Conversos%20SQl_VBA.rar?dl=0


Publicado por: Antonalo
Fecha de publicación: 27/Diciembre/2020 a las 16:08
He visto el enlace de mounir y lo estudiaré con tiempo. En cuanto a lo que ha hecho rokoko, pues lo he guardado porque lo utilizaré. Dudo mucho que haya ningún foro de access mejor y con mejor gente que este. Siempre que he planteado un problema ha sido resuelto. Por supuesto VIMIPAS, que tenéis mi permiso para que el hilo siga abierto o cerrado a vuestra conveniencia.


Publicado por: mounir
Fecha de publicación: 27/Diciembre/2020 a las 16:09
Hola!

Te ha quedado genial!!

¿No sé si la podrás publicar en mis favoritos?

Muchas gracias.

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


Publicado por: VIMIPAS
Fecha de publicación: 27/Diciembre/2020 a las 18:09
Hola de nuevo.

Pues la verdad es esta: tras mis pruebas, no tengo nada mas que rendirme ante la evidencia de algo tan simple como las "".

Coincido con Mounir, si lo subieras a funciones favoritas, quedaría un ejemplo tan simple como efectivo, por lo que creo que deberíamos agradecértelo todos.

Celebro esta feliz, simple y provechosa idea.

Saludos.

Por cierto: Ya puedes, por mi parte y cuando tu lo consideres conveniente, volver a pedir que te cierren esta pregunta.

-------------
Gracias


Publicado por: rokoko
Fecha de publicación: 27/Diciembre/2020 a las 19:59
Subido esta a falta de su aprobación......


Publicado por: Antonalo
Fecha de publicación: 28/Diciembre/2020 a las 23:10
Pues ya he utilizado  el archivo de rokoko 3 veces en lo que estoy haciendo y está muy bien, está genial, muy fácil y práctico. 

Muchas gracias rokoko, mounir, VIMIPAS... podéis cerrar cuando querías.



Imprimir página | Cerrar ventana