1

私は持っています:

Delphi 2007

クリスタル11

CrystalVCLコンポーネントのDelphi7バージョン(私が知っている最新のものであり、D2007で正常にコンパイルされます)

Crystal 11で記述された非常に単純なテストCrystalレポートで、テーブルを画面にダンプするだけです(選択基準なし、数式なし、データのみ)

私は試した

新しいVCLフォームアプリを作成しました

TCrpeコンポーネントをフォームにドロップしました

「ReportName」プロパティをテストレポートに設定します。

フォームにボタンをドロップし、その後ろに1行配置しました。

Crpe1.Execute

レポートで[レポート付きデータの保存]オプションがオンなっている場合、これは正常に機能します。

そのオプションをオフにした場合、ログイン資格情報を提供する必要があります。

このコードの使用(100万年前の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のCrystalVCLコンポーネントにログインクレデンシャルを提供するにはどうすればよいですか?私の現在の回避策はかなり醜いです、そして私は変換するためにたくさんのレガシーコードを持っています。VCLコンポーネントを簡単な方法で使用できれば本当に素晴らしいと思います。

4

2 に答える 2

5

私はDelphi6でVCLを使用していますが、うまく機能します。ただし、LogOnServerプロパティは使用せず、Lo​​gOnInfoを使用します。

これは、すべてのレポート、およびサブレポートを含むレポートで機能します(これらにはクレデンシャルも提供する必要があるため)。

 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}
于 2009-10-14T15:57:02.240 に答える
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;

少し前に、CrystalVCLコンポーネントが「サンセット」されていることを読みました。それ以来、ActiveXRDCコンポーネントに移行しました。ただし、ターゲットコンピュータにActiveXをインストールする必要があります。

于 2009-10-15T14:07:37.097 に答える