Contatenar registros de también en uno solo de una consulta

Me gustaría por favor una función que me permita en un sólo registro de una consulta, arrojar concatenados (separados por tabulaciones) todos los registros de una tabla.
Por ejemplo, mi tabla se llama consecutivos y tiene los siguientes registros:
A1234
B4567
C8901
Y quisiera que una consulta me arrojara todos esos registros en uno sólo así:
A1234 B4567 C8901
No sé si fui claro.

1 respuesta

Respuesta
1
Debes hacer un procedimiento que recorra la base, y acumule el contenido del campo en una variable de memoria.
Dim TEXTO As String
Dim RS1 As Object
Dim SQL As String
TEXTO = ""
comandosql = "select * from tabla1"
Set RS1 = CurrentDb().OpenRecordset(comandosql)
nros = CurrentDb.TableDefs("tabla1").RecordCount
For i = 1 To nros
        TEXTO = TEXTO + " " + RS1.Fields("texto")
        RS1.MoveNext
Next i
MsgBox TEXTO
Saludos. Jorge
Gracias Jorge, aunque debo admitir que, aunque diseño bases de datos en Access, no soy muy bueno interpretando códigos vb.
¿En este caso la tabla se llama CONSECUTIVOS y el campo único es CONS c'omo seria el código...?
Digamos que tengo los siguientes registros:
CONS
A1234
B4567
C8901
En este orden de ideas, quiero que una consulta me arroje un sólo registro con la concatenación de todos los registros de la tabla, ¿me imagino que el código que me enviaste es una función que debo incluir en un módulo?, cómo debe ser el lenguaje SQL de la consulta para que arroje la información.
Mil gracias
Cambia lo que te paso del código: que es lo que hace cada comando
En vez de:
msgbox texto          *******mostrar un mensaje con el texto calculado
colocas:
[cons]=texto           ****** reemplazo el campo cons con el dato en texto
En vez de tabla1
Colocas el nombre de la tabla: CONSECUTIVOS
en vez de ... Fields("texto") **** es el nombre del campo
colocas ... Fields("cons")
Lo que no entiendo es una pequeña cosa. ¿El campo cons está en la misma tabla? Luego si tienes 3 registros, ¿tienes 3 contenidos de cons? ¿Qué es lo que quieres hacer? El procedimiento funciona creando un botón en un formulario que este basado en dicha tabla y grabará el contenido en el último registro de la base (en este caso en el campo cons, tercer registro)
Saludos. Jorge
Creo que es válido comentarte lo que intento hacer.
Resulta que tengo que hacer una captura de unos códigos de producto y temporalmente los voy almacenando en una tabla que se llama consecutivos y el único campo es CONS, donde voy grabando los registros.
Cuando intento hacer el informe, los registros la consulta siempre salen verticalmente, porque así los arroja la consulta, es decir, uno debajo del otro, lo cual me genera mucho gasto de papel y me gustaría que en un sólo campo del informe salieran tabulados los registros, es decir.
El informe sale así.
XX09809809809CO
XX09809809809CO
XX98968787687CO
XX87687876878CO
Me sale uno debajo del otro, y me gustaria que salieran como cuando uno organiza por bloques en word asi>
XX8979879CO XX08098098CO XX288989877CO XX390879287498CO XX2349873CO XX9898798CO XX09879873CO XX987987987CO XX987987987982CO XX3343434CO
Es decir, que en el informe no salgan tal cual sale en la consulta, un registro debajo del otro, sino mejor distribuidos para optimizar el gasto en papeles, por eso era que la consulta inicial contigo era para disenar una consulta que me arrojara concatenados todos los registros de la tabla, más que todo necesitaría saber como haría la consulta, me dijeron que con una función, pero en esa parte si que no conozco nada.
Mil gracias por tu tiempo y paciencia.
Hola nuevamente, me arroja un error en la linea
TEXTO = TEXTO + " " + RS1.Fields("CONS")
El codigo lo disene de la siguiente manera>
Private Sub Comando13_Click()
Dim TEXTO As String
Dim RS1 As Object
Dim SQL As String
TEXTO = ""
comandosql = "select * from CONSECUTIVOS"
Set RS1 = CurrentDb().OpenRecordset(comandosql)
nros = CurrentDb.TableDefs("CONSECUTIVOS").RecordCount
For i = 1 To nros
TEXTO = TEXTO + " " + RS1.Fields("CONS")
RS1.MoveNext
Next i
[cons] = TEXTO
End Sub
Gracias
1) En el código del Comando del formulario pega esto:
Private Sub Comando1_Click()
Dim RS1 As New ADODB.Recordset
Dim RS2 As New ADODB.Recordset
RS1.Open "consecutivos", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
For i = 1 To RS1.RecordCount
concatenar = concatenar + " - " + RS1.Fields("cons")
RS1.MoveNext
Next i
RS1. Close
RS2. Open "unificado", CurrentProject. Connection, adOpenKeyset, adLockOptimistic
RS2. AddNew "texto", concatenar
RS2. Close
End Sub
2) Crea una tabla que tenga un campo denominado texto, de tipo memo. Graba la tabla como unificado
3) El código une todos los registros de la base consecutivos del campo cons en una variable que se llama concatenar. Luego abre la base unificado y graba en el campo texto, el contenido de la variable.
4) Genera un informe que se base en la tabla unificado, será un solo textbox (texto) que ocupe toda la página.-
Saludos. Jorge

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas