2009-02-26 6 views
6

Beim Erstellen meines Crystal Reports habe ich offensichtlich eine Datenbank- und Serververbindung eingerichtet, die ich für die Entwicklung verwende.Einstellen der Crystal Report-Datenquelle zur Laufzeit

Ich möchte jetzt in meiner VB-Anwendung den Datenbank- und Servernamen für die Verwendung mit den Berichten dynamisch festlegen. Ich habe diese Werte als Strings VarServer und VarDatabase.

Wer weiß, wie man das macht?

Vielen Dank im Voraus.

P.S Ich habe mehrere Online-Lösungen ausprobiert, habe aber Probleme mit VB6.

Antwort

4

This link hat alle Informationen, die Sie wissen möchten.

UPDATE: Hier ist ein funktionierendes Beispiel für die integrierte Authentifizierung mit SQL Server. Sie sollten die ConnectionProperties des Tabellenobjekts verwenden, um Verbindungsparameter festzulegen.

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

Danke für den Link, es scheint genau das, was benötigt wird. Weißt du, ob es eine Möglichkeit gibt, den Benutzernamen und das Passwort wegzulassen? Unser Client verwendet die Windows-Authentifizierung, um eine Verbindung zur Datenbank herzustellen. Danke nochmal –

+0

Auch wenn ich den Beispielcode versuche erhalte ich einen 'User-defined type is defined' Fehler bei 'Dim logInfo als New TableLogOnInfo', keine Ahnung welche Referenz ich vermisse? –

0

Welche Version von Crystal verwenden Sie?

In der .net-Welt übermittle ich den Datensatz im Allgemeinen an den Bericht, wie emoreau sagt here.

Auf diese Weise wird Ihre Verbindung von Code statt Kristall festgelegt und kann in einer globalen Verbindungseigenschaft gespeichert werden. Das ist jedoch .net. Ich denke, dass entweder die Version von Crystal, die Sie haben, ähnliche Funktionalität haben sollte ODER Emoreau könnte ein Beispiel dafür haben, wie man es in VB6 in der von Ihnen verwendeten Version macht.

Hoffe, dass Sie angefangen haben.

+0

Ich verwende Crystal Reports 11 (XI) und VB6. Zum Entwerfen des Berichts musste ich die Datenbank hinzufügen, um die Felder usw. zu gestalten, und möchte nun den Servernamen und den Datenbanknamen über den von Ihnen vorgeschlagenen Code festlegen. Lesen Sie diesen Link jetzt, danke. –

1

Gute Arbeit! Danke für den Code! Ich kann es ändern ein bisschen aber, weil dieser Teil nicht funktioniert:

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

Es hatte einen Fehler, der Gegenstand nicht

So finden konnte ich es tat so:

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

Man kann auch Legen Sie den Standardanbieter für den Bericht fest, indem Sie dieses Codebit hinzufügen.

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