Problema con Reporte de varias Tablas -foxpro

Soy Lucas! Espero estés muy bien! Mi consulta es esta: ¿Cómo puedo generar un reporte utilizando varias tablas? Cuando hice mi reporte, en el entorno de datos, agrague 3 tablas... Y sus respectivos campos al reporte. Al ejecutar vista previa, muestra los datos correctos de los campos de la primera tabla [tabla 1], que fueron los primeros agregados al reporte. Pero con los datos de las otras 2 tablas [tabla 2 y tabla3] presenta un problema: repite siempre (hacia abajo) el primer registro de la tabla! Es decir, que si en las tablas 2 y 3 tengo horas registradas así:
[Tabla 2] [tabla 3]
[campo HORA entra] [campo HORA salid]
12:20:10                                      12:21:50
12:25:30                                      12:26:40
12:30:12                                       12:35:32
En el reporte las presenta asi:
12:20:10                                12:21:50
12:20:10                                12:21:50
12:20:10                                12:21:50
Intente crear una relación con indices primarios entre las 3 tablas... Según lo que leí en varias websites... Pero no funciono.

1 respuesta

Respuesta
1
Entiendo.
El problema es conceptual:
Los datos de un reporte generalmente tienen su origen en una sola tabla o cursor, si deseas involucrar datos de distintas tablas en un reporte lo mejor es crear un cursor con la cláusula select SQL que contenga todos los campos que vas a necesitar y que ese cursor sea el origen de datos para tu reporte.
En la parte de Detalle del reporte siempre se van a mostrar registros de la tabla o cursor del área de trabajo seleccionada en cada objeto del reporte.
Si no sabes cómo crear el cursor pásame la estructura de los campos de las tablas que necesites combinar y te devuelvo la sentencia.
Ok! Muchas gracias Carlos! Pues mira... la estructura de las tablas es bien sencilla! Te detallo a continuación: son 3 tablas:
Nombre de la tabla1: "usuario"
Campos: "nombreusuario" (character), "fechaingreso" (date)
Nombre de la tabla2: "entradas"
Campos:  "registro" (numeric), "horaentrada" (character)
Nombre de la tabla3: "salidas"
Campos: "fecha" (date), "horasalida" (character)
Muchas gracias por tu ayuda experto Carlos! Como siempre, eres muy amable! (n.n)
Ohhhh... Carlos! Se me olvidaba! En las 3 tablas existe un campo llamado "registro"! Solo te lo mencione en la tabla2.. pero en verdad esta en las 3 tablas! Ese es el campo común en las 3 tablas, a través del cual se establece la relación entre los datos! Saludos!
Te paso la sentencia prometida:
select usuario.registro, usuario.nombreusuario, usuario.fechaingreso, ; entradas.horaentrada, ;
salidas.fecha,  salidas.horasalida ;
distinct from force usuario ;
left outer join entradas on entradas.registro==usuario.registro ;
left outer join salidas on salidas.registro==usuario.registro ;
into cursor CONSULTA
Esta sentencia te devolverá un cursor llamado CONSULTA con todos los campos de las tablas seleccionadas. Pruébalas y ejecuta un browse para que puedas ver el resultado antes de pasar a diseñar el informe. También puedes agregarle la clausula WHERE para filtrar los registros. Si tienes inquietudes consulta la ayuda escribiendo help Select SQL en la ventana de comandos.
Entonces borra todo lo que tienes en el entorno de datos del reporte y vuelve al evento click del botón que llama al reporte.
Entonces el evento click de tu botón sería algo así:
Thisform.mousepointer=11
select usuario.registro, usuario.nombreusuario, usuario.fechaingreso, ; entradas.horaentrada, ;
salidas.fecha,  salidas.horasalida ;
distinct from force usuario ;
left outer join entradas on entradas.registro==usuario.registro ;
left outer join salidas on salidas.registro==usuario.registro ;
into cursor CONSULTA
Select consulta
report form mireporte noconsole preview in screen to printer prompt
Use in usuario
Use in entradas
Use in salidas
Use in consulta
Si tienes dudas me avisas.
Hola Carlos! Te agradezco mucho la ayuda con la sentencia SQL! Ya pude resolver mi problema...! Eres un experto muy amable, como siempre! Te deseo lo mejor! Éxitos y suerte!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas