2011-01-21 56 views
1

私はVB6フロントエンド、バックエンドとしてSQL Server 2005、レポート用にCrystal Reports 8.5を持っています。クリスタルレポートVB6で動的に8位置を設定

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 
+0

+1。ようこそ。 – PowerUser

+0

自分の知る限り、どのCRライブラリを使用していますか? CRAXDDRT.dll? CRAXDRT.dll? – PowerUser

+0

こんにちはボビーよく私はcrystal report.Nに若干新しいですので、私はちょうどvb6.WhereでコンポーネントからCrystal Reportコントロールを挿入して、これらのdllを見つけることができます。あなたの時間をありがとう。 – Monshine

答えて

0

このような接続文字列をフォーマットしてみてください。

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

DSNUIDDSQの意味は直感的であり、それらはクリスタルでオーバーロードされています。

また、Connectのプロパティを同様に変更する必要があるサブレポートがないことを確認します。レポートにレコードセットを渡していないのはなぜ

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 
+0

こんにちは、お返事ありがとうございます。私はあなたのように言いましたが、メッセージを受け取っています:ランタイムエラー '20599'は、このようなSQL server.my接続文字列を開くことができません:crystalreport1.Connect = "DSN = datapro1; UID = sal_mil; PWD = ss; DSQ = sa "ここで、datapro1は私のservernameで、sal_milは私のデータベースです。あなたの時間と回答に感謝します。 – Monshine

+0

よくある問題は、サーバー名とデータベース名がCrystalレポートに保存されることです。私がこれを解決するために行ったことは、VB6コードでCrystalReportオブジェクトを作成し、接続文字列を正しいサーバーとデータベースに設定し、次にレポートソースを既存のCrystal SQLと一致するクエリに設定することです。 * SELECT * FROM MyDatabase.dbo.MyTableの代わりにMyTableから取り出します。 MS Accessを使用して開発を開始しましたので、Crystalで作業したときに大きな変化がありました。あなたがアップグレードすることができれば、Crystal 10ははるかに優れています。 –

+0

こんにちは、お返事ありがとうございます。私の問題は、実行時にvb6でCrystalレポートのデータベースの場所を変更する方法です。 – Monshine

2

は、このようないくつかのコードを試してみてください?このようにして、サポートされている(つまりVB6が接続できる)データベースから動的にデータを取得し、複数のデータベースからデータをマージすることもできます。レポートにはデータ(レコードセット)のみが必要で、レポートはデータフィールド定義。明瞭にするために、

1
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 
関連する問題