2009-07-15 8 views
5

मैं कुछ subreports इसके अंदर के साथ कुछ रिपोर्ट प्रदर्शित करने के लिए कोशिश कर रहा हूँ, लेकिन हर यह रिपोर्ट यह डेटाबेस कनेक्शन के लिए पूछ कुछ संवाद बॉक्स फेंकता है पता चलता है। मैं इस कोड का उपयोग कर रहा:डेटाबेस लॉगिन शीघ्र रिपोर्ट

private void frmReporte_Load(object sender, System.EventArgs e) 
    { 
     Clave = ConfigurationSettings.AppSettings["Password"].ToString(); 
     NombreBD = ConfigurationSettings.AppSettings["CatalogBD"].ToString(); 
     NombreServidor = ConfigurationSettings.AppSettings["Servidor"].ToString(); ; 
     UsuarioBD = ConfigurationSettings.AppSettings["UserID"].ToString(); 
     this.crtReportes.ReportSource = this.prepareReport(); 
    } 
    public void imprimirReporte() 
    { 
     ReportDocument rpt = new ReportDocument(); 
     rpt.Load(mvarRutaReporte); 
     rpt.SetDataSource(clsReportes.dsReporte); 
     rpt.PrintToPrinter(1, false, 1, 1); 
    } 
    private ReportDocument prepareReport() 
    { 
     Sections crSections; 
     ReportDocument crReportDocument, crSubreportDocument; 
     SubreportObject crSubreportObject; 
     ReportObjects crReportObjects; 
     ConnectionInfo crConnectionInfo; 
     Database crDatabase; 
     Tables crTables; 
     TableLogOnInfo crTableLogOnInfo; 
     crReportDocument = new ReportDocument(); 
     crReportDocument.Load(RutaReporte); 
     crReportDocument.SetDataSource(clsReportes.dsReporte.Tables[0]); 
     crDatabase = crReportDocument.Database; 
     crTables = crDatabase.Tables; 
     crConnectionInfo = new ConnectionInfo(); 
     crConnectionInfo.ServerName = NombreServidor ; 
     crConnectionInfo.DatabaseName = NombreBD; 
     crConnectionInfo.UserID = UsuarioBD; 
     crConnectionInfo.Password = Clave; 
     foreach (CrystalDecisions.CrystalReports.Engine.Table aTable in crTables) 
     { 
      crTableLogOnInfo = aTable.LogOnInfo; 
      crTableLogOnInfo.ConnectionInfo = crConnectionInfo; 
      aTable.ApplyLogOnInfo(crTableLogOnInfo); 
     } 
     // Para los reportes que poseen subreportes 
     // pongo el objeto seccion del la seccion actual del reporte 
     crSections = crReportDocument.ReportDefinition.Sections; 
     // busco en todas las secciones el objeto reporte 
     foreach (Section crSection in crSections) 
     { 
      crReportObjects = crSection.ReportObjects; 
      //busco en todos los reportes por subreportes 
      foreach (ReportObject crReportObject in crReportObjects) 
      { 
       if (crReportObject.Kind == ReportObjectKind.SubreportObject) 
       { 
        crSubreportObject = (SubreportObject)crReportObject; 
        //abro el subreporte y me logeo con los datos del reporte general 
        crSubreportDocument = crSubreportObject.OpenSubreport(crSubreportObject.SubreportName); 
        crDatabase = crSubreportDocument.Database; 
        crTables = crDatabase.Tables; 
        foreach (CrystalDecisions.CrystalReports.Engine.Table aTable in crTables) 
        { 
         crTableLogOnInfo = aTable.LogOnInfo; 
         crTableLogOnInfo.ConnectionInfo = crConnectionInfo; 
         aTable.ApplyLogOnInfo(crTableLogOnInfo); 
        } 
       } 
      } 
     } 
     return crReportDocument; 
    } 
+0

यदि आपको समाधान मिल गया है, तो मुझे भी इस समस्या का सामना करना पड़ता है, कृपया यहां साझा करें! – Sagotharan

+0

यदि आपको समाधान मिल गया है तो मुझे भी एक ही समस्या का सामना करना पड़ रहा है, कृपया यहां साझा करें –

+0

@LajjaThaker मुझे किसी अन्य तरीके से रिपोर्ट को पुनर्निर्माण करना था, अब मुझे याद नहीं है –

उत्तर

1

क्रिस्टल में आप db लॉगिन @ क्रिस्टल प्रबंधन कंसोल (CMC) में रिपोर्ट उत्पन्न करने के समय @ प्रत्येक रिपोर्ट के स्तर के लिए संकेत करने के लिए कि क्या निर्दिष्ट कर सकते हैं। सीएमसी में लॉग इन करें, अपनी रिपोर्ट> प्रक्रिया> डेटाबेस खोलें। पृष्ठ के निचले हिस्से में आप "डेटाबेस लॉगऑन के लिए उपयोगकर्ता को संकेत दें", "डेटाबेस लॉगऑन के लिए एसएसओ संदर्भ का उपयोग करें" या "जब रिपोर्ट चलती है तो उसी डेटाबेस लॉगऑन का उपयोग करें" निर्दिष्ट कर सकते हैं। सर्वर में संग्रहीत प्रमाणपत्रों का उपयोग करने के लिए तीसरा विकल्प चुनें।

+0

अंतिम सॉफ़्टवेयर किसी ऐसे स्थान पर स्थापित है जिसमें सीएमसी –

1

आप केवल रिपोर्ट लिख सकते हैं। SetDatabaseLogon ("उपयोगकर्ता नाम", "pwd", @ "server", "डेटाबेस"); लॉगिन जानकारी दें तो डेटाबेस लॉगऑन बॉक्स तब दिखाई नहीं देगा जब आप कोड चलाएंगे।

+2

नहीं है सभी –

+2

पर भी काम नहीं करता ... यह काम नहीं करता है। यहां वोट कौन है, कृपया कहा कि क्या आपने इस समस्या को हल किया है। – Sagotharan

2

मुझे एक ही समस्या थी और अब हल हो गया है, इसलिए अगर मैं अपनी स्थिति में किसी और की मदद कर सकता हूं तो मैं यह उत्तर जोड़ रहा हूं।

रिपोर्ट के लिए SQL सर्वर लॉगिन जानकारी सेट करते समय, सुनिश्चित करें कि आप सेवा नाम शामिल करें। तो, उदाहरण के लिए, सुनिश्चित करें कि आप केवल "माइसेवर" के बजाय क्रिस्टल "माइसेवर \ myservice" दे रहे हैं।

मेरा प्रोग्राम सिर्फ "माइसेवर" का उपयोग कर SQL सर्वर से डेटा तक पहुंचने में सक्षम है, लेकिन क्रिस्टल को "myserver \ myservice" दिया जाना चाहिए।

+0

क्या आप अपना कोड यहां साझा कर सकते हैं? –

+0

लाजा, मेरा सुझाव है कि आपको इस लेख पर एक अच्छा नज़र डालें: http://www.codeproject.com/Articles/15024/Crystal-Reports-helper-class –

संबंधित मुद्दे