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 23/08/2006, 18h16   #1
Invité de passage
 
Inscription : février 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3
Points : 1
Points : 1
Par défaut [VS2OO5, CR, C#, ASP.NET] Problème de liason de données

Bonjour à tous.

Dans une appli web, plusieurs rapports crystal existent. Ceux-ci ont été fait à des fins d'impression propre. Un moteur spécifique à donc été implémenté afin d'alimenter les rapports de façon générique. Sur le serveur de dév, tout marche bien, comme d'habitude

Lors de la phase de tests, un serveur SQL a été monté, un serveur IIS, .... Et là, catastrophe, les rapports devant accéder à SQL ne marchent plus.

Dans le code du moteur, je fais pourtant bien la liaison à la nouvelle base de données qui est correctement renseigné (fichier udl à l'appui pour vérifier, on ne sait jamais...). En fait, ce qui ne parmche pas, ce sont tous les paramètres discrets du rapport qui ne sont pas du type chaine. L'erreur ramenée est la suivante :
Citation:
Echec de l'ouverture d'un jeu de lignes. Détails ADO Error Code: 0x Source: Microsoft OLE DB Provider for SQL Server Description: La procédure 'Commentaire_Lister' attend le paramètre '@_iOrigineID' qui n'a pas été fourni. SQL State: 42000 native Error: Echec de l'ouverture d'un jeu de lignes. Erreur dans le fichier D:\DOCUME~1\naliq\LOCALS~1\Temp\CommentaireImprimer {AF55DD40-1980-4C02-D1770BF62E5}.rpt : Echec de l'ouverture d'un jeu de lignes.
Le pire, c'est que si je revient sur l'ancien serveur SQL sans modifier le code, cela marche.

Quelqu'un a-t-il une idée ? Merci d'avance.

Voici le source :

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
public partial class Rapports_Impression : System.Web.UI.Page
{
       private ReportDocument m_rptRapport = NULL;
        Hashtable m_hashParametres
    {
        get
        {
            IF (ViewState["Parametres"] != NULL && ViewState["Parametres"] IS Hashtable)
            {
                RETURN (Hashtable)ViewState["Parametres"];
            }
            else
            {
                RETURN NULL;
            }
        }
        SET { ViewState["Parametres"] = value; }
    }
 
    protected void Page_Init(object sender, EventArgs e)
    {
                   ConfigureCrystalReports();
    }
 
    private void ConfigureCrystalReports()
    {
        m_rptRapport = new ReportDocument();
        string strNomPhysiqueRapport = Server.MapPath(Request.QueryString[Constantes.Requete.NomRapport]);
        m_rptRapport.LOAD(strNomPhysiqueRapport);
 
        //Connexion à la bonne base de données
        ConnexionBD();
 
        IF (m_hashParametres == NULL)
        {
            //ON récupère les données de la session
            m_hashParametres = (Hashtable)Session[Constantes.Session.ParametreCrystal];
            //ON supprime l'objet de la session
            Session.Remove(Constantes.Session.ParametreCrystal);
        }
             SetCurrentValuesForParameterField();
        //Affectation de la vue.
        m_rptvwRapport.ReportSource = m_rptRapport;
 
    }
 
     private void SetCurrentValuesForParameterField()
    {
        foreach (DictionaryEntry deParametre in m_hashParametres)
        {
            m_rptRapport.SetParameterValue(deParametre.Key.ToString(), deParametre.Value);
        }
 
           }
 
    private void ConnexionBD()
    {
        //Paramètres de connexion à la base de données
        //Récupération de la chaine de connexion
        SqlConnection scnxConnexion = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
 
        m_rptvwRapport.ReportSource = m_rptsrcOrigine;
        //Passage des informations de connexion au rapport
        SqlConnectionStringBuilder scnxstrbldConnexion = new SqlConnectionStringBuilder(scnxConnexion.ConnectionString);
 
        ConnectionInfo connectionInfo = new ConnectionInfo();
        connectionInfo.ServerName = scnxstrbldConnexion.DataSource;
        connectionInfo.DatabaseName = scnxstrbldConnexion.InitialCatalog;
        connectionInfo.UserID = scnxstrbldConnexion.UserID;
        connectionInfo.Password = scnxstrbldConnexion.Password;
        connectionInfo.IntegratedSecurity = false;
        SetDBLogonForReport(connectionInfo, m_rptRapport);
 
        SetDBLogonForSubreports(connectionInfo, m_rptRapport);
    }
    private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
    {
        Tables tables = reportDocument.Database.Tables;
        foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
        {
            TableLogOnInfo tableLogonInfo = table.LogOnInfo;
            tableLogonInfo.ConnectionInfo = connectionInfo;
            table.ApplyLogOnInfo(tableLogonInfo);
        }
    }
    private void SetDBLogonForSubreports(ConnectionInfo connectionInfo, ReportDocument reportDocument)
    {
        Sections sections = reportDocument.ReportDefinition.Sections;
        foreach (Section section in sections)
        {
            ReportObjects reportObjects = section.ReportObjects;
            foreach (ReportObject reportObject in reportObjects)
            {
                if (reportObject.Kind == ReportObjectKind.SubreportObject)
                {
                    SubreportObject subreportObject = (SubreportObject)reportObject;
                    ReportDocument subReportDocument = subreportObject.OpenSubreport(subreportObject.SubreportName);
                    SetDBLogonForReport(connectionInfo, subReportDocument);
                }
            }
        }
    }
 
    protected void Page_Load(object sender, EventArgs e)
    {
                   //Récupération des imprimantes
            if (!Page.IsPostBack)
            {
                m_cmbNomImprimante.DataSource = System.Drawing.Printing.PrinterSettings.InstalledPrinters;
                m_cmbNomImprimante.DataBind();
            }
        }
 
    }
}
naliq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2006, 14h35   #2
Expert Confirmé

 
Avatar de neo.51
 
Inscription : avril 2002
Messages : 2 658
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : avril 2002
Messages : 2 658
Points : 3 866
Points : 3 866
Envoyer un message via MSN à neo.51 Envoyer un message via Skype™ à neo.51
si ça marche sur ton serveur de dev ça doit-être un problème de déploiement, à quelle ligne ça te lève l'exception ?

comment as tu déployer ton applis ?

Quelle version de Crystal Reports ?
neo.51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 10h51   #3
Invité de passage
 
Inscription : février 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3
Points : 1
Points : 1
Citation:
Envoyé par neo.51
si ça marche sur ton serveur de dev ça doit-être un problème de déploiement, à quelle ligne ça te lève l'exception ?

comment as tu déployer ton applis ?

Quelle version de Crystal Reports ?
J'ai déployé le site à l'aide des outils de visual studio. La base SQL est générée par script. Afin de lever l'ambiguité du déploiement du site, je suis retourné sur ma machine de dév. pour ne changer que la connexion SQL. Tout le site marche sauf Crystal. Cela ne me lève pas d'exception particulière, je pense qu'elle est encapsulée dans crystal. C'est le rapport qui me l'indique. Ceci dit, je viens de régler le problème en passant par les DataSet typés. Ce n'est pas génial au niveau du transit réseau mais cela à le mérite de marcher. Pour info, j'ai contacté depuis le support de BO qui n'apporte aucune solution, à tel point que je me demande s'ils ont compris le problème.

Merci d'avoir pris le temps de me lire.

Cordialement.
naliq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2006, 10h49   #4
Expert Confirmé

 
Avatar de neo.51
 
Inscription : avril 2002
Messages : 2 658
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : avril 2002
Messages : 2 658
Points : 3 866
Points : 3 866
Envoyer un message via MSN à neo.51 Envoyer un message via Skype™ à neo.51
ta version de CRystal Reports for VS 2005 est-elle bien enregistré ? quels sont les modules de fusion qui sont ajoutés dans ton setup ?
neo.51 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 21h47.


 
 
 
 
Partenaires

Hébergement Web