![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Necesito sugerencias amigos del foro
Hola amigos tengo lo siuiente, yo se que alguno de ustedes me podrá dar una magnífica solución:
Aquí el caso: Tengo una aplicación en un colegio: Que tiene las siguientes tablas: Tabla Campos Alumnos rut, nombres, curso,nivel... Accidente rut, fecha, lugar, motivo.... Anotaciones rut, profesor, fecha, anotacion (Campo Blob, memo) Atrasos rut, fecha, horaentrada, horallegada, .... justificaciones rut, fechaini, fechafin,fechajust, ... me piden que imrpima una ficha en una hoja o más, de toda la información del alumno de las diferentes tablas, la cual se puede venir o no registros, ahora puede ser individual o un curso completo, yo lo hago con un compositereport, pero me corta algunas anotaciones, me tira errores del canvas de la impresora un lio, espero amigo ![]() Ojo, las tablas pueden venir uno o varios registros
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC. Última edición por Manuel fecha: 01-06-2003 a las 22:24:18. |
#2
|
||||
|
||||
Si haces una consulta SQL uniendo todas las tablas por el campo RUT, ya tienes lo que quieres, si es solamente de un alumno, le añades la claúsula Where para filtrar por ese alumno.
Una vez hecha la consulta, no tienes más que utilizar QuickReport o calquier otro programa para realizar informes. Un Saludo. |
#3
|
||||
|
||||
Cita:
accidentes: rut fecha motivo 1 12/05/2003 caída 1 15/05/2003 Golpe 1 20/05/2003 Apretón Atrasos rut fecha Hora 1 20/03/2003 08:00 y así con las demás tablas al unirlas me queda lo siguiente rut fecha_1 fecha hora motivo ---------------------------------------------------------------- 1 12/05/2003 20/03/2003 08:00 caída 1 15/05/2003 20/03/2003 08:00 Golpe 1 20/05/2003 20/03/2003 08:00 Apretón como ven como puedo descriminarar cuantos accidentes son, por cuando veo la tabla unida veo 3 y en ralidad hay uno, imprimirlo todo me saldía más información que la que es en realidad. por favor una ayuda
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC. |
#4
|
|||
|
|||
Creo que se os pasa algo por alto.
En cierta ocasión me plantearon algo similar, pero en un hospital, y la solución fue crear una tabla temporal. Esa tabla temporal se iba llenando poco a poco con los datos de las otras tablas, siempre era unión de tabla pacientes (en este caso alumnos) con el resto de las demás, una a una, ya que si una de ellas no tiene datos, la unión de todas ellas te viene a dar un conjunto vacío. Algo así como create table LoQueSea(campos tipos); insert into LoQueSea select MismosCampos from alumnos a, OtraTabla O where a.id=o.idalumno insert into LoQueSea select MismosCampos from alumnos a, OtraTablaX O where a.id=o.idalumno y por ultimo sería un select * from LoQueSea where SiHayCondicion order by SiHayOrdenación Es un poco más complejo pero que seguro que evita errores de "este dato está en esta tabla pero no en esta otra". Tal como lo planteo, en caso de que una unión sea vacía, no afecta al resto de uniones. PD: También se puede plantear usando la cláusula UNION en vez de la tabla temporal, pero en este último caso hay que ir con cuidado con la select planteada ya que es demasiado compleja. Mi solución te permite encontrar un posible fallo de una manera más fácil. |
#5
|
||||
|
||||
gracias Obiwuan lo provaré
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC. |
![]() |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
![]() |
|