2009-10-14 104 views
1

報告我:水晶在2007年德爾福

德爾福2007年

水晶11

德爾福7版本的水晶VCL組件(最新的一個我所知道的,和它編譯罰款在D2007)

一個非常簡單的測試水晶報表,寫在水晶11,它只是轉儲到屏幕上的一張桌子(沒有選擇標準,沒有公式,只是直線數據)

我試圖

創建一個新的VCL窗體應用程序

丟棄的形式

的 「REPORTNAME」 屬性設置爲我的測試報告上TCrpe組件。

我放棄了表單上的按鈕,和它背後放置一條線:

Crpe1.Execute 

如果報表的「保存數據隨着報告」選項打開,那麼這個工作正常。

如果我將該選項關閉,那麼我需要提供登錄憑據。

使用此代碼(一萬年前在Delphi 5運行良好):

procedure TForm1.BitBtn1Click(Sender: TObject); 
var 
    logonItem: integer; 
begin 
    Crpe1.LogOnServer.Clear; 
    logonItem := Crpe1.LogOnServer.Add('MYSERVER.MYDOMAIN.COM'); 
    Crpe1.LogonServer[logonItem].UserID := 'USERNAME'; 
    Crpe1.LogOnServer[logonItem].Password := 'PASSWORD'; 
    Crpe1.LogOnServer[logonItem].DatabaseName := 'MYDATABASE'; 
    Crpe1.Execute; 
end; 

我得到這個錯誤:

--------------------------- 
Project2 
--------------------------- 
Error:536 Error in File C:\REPORT.RPT: 

Unable to connect: incorrect log on parameters. 

Execute <PEStartPrintJob>. 
--------------------------- 
OK 
--------------------------- 

我在做什麼錯?我如何在Delphi中爲Crystal VCL組件提供登錄憑證?我目前的解決方法是pretty ugly,我有很多遺留代碼要轉換。如果我可以直接使用VCL組件,那將是非常好的。

回答

5

我在Delphi 6中使用VCL,效果很好。但我不使用LogOnServer屬性,我使用LogOnInfo。

這適用於任何報告,幷包含子報告(因爲這些需要提供以及憑證):

With CRPE1 Do 
Begin 
     With SubReports Do 
     Begin 
      Retrieve; 
      If (Count > 0) then 
      For i := 0 To (Count - 1) Do 
      Begin 
       ItemIndex := i; 

       LogOnInfo.Retrieve; 
       For j := 0 to LogOnInfo.Count - 1 Do 
       Begin 
        LogOnInfo[j]; 

        With LogOnInfo Do 
        Begin 
          ServerName := MyDataSource; 
          DatabaseName := DatabasePath; 
          UserID := DBUser; 
          Password := sPwd; 
        End; 
       End; {For j} 

       Tables.Retrieve; 
      End; {For i} 

      ItemIndex := 0; 
     End; {With SubReports} 

     SubReports[0]; 
End; {With CRPE1} 
+0

你太棒了,非常感謝 – JosephStyons 2009-10-14 19:26:00

+0

非常感謝。 – 2012-05-28 15:34:42

+0

這有語法錯誤。我不知道它是如何成爲答案的! – FLICKER 2013-07-08 19:55:38

3

下面是一些舊的「遺產」的代碼,它使用VCL組件:

mCrpe.reportname:=mfilename; 
mCrpe.Connect.UserID := CustomReportCurrentUser; 

mCrpe.connect.ServerName:='servername'; 
mCrpe.connect.DataBaseName:='databasename'; 
mCrpe.connect.propagate:=True; 
mCrpe.Connect.Password := CustomReportClientPass; 



try 
    mConnected := mCrpe.Connect.Test; 
except 
    on e: eDBEngineError do begin 
    showmessage(e.message); 
    end; 
end; 

mCrpe.windowbuttonbar.refreshbtn:=true; 
mCrpe.discardsaveddata; 
mCrpe.Show; 

前段時間我讀過Crystal VCL組件正在「落日」。從那時起,我已經遷移到Active X RDC組件。它需要將Active X安裝在目標計算機上。

+0

這就是我們所做的,它仍然與D2007和Crystal 11一起工作。我們不得不離開它,RDC如何進行? – 2015-07-02 01:52:03

+0

它的工作原理.....但總的來說,它似乎是水晶報表的所有者(不知道現在是誰:Crystal Decisions - > Business Objects - > SAP ....)幾乎不支持客戶端中的Crystal Reports /服務器設置。 – 2015-07-06 20:41:53