Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Crystal Reports > SDK
SDK Forum sur l'utilisation de Crystal Reports par des API (VB, C++, Delphi, Java, etc.)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2011, 11h54   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 39
Points : 13
Points : 13
Par défaut Changement de connexion de sous-rapports

Bonjour,

Je voudrais utiliser mes rapports sur deux bases de données différentes, la première est celle de production et la seconde est l'historique (même structure que la première mais n'est pas limitée à 3 mois de données). Dans mon interface utilisateur, j'initialise l'utilisateur, le mot de passe, le nom du serveur et le nom de la db à chaque lancement de rapport selon le choix de la db.

Par défaut, j'ai initialisé mes rapports sur la db de production lors de leur création. Mon souci vient du fait que les sous-rapports pointent toujours vers la db de production, même si je force les paramètres pour qu'ils pointent sur l'autre db. Est-ce que quelqu'un a déjà eu ce problème?

Voici le code que j'utilise:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
ReportDocument _Report = new ReportDocument();
_Report.LOAD("mon rapport.rpt");
ConnectionInfo _ConnectionInfo = new ConnectionInfo();
_ConnectionInfo.IntegratedSecurity = false;
_ConnectionInfo.DatabaseName = "nom de la db";
_ConnectionInfo.ServerName = "nom du serveur";
_ConnectionInfo.UserID = "utilisateur";
_ConnectionInfo.Password = "mot de passe";
LogonReport(_Report, _ConnectionInfo);
crystalReportViewer1.ReportSource = _Report;
...
private void LogonReport(ReportDocument report, ConnectionInfo conInfo)
        {
            TableLogOnInfo logonInfo = new TableLogOnInfo();
 
            foreach (TABLE crtable IN report.DATABASE.TABLES)
            {
                logonInfo = crtable.LogOnInfo;
                logonInfo.ConnectionInfo = conInfo;
                crtable.ApplyLogOnInfo(logonInfo);
            }
 
            foreach (Section crSection IN report.ReportDefinition.Sections)
            {
                foreach (ReportObject reportObject IN crSection.ReportObjects)
                {
                    IF (reportObject.Kind == ReportObjectKind.SubreportObject)
                    {
                        SubreportObject subreportObject = (SubreportObject)reportObject;                    
                        LogonReport(report.OpenSubreport(subreportObject.SubreportName), conInfo);
//-- via mes recherches par Google, j'ai lu que certaines personnes ouvre le sous-rapport à partir du sous-rapport à la place du rapport. 
//-- Pas très logique et cela ne marche pas non plus.    
                    }
                }
            }
        }
Merci d'avance.
Garrett est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 13h49   #2
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 39
Points : 13
Points : 13
Il y a différentes solutions sur le site de SAP ou ici, mais aucune ne fonctionne... J'en ai même trouvée une sur leur site qui passe un ConnectionInfo en paramètre à une procédure sans jamais l'appliquer au rapport et à ses sous-rapports
Garrett est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 14h17   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 39
Points : 13
Points : 13
Après tests, je constate que cela fonctionne avec les sous-rapports directement créés dans le rapport mais pas avec ceux qui ont été importés.

Code :
1
2
3
4
5
6
7
8
IConnectionInfo connectInfo = _Report.DataSourceConnections[0];
connectInfo.SetConnection("serverName", "db", "uid", "pwd");
 
foreach (ReportDocument boSubreport IN _Report.Subreports)
{
   IConnectionInfo subconnectInfo = boSubreport.DataSourceConnections[0];
   subconnectInfo.SetConnection("serverName", "db", "uid", "pwd");
}
Garrett est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h54.


 
 
 
 
Partenaires

Hébergement Web