Access - Unir elementos si es del mismo cliente

Tengo un formulario en el cual le hago una consulta y me muestra todos los elementos de todos los clientes. El problema es que en el formulario me sale de la siguiente manera:

Cliente:PEPE ELEMENTO:X1

Cliente:PEPE ELEMENTO:X2

Cliente: Jose ELEMENTO: Y
Me gustaria que si el cliente es el mismo apareciera de la siguiente manera en el formulario
Cliente:PEPE ELEMENTO:X1, X2
Cliente:Jose ELEMENTO:Y

Muchas Gracias>>>Black

3

3 Respuestas

527.825 pts. Si no valoras las respuestas, no esperes que te...

No dices si los datos ya están o los vas a poner después. Vamos a suponer que ya están y vamos a suponer( que es mucho suponer) que consigo explicarme. Si tienes una tabla como la imagen

Crea una tabla Casos, igual a la anterior pero el id numérico, Supongamos que tienes un formulario

En el evento al hacer clic del botón le pongo(prepárate)

DoCmd.RunCommand acCmdSaveRecord

Dim a As Integer
For a = 1 To Form.Recordset.RecordCount
Contador = Nz(DCount("cliente", "atributo", "cliente=forms!atributo!cliente and id<=" & Me.Id & ""))
DoCmd.GoToRecord , , acNext
Next

DoCmd.SetWarnings False
DoCmd.GoToRecord , , acFirst
Dim i As Integer
For i = 1 To Form.Recordset.RecordCount
Select Case Contador
Case Is = 1
DoCmd.RunSQL "insert into casos(cliente,casos,contador)values(cliente,casos,contador)"
Case Is = 2
Dim b As String
b = DLookup("casos", "atributo", "cliente=forms!atributo!cliente and contador=1") & "," & Casos
DoCmd. RunSQL "insert into casos(cliente, casos, contador)values(cliente,'" & b & "', contador)"
DoCmd.RunSQL "delete * from casos where cliente=forms!atributo!cliente and contador<2"
Case Is = 3
Dim c As String
c = DLookup("casos", "atributo", "cliente=forms!atributo!cliente and contador=1") & "," & DLookup("casos", "atributo", "cliente=forms!atributo!cliente and contador=2") & "," & Casos
DoCmd. RunSQL "insert into casos(cliente, casos, contador)values(cliente,'" & c & "', contador)"
DoCmd.RunSQL "delete * from casos where cliente=forms!atributo!cliente and contador<3"
Case Is = 4
Dim d As String
d = DLookup("casos", "atributo", "cliente=forms!atributo!cliente and contador=1") & "," & DLookup("casos", "atributo", "cliente=forms!atributo!cliente and contador=2") & "," & DLookup("casos", "atributo", "cliente=forms!atributo!cliente and contador=3") & "," & Casos
DoCmd. RunSQL "insert into casos(cliente, casos, contador)values(cliente,'" & d & "', contador)"
DoCmd.RunSQL "delete * from casos where cliente=forms!atributo!cliente and contador<4"

End Select

DoCmd.GoToRecord , , acNext
Next
DoCmd.GoToRecord , , acFirst
Form.RecordSource = "select * from casos"

Con lo que el formulario te quedará

El cuadro de texto Contador, se puede poner como oculto o quitarlo. Lo he dejado a la vista para que se vea el proceso.

1º Va contando registro a registro cuantas veces se repite un cliente con un caso y se lo pone en el campo contador. Como en la imagen

Verás que Pepe ha llegado a 3, María y Ramón a 2

2º Luego va registro a registro insertando en la tabla Casos los valores y en caso de que ingrese, por ejemplo Pepe Verde, amarillo elimina el registro de pepe verde. Luego cuando inserte Pepe Verde, Amarillo, No hace nada elimina Pepe Verde, Amarillo y te queda la tabla Casos como

Y por último le digo que el origen del formulario sea la tabla Casos.

33.275 pts. Con Access se puede hacer todo ....
65.200 pts.

¿Cuántos elementos máximo debes unir?

Te he preparado este ejemplo haber si lo puedes adaptar:

Se requieren 3 tablas 1 consulta y 2 formularios:

TABLAS

CONSULTA

FORMULARIOS

EVENTO AL ABRIR EL FORMULARIO

Private Sub Form_Open(Cancel As Integer)
DoCmd.SetWarnings (False)
DoCmd.RunSQL "DELETE * FROM tbl_temporal;"
Me.frmSub_Resultado.Form.Requery
End Sub

CÓDIGO DEL BOTÓN AGRUPAR

Private Sub cmdAgrupar_Click()

' Ejemplo preparado por EDUARDO PEREZ FERNANDEZ
' Para TodoExpertos

Dim db As Database
Dim rs As Recordset
Dim rs1 As Recordset
Dim strCadena As String
Dim lnCliente As Long
Dim strFinal As String
Set db = CurrentDb
Set rs = db.OpenRecordset("tblClientes")
Set rs1 = db.OpenRecordset("tblVentas")
DoCmd.SetWarnings (False)

Do Until rs.EOF
lnCliente = rs!idcliente
strCadena = ""
Do Until rs1.EOF
If rs!idcliente = rs1!idcliente Then
strCadena = "" & strCadena & "," & rs1!articulo
End If
rs1.MoveNext
Loop
strCadena = "'" & Mid(strCadena, 2) & "'"
strFinal = "(" & lnCliente & "," & strCadena & ");"
DoCmd.RunSQL "INSERT INTO tbl_temporal(idcliente,articulo) VALUES " & strFinal
Rs1. MoveFirst
Rs. MoveNext
Loop
Rs. Close
Rs1. Close
Db. Close
Set db = Nothing
Set rs = Nothing
Me.frmSub_Resultado.Visible = True
Me.frmSub_Resultado.Form.Requery

End Sub

RESULTADO FINAL 

Este ejemplo no tiene limite de registros de clientes y artículos. Si no puedes hacerlo envíame un correo [email protected] y con gusto te envío el ejemplo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas