FoxPro/Visual FoxPro - Relación varios a varios

 
Vista:
sin imagen de perfil

Relación varios a varios

Publicado por jaime (7 intervenciones) el 18/06/2019 02:57:29
Buenas noches expertos!
les comento el simple problema que no he podido resolver:
tengo 2 tablas:
- Alumnos (code, Nombre, Fec de Nac)
- Materias (code, materia)
vinculados por una relación "varios a varios" en la tabla intermedia:
- Cursada (code, codeAlum, codeMate)
El problema surge cuando construyo el grid para recorrer los alumnos y ver las materias que cursan. El programa me impide conectar ambas claves primarias con la tabla intermedia Cursada. Me aparece un mensaje que dice que no es posible que la tabla hija este relacionada con mas de una tabla padre. Es como si o si todas las relaciones debieran ser "uno a varios"
Agradeceré de 10 al experto que me aclare como resuelve esto en el Entorno de datos.
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
Imágen de perfil de Leonardo Daniel A.
Val: 1.115
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Relación varios a varios

Publicado por Leonardo Daniel A. (497 intervenciones) el 18/06/2019 05:24:05
Hola, no tiene porque hacer eso... la relacion se hace de la tabla intermedia hacia las otras tablas, y que tengan indice establecido en el codigo, si hicieras la relacion manual, seria asi


1
2
3
4
5
6
7
8
9
10
11
12
SELECT 1
USE alumnos ORDER tag codigo
 
SELECT 2
USE materias ORDER tag codigo
 
SELECT 3
USE cursada
 
SELECT cursada
SET RELATION TO codigoalum INTO alumnos
SET RELATION TO codigomate INTO materias ADDITIVE
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
sin imagen de perfil

Relación varios a varios

Publicado por jaime (7 intervenciones) el 18/06/2019 15:00:17
Hola Leonardo.
El codigo que especificas en que lugar se escribe? o es un cursor? Si es así no trazo ninguna linea de relacion en el entorno de datos entonces?
La idea era seleccionar un alumno y ver todas sus materias en la otra tabla. Las tres tablas estan ya completas pero no me sale.
Perdón por las preguntas, quizas básicas, pero sin esta ayuda no puedo recorrer las tablas relacionadas.
gracias!
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
Imágen de perfil de Leonardo Daniel A.
Val: 1.115
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Relación varios a varios

Publicado por Leonardo Daniel A. (497 intervenciones) el 18/06/2019 17:19:23
Hola, ese es codigo FOX.. puro y duro... lo puedes poner en el init del formulario.... pero tambien puedes usar el entorno de datos, agregas tus tablas.. en las propiedades buscas la propiedad "order" y ahi seleccionas el indice de tu clave principal, asi lo haces con la tabla Alumnos y la tabla materias.. la tabla de union su indice debe ser compuesto por CodAlum + CodMate despues tomas el campo CodAlum de tu tabla de Union (cursada) y la arrastras al campo Codigo de tu tabla alumnos y haces lo mismo con la columna de codMate.... luego puedes agregar un combobox y ponerle ahi que lea los datos de la tabla de alumnos y debajo un grid con los datos de la tabla de union (cursada)... ojo el grid, lo creas arrastrando esa tabla al formulario desde el entorno de datos... y el grid, pues tendras que editarlo y borrar la columna de codigo de alumno, dejas la codigo de materia y agregas 1 columna mas.. y en el la columna que agregaste buscas la propiedad DataSource y debes poner el campo relacionado que seria Materias.materia....

pero todo esto se me hace mucho show.... y poco eficiente, ya que tendrias cargada toda la tabla "cursadas" de todos los alumnos... lo mejor es que en el evento Change del combobox, lanzes un query y lo metas en una tabla temporal y lo muestres en el grid... puedes poner un grid vacio ahi en el formulario y en el evento change del combobox pondrias algo asi...

1
2
3
4
5
6
7
_codigoAlumno = this.value
_sql = "select cursada.codmate, materias.materia from cursada where materia.codigo = cursada.codmate and cursada.codalumno = '" + _codigoAlumno + "' into cursor tmpMaterias"
** Ojo puse _codigoAlumno encerrada entre    comillas simples si es un valor tipo caracter y guardo en un cursor temporal los datos
 
thisform.Grid1.RecordSourceType = 4     && que acepte un sentencia SQL
thisform.Grid1.RecordSoruce = _sql
thisform.Grid1.Refresh

Ojo... esto te lo digo al vuelo segun lo que yo hacia hace años en Vfox.. de momento no lo tengo instalado, asi que no lo puedo comprobar... pero puedes buscar en la WEb... como llenar un Grid con un cursor
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
sin imagen de perfil

Relación varios a varios

Publicado por jaime (7 intervenciones) el 20/06/2019 00:01:10
Hola Leonardo. Te paso a comentar lo que hice.
seguí al pie de la letra los pasos que me indicaste, desde el Load del Form, desde el Entorno de datos, con sentencias escritas, desde el entorno gráfico... y luego de muchos intentos no he podido establecer la relación "varios a varios" entre estas tres tablas básicas. La versión del vfp q empleo es la 9.
El mensaje recurrente es que una tabla hija no puede tener dos tablas padres.
En Access el recorrido era perfecto en estas relaciones, con el foxpro resulta casi imposible.
La idea sigue siendo que desde una lista desplegable se seleccione un curso y aparezcan sus materias, teniendo que pasar si o si por la tabla intermedio CursoMaterias.
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
Imágen de perfil de Leonardo Daniel A.
Val: 1.115
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Relación varios a varios

Publicado por Leonardo Daniel A. (497 intervenciones) el 20/06/2019 03:36:22
Hola me eh bajado un Portable de Visual FoxPro 9 y te hice un pequeño ejemplo, revisa el evento init del formulario y el evento click del combobox, asi como el Entorno de datos, las propiedades de cada tabla (order) y algunas propiedades del grid..
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
sin imagen de perfil

Relación varios a varios

Publicado por jaime (7 intervenciones) el 20/06/2019 17:35:43
Gracias Leonardo!! El ejemplo es la respuesta cabal a mi interrogante.
Impecable tu aporte
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
Imágen de perfil de Leonardo Daniel A.
Val: 1.115
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Relación varios a varios

Publicado por Leonardo Daniel A. (497 intervenciones) el 20/06/2019 17:49:08
de nada saludos..!! por ahi comparti una aplicacion que empeze hace muchos años y nunca termine, porque migramos a PowerBuilder.. talvez te sirva
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
sin imagen de perfil

Relación varios a varios

Publicado por jaime (7 intervenciones) el 21/06/2019 03:18:26
Gracias por compartir tus conocimientos Leonardo!
He escuchado muy buenas referencias de powerbuilder. Apelo a tu conocimiento del área: existe algún software de base de datos opensource digno de encarar su estudio?
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
Imágen de perfil de Leonardo Daniel A.
Val: 1.115
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Relación varios a varios

Publicado por Leonardo Daniel A. (497 intervenciones) el 21/06/2019 04:19:21
Hola..si te refieres a algo como Visual FoxPro... dudo mucho que exista algo parecido...
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