Crystal Reports 8 - установить местоположение динамически в VB6 - PullRequest
1 голос
/ 21 января 2011

У меня есть внешний интерфейс VB6, SQL Server 2005 в качестве внутреннего сервера и Crystal Reports 8.5 для отчетов.

Мне нужно установить местоположение во время выполнения в моем приложении, поскольку у меня есть 2 базы данных.Моя проблема в том, что когда я меняю базу данных, но местоположение остается прежним.Будет здорово, если кто-нибудь сможет мне помочь.Заранее спасибо за ваше время, и вот мой код.

Private Sub prin_Click()
With CrystalReport1
    .Connect = MDI1.txtcn --> this is my connection info "driver={sql server};server=server;database=database;uid=user;pwd=password"        
    .DiscardSavedData = True
    .Action = 1
    .PrintReport
End With

Ответы [ 4 ]

2 голосов
/ 20 июля 2011

Попробуйте код наподобие этого:

Private Sub cmdSetLocations_Click()
    Dim CrxApp As New CRAXDRT.Application
    Dim CrxRep As CRAXDRT.Report
    Dim CrxSubRep As CRAXDRT.Report

    Dim strReport As String
    Dim i As Integer, ii As Integer

    strReport = "[Path to report file]"
    Set CrxRep = CrxApp.OpenReport(strReport)

    SetReportLocation CrxRep

    For i = 1 To CrxRep.Sections.Count
        For ii = 1 To CrxRep.Sections(i).ReportObjects.Count
            If CrxRep.Sections(i).ReportObjects(ii).Kind = crSubreportObject Then
                Set CrxSubRep = CrxRep.OpenSubreport(CrxRep.Sections(i).ReportObjects(ii).SubreportName)
                SetReportLocation CrxSubRep
            End If
        Next ii
    Next

    'open your report in the report viewer

    Set CrxApp = Nothing
    Set CrxRep = Nothing
    Set CrxSubRep = Nothing
End Sub

Private Sub SetReportLocation(ByRef RepObj As CRAXDRT.Report)
    Dim CrxDDF As CRAXDRT.DatabaseTable
    Dim CP As CRAXDRT.ConnectionProperties

    For Each CrxDDF In RepObj.Database.Tables
        Set CP = CrxDDF.ConnectionProperties
        CP.DeleteAll
        CP.Add "Connection String", "[Your connection string goes here]"
    Next

    Set CrxDDF = Nothing
    Set CP = Nothing

End Sub
1 голос
/ 12 января 2012
With CR
     .ReportFileName = App.Path + "\Labsen2.rpt"
     .SelectionFormula = "{PersonalCalendar.PersonalCalendarDate}>= Date(" & Year(DTPicker1) & "," & Month(DTPicker1) & "," & Day(DTPicker1) & ") and {PersonalCalendar.PersonalCalendarDate}<=date(" & Year(DTPicker2) & "," & Month(DTPicker2) & "," & Day(DTPicker2) & ") and {Department.DepartmentName}= '" & Combo1.Text & "'"
     .Formulas(0) = "tglAwal = '" & DTPicker1.Value & "'"
     .Formulas(1) = "tglAkhir = '" & DTPicker2.Value & "'"
     .Password = Chr(10) & "ithITtECH"
     .RetrieveDataFiles
     .WindowState = crptMaximized
     .Action = 1
 End With
0 голосов
/ 03 апреля 2012

Почему бы не передать набор записей в свой отчет? Таким образом, вы сможете получать данные из любых поддерживаемых (я имею в виду, VB6 может подключаться) баз данных динамически, вы даже можете объединять данные из нескольких баз данных, вашему отчету потребуются только данные (набор записей), и отчет будет создан с данными Определение поля.

0 голосов
/ 21 января 2011

Попробуйте отформатировать строку подключения следующим образом:

DSN=server;UID=database;PWD=password;DSQ=user

Значения DSN, UID, DSQ противоречивы, они перегружены кристаллом.

Также убедитесь, что у вас нет вложенных отчетов, свойства которых Connect необходимо было бы изменить аналогичным образом.

...