PDA

View Full Version : سوال: نمایش پرس و جوی حاصل از چند جدول در کریستال ریپورت



sarapepors
دوشنبه 26 مهر 1389, 00:29 صبح
سلام دوستان می خواستم بدونم واقعا می شه حاصل کوئری چند تا جدول رو در کریستال ریپورت نمایش داد من نمی تونم این کار رو انجام بدم واقعا راهی وجود داره؟؟
از این که موضوع تایپیک تکراریه عذر می خوام اما واقعا نمی دونم از ادست این کریستال چی کار کنم ؟ با یک دونه جدول مشکل ندارم اما با چند تا جدول به نتیجه نمی رسم


SqlDataAdapter ada = new SqlDataAdapter("Select tlbStudent.name,tblcrs.crs from tlbStudent,tblcrs where tblcrs.id=tlbStudent.crs", constr);
DataSet1 ds = new DataSet1();
CrystalDecisions.CrystalReports.Engine.ReportDocum ent repdoc = new CrystalDecisions.CrystalReports.Engine.ReportDocum ent();
ada.Fill(ds,"tbl");
int x =ds.Tables["tbl"].Rows.Count;
CrystalDecisions.Shared.ConnectionInfo info = new CrystalDecisions.Shared.ConnectionInfo();
info.DatabaseName = "dbtest";
info.IntegratedSecurity = true;
string reppath = @"C:\Documents and Settings\amine_2\My Documents\Visual Studio 2008\Projects\ReportTest1\CrystalReport1.rpt";
repdoc.Load(reppath);
repdoc.SetDataSource(ds.Tables["tbl"]);
int x2 = repdoc.Rows.Count;
this.crystalReportViewer1.ReportSource = repdoc;

دوستان کانکشن استرینگ هم تعریف کردم هیچ مشکلی در ارتباط با دیتابیس ندارم چون دیتاستی که توی برنامه اد کردم کوئری مورد نظر رو شامل میشه اما در آخر کار روی کریستال نمایش نمی ده یا اگر نشون می ده برای مثال بالا فقط ستون مربوط به درس رو نمایش می ده؟؟؟nameرو نمایش نمیده ؟؟؟؟؟

f_naderi
دوشنبه 26 مهر 1389, 01:40 صبح
لطفا جواب بدید چون خیلی وقته که من هم این مشکل رو با کریستال دارم و راه حلی براش پیدا نمی کنم

mmd2009
دوشنبه 26 مهر 1389, 09:44 صبح
با سلام

کوئری شما مشکل داره که من یک مثال زدم براتون امیدوارم به کارتون بیاد




try
{
this.con = new OleDbConnection(this.DB);

string strQuety = " SELECT u.name,u.family,u.age " +
" FROM u INNER JOIN ageuser" +
" ON u.age=ageuser.age "+
" WHERE u.age=ageuser.age ";


this.dba = new OleDbDataAdapter(strQuety, this.con);

this.dba.Fill(this.dt);

CrystalReport1 cr1 = new CrystalReport1();

cr1.SetDataSource(this.dt);

this.crystalReportViewer1.ReportSource = cr1;

}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message.ToString());
this.Close();
}

mmd2009
دوشنبه 26 مهر 1389, 09:59 صبح
خب یک مسئله دیگه میمونه و اونم اینه که مثلا چطوری میشه اطلاعات یک جدول رو انتخاب کرد به طوری که اطلاعات دو فیلد از این جدول با اطلاعات دو فیلد از دو جدول دیگر برابر باشد یا به عبارتی چگونه از دوتا INNER JOIN استفاده بکنید. برای این حالت از کوئری زیر استفاده می کنیم.



string strQuety = " SELECT u.name,u.family,u.age " +
" FROM ((u " +
" INNER JOIN ageuser ON u.age=ageuser.age) " +
" INNER JOIN nameuser ON u.name=nameuser.name) " +
" WHERE u.name=nameuser.name " +
" AND u.age=ageuser.age ";


فکر کنم دیگه مشکلی نداشته باشید برای این مسئله اگر باز ایرادی داشتید بفرمایید.

موفق باشید...

sarapepors
سه شنبه 27 مهر 1389, 00:03 صبح
خب یک مسئله دیگه میمونه و اونم اینه که مثلا چطوری میشه اطلاعات یک جدول رو انتخاب کرد به طوری که اطلاعات دو فیلد از این جدول با اطلاعات دو فیلد از دو جدول دیگر برابر باشد یا به عبارتی چگونه از دوتا INNER JOIN استفاده بکنید. برای این حالت از کوئری زیر استفاده می کنیم.



string strQuety = " SELECT u.name,u.family,u.age " +
" FROM ((u " +
" INNER JOIN ageuser ON u.age=ageuser.age) " +
" INNER JOIN nameuser ON u.name=nameuser.name) " +
" WHERE u.name=nameuser.name " +
" AND u.age=ageuser.age ";


فکر کنم دیگه مشکلی نداشته باشید برای این مسئله اگر باز ایرادی داشتید بفرمایید.

موفق باشید...
سلام دوست من از این که راهنماییم کردین متشکرم .من تا حالا هیچ وقت کوئری هامو به این صورت ننوشتم کوئری که من نوشتم اگر غلطه پس چرا داده های مورد نظر من تو دیتا ست نمایش داده می شه ؟ یعنی هر وقت بخوام از کریستال استفاده کنم باید کوئری رو این مدلی بنویسم؟

debugger
سه شنبه 27 مهر 1389, 10:48 صبح
راستی بجای دیتا ست از دیتا تیبل استفاده کنید . و از صحیح بودن کوئری هم اطمینان حاصل کنید

mmd2009
سه شنبه 27 مهر 1389, 11:16 صبح
سلام دوست من از این که راهنماییم کردین متشکرم .من تا حالا هیچ وقت کوئری هامو به این صورت ننوشتم کوئری که من نوشتم اگر غلطه پس چرا داده های مورد نظر من تو دیتا ست نمایش داده می شه ؟

من مثل شما تا الان اینطور روشی که شما کوئری نوشتی من ننوشتم. الان شما از این روشی که گفتم استفاده کردید یا خیر ؟ ایا جواب داد یا خیر ؟ در ضمن اگر میتونید یک نمونه مثال ایجاد کنید و به بنده بدهید تا بتونم روی کوئری خودتون کار بکنم و مشکل رو دریابیم چون من نمیدونم الان داده ها و نوع داده های بانکتون به چه صورتی هستند.



یعنی هر وقت بخوام از کریستال استفاده کنم باید کوئری رو این مدلی بنویسم؟

نه اصلا. این پرس و جو رابطه ی مستقیمی با CR نداره که بگیم باید حتما کوئری رو اینطوری بنویسید بلکه من میگم کوئری نوشن با این روش اصولی تره.

موفق باشید

sarapepors
چهارشنبه 28 مهر 1389, 11:37 صبح
سلام
من از کوئری که شما گفتید استفاده کردم ببینید من دو روش برای گزارش گیری با کرستال رو یاد گرفم البته همین تازگی ها نمیدونم که اصلا روشهایی که استفاده میکنم درست هست یا نه اولی تقریبا شبیه همین که شما نشونم دادید اتصای از طریق database در ضمن من پایگاه داده ام رو تو این روش ازطریق کلیک راست تو serverexplorerو add sqlserever database بسازم که از این طریق بانک تو مسیرc>programfile>microsoftsqlserver.mssql.1>mssql>data فپقرار میگیره و بعد هم ریپورت رو بهش متصل میکنم من اینجا دو تا مشکل دارم یکی همین نمایش دادن عجیب و غریب داده ها تو ریپورته یکی دیگه هم اینه که وقتی بانکم رو از مسیری که ساختم بر میدارم و به پوشه ی debug منتقل میکنم موقع اجرا ارور میده و می گه log on faild یا یه چیزی تو ایم مایه ها جالبه وقتی می خوام فقط از یه یه جدول استفاده کنم این مشکل رو ندارم
البته فایلش رو ضمیمه می کنم که ببینید
روش دوم هم استفاده از دیتا ست تو این روش مشکل log on ندارم فقط کوئری درست نمایش داده نمیشه .

sarapepors
چهارشنبه 28 مهر 1389, 11:43 صبح
از همگی دوستان خواهش میکنم کمک کنند مرسی

sarapepors
پنج شنبه 29 مهر 1389, 23:55 عصر
سلام دوستان یعنی تو این همه برنامه نویس یه نفر نیست بتونه کمکم کنه کلافه شدم از دست این کریستال ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟:عصبانی++:: صبانی++::عصبانی++::عصبانی++::ع بانی::عصبانی:

shahin_sharifi
جمعه 30 مهر 1389, 02:22 صبح
با سلام
نیازی نیست ناراحت باشید.:لبخند:
یه نمونه برنامه نوشتم گذاشتم که ببینید.شما باید داده های حاصل از جوین کردن جدول هاتونو توی یک دیتا تیبل بریزید. بعد توی پروژتون یه دیتا ست اضافه کنید در سلوشن اکسپلورر.در این دیتا ست یک تیبل اداپتر تعریف کنید و بصورت ویزاردی به جداولی که میخواهید بایند کنید.
بعد سورس کریستال رو در ado.net object برابر همین جدول که در دیتا ست ساختید قرار بدید.
حالا در کدتون اون دیتا تیبل رو در سورس کریستال قرار بدید.
تمام این توضیحات در پروژه ضمیمه به همراه دیتابیس نمونه وجود داره.در ضمن ایراده کاره شما هم هیچ ربطی به نوع نوشتن کوئری نداره.
موفق باشید.

sarapepors
جمعه 30 مهر 1389, 22:40 عصر
سلام دوست من از این که راهنماییم کردین ممنونم از روش شما که استفاده کردم تونستم کوئری مورد نظرم رو نمایش بدم اما موقع اضافه کردن دیتا اداپتر به دیتاست من مجبورم کوئری بنویسم بانکم sql شما هم همین کارو کردین؟ یعنی زمانی که می خوام از طریق ویزار اداپتر رو اضافه کنم راهی جز نوشتن کوئری ندارم درسته؟

sarapepors
جمعه 30 مهر 1389, 22:49 عصر
با سلام
نیازی نیست ناراحت باشید.:لبخند:
یه نمونه برنامه نوشتم گذاشتم که ببینید.شما باید داده های حاصل از جوین کردن جدول هاتونو توی یک دیتا تیبل بریزید. بعد توی پروژتون یه دیتا ست اضافه کنید در سلوشن اکسپلورر.در این دیتا ست یک تیبل اداپتر تعریف کنید و بصورت ویزاردی به جداولی که میخواهید بایند کنید.
بعد سورس کریستال رو در ado.net object برابر همین جدول که در دیتا ست ساختید قرار بدید.
حالا در کدتون اون دیتا تیبل رو در سورس کریستال قرار بدید.
تمام این توضیحات در پروژه ضمیمه به همراه دیتابیس نمونه وجود داره.در ضمن ایراده کاره شما هم هیچ ربطی به نوع نوشتن کوئری نداره.
موفق باشید.
در ضمن دوست من یه نکته هم راجع به کدتون بگم وقتی از dataadpter استفاده می کنید نیازی به oledbconnection,oledbcommantext,و همچنین باز و بسته کردن connection ندارین adapter خودش به تنهایی کافیه.

private string st = @"Data Source=.\SQLEXPRESS;AttachDbFilename="+Application.StartupPath+@"\Students.mdf"+@";Integrated Security=True;User Instance=True";
private void Form1_Load(object sender, EventArgs e)
{
SqlDataAdapter ada = new SqlDataAdapter("SELECT tblStudent.name,tblcrs.crs FROM tblStudent INNER JOIN tblcrs ON tblStudent.crs=tblcrs.id WHERE tblStudent.id="+1, st);
DataSet ds = new DataSet();
ada.Fill(ds, "tbl");
DataTable dt = ds.Tables["tbl"];
source = dt;
CrystalReport1 report = new CrystalReport1();
report.SetDataSource(source);

crystalReportViewer1.ReportSource = report;


}

shahin_sharifi
شنبه 01 آبان 1389, 00:36 صبح
بله درسته.در زمان ست کردن به صورت ویزاردی کوئری نوشته میشه.شما هم میتونید خودتون بنویسید هم با تیک زدن فیلد های لازم کوئری اتوماتیک ساخته میشه.
در مورد تذکرتونم ممنون.

quantomquery
جمعه 17 تیر 1390, 14:22 عصر
با سلام
نیازی نیست ناراحت باشید.:لبخند:
یه نمونه برنامه نوشتم گذاشتم که ببینید.شما باید داده های حاصل از جوین کردن جدول هاتونو توی یک دیتا تیبل بریزید. بعد توی پروژتون یه دیتا ست اضافه کنید در سلوشن اکسپلورر.در این دیتا ست یک تیبل اداپتر تعریف کنید و بصورت ویزاردی به جداولی که میخواهید بایند کنید.
بعد سورس کریستال رو در ado.net object برابر همین جدول که در دیتا ست ساختید قرار بدید.
حالا در کدتون اون دیتا تیبل رو در سورس کریستال قرار بدید.
تمام این توضیحات در پروژه ضمیمه به همراه دیتابیس نمونه وجود داره.در ضمن ایراده کاره شما هم هیچ ربطی به نوع نوشتن کوئری نداره.
موفق باشید.


سلام
برنامه شما واسه 1 جدول هست ایا برای 2 جدول میشه اینکارو کرد ؟
اشکال در استفاده از 2 جدول در کریستال ریپورت (http://barnamenevis.org/showthread.php?294615-%D8%A7%D8%B4%DA%A9%D8%A7%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-2-%D8%AC%D8%AF%D9%88%D9%84-%D8%AF%D8%B1-%DA%A9%D8%B1%DB%8C%D8%B3%D8%AA%D8%A7%D9%84-%D8%B1%DB%8C%D9%BE%D9%88%D8%B1%D8%AA)