2009-02-26 113 views
6

Al crear mi Crystal Report obviamente configuré una base de datos y una conexión de servidor que uso para el desarrollo.Configuración del origen de datos de Crystal Report en el tiempo de ejecución

Lo que quiero hacer ahora en mi aplicación VB es establecer dinámicamente la base de datos y el nombre del servidor para usar con los informes. Tengo estos valores como cadenas varServer y varDatabase.

¿Alguien sabe cómo hacer esto?

Gracias de antemano.

P.S He intentado con varias soluciones en línea pero estoy teniendo problemas con VB6.

Respuesta

4

This link tiene toda la información que desea conocer.

ACTUALIZACIÓN: Aquí hay una muestra mínima de trabajo para la autenticación integrada con SQL Server. Debe usar ConnectionProperties del objeto de tabla para establecer los parámetros de conexión.

Dim app As New CRAXDDRT.Application 
Dim rpt As CRAXDDRT.Report 
Dim tbl As CRAXDDRT.DatabaseTable 
Dim tbls As CRAXDDRT.DatabaseTables 

Set rpt = app.OpenReport("C:\report\repotest.rpt") 

For Each tbl In rpt.Database.Tables 
    tbl.ConnectionProperties.DeleteAll 
    tbl.ConnectionProperties.Add "Provider", "SQLOLEDB" 
    tbl.ConnectionProperties.Add "Data Source", "localhost" 
    tbl.ConnectionProperties.Add "Initial Catalog", "testdb" 
    tbl.ConnectionProperties.Add "Integrated Security", "True" ' cut for sql authentication 
    'tbl.ConnectionProperties.Add "User Id", "myuser" ' add for sql authentication 
    'tbl.ConnectionProperties.Add "Password", "mypass" ' add for sql authentication 
Next tbl 

'This removes the schema from the Database Table's Location property. 
Set tbls = rpt.Database.Tables 
For Each tbl In tbls 
    With tbl 
     .Location = .Name 
    End With 
Next 

'View the report 
Viewer.ReportSource = rpt 
Viewer.ViewReport 
+0

Gracias por el enlace, parece exactamente lo que se necesita. ¿Sabes si hay alguna manera de omitir el nombre de usuario y la contraseña? Nuestro cliente utiliza la Autenticación de Windows para conectarse a la base de datos. Gracias de nuevo –

+0

Además, cuando pruebo el código de ejemplo recibo un error 'El tipo definido por el usuario no está definido' en 'Dim logInfo como nuevo TableLogOnInfo', ¿alguna idea de qué referencia me falta? –

0

¿Qué versión de cristal estás usando?

En el mundo .net, generalmente paso el conjunto de datos al informe como emoreau dice here.

De esta manera, su conexión se establece a partir de código en lugar de cristal y se puede almacenar en una propiedad de conexión global. Sin embargo, eso es .net. Estoy pensando que la versión de Crystal que tiene debe tener una funcionalidad similar O Emoreau puede tener un ejemplo de cómo hacerlo en VB6 en la versión que está usando.

Espero que empieces.

+0

Estoy usando Crystal Reports 11 (XI) y VB6. Para diseñar el informe, necesitaba agregar la base de datos para diseñar los campos, etc. y ahora quiero establecer el nombre del servidor y el nombre de la base de datos a través del código que sugiera. Leyendo en ese enlace ahora gracias. –

1

¡Gran trabajo! gracias por el código! Lo cambio un poco, porque aunque esta parte no estaba funcionando:

'View the report 
Viewer.ReportSource = rpt 
Viewer.ViewReport 

Tenía un error que no se pudo encontrar el objeto

así que lo hice así:

With Me.CRViewer91 
    .ReportSource = rpt 
    .ViewReport 
End With 
0

Uno puede también configure el proveedor predeterminado para el informe agregando este bit de código.

Dim MyProvider As Object = logOnInfo.ConnectionInfo.LogonProperties.LookupNameValuePair("Provider") 
      If IsNothing(MyProvider) = False Then 
       MyProvider.Value = "SQLOLEDB" 
      End If 
Cuestiones relacionadas