Access - Access: Unir texto de varios registros para un mismo cliente

   
Vista:

Access: Unir texto de varios registros para un mismo cliente

Publicado por Yorscar (6 intervenciones) el 07/03/2012 10:55:18
Tengo una tabla (que la obtengo de otro programa) con datos de tipo "texto":

Cliente Comentario
2300 Este comentario
2300 Sigue el comentario
2200 Sus comentarios
1500 Más comentarios

Me gustaría crear una consulta donde me junte para el cliente "2300" todos sus comentarios en un solo registro, no en varios como me aparece.
De esta forma:
Cliente Comentario
2300 Este comentario Sigue el comentario
2200 Sus comentarios
1500 Más comentarios

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

Access: Unir texto de varios registros para un mismo cliente

Publicado por Marcelo marcelohipe@yahoo.es (161 intervenciones) el 08/03/2012 13:28:23
Yorscar:

La solución que propongo y que me ha servido mucho en mi trabajo para generar emails automáticos con varios contactos concatenados. Va de la siguiente manera.

2 Tablas:

-Detalle: Así llamé a la Tabla que tú describes

Cliente Comentario
2300 a
2300 b
2200 a
1500 Aquí
2200 b
2300 c
2300 d
2300 e
2300 f
2300 g
2300 h
2300 i
1500 está
1500 la
1500 solución
1500 del
1500 problema

-Resultado: Tabla con los Clientes existentes con los comentarios agrupados en un campo según su posición en la tabla Detalle. Inicialmente está vacía

Cliente Comentario


2 Consultas:

-“01 Anexa a Resultado el 1er Comentario para ese nuevo Cliente” (consulta de datos anexados), vista en SQL es así, sólo debes copiar y pegar en una nueva consulta en vista SQL y grabarla con el mismo nombre que te sugiero.

INSERT INTO Resultado ( Cliente, Comentario )
SELECT [Forms]![Formulario1]![Cliente] AS Expr1, [Forms]![Formulario1]![Comentario] AS Expr2;

-“02 Actualiza Resultado sgtes Comentario del Cliente Existente” (consulta de actualización), lo mismo que la otra.

UPDATE Resultado SET Resultado.Comentario = [Forms]![Formulario1]![ComentarioAcum]
WHERE (((Resultado.Cliente)=[Formularios]![Formulario1]![Cliente]));

1 Formulario:

-Formulario1: Basado en la tabla Detalle, 2 cuadros de texto dependientes de los campos Cliente y Comentario respectivamente, 1 cuadro de texto independiente llamado ComentarioAcum y 1 botón de comando llamado Comando4 que tiene asociado un procedimiento de evento “Al Hacer Clic” en Visual Basic

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Private Sub Comando4_Click()
 
'Variables de tipo Numérico
Dim ctaReg, i, veCliente As Long
'Variable de Tipo texto
Dim traeComentAnt As String
 
'quita las advertencias
DoCmd.SetWarnings False
 
'Borra el contenido de la tabla resultado
DoCmd.RunSQL "DELETE Resultado.* FROM Resultado;"
 
'Cuenta la cantidad de registros de la tabla Detalle
ctaReg = DCount("Cliente", "Detalle")
 
'Repite el proceso para cada registro de la tabla Detalle, en este caso 17 veces
For i = 1 To ctaReg
 
    'Ve si el Cliente de la Tabla Detalle existe en la TablaResultado
    veCliente = DCount("Cliente", "Resultado", "Resultado.Cliente = Forms![Formulario1]![Cliente]")
 
    'Si la cuenta arroja 0 se anexa el cliente con su respectivo comentario
    If veCliente = 0 Then
 
        DoCmd.OpenQuery "01 Anexa a Resultado el 1er Comentario para ese nuevo Cliente"
 
    'Si la cuenta es mayor que 0 el cliente ya existe en la Tabla Resultado, así que se actualiza el comentario de dicho Cliente
    ElseIf veCliente > 0 Then
 
        'Se busca el comentario en la Tabla Resultado de ese cliente y se concatena con el comentario actual en ComentarioAcum
        traeComentAnt = DLookup("Comentario", "Resultado", "Resultado.Cliente = Forms![Formulario1]![Cliente]")
 
        ComentarioAcum.Value = traeComentAnt & " " & Comentario.Value
 
        'Se actualiza el comentario en la Tabla Resultado para ese cliente
        DoCmd.OpenQuery "02 Actualiza Resultado sgtes Comentario del Cliente Existente"
 
    End If
 
    'Se limpia ComentarioAcum
    ComentarioAcum.Value = Null
 
    'Se va al siguiente registro hasta el final 17
    DoCmd.GoToRecord acDataForm, "Formulario1", acNext
 
'Termina de recorrer la Tabla Detalle representada en el formulario Formulario1
Next i
 
