Consulta de tablas en access 2000

Tengo dos tablas una se llama Voluntarios y otras Familias.
En la tabla familia tengo cuatro campos, voluntario1 y voluntario2/3/4 que guardan el código de Voluntario.
Tengo relacionadas las tablas de manera de que un voluntario puede estar en
muchas Familias.
Ahora lo que necesito es hacer una consulta que devuelva un formulario ingresando el nombre del
Voluntario me resuelva en que registro/s de la tabla Familia se encuentra. Pudiendo estar en cualquiera de los cuatro campos del registro.

2 respuestas

Respuesta
1
La consulta puede ser del tipo:
SELECT VOLUNTARIOS.VOLUNTARIO, FAMILIAS.NOMBREFAMILIA
FROM FAMILIAS INNER JOIN VOLUNTARIOS ON VOLUNTARIOS.VOLUNTARIO=FAMILIAS.VOLUNTARIO1 OR VOLUNTARIOS.VOLUNTARIOS=FAMILIAS.VOLUNTARIO2 OR VOLUNTARIOS.VOLUNTARIO=FAMILIAS.VOLUNTARIO3.....
Siguiendo tu respuesta arme esa consulta:
SELECT VOLUNTARIOS.Id, [Cabeza Flia].Cabeza1
FROM [Cabeza Flia] INNER JOIN VOLUNTARIOS ON VOLUNTARIOS.Id=[Cabeza Flia].VOLUNTARIO OR VOLUNTARIOS.Id=[Cabeza Flia].VOLUNTARIO2 OR VOLUNTARIOS.Id=[Cabeza Flia].VOLUNTARIO3 OR VOLUNTARIOS.Id = [Cabeza Flia].VOLUNTARIO4
WHERE (((Voluntarios.[Nombre y Apellido])=[Ingrese nombre de Voluntario]));
Donde lo único que arregle es el where, que no se si esta bien la clausula, luego que ejecuto la consulta me sale el siguiente mensaje:
Esta expresión no esta escrita correctamente o es muy compleja para evaluarse.
¿Qué puede ser? ¿Cómo lo podemos corregir?
He estado analizando la consulta, y las necesidades de relación me llevan a una consulta super compleja donde hay que montar cuatro subconsultas, para después crear una quinta de referencias cruzasas y así obtener una única columna donde buscar los criterios del nombre de voluntario.
Este proceso en el momento en que crezcan los registros de las tablas va a realizarse muy lentamente, por eso he creído conveniente informarte de que es más lógico cambiar la estructura de las tablas, y añadir una nueva tabla a tu proyecto.
De esta forma tendrías, una tabla con los voluntarios, una tabla con las familias, y una tercera, donde se registra la familia y el voluntario, de esta forma evitas montar cuatro campos en columnas, y directamente quedan situados en filas, donde la búsqueda por consulta es directa.
Personalmente, creo que es la solución más viable, ya que el único esfuerzo que hay que hacer es el de realizar cuatro consultas para pasar los datos a la nueva tabla, y unir la relación de las tres.
Mientras que de la otra forma, como te comentaba, sacrificaras un tiempo importante en la ejecución de una consulta super compleja.
Espero haberte ayudado. Y si quieres seguir con este comentario conjunto sobre las soluciones a tu planteamiento, cuéntame tu decisión al respecto y seguiremos investigando.
Esta bien me convenciste, ahora otra cuestión. Creo la tabla como me decís, ¿pero cómo hago para que con el mismo formulario de alta de familias donde ingreso los cuatro voluntarios que pueden concurrir me de de alta también un registro en esta nueva tabla y que aparte sea uno por cada voluntario?
Me rindo con el tema de la consulta para el informe pero...
Me gustaría hacer un formulario con un cuadro combinado donde elijo el voluntario y tener un cuadro de lista donde me muestre las flias en que esta el formulario. Por lo que he podido recavar podría hacer una consulta sobre la tabla Familia y que en el campo Voluntario1, 2,3,4 diga algo así : [Formularios]![VoluntariosID]![VoluntariosId], donde tendría que tomar el id del voluntario del cuadro combinado para después hacer la consulta y mostrarla en el cuadro de lista.
Ayuda Sofocles!
Reseteate.
Ahora vamos a planificar tu aplicación desde cero. Ok.
Primero: Crea una Tabla de Familias, con los datos que creas convenientes.
Segundo: Crea una Tabla de Voluntarios, con los datos oportunos.
Tercero: Crea una tabla de Familias_Voluntarios, cuya clave primaria debe estar formada por el identificativo de la familia, y el identificativo de los voluntarios.
De esta forma, las familias tendrán tantos voluntarios como desees y no solo cuatro.
Bien, ahora debes crear un formulario para mantener las familias, otro para mantener los voluntarios, y un tercer formulario en hoja de datos, que sera, a su vez, subformulario del relativo a familias.
En el subformulario, una vez creado e insertado en el formulario principal, debes hacer corresponder, mediante las propiedades, la vinculación del campo principal (Id de la Familia) con la vinculación del campo secundario del subformulario (que será también Id Familia).
De esta forma, cuando abras el formulario de familias, automáticamente te aparecerán en el subformulario los voluntarios que pertenecen a esa familia. Y cuando cambies de registro, el automatismo seguirá controlando los voluntarios de la nueva familia.
Este es el método.
Busca la sencillez, no te compliques, es muy fácil.
No obstante, si tienes alguna duda no dudes en hacérmelo saber.
Gracias por responder.
Mi creencia de conocimientos de access se va desmoronando poco a poco.
¿Cómo hago para hacer corresponder, mediante las propiedades, la vinculación del campo principal (Id de la Familia) con la vinculación del campo secundario del subformulario (que será también Id Familia)?
Gracias Sofocles.
Primeramente, me gustaría pedirte que no te desmorones, ten paciencia y busca la sencillez.
Tienes dos tablas que has colocado como origen de datos en sendos formularios.
En el formulario principal, has insertado un subformulario, y ahora vas a hacerlos corresponder, sincronizandolos con la vinculación.
El que los campos de relación entre las tablas se llamen de la misma manera es un síntoma de que estas haciendo las cosas bien, y en la vinculación, así deben corresponderse.
Si en el formulario principal tienes un campo que se llama familia, y cuyo origen de datos es IdFamilia, lo que debes teclear en el vinculo del principal es el nombre del campo, es decir familia. En cambio en el valor del vinculo para el secundario debes teclear el nombre del campo de la tabla, es decir IdFamilia.
Procura no llamar a los cuadros de texto igual que los campos de la tabla, esto te ayudará.
De todas formas, si te has atascado y no puedes dar el siguiente paso, hazme llegar una copia de tu aplicación e intentare ayudarte.
Mi dirección de correo es [email protected]
Sófocles: te agradezco tu dedicación en el asunto, ayer pude resolver la incógnita con la siguiente consulta de sql:
SELECT *
FROM Familia
WHERE ((((Select Voluntarios.IdVoluntario from Voluntarios where Voluntarios.[Nombre] = [Ingrese el nombre del voluntario])) In ([Voluntario],[Voluntario2],[Voluntario3],[Voluntario4])));
Nuevamente te agradezco tu voluntad y dedicación
DiegoSatch.
Respuesta
1
Supongo que a lo que te referirás será a realizar un informe, pues bien, hazlo de la siguiente manera:
1º Crea un Formulario en el que haya un campo, que se llame "voluntario", donde selecciones el voluntario indicado. El ormulario por ejemplo se llamará "SelecVoluntario"
2º Crea una consulta por llamada "FiltraVoluntario", y entonces pon todos los campos que quieres que te salgan en el INFORME, más los campos que tengan al voluntario.
3º Luego en cada uno de los campos como criterio pones "SelecVoluntario!voluntario", de tal manera que los pongas cada uno en una fila distinta, yendo hacia abajo.
4º Después crea un informe basado en esa consulta.
5º Y por ultimo en el formulario de antes, crea un botón de comando que abra el informe anterior.
Un saludo, y si tienes alguna duda, ya sabes donde estoy
Caichar
No es un formulario si no un firmo lo que quiero.
Gracias
Hago lo que me decís pero no me toma el valor de cuadro de lista si no que me lo pide cuando le doy para ver el informe.
Que estamos haciendo mal.
En vez de poner 'selecvoluntario! Voluntario' prueba con 'forms! Selecvoluntario! Voluntario'

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas