Mensaje enviado por "Bracho, Yamil" <brachoy@pdvsa.com>
WariNet, tambien puedes ligar un DataReport a un Recordset en tiempo de ejecucion y aunque el proceso es algo tedioso funciona bien.
En el siguiente codigo se crea un recordset a partir de unos filtros que selecciona el usuario y se llena el DataReport en forma dinamica.
Espero te ayude.
'------------------------------------------------------------
' Informe de Clientes
'------------------------------------------------------------
Private Sub InformeCliente()
Dim rst As ADODB.Recordset
Dim strSql As String
Set rst = New ADODB.Recordset
strSql = "SELECT CO_CTE, NB_CTE, NB_ENCARGADO, DR_CTE, NU_TLF, " & _
"NU_FAX, NU_RIF, NU_NIT, CO_T_CTE " & _
"FROM CLIENTE " & _
"WHERE CO_CTE <> '0' AND CO_UNI_FACTRCN='" & Globals.CurUnidadFacturacion & "' AND " & _
"CO_FIL_PDV_ORIGEN=" & Globals.curCodigoFilialOrigen
Select Case cboOrden.ListIndex
Case 0: strSql = strSql & " ORDER BY CO_CTE"
Case 1: strSql = strSql & " ORDER BY NB_CTE"
Case 2: strSql = strSql & " ORDER BY NB_ENCARGADO"
Case 3: strSql = strSql & " ORDER BY DR_CTE"
Case 4: strSql = strSql & " ORDER BY NU_TLF"
Case 5: strSql = strSql & " ORDER BY NU_FAX"
Case 6: strSql = strSql & " ORDER BY NU_RIF"
Case 7: strSql = strSql & " ORDER BY NU_NIT"
Case 8: strSql = strSql & " ORDER BY CO_T_CTE"
End Select
rst.Open strSql, Globals.cnn
With drpInformeCliente
Set .DataSource = rst
.DataMember = vbNullString
With .Sections("Sección1").Controls
With .Item("txtCO_CTE")
.DataMember = vbNullString
.DataField = "CO_CTE"
End With
With .Item("txtNB_CTE")
.DataMember = vbNullString
.DataField = "NB_CTE"
End With
With .Item("txtDR_CTE")
.DataMember = vbNullString
.DataField = "DR_CTE"
End With
With .Item("txtNU_TLF")
.DataMember = vbNullString
.DataField = "NU_TLF"
End With
With .Item("txtNU_RIF")
.DataMember = vbNullString
.DataField = "NU_RIF"
End With
End With
If Me.chkPreview = vbChecked Then
.Show
Else
.PrintReport True
End If
End With
End Sub
Saludos
Yamil