代码之家  ›  专栏  ›  技术社区  ›  JosephStyons

Delphi 2007中的Crystal Reports

  •  1
  • JosephStyons  · 技术社区  · 15 年前

    我有:

    德尔福2007

    晶体11

    Delphi7版本的CrystalVCL组件(我知道的最新版本,它在2007年编译得很好)

    一份用Crystal 11编写的非常简单的测试Crystal报告,它只是将一张表转储到屏幕上(没有选择标准,没有公式,只有直接数据)。

    我试过

    创建了一个新的VCL表单应用程序

    已将tcrpe组件放到表单上

    将“reportname”属性设置为“我的测试报告”。

    我在表格上放了一个按钮,在它后面放了一行:

    Crpe1.Execute
    

    如果报表已启用“使用报表保存数据”选项 ,这样就可以了。

    如果我选择 远离的 ,然后我需要提供登录凭据。

    使用此代码(在500万年前的Delphi中工作得很好):

    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组件,那就太好了。

    2 回复  |  直到 14 年前
        1
  •  5
  •   J__    15 年前

    我在Delphi6中使用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}
    
        2
  •  3
  •   M Schenkel    15 年前

    下面是一些使用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;
    

    一段时间前,我读到晶体VCL组件被“防晒”。从那时起,我就迁移到了ActiveXRDC组件。但是,它需要在目标计算机上安装活动X。