'Vuelve al primer registro para dejar el formulario en el prmer registro por si queremos ejecutar nuevamente el proceso
DoCmd.GoToRecord acDataForm, "Formulario1", acFirst
 
'Abre la tabla Resultado con los registros concatenados por cliente
DoCmd.OpenTable "Resultado", acViewNormal
 
'Es muy importante reestablecer las advertencias
DoCmd.SetWarnings True
 
End Sub

La tabla Resultado quedaría al final

Cliente Comentario
2300 a b c d e f g h i
2200 a b
1500 Aquí está la solución del problema

Un Saludo
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

Access: Unir texto de varios registros para un mismo cliente

Publicado por Yorscar yorscar@hotmail.com (6 intervenciones) el 09/03/2012 08:40:09
Gracias Marcelohipe por la solución propuesta (que te habrá costado lo suyo) y además por la rapidez.
Así a simple vista parece complicada de aplicar (ya que no manejo código) por lo que trataré de descifrarla y utilizarla.

Gracias de nuevo y ya lo contaré
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

Access: Unir texto de varios registros para un mismo cliente

Publicado por Marcelo marcelohipe@yahoo.es (161 intervenciones) el 09/03/2012 21:28:01
Para nada, cómo te dije, lo uso mucho en mi trabajo. Te recomiendo que le pierdas miedo al código, en este caso crea el formulario cómo te digo y las consultas copialas y pegalas en vista SQL, es más fácil de lo que parece. Al que le interese que me escriba y le envio el archivo en access. Además el código esta explicado con comentarios, son los que van precedidos por ' (comilla simple)

Te recomiendo que investigues acerca de:

DCount()
DLookup()
For...Next
If...then
Conatenación de caracteres
Ir a registro

Un Saludo desde Viña del Mar, Chile
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

Access: Unir texto de varios registros para un mismo cliente

Publicado por yorscar (6 intervenciones) el 14/03/2012 10:26:44
Gracias de nuevo, y lo dicho me pondré manos a la obra

Otro saludo desde Santo Domingo de la Calzada, España
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

Access: Unir texto de varios registros para un mismo cliente

Publicado por jbatres (1 intervención) el 08/08/2012 18:46:59
Muy buena solución, solo que no me reconoce cuando el campo es hipervinculo ya que el separador es " ; " pero se remedia poniendolo manualmente.
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

Access: Unir texto de varios registros para un mismo cliente

Publicado por Alfredo priemar@hotmail.com (1 intervención) el 27/08/2013 19:51:20
Hola Marcelo,

El programa funciona de maravilla.

Tenía este problema con una base de datos de 60000 notas a consolidar de 15000 clientes potenciales para poder meterlos en SugarCRM y aunque al principio parecía que el access se había estropeado, en el administrador de tareas he visto que estaba uno de los cuatro nucleos a tope y el access usando un 22% del CPU así que 12 minutos. == Resultado el deseado.

Moraleja, hay que tener paciencia y confiar en los buenos programadores

Gracias de nuevo
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

Access: Unir texto de varios registros para un mismo cliente

Publicado por humberto torres jhtl5@hotmail.com (1 intervención) el 05/12/2013 17:27:56
Por favor alguien me puede regalar el codigo de esa apliacion. slaudos
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

Access: Unir texto de varios registros para un mismo cliente

Publicado por Juan José canteriko@hotmail.com (3 intervenciones) el 08/04/2014 17:08:14
Buenas tardes,

Me he alegrado mucho al encontrar este codigo que puede hacer lo que estoy buscando desde hace tiempo, pero el codigo me da error en "ComentarioAcum.Value = Null"
¿Me podeis ayudar?

Gracias de antemano
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

Access: Unir texto de varios registros para un mismo cliente

Publicado por Juan José (3 intervenciones) el 08/04/2014 18:05:34
Solucionado,
Gracias a todos.
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

Access: Unir texto de varios registros para un mismo cliente

Publicado por Agustin (2 intervenciones) el 26/01/2015 12:55:45
Hola Juan José,
Como solucionaste el erro en:
"ComentarioAcum.Value = Null"

???
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

Access: Unir texto de varios registros para un mismo cliente

Publicado por Agustin (2 intervenciones) el 27/01/2015 20:18:13
Ya encontré el problema...
...el error es debido a que no encuentra el campo ComentarioAcum, por lo que se debe crear el código para que pueda recibir el código, es decir agregar:

Private Sub Region_WPAcum_Click()

End Sub

Sólo eso....
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

Access: Unir texto de varios registros para un mismo cliente

Publicado por Juan Esteban jmartinez@arssenasa.gov.do (1 intervención) el 06/01/2016 22:02:18
Saludos.

Estoy tratando de utilizar esta solucion para un problema similar y simplemente el sistema no ejecuta ninguna acción ni me da ningún mensaje de error. Estoy utilizando Access 2013. Hay algo que haya cambiado?
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