2010-11-12 18 views
0

J'ai un rapport de cristal qui fonctionnait correctement sur ma machine locale mais lorsque je l'ai déplacé sur mon serveur, il me donnait un "Erreur de connexion aux paramètres".Rapport Crystal - erreur de connexion invalide

Le code est ci-dessous. Il est appelé à partir d'une application .net

Dim CR As New ReportDocument

Dim str As String = Application.StartupPath 
    If PrintDialog1.ShowDialog() <> Windows.Forms.DialogResult.OK Then Exit Sub 
    CR.Load(Application.StartupPath & "\CR Reports\BookPickByConsignee.rpt") 
    CR.SetParameterValue("param_picknumber", Me.txtpickNumber.Text.Trim()) 
    CR.DataSourceConnections.Item(0).SetConnection(Configuration.ConfigurationSettings.AppSettings("DatabaseServer").ToString(), Configuration.ConfigurationSettings.AppSettings("DatabaseName").ToString(), Configuration.ConfigurationSettings.AppSettings("UserName").ToString(), Configuration.ConfigurationSettings.AppSettings("Password").ToString()) 
    'CR.DataSourceConnections.Item(0).SetLogon("sa", "pwd") 
    '   CR.SetDatabaseLogon("sa", "pwd") 

    CR.PrintOptions.PrinterName = PrintDialog1.PrinterSettings.PrinterName 

    CR.PrintToPrinter(Me.txtCopies.Text, True, 1, 100) 
    CR.Close() 
+0

Eh bien, je dois demander - est le fichier de configuration sur votre serveur pointant vers la bonne base de données? Avez-vous vérifié cela? – LittleBobbyTables

+0

@Amit, veuillez corriger la mise en forme de votre code. –

Répondre

0

Vous pouvez utiliser le code suivant pour appliquer certains éléments de connexion pour un rapport au moment de l'exécution.
Désolé, codez en C#.
Veuillez utiliser cette méthode juste après le chargement du fichier rpt du rapport, au lieu de CR.DataSourceConnections.Item(0).SetConnection et passez les détails de connexion requis à la méthode, cela fonctionnera.

public static void CrystalReportLogOn(ReportDocument reportParameters, 
              string serverName, 
              string databaseName, 
              string userName, 
              string password) 
    { 
     TableLogOnInfo logOnInfo; 
     ReportDocument subRd; 
     Sections sects; 
     ReportObjects ros; 
     SubreportObject sro; 

     if (reportParameters == null) 
     { 
      throw new ArgumentNullException("reportParameters"); 
     } 

     try 
     { 
      foreach (CrystalDecisions.CrystalReports.Engine.Table t in reportParameters.Database.Tables) 
      { 
       logOnInfo = t.LogOnInfo; 
       logOnInfo.ReportName = reportParameters.Name; 
       logOnInfo.ConnectionInfo.ServerName = serverName; 
       logOnInfo.ConnectionInfo.DatabaseName = databaseName; 
       logOnInfo.ConnectionInfo.UserID = userName; 
       logOnInfo.ConnectionInfo.Password = password; 
       logOnInfo.TableName = t.Name; 
       t.ApplyLogOnInfo(logOnInfo); 
       t.Location = t.Name; 
      } 
     } 
     catch 
     { 
      throw; 
     } 

     sects = reportParameters.ReportDefinition.Sections; 
     foreach (Section sect in sects) 
     { 
      ros = sect.ReportObjects; 
      foreach (ReportObject ro in ros) 
      { 
       if (ro.Kind == ReportObjectKind.SubreportObject) 
       { 
        sro = (SubreportObject)ro; 
        subRd = sro.OpenSubreport(sro.SubreportName); 
        try 
        { 
         foreach (CrystalDecisions.CrystalReports.Engine.Table t in subRd.Database.Tables) 
         { 
          logOnInfo = t.LogOnInfo; 
          logOnInfo.ReportName = reportParameters.Name; 
          logOnInfo.ConnectionInfo.ServerName = serverName; 
          logOnInfo.ConnectionInfo.DatabaseName = databaseName; 
          logOnInfo.ConnectionInfo.UserID = userName; 
          logOnInfo.ConnectionInfo.Password = password; 
          logOnInfo.TableName = t.Name; 
          t.ApplyLogOnInfo(logOnInfo); 
         } 
        } 
        catch 
        { 
         throw; 
        } 
       } 
      } 
     } 
    }