Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: hunter18 en 4 Diciembre 2010, 05:54 am



Título: Quitar DateEnvironment y Command de un Datareport
Publicado por: hunter18 en 4 Diciembre 2010, 05:54 am
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 (http://www.megaupload.com/?d=8ZSKELLE)
Código:
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



Título: Re: Quitar DateEnvironment y Command de un Datareport
Publicado por: karmany en 4 Diciembre 2010, 10:15 am
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
  1. Private Sub generarvistaprevia_Click()
  2.    On Error GoTo hay_error
  3.  
  4.    Dim rs As ADODB.Recordset
  5.    Dim Nombre_seccion As String
  6.  
  7.    ' llamar la función Create_Recordset
  8.    Set rs = Create_Recordset(presentacion) 'Esta función igual no la entiendes, es una función de Luciano
  9. 'para generar un recordset desde un listview... pásala por alto.
  10.  
  11.    If Not rs Is Nothing Then
  12.  
  13.       'Indicar en esta variable el nombre de la sección en la que se encuentran los rptTextBox para cada campo
  14.        Nombre_seccion = "detalle"
  15.  
  16.        'Asignarle a los textbox del datareport, los DataField que corresponden a los nombres de encabezados
  17. '        With DataReport1
  18.        With vpreporte_reportedeejemplo
  19.  
  20.            .Sections(Nombre_seccion).Controls.Item("Texto1").DataField = "CODIGO"
  21.            .Sections(Nombre_seccion).Controls.Item("Texto2").DataField = "INGREDIENTES"
  22.            .Sections(Nombre_seccion).Controls.Item("Texto3").DataField = "CANTIDAD"
  23.            .Sections(Nombre_seccion).Controls.Item("Texto4").DataField = "PRECIO"
  24.            .Sections(Nombre_seccion).Controls.Item("Texto5").DataField = "PESO"
  25.  
  26.            ' cambiar el caption del label Titulo
  27. '            .Sections("Sección4").Controls.item("lbltitulo").Caption = "Informe de formulario: " & Me.Caption
  28.  
  29.            ' Asignarle al datasource el origen de datos, es decir el recordset que devolvió la función Create_Recordset
  30.            Set .DataSource = rs
  31.  
  32.            'Cargar y muestrar el informe
  33.            .Show vbModal
  34.  
  35.            ' Liberar los recursos
  36.            If rs.State = adStateOpen Then rs.Close
  37.            Set rs = Nothing
  38.  
  39.        End With
  40.    End If
  41.  

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


Título: Re: Quitar DateEnvironment y Command de un Datareport
Publicado por: hunter18 en 4 Diciembre 2010, 18:12 pm
Esta bueno el codigo pero yo necesito un reporte agrupado cabecera y detalle por eso utilizo la sentencia SHAPE COMPUTE para agrupar el recordset.
(http://img827.imageshack.us/img827/1599/11803105.png)


Título: Re: Quitar DateEnvironment y Command de un Datareport
Publicado por: karmany en 5 Diciembre 2010, 14:26 pm
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 (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/ (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