duplicados en consulta, unirlos para que se vean en una sola linea (los no duplicados)

09/07/2012 - 22:58 por Victor | Informe spam
Hola, Access 2010

Vamos a ver, es una consulta con la unión de 3 tablas (vinculadas) que obviamente me muestran duplicados. Lo que deseo hacer en este caso es agrupar las lineas repetidas en una (pero que se muestre todo, pero en una sola linea).

La tabla 1 me habla de los pacientes.
La tabla 2 de sus teléfonos
La tabla 3 de sus terapias recibidas.

En la consulta me sale que si el paciente uno tiene 2 teléfonos y ademas ha recibido 2 terapias, pues me salen 4 lineas del paciente uno (obviamente el nombre de dicho paciente se repite cuatro veces).

¿Cómo puedo conseguir que me aparezca el paciente en una sola linea vez pero aquellos campos NO REPETIDOS se me muestren todo en uno?
Algo así como si tiene tel: 651151515 y tel: 652123456 pues que en el campo teléfono se vea 651151515-652123456 (y lo mismo con las terapias: terapia: resfriado y terapia: eczema terapia: resfriado-eczema).
Como el nombre esta repetido, pues lo muestra una sola vez, pero el campo TEL lo agrupa para que se vea toda la información, y todo en una sola linea (no en cuatro).

Gracias de antemano. Y espero haberme explicado bien!!

Victor

Preguntas similare

Leer las respuestas

#1 Emilio
10/07/2012 - 19:00 | Informe spam
¡Importante!: Colabora con el grupo.Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
Hola!
para hacer eso que pretendes se necesita de programación, y hacerlo en un
informe, no en una consulta.
¿estás preparado para ello?

Saludos a todos desde Huelva

Emilio [MS-MVP Access 2006/11]
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"Victor" escribió en el mensaje de
noticias:

Hola, Access 2010

Vamos a ver, es una consulta con la unión de 3 tablas (vinculadas) que
obviamente me muestran duplicados. Lo que deseo hacer en este caso es
agrupar las lineas repetidas en una (pero que se muestre todo, pero en una
sola linea).

La tabla 1 me habla de los pacientes.
La tabla 2 de sus teléfonos
La tabla 3 de sus terapias recibidas.

En la consulta me sale que si el paciente uno tiene 2 teléfonos y ademas ha
recibido 2 terapias, pues me salen 4 lineas del paciente uno (obviamente el
nombre de dicho paciente se repite cuatro veces).

¿Cómo puedo conseguir que me aparezca el paciente en una sola linea vez pero
aquellos campos NO REPETIDOS se me muestren todo en uno?
Algo así como si tiene tel: 651151515 y tel: 652123456 pues que en el campo
teléfono se vea 651151515-652123456 (y lo mismo con las terapias: terapia:
resfriado y terapia: eczema terapia: resfriado-eczema).
Como el nombre esta repetido, pues lo muestra una sola vez, pero el campo
TEL lo agrupa para que se vea toda la información, y todo en una sola linea
(no en cuatro).

Gracias de antemano. Y espero haberme explicado bien!!

Victor
Respuesta Responder a este mensaje
#2 Victor
12/07/2012 - 09:47 | Informe spam
Gracias Emilio.
¿te refieres a VBA, verdad?
Usando Recordset, no?

Bueno, encontré este código ejemplo que me concatena aquellas celdas en concreto que necesito (el codigo es solo de ejemplo):

Public Sub LeerCampo1()

Dim cnn As Connection
Dim rst As Recordset
Dim sSQL As String
Dim sAcumular As String

Set cnn = CurrentProject.Connection
Set rst = New Recordset
sSQL = "Select Campo1 from Tabla1"
rst.Open sSQL, cnn
Do While Not rst.EOF
&&&&sAcumular = sAcumular & rst!Campo1
Loop
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing

End Sub


Pero... al final he encontrado otra forma de hacerlo: usando una macro.
Si, ya sé que no es lo mismo pero en mi caso, en lugar de hacer una consulta de 3 tablas (e intentar concatenar la información para que me aparezca todo en una sola linea por paciente), he creado un campo extra en la TABLA 1 y desde las otras, y gracias a la macro, he conseguido que se mantenga un duplicado (o concatenado) de esa información. Esto lo he hecho directamente en el formulario que uso para manipular e introducir la información de cada paciente (la ficha paciente). Así pues, ahora tengo la consulta con una sola linea por paciente y con aquella información separada concatenada. Esto lo uso para sacar listados concretos de todos los pacientes y es un formulario previo que me permite filtrar manualmente y de ahí un botón me lleva al informe correspondiente para imprimir esa información.

Por si a alguien le pudiera ser de utilidad, esto ha sido lo que he realizado al fin:

una macro que contenga la instrucción "establecer valor".
En el caso de los teléfonos, puedes tener un formulario de la tabla madre con un subformulario que contenga los teléfonos del paciente. En "al cambiar" de las propiedades del campo teléfono del subformulario haces que se active la macro en cuestión para que establezca el valor de un campo "teléfonos" que podrías crear en la tabla madre y que aparecería en el formulario principal. Este campo "teléfonos" iría acumulando los diversos teléfonos que fueran añadiéndose en el subformulario.
La macro en cuestión debería establecer el valor propio del propio campo receptor de los datos ("teléfonos") más el que fuera añadido. De este modo tendrías en un solo campo los teléfonos de cada paciente y se iría actualizando conforme fueras añadiendo otros nuevos

El detalle de cómo proceder sería este (para novatos como yo):

For_Pal : formulario principal correspondiente a los pacientes. En su interior habría un campo "telefonos"
For_Tel: subformulario correspondiente a los teléfonos del paciente. Formulario de tipo continuo. En su interior habría un campo "telefono". Este subformulario, vinculado al principal, muestra sólo los telefonos del paciente que haya en aquel.
En el campo teléfono poner la macro en "al cambiar" de las propiedades del la pestaña "eventos" del campo. La macro tendría la instrucción "establecer valor". El "elmento" seria el campo "telefonos" del formulario de pacientes, es decir [Formularios]![For_Pal]![telefonos]. La "expresión" sería algo así como: [Formularios]![For_Pal]![telefonos] & [Formularios]![For_Pal]![For_Tel].[Formulario]![telefono] & " ;".
Lo del " ;" lo añadiría para separar los teléfonos con puntos y comas (o con lo que prefieras).
A tener en cuenta: la macro va substituyendo lo que hay en el campo teléfonos por su contenido anterior + el teléfono nuevo y un punto y coma. Si alguien cambia la numeración de uno de sus teléfonos, deberás quitar manualmente del campo teléfonos la antigua, ya que te aparecerá la antigua y la nueva. No creo que eso sea mayor problema, dado que la gente tiende a querer conservar su numeración, pero para evitar errores puedes añadir a la macro un Msgbox que te avise en estos casos.


Un ultimo detalle que me encontré. La acción "EstablecerValor" no aparece por defecto, sino que hay que marcar "mostrar todas las las acciones", que es un boton (al menos en Access 2010) que esta justo arriba en el ribon.

Eso es todo Emilio.

Muchas gracias

Victor
Respuesta Responder a este mensaje
#3 Emilio
12/07/2012 - 18:14 | Informe spam
:-))

Hola!
Saludos a todos desde Huelva

Emilio [MS-MVP Access 2006/11]
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"Victor" escribió en el mensaje de
noticias:

Gracias Emilio.
¿te refieres a VBA, verdad?
Usando Recordset, no?

Bueno, encontré este código ejemplo que me concatena aquellas celdas en
concreto que necesito (el codigo es solo de ejemplo):

Public Sub LeerCampo1()

Dim cnn As Connection
Dim rst As Recordset
Dim sSQL As String
Dim sAcumular As String

Set cnn = CurrentProject.Connection
Set rst = New Recordset
sSQL = "Select Campo1 from Tabla1"
rst.Open sSQL, cnn
Do While Not rst.EOF
&&&&sAcumular = sAcumular & rst!Campo1
Loop
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing

End Sub


Pero... al final he encontrado otra forma de hacerlo: usando una macro.
Si, ya sé que no es lo mismo pero en mi caso, en lugar de hacer una consulta
de 3 tablas (e intentar concatenar la información para que me aparezca todo
en una sola linea por paciente), he creado un campo extra en la TABLA 1 y
desde las otras, y gracias a la macro, he conseguido que se mantenga un
duplicado (o concatenado) de esa información. Esto lo he hecho directamente
en el formulario que uso para manipular e introducir la información de cada
paciente (la ficha paciente). Así pues, ahora tengo la consulta con una sola
linea por paciente y con aquella información separada concatenada. Esto lo
uso para sacar listados concretos de todos los pacientes y es un formulario
previo que me permite filtrar manualmente y de ahí un botón me lleva al
informe correspondiente para imprimir esa información.

Por si a alguien le pudiera ser de utilidad, esto ha sido lo que he
realizado al fin:

una macro que contenga la instrucción "establecer valor".
En el caso de los teléfonos, puedes tener un formulario de la tabla madre
con un subformulario que contenga los teléfonos del paciente. En "al
cambiar" de las propiedades del campo teléfono del subformulario haces que
se active la macro en cuestión para que establezca el valor de un campo
"teléfonos" que podrías crear en la tabla madre y que aparecería en el
formulario principal. Este campo "teléfonos" iría acumulando los diversos
teléfonos que fueran añadiéndose en el subformulario.
La macro en cuestión debería establecer el valor propio del propio campo
receptor de los datos ("teléfonos") más el que fuera añadido. De este modo
tendrías en un solo campo los teléfonos de cada paciente y se iría
actualizando conforme fueras añadiendo otros nuevos

El detalle de cómo proceder sería este (para novatos como yo):

For_Pal : formulario principal correspondiente a los pacientes. En su
interior habría un campo "telefonos"
For_Tel: subformulario correspondiente a los teléfonos del paciente.
Formulario de tipo continuo. En su interior habría un campo "telefono". Este
subformulario, vinculado al principal, muestra sólo los telefonos del
paciente que haya en aquel.
En el campo teléfono poner la macro en "al cambiar" de las propiedades del
la pestaña "eventos" del campo. La macro tendría la instrucción "establecer
valor". El "elmento" seria el campo "telefonos" del formulario de pacientes,
es decir [Formularios]![For_Pal]![telefonos]. La "expresión" sería algo así
como: [Formularios]![For_Pal]![telefonos] &
[Formularios]![For_Pal]![For_Tel].[Formulario]![telefono] & " ;".
Lo del " ;" lo añadiría para separar los teléfonos con puntos y comas (o con
lo que prefieras).
A tener en cuenta: la macro va substituyendo lo que hay en el campo
teléfonos por su contenido anterior + el teléfono nuevo y un punto y coma.
Si alguien cambia la numeración de uno de sus teléfonos, deberás quitar
manualmente del campo teléfonos la antigua, ya que te aparecerá la antigua y
la nueva. No creo que eso sea mayor problema, dado que la gente tiende a
querer conservar su numeración, pero para evitar errores puedes añadir a la
macro un Msgbox que te avise en estos casos.


Un ultimo detalle que me encontré. La acción "EstablecerValor" no aparece
por defecto, sino que hay que marcar "mostrar todas las las acciones", que
es un boton (al menos en Access 2010) que esta justo arriba en el ribon.

Eso es todo Emilio.

Muchas gracias

Victor
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida