La Web del Programador: Comunidad de Programadores
 
    Pregunta:  2988 - DATAREPORT
Autor:  Victor Valencia
Estoy intentando conectar un recordset a un datareport de forma dinámica. Para ello me he creado un control data (ADO) en un formulario. Lo conecto a mi base de datos (Access 97) y funciona correctamente.
Escribo el siguiente código al hacer click en un botón del formulario

Private Sub Command1_Click()
´Conecto el DataReport a la fuente de datos
Set DataReport1.DataSource = Adodc1.Recordset
´ Asigno los campos correspondientes a cada uno de los controles del informe
With DataReport1.Sections("sccDetalle")
.Controls("rptCodigo").DataField = "ProductID"
End With
DataReport1.Show
End Sub

Cuando intenta abrir el datareport obtengo el error de que el origen de datos no es válido.

¿Se puede hacer lo que pretendo?, si es así, ¿qué estoy haciendo mal?

Gracias

  Respuesta:  Andres Jua
hola, es mas facil utilizar Ado asi

Ej
dim rs as adodb.recodrset
set rs = new adodb.recordeset

rs.open " select * from clientes",con(conexionen), adopenddinam(completar)

whit datareport1
set .datasource = rs
.section("encadezado").controls("txtnumero").datafields = "cod_cliente"
.refresh
.show
rs.close
set rs = nothing
end with

"y asi voy cargando cada control que cree en cualquiera de las secciones del informe "cod_cliente" es igual a el nombre de un campo de la consulta donde abro el recordset , "encabezado" es el nombre que le doy a una seccion del report y "txtnuemero" es un control de datareport, que se encuentra debajo de las herramientas comunes, que tiene la propiedad datafields, si el control no tiene esta propiedad se debe usar .Caption en vez de .DataFields .

Discupa mi redaccion. culaquier problema. enviame un mail
[email protected]

  Respuesta:  ROMAN NAVAS
esto es lo malo:

Set DataReport1.DataSource = Adodc1.Recordset

en lugar de asignar la propiedad datasource de esta manera, si estas usando un control grafico como: " Adodc1"

no lo asignes la propiedad datasource en tiempo de ejecucion, hazlo en modo de diseño

solo ve a las propiedades del datareport y busca la propiedad datasource y ahi elije ADODC1

ESO ES TODO

  Respuesta:  Paco Benito
Desconozco si puedes hacerlo como dices, pero yo siempre que uso un DataReport me obliga a tener enlazado un Dataenvironment que tenga un objeto comand con la sentencia SQL. El Datareport debe tener sus propiedades .DataSource enlazado al Dataenvironmet y .Datamember al objeto comand de ese dataenvironment.

Espero que te ayude.

  Respuesta:  El
El problema es que estás utilizando DAO en lugar de ADO. Prueba a crear una conexion

Dim vd As Boolean, conexion As New ADODB.Connection
Dim comando As New ADODB.Command, resultado As New ADODB.Recordset
´abrimos la conexion
With conexion
.Provider = "Microsoft.Jet.OLEDB.3.51"
.ConnectionString = "Data Source=" & CurDir & "\molsandb.mdb"
.Open
End With
With comando
.CommandType = adCmdUnknown
.CommandText = "SELECT Clientes.razon_social, AlbaranesxCliente.cli_codigo, AlbaranesxCliente.numero_albaran, Sum(AlbaranesxCliente.importe_neto) AS im, AlbaranesxCliente.desde, AlbaranesxCliente.hasta, AlbaranesxCliente.cobrado FROM Clientes INNER JOIN AlbaranesxCliente ON Clientes.codigo = AlbaranesxCliente.cli_codigo GROUP BY Clientes.razon_social, AlbaranesxCliente.cli_codigo, AlbaranesxCliente.numero_albaran, AlbaranesxCliente.desde, AlbaranesxCliente.hasta, AlbaranesxCliente.cobrado ORDER BY AlbaranesxCliente.numero_albaran;"
.ActiveConnection = conexion
End With
resultado.Open comando
Set rpt_albaranes_a.DataSource = resultado
rpt_albaranes_a.Caption = "Albaranes A"
With rpt_albaranes_a.Sections("secc_encabezado")
.Controls("txt_desde").Caption = resultado!desde
.Controls("txt_hasta").Caption = resultado!hasta
.Controls("e_titulo").Caption = "Albaranes A"
End With
With rpt_albaranes_a.Sections("secc_detail")
.Controls("txt_numero").DataField = "numero_albaran"
.Controls("txt_codigo").DataField = "cli_codigo"
.Controls("txt_razon").DataField = "