چگونه مسیر داینامیک به بانک اکسس را به کریستال ریپورت بدهم
سلام
من با vb.net و بانک access و crystal report فرمی را طراحی کرده ام. اما به هیچ طریقی امکان آن را نیافتم که مسیر جدول را در برنامه و برای زمان اجرا به ریپورت بدهم. موارد موجود در این بخش و بسیاری سایتهای دیگر نیز برای کار با vb 6.0 بود. من کد زیر را در پروژه بکار بردم اما هنوز هم مسیر فایل اکسس در زمان اجرا از من خواسته می شود:
Dim Report = New Chart1
Dim dtAd As New OleDbDataAdapter
dtAd = New OleDbDataAdapter("SELECT * FROM tbChart;", con)
dtAd.Fill(DS, "tbChart")
Report.SetDataSource(DS)
CRV.ReportSource = Report
لطفاً در صورت امکان نحوه اعمال تغییر مسیر جدول را با ذکر مثال تشریح کنید. البته من حتی مسیر فایل را نیز به کمک دستور application.startpath نیز به Crystal report بصورت زیر دادم که بازهم جواب نداد:
CRV.ReportSource = Application.StartupPath + "\" + "Chart.rpt"
Please help me :(
نقل قول: چگونه مسیر داینامیک به بانک اکسس را به کریستال ریپورت بدهم
در اینجا دو حال پیش می آید یا گزارش subreport هست یا داکیومنت معمولی
ابندا باید داکیومنت گزارش و کانکشن اینفو را به توابع بدهد
نحوه پر کردن connectionInfo
ConnectionInfo ConnectionInfoRpt = new ConnectionInfo();
ConnectionInfoRpt.IntegratedSecurity = true;
ConnectionInfoRpt.DatabaseName = "database";
ConnectionInfoRpt.Password = "pass";
ConnectionInfoRpt.UserID = "user";
ConnectionInfoRpt.ServerName = SystemInformation.ComputerName.ToString();
Finassl rpt = new Finassl();
حالا نوبت به ارسال هم داکیومنت و کاننکشن است
ApplyLogOnInfoForSubreports(rpt, ConnectionInfoRpt);
private void ApplyReportLogon(CrystalDecisions.CrystalReports.E ngine.ReportDocument RptYears, ConnectionInfo sa)
{
foreach (CrystalDecisions.CrystalReports.Engine.Table tablex in RptYears.Database.Tables)
{
tablex.LogOnInfo.ConnectionInfo.AllowCustomConnect ion = true;
TableLogOnInfo tablelog = tablex.LogOnInfo;
tablelog.ConnectionInfo = sa;
tablex.ApplyLogOnInfo(tablelog);
}
}
حال اگر فرم شما ساب ریپورت داشته باشد فرم ریپورت خود را به جای ارسالبه تابع فوق به تابع زیر ارسال می نمایید
private void ApplyLogOnInfoForSubreports(CrystalDecisions.Cryst alReports.Engine.ReportDocument rpt, ConnectionInfo ConnectionInfoRpt)
{
Sections Sections = rpt.ReportDefinition.Sections;
foreach (Section section in Sections)
{
ReportObjects reportObjects = section.ReportObjects;
foreach (ReportObject reportObject in reportObjects)
{
if (reportObject.Kind == ReportObjectKind.SubreportObject)
{
var subreportobject = (SubreportObject)reportObject;
ReportDocument SubReportDocument = subreportobject.OpenSubreport(subreportobject.Subr eportName);
ApplyReportLogon(SubReportDocument, ConnectionInfoRpt);
}
}
}
}
امیدوارم تونسته باشم مشکلی را حل کرده باشم