Quitar DateEnvironment y Command de un Datareport

Iniciado por hunter18, 4 Diciembre 2010, 05:54 AM

0 Miembros y 1 Visitante están viendo este tema.

hunter18

Tengo creado fisicamente un objeto llamado dteEntornoDatos como lo quito y seguir utilizando mi reporte para ya no depender de él y hacer todo desde codigo?

Dejo el ejemplo del datareport agrupado http://www.megaupload.com/?d=8ZSKELLE

Option Explicit
Public cn As New Connection

Private Sub Form_Load()
 cn.CursorLocation = adUseClient
 cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\bd_01.mdb;Password=;Persist Security Info=false"
End Sub

Private Sub Command1_Click()
Dim Listado As ADODB.Command
Dim Entorno As dteEntornoDatos
   Set Entorno = New dteEntornoDatos
   Entorno.Listados.ConnectionString = cn.ConnectionString
   Set Listado = Entorno.Commands("command1_grouping")
   Listado.CommandType = adCmdText
   Listado.CommandText = "SHAPE{SELECT P.idprod,P.nomprod,P.idcat,C.nomcat FROM Producto P, Categoria C" & _
" WHERE C.idcat=P.idcat}AS command1 COMPUTE command1 BY 'idcat',nomcat"
   DataReport1.Show
End Sub



karmany

#1
Para no depender de un DateEnvironment yo lo hago así.
1º- Creo mi Datareport como yo quiero y no asigno enlace a ningún campo.

Seguidamente desde mi formulario principal, el que trabaja con la base de datos (desde ADO) hago lo siguiente (esto es un copia-pega de un programa mio):
Código (vb) [Seleccionar]
Private Sub generarvistaprevia_Click()
   On Error GoTo hay_error
   
   Dim rs As ADODB.Recordset
   Dim Nombre_seccion As String
   
   ' llamar la función Create_Recordset
   Set rs = Create_Recordset(presentacion) 'Esta función igual no la entiendes, es una función de Luciano
'para generar un recordset desde un listview... pásala por alto.
   
   If Not rs Is Nothing Then
       
      'Indicar en esta variable el nombre de la sección en la que se encuentran los rptTextBox para cada campo
       Nombre_seccion = "detalle"
       
       'Asignarle a los textbox del datareport, los DataField que corresponden a los nombres de encabezados
'        With DataReport1
       With vpreporte_reportedeejemplo
               
           .Sections(Nombre_seccion).Controls.Item("Texto1").DataField = "CODIGO"
           .Sections(Nombre_seccion).Controls.Item("Texto2").DataField = "INGREDIENTES"
           .Sections(Nombre_seccion).Controls.Item("Texto3").DataField = "CANTIDAD"
           .Sections(Nombre_seccion).Controls.Item("Texto4").DataField = "PRECIO"
           .Sections(Nombre_seccion).Controls.Item("Texto5").DataField = "PESO"
           
           ' cambiar el caption del label Titulo
'            .Sections("Sección4").Controls.item("lbltitulo").Caption = "Informe de formulario: " & Me.Caption
           
           ' Asignarle al datasource el origen de datos, es decir el recordset que devolvió la función Create_Recordset
           Set .DataSource = rs
           
           'Cargar y muestrar el informe
           .Show vbModal
           
           ' Liberar los recursos
           If rs.State = adStateOpen Then rs.Close
           Set rs = Nothing
           
       End With
   End If


Espero que te sirva...
Pruébalo.
karmany

hunter18

Esta bueno el codigo pero yo necesito un reporte agrupado cabecera y detalle por eso utilizo la sentencia SHAPE COMPUTE para agrupar el recordset.

karmany

Yo lo hacía (CREO) con un control MSHflexGrid u otro similar, no lo recuerdo bien.
Este control te permite acceder a un control de datos ADO y con SHAPE también(te aparecen unos signos + en cada grupo). Después existen muchísimos ejemplos de generar reporte.

De todos modos podrías probar:
http://www.bigresource.com/VB-Shape-Command-Data-Report-sqgDWkMkYL.html#gANrEOmUPL

Este ejemplo con código creo que usa un dataenvironment, pero te puede ayudar.
http://www.squadrosolutions.com/blog/group-reports-in-vb6-using-data-report/

Yo siempre he evitado el uso de la sentencia SHAPE porque me daba muchos problemas a la hora de programar.
Ojalá tengas suerte y nos cuentas cómo lo resolviste, me parece un tema interesante y si lo solucionas seguro que le ponen chincheta.

Un saludo