Grid con tablas relacionadas

Tengo un formulario con dos tablas relacionadas, el problema es que en las columnas del grid no me muestra los campos que quiero ver, sino los campos en el orden de la tabla, he establecido el controlsource y nada por favor si alguien puede ayudarme

1 respuesta

Respuesta
1
Espero poder ayudarte:
Lo primero que deberías hacer es probar que tu relación funcione bien. Esto lo podes hacer con el comando brow en la ventana de comandos.. así:
Se le tabla1
Brow
Se le tabla2
Brow
Acomoda las ventanas y fíjate si al moverte en una tabla se mueve la otra...
Después de eso, en el form haces un grid y podes usar el asistente agregando más de una tabla y seleccionando los campos que quieres... para hacerlo manual podrías hacer un método llamado armaGrid por ejemplo..
El recordsourceType del grid lo estableces en 1.. para el ejemplo vamos a suponer que quieres mostrar el nombre del cliente al lado de la factura pendiente, no se, se me ocurre..
Lo primero sería ponerle nombre a tus columnas del grid, por ejemplo: numero, fecha, cliente..
Entonces, tu metodo armaGrid quedaria asi:
with thisform.grid
        .recorsource='facturas'
        .numero.controlSource='facturas.numero'
        .fecha.controlSource='facturas.fecha'
        .cliente.controlSource='clientes.nombre'
        .refresh
Endwith
Para que esto funcione, la relación sería algo así:
Se le factura
set rela to codCliente into clientes
Y clientes deberá estar indexado por el código
Espero que haya sido de utilidad
Fíjate, tengo dos tablas
Inscripción con los campos numins y responsable indexada por numins
alumnos con los campos ficha, nombres, apellidos, fechanacim, fechaingr, tipo, numins, fecins
en el entorno de datos creo la relación de uno a muchos y aparentemente funciona bien porque cuando en el formulario que muestro el no inscripción y el responsable de la tabla inscripción en el grid aparecen los registros relacionados, el problema es que en el grid tengo 5 columnas ficha, nombres, apellidos, fecins, tipo y establezco la propiedad controlsource para cada columna pero no me muestra los valores correctos sino los que vienen de la tabla en su orden de columna, es decir ficha, nombres, apellidos, fechanacim, fechaingr
todas las propiedades las establezco en tiempo de diseño y el recordsource type del grid lo tengo en 0, si lo pongo en 1 no veo los registros relacionados, de verdad no entiendo que pasa
La relación la creo en el entorno de datos arrastrando el campo numins de la tabla inscripción y lo suelto en el indice numins de la tabla alumnos y luego le pongo la propiedad onetomany en .t. aparentemente funciona porque en el formulario voy desplazándome con skip por la tabla inscripción y en el grid se van mostrando los registros relacionados de la tabla alumnos
Te cuento que no es un caso de relación de uno a mucho porque el numIns de la tabla inscripción aparece una sola vez en la tabla de alumnos.
Empecemos de cero para ver si podemos corregir tu problema:
Retira las tablas del entorno de datos (que no quede ninguna)
En el init del formulario pones:
* Aseguramos el orden de la tabla responsables
* y hacemos la relación
set order to numIns in responsables
sele incripcion
set rela to numIns into responsables
* armamos el grid
with this.grid
        .recordSourceType=1
        .recordSource='inscripcion'
        .ficha.controlSource='responsables.ficha'
        ...
Endwith
Lo que no veo en tu explicación son datos de la tabla inscripción, por lo que vi los datos provienen todos de responsables..
El trabajo de tablas relacionadas funciona así:
Veamos un caso de una tabla de cuotas mal hecha:
Alumno, nombre, fechaNac, pagoCuota1, pagoCuota2, pagoCuota3
Lo que debemos evitar es hacer que nuestras tablas se extiendan hacia la derecha, por eso usamos la relación.
Lo que haríamos es en la tabla de alumnos:
Alumno, nombre, fechaNac
Y en otra tabla de cuotas
Alumno, cuota, fechaPago
Si vos quieres ver en un grid el listado de cuotas pagadas junto al nombre del titular (alumno) el grid tendría las siguientes columnas:
Cuotas. Cuota, cuotas. FechaPago, alumnos. Nombre
La relación no es de 1 a muchos ya que el código de alumno que figura en la tabla cuotas, se encuentra una sola vez en la tabla de alumnos.
La relacion la harias asi:
Se le cuotas
set rela to alumno into alumnos
La tabla alumnos estaría indexada por alumno.
Bueno, espero haber podido ayudar.
Estoy a tu disposición
Si hay otra tabla, alumnos con los campos ficha, nombres, apellidos, fecha nacimiento, fecha ingreso, etc, numins y fecins. Si es una relación de uno a muchos porque en la tabla inscripción hay un responsable que puede inscribir varios alumnos, los cuales estarían todos con el mismo numins, la fecha de inscripción (fecins) es porque necesito saber cuando inscriben a cada alumno que no necesariamente es al mismo tiempo
En ese caso, solo agrega al código: set skip to para que te quede así:
set order to numIns in responsables
sele incripcion
set rela to numIns into responsables
set skip to responsables
De igual manera me parece que necesitas una relación que no sea de uno a muchos, ya que estaría bien hacer entonces sobre la tabla de alumnos
Se realciona alumnos con inscripciones por medio de numIns y después se filtra la consulta para que se vean determinados datos, por ejemplo:
Se le alumnos
set rela to numIns into inscripciones
set filter to fecha...
o
set filter to responsable=xxx and fecha...
o
set filter to between(fecha,....,...)
o
set filter to inscripciones.tipo=xxxx
Y en el grid traerías todos los datos de alumnos que necesites más el tipo que está en la tabla de inscripciones.
Además, si tienes una tabla de responsable podes hacer:
set rela to responsable into responsables addi
Y también podes filtrar o traer el dato del nombre del responsable por ejemplo..
Estamos en contacto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas