Soy un chaval de Algeciras, estoy trabajando en un proyecto y necesito hacer unos reportes. Me gustaría saber si puedes facilitarme una dirección de internet, manual o cualquier información referente a la programación de DataReport con DAO. Estoy interesado en general en todo lo relacionado con la realización de DataReport. Tengo que hacer una consulta SQL parametriza, eso, o hacer una consulta SQL en código y pasarle el valor de unas variables. Cualquier cosa que pudieras facilitarme me seria de gran ayuda.
1 respuesta
Respuesta de scmendieta
1
1
scmendieta, Cargos: Diseñador de portales web, Empresa tecnosoluciones,...
Lo que te voy a dar es un código que yo utilice para hacer reportes, con consultas con parámetros, para trabajar con el DataReport, necesitas trabajar con Objetos ADO, Configurando Un DataReport 1. Primero Pones controles Textbox para cada valor que vaya hacer desplegado en el reporte, estos controles se ubican en la sección de Detalles, configuras cada TextBox con el nombre del campo del cual vas a querer obtener información, Esto se hace en DataField. 2.En la sección de cabecera de página puedes poner un titulo para cada campo. 3. En el evento Private Sub DataReport_Initialize() Debes de escribir un código para que se desplieguen los datos en el Reporte, el código tiene que ser : Set dtarptrotmayogen.DataSource = rsrptrot Donde dtarptrotmarogen es el nombre del DataReport, La propiedad DataSource se refiere a quien es la fuente de los datos que se mostraran en el reporte, en este caso rsrptrot es un RecordSet ADO(No DAO)que contiene el conjunto de registros resultantes de una consulta parametrizada. ¿Cómo lo podes activar desde código? Bueno yo tengo un formulario desde donde llamo al reporte(DataReport) Supongo que la base de datos la creaste con Access, dicho de otro modo es una base de datos Motor JET. Lo que hice yo fue crear una consulta en Access y la guardo en la base de datos, El sql de la consulta es : PARAMETERS fechini DateTime, fechfin DateTime, idcateg Long, idtipo Long; SELECT Producto.Descripcion, Sum(Detalles_venta.Cant_vend) AS Total, Detalles_venta.unidad, Color.color, Tipo_pintura.Nombre_tipo FROM Ventas INNER JOIN ((Categoria INNER JOIN ((Producto INNER JOIN Color ON Producto.codcolor = Color.codcolor) INNER JOIN Tipo_pintura ON Producto.codigo_pint = Tipo_pintura.codigo_pint) ON Categoria.idcat = Producto.idcat) INNER JOIN Detalles_venta ON Producto.cod_prod = Detalles_venta.cod_prod) ON Ventas.cod_fact = Detalles_venta.cod_fact WHERE (((Ventas.fecha_vent) Between [fechini] And [fechfin]) AND ((Categoria.idcat)=[idcateg]) AND ((Producto.codigo_pint)=[idtipo])) GROUP BY Producto.Descripcion, Detalles_venta.unidad, Color.color, Tipo_pintura.Nombre_tipo ORDER BY Sum(Detalles_venta.Cant_vend), Tipo_pintura.Nombre_tipo DESC; No te abrumes con el código lo único que tienes que entender es como se declaran los parámetros: PARAMETERS fechini DateTime, fechfin DateTime, idcateg Long, idtipo Long;
Se me olvido decirte que íbamos a continuar: El código siguiente abre el reporte 'listar productos de la categoria de pintura 'ordenados de menor a mayor de acuerdo al tipo de pintura With CmdReprot Set .ActiveConnection = Connreportes .CommandText = "Rotpintportipomen" .CommandType = adCmdStoredProc .Parameters.Append .CreateParameter("Parfechini", adDate, adParamInput) .Parameters.Append .CreateParameter("Parfechfin", adDate, adParamInput) .Parameters.Append .CreateParameter("Paridcat", adDate, adParamInput) .Parameters.Append .CreateParameter("Paridtipo", adDate, adParamInput) End With CmdReprot.Parameters("Parfechini") = dfechini CmdReprot.Parameters("Parfechfin") = dfechfin CmdReprot.Parameters("Paridcat") = Val(dbcbocateg.BoundText) CmdReprot.Parameters("Paridtipo") = Val(dbcbotipopint.BoundText) rsrptrot.Open CmdReprot, , adOpenDynamic, adLockReadOnly dtarptpintipomenmay.Show vbModal CmdReprot.Parameters.Delete ("Parfechini") CmdReprot.Parameters.Delete ("Parfechfin") CmdReprot.Parameters.Delete ("Paridcat") CmdReprot.Parameters.Delete ("Paridtipo") rsrptrot.Close El nombre del objeto DataReport es rsrptrot el objeto CmdReprot es un objeto COMMAND de ADO el Objeto Connreportes es un Objeto conexion De ADO abrimos la base de datos donde tenemos la consulta de la siguiente manera: With Connreportes .CursorLocation = adUseClient .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= " & camino1 .Open End With Este codigo lo podes poner en el evento load del formulario donde vas a activar el reporte Espera la continuación
Bueno la continuación es: Rotpintportipomen este es el nombre con que guarde la consulta en la base de datos, me refiero al código sql que te mostré en la primer parte. la propiedad : CommandType = adCmdStoredProc Se refiere a que la consulta es un procedimiento almacenado en la base de datos. Se crean objetos de parámetros para que después pases los valores que serán los parámetros para la consulta: . Parameters. Append .CreateParameter("Parfechini", adDate, adParamInput) . Parameters. Append .CreateParameter("Parfechfin", adDate, adParamInput) . Parameters. Append .CreateParameter("Paridcat", adDate, adParamInput) . Parameters. Append .CreateParameter("Paridtipo", adDate, adParamInput) se le pasan los valores a la consulta CmdReprot.Parameters("Parfechini") = dfechini CmdReprot.Parameters("Parfechfin") = dfechfin CmdReprot.Parameters("Paridcat") = Val(dbcbocateg.BoundText) CmdReprot.Parameters("Paridtipo") = Val(dbcbotipopint.BoundText) Continua
Se abre la consulta: Rsrptrot. Open CmdReprot,, adOpenDynamic, adLockReadOnly el objeto rsrptrot es un RecordSet ADO, podes investigar sobre los parametros que recibe el metodo Open del RecordSet para que entendas el codigo anterior. Esto abre el reporte: dtarptpintipomenmay.Show vbModal Después tienes que borrar los parámetros para que el reporte presente información distinta dependiendo de los parámetros.
Muchísimas gracias por la completísima información, la examinare muy detenidamente. Tengo que agradecerte tu interés al responderme, nunca antes me habían dado una respuesta igual, estoy sorprendido y muy agradecido, me va a venir muy bien todo esto ya que es precisamente lo que estaba buscando, gracias de verdad, saludos.