Access - Combinar en un cuadro de texto varios campos relacionados

   
Vista:

Combinar en un cuadro de texto varios campos relacionados

Publicado por Pintaio (2 intervenciones) el 01/07/2011 14:03:10
Hola:

Tengo una base sobre expedientes con la siguiente estructura:

Tabla principal: EXPEDIENTES. Tabla secundaria: EMPLAZAMIENTOS

La tabla EXPEDIENTE Se relaciona uno a varios con EMPLAZAMIENTOS, es decir, un expediente se puede relacionar con varios lugares.

Dentro de EXPEDIENTES tengo dos campos: [Titulo] e [Id]. Dentro de EMPLAZAMIENTOS tengo los campos [Lugar] e [EXPEDIENTES_Id] (el que relaciona esta tabla con la otra).

Lo que quiero es crear en una consulta un campo en el que me aparezca el Titulo y todos los campos Lugar que tenga asociados.

Por ejemplo:

registro de EXPEDIENTES, campo Titulo: "Reparación de calzadas"

registros de EMPLAZAMIENTOS relacionados con el anterior, campo Lugar: "León", "Palencia", "Burgos"

En la consulta debería aparecerme esto: "Reparación de calzadas en León, Palencia, Burgos"

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

Combinar en un cuadro de texto varios campos relacionados

Publicado por 2PL (53 intervenciones) el 01/07/2011 17:21:06
Yo no se si habrá alguien que sepa como hacer esto mediante una consulta, lo que si te puedo asegurar es que se puede realizar con VBA. Aparte de tener esas dos tablas, tendrias una tercera con dos campos por ejemplo ID y EXP_EMP como texto y una longitud dependiendo de los posibles lugares y ahi va este código.


Option Compare Database
Option Explicit

Function exp_emp()

Dim GesExpDB As Database
Dim TBL_EXPEDIENTES As Recordset
Dim TBL_EMPLAZAMIENTOS As Recordset
Dim TBL_EXP_EMP As Recordset
Dim EXISTE As Byte
Set GesExpDB = DBEngine.Workspaces(0).Databases(0)

Set TBL_EXPEDIENTES = GesExpDB.OpenRecordset("EXPEDIENTES")
Set TBL_EMPLAZAMIENTOS = GesExpDB.OpenRecordset("EMPLAZAMIENTOS")

Set GesperDB = CurrentDb
Set TBL_EXP_EMP = GesExpDB.OpenRecordset("EXP_EMP")

'--------------------------- BORRAR LOS REGISTROS DE LA TABLA EXP_EMP ---------------
Do While Not TBL_EXP_EMP.EOF
TBL_EXP_EMP.Delete
TBL_EXP_EMP.MoveNext
Loop

TBL_EXPEDIENTES.MoveFirst
TBL_EXP_EMP.AddNew 'Añadir un registro a la tabla EXP_EMP
TBL_EXP_EMP("ID") = TBL_EXPEDIENTES("ID")
'-------------------------- LEER LA TABLA EXPEDIENTES --------------------
Do While Not TBL_EXPEDIENTES.EOF
TBL_EMPLAZAMIENTOS.MoveFirst
Do While Not TBL_EMPLAZAMIENTOS.EOF
If TBL_EXPEDIENTES("ID") = TBL_EMPLZAMIENTO("EXPEDIENTES_ID") Then
TBL_EXP_EMP.MoveFirst
Do While Not TBL_EXP_EMP.EOF
If TBL_EXP_EMP("ID") = TBL_EMPLAZAMIENTOS("EXPEDIENTES_ID") Then
EXISTE = True
TBL_EXP_EMP("ID") = TBL_EMPLAZAMIENTOS("EXPEDIENTES_ID")
TBL_EXP_EMP("EXPEMP") = TBL_EXP_EMP("EXPEMP") & "," & _
TBL_EMPLAZAMIENTOS("LUGAR")
TBL_EXP_EMP.Update
End If
TBL_EXP_EMP.MoveNext
Loop
If Not EXISTE Then
TBL_EXP_EMP.AddNew
TBL_EXP_EMP("ID") = TBL_EMPLAZAMIENTOS("EXPEDIENTES_ID")
TBL_EXP_EMP("EXPEMP") = TBL_EMPLAZAMIENTOS("LUGAR")
TBL_EXP_EMP.Update
End If
End If
TBL_EMPLAZAMIENTOS.MoveNext
Loop
TBL_EXPEDIENTES.MoveNext
Loop
TBL_EXPEDIENTES.Close
TBL_EMPLAZAMIENTOS.Close
TBL_EXP_EMP.Close

End Function
PD: Ya tendrias la tabla (EXP_EMP) como tu quieres
Si tienes dudas, me las comentas y trataré de solucionarlo.
Saludos desde Cádiz
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

Combinar en un cuadro de texto varios campos relacionados

Publicado por pintaio (2 intervenciones) el 02/07/2011 12:44:50
Hola 2PL, muchas gracias por una respuesta tan rápida.

En principio necesitaría que la solución fuese mediante una consulta, con instrucciones SQL.


Saludos.
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

Combinar en un cuadro de texto varios campos relacionados

Publicado por 2pl (53 intervenciones) el 02/07/2011 14:22:51
Para grandes males, grandes remedios y si no encuentras solucion utiliza lo que te he mandado.
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