¿Varias consultas sql en el mismo datareport?

Primero quiero aclarar de que no me importa con que herramienta hacerlo, sino que pueda hacer lo que necesito. Estuve investigando un montón, y no pude entrontrar la respuesta, y al parecer no se puede hacer lo que quiero, pero me parece algo muy básico, y que se debería poder porque no veo cual es la dificultad, pero bueno espero que me puedas ayudar, porque nadie mepude decir como hacerlo.
Mi pregunta es la siguiente: necesito hacer un reporte sobre stock, yo hice un sistema en visual basic 6.0 que utiliza una base de datos en sql server 2000. El tema es el siguiente:
Tengo 3 tablas en juego: la entrada de stock, salida de stock, y la tabla producto (que indica el stock actual). Por lo tanto si yo quiero hacer una consulta de lo que entro y cuanto entro por fecha o por lo que sea me fijo en la 1º tabla, lo que salio en la 2º y el estado actual en la 3º.
Haciendo consultas con sql, ya tengo formulado lo que necesito, son 4 consultas, es decir, puedo colocar una fecha o un rango de fecha y lo que quiero es 4 cosas: stock inicial, entradas en ese rango de fechas, salidas en ese rango y el stock final. Por lo tanto son 4 consultas y 4 recordset.
Ahora te digo cual es el problema, intente hacerlo a esto en el mismo datareport, y no pude, instale el crystal report y me leí un manual, pero al parecer tampoco se puede. Lo que quiero es que estos 4 recordset me los muestre en el mismo reporte. Para salir del paso lo hice con 4 datareport, pero para mi que muy improlijo, y en el datareport, solo puedo poner un recordset. Intente hacerlo con dataenvironment, pero caigo en lo mismo porque en datasource pones el dataenvironmet, pero para que funcione tienes que completar el datamember y tienes que elegir uno y solo un comando del dataenvironment, asique por más que puedas tener todas las consultas que quieras en el dataenvironment, en el datareport caigo en lo mismo de no poder agregar más que uno.
Ademas solo tiene una sección (detalle) donde se enlazan los datos de la base de datos y por lo visto no se puede agregar más secciones de esta, por lo que es muy limitado el reporte que se puede hacer, a mi parecer. Espero estar equivocado y que lo que necesito si se pueda hacer.
Espero que puedas ayudarme! Desde el momento de tomarte el tiempo para leer esto ya te lo quiero agradecer!, muchísimas gracias por tu tiempo! Saludos cordiales!
p/d: si algo no se entendió bien, me gustaría poder mandarte imágenes para que te hagas una mejor idea de lo que quiero hacer.

1 respuesta

Respuesta
1
Lo que debes hacer es hacer 1 consulta SQL que te devuelva los datos que necesitas en UN solo recordset, sea a través de un Stored procedure de SQl2000, o a través de una sentencia compuesta.
Te agradezco de corazón tu pronta respuesta! Entonces si se puede hacer lo que yo planteba, porque digamos que lo solucionamos con un store procedure, a lo de devolver los dos, pero a la hora de mostrarlos, en el datareport, solo hay una sección "detalle" y no se pueden agregar más de esas secciones, y en las 4 consultas, obviamente son diferentes y devolverán diferente numero de filas, si sos tan amable y si tienes un ejemplo de lo que te estoy consultado te agradecería que me lo muestres. Por ejemplo en mi caso, a las consultas las hago con código en visual basic y son los siguientes:
rsProductoInicial.Open "select #entradainicial.nombre, #entradainicial.unidad, (#entradainicial.cantidad-#salidainicial.cantidad) as existenciainicial from #entradainicial join #salidainicial ON #entradainicial.nombre=#salidainicial.nombre union select #entradainicial.nombre, #entradainicial.unidad, #entradainicial.cantidad as existenciainicial from #entradainicial left outer join #salidainicial ON #entradainicial.nombre=#salidainicial.nombre where (#entradainicial.cantidad-#salidainicial.cantidad) is null ", cnn, adOpenDynamic, adLockOptimistic
rsEntrada.Open "select fecha, NumRemFactVale, nombre, LineaEntrada.cantidad from entrada join LineaEntrada ON entrada.identrada=LineaEntrada.identrada join producto ON lineaentrada.idproducto=producto.idproducto where lineaentrada.idproducto=" & frmSelProducto.adoProducto.Recordset.Fields("idproducto") & "and entrada.fecha between '" & frmControlStock.dtpFechar1.Value & "' and '" & frmControlStock.dtpFechar2.Value & "'", cnn, adOpenDynamic, adLockOptimistic
rsSalida.Open "select salida.fecha, salida.numvale , producto.nombre as nompro, lineasalida.cantidad from salida join lineasalida ON salida.idsalida=lineasalida.idsalida join producto ON lineasalida.idproducto=producto.idproducto where lineasalida.idproducto=" & frmSelProducto.adoProducto.Recordset.Fields("idproducto") & "and salida.fecha between '" & frmControlStock.dtpFechar1.Value & "' and '" & frmControlStock.dtpFechar2.Value & "'", cnn, adOpenDynamic, adLockOptimistic
rsProductoFinal.Open "select #entradafinal.nombre, #entradafinal.unidad, (#entradafinal.cantidad-#salidafinal.cantidad) as existenciafinal from #entradafinal join #salidafinal ON #entradafinal.nombre=#salidafinal.nombre union select #entradafinal.nombre, #entradafinal.unidad, #entradafinal.cantidad as existenciafinal from #entradafinal left outer join #salidafinal ON #entradafinal.nombre=#salidafinal.nombre where #entradafinal.cantidad-#salidafinal.cantidad is null", cnn, adOpenDynamic, adLockOptimistic
Mira esta es parte del código, se que debe ser una chanchada, pero es lo que funciono, me pidieron un sistema que lo haga solo, y rapido, y bueno lo más fácil era hacerlo con visual 6.0 y sql 2000 que ya los conocía. Pero si vos decís que es más fácil de otra manera, soy todo oídos para alternativas.
Volviendo al tema, debería meter estas consultas en un store procedure, pero como soluciono con la presentación de los datos después. Espero que puedas ayudarme.
Te agradezco de nuevo por tu tiempo! Muchas gracias!
Una imagen vale más que mil palabras
http://www.subirimagenes.com/otros-datareport-2239577.html
Este es el link de un screenshoot que tome de la consulta, en la imagen la consulta ea presentada por 4 datagrid, y obviamente un recordset por cada datagrid, las consultas en visual basic, que te mande en el comentario anterior dan como resultado esos valores en un rango de fechas determinado.
En si lo que quiero hacer es lo mismo que hice con los datagrid pero un datareport, y esto solo porque quiero imprimir esas consultas, y con datareport fue la forma más fácil de imprimir las consultas de sql.
Espero que sea un poco más claro con la imagen. Gracias! Nos vemos!
El stored procedure devuelve SOLO los datos que necesites, seria algo como: cada instrucción la almacenas en tablas temporales, luego el stored procedure le dices que devueleva solo los datos que necesites de las 4 tablas en un solos SELECT.
Seria algo como :
Select #t1.campo1, #t2.campo3, #t2.campo2, #t3.campo5, #t4.campo1 from #t1, #t2, #t3, #t4
Bueno muchísimas gracias por tu tiempo! Y por tu disposición, y rápida respuesta! Espero poder daré maña,.jjijij y me oriento en la respuesta, espero poder resolverlo. Saludos cordiales!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas