2009-02-26 13 views
6

Durante la creazione di Crystal Report, ho ovviamente configurato una connessione di database e server che utilizzo per lo sviluppo.Impostazione dell'origine dati Crystal report in fase di esecuzione

Quello che voglio fare ora nella mia applicazione VB è di impostare dinamicamente il nome del database e del server da utilizzare con i report. Ho questi valori come le stringhe varServer e varDatabase.

Qualcuno sa come fare?

Grazie in anticipo.

P.S Ho provato diverse soluzioni online ma ho problemi con VB6.

risposta

4

This link ha tutte le informazioni che si desidera sapere.

UPDATE: Ecco un esempio di lavoro minimo per l'autenticazione integrata con SQL Server. È necessario utilizzare ConnectionProperties dell'oggetto tabella per impostare i parametri di connessione.

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

Grazie per il collegamento sembra esattamente ciò che è necessario. Sai se esiste un modo per omettere username e password? Il nostro client utilizza l'autenticazione di Windows per connettersi al DB. Grazie ancora –

+0

Anche quando provo il codice di esempio, ricevo un errore 'Tipo definito dall'utente non definito' su 'Dim logInfo As New TableLogOnInfo', qualsiasi idea di quale riferimento mi manchi? –

0

Quale versione di cristallo stai usando?

Nel mondo .net, in genere passo il set di dati al report come dice l'emoreau here.

In questo modo, la connessione viene impostata dal codice anziché dal cristallo e può essere archiviata in una proprietà di connessione globale. Tuttavia, questo è .net. Sto pensando che la versione di crystal che hai dovrebbe avere una funzionalità simile O Emoreau potrebbe avere un esempio di come farlo in VB6 nella versione che stai usando.

Spero che questo avvenga.

+0

Utilizzo Crystal Reports 11 (XI) e VB6. Per la progettazione del report ho avuto bisogno di aggiungere il database al fine di impaginare i campi ecc. E ora sto cercando di impostare il nomeserver e il nome del database via codice come suggerisci tu. Leggendo su quel link ora grazie. –

1

Ottimo lavoro! grazie per il codice! A cambiare un po ', però, perché questa parte non funzionava:

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

Era un errore che non riusciva a trovare l'oggetto

Così ho fatto in quel modo:

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

Si può anche imposta il provider predefinito per il rapporto aggiungendo questo bit di codice.

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