PDA

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



sima_ahmadi
دوشنبه 21 اسفند 1391, 06:08 صبح
سلام ب همه
من س تا جدول دارم که برای گزارشگیری ازشون اومدم اونا رو رو یک دیتا ست انداختم و فرمان fill اونو با دستور select موردنظرم نوشتم بعد یک ریپرت ساختم با فیلدهای همون select ...اما همش خالی میاره!!!
من همه تاپیکای مشابهو خوندم لینک جدوال درست برقرار شده کدمو میذارم شاید ایراد از کده ...دیگه دانسته های من قد نمیده لطفا با تجربه ها راهمنماییم کنید ...چیکار کنم؟؟؟؟



string cmd = " select moshtari.name,moshtari.family,khedmat,gheymat,pard akhti,hamkar.family,sefaresh.tarikh,darsade_hamkar ,sahme_hamkar,sahme_arayeshgah from sefaresh,moshtari,hamkar where sefaresh.id_hamkar=hamkar.id_hamkar and sefaresh.id_moshtari=moshtari.id_moshtari and tarikh between '" + textBox4.Text + "' and '" + textBox3.Text + "' ";
SqlDataAdapter da = new SqlDataAdapter(cmd, con);
daramadds dataset = new daramadds();
da.Fill(dataset, "table1");
rpt_daramad rpt = new rpt_daramad();

rpt.Load("rpt_daramad.rpt");

rpt.SetDataSource(dataset.Tables["table1"]);

crystalReportViewer1.ReportSource = rpt;

crystalReportViewer1.Refresh();

veniz2008
دوشنبه 21 اسفند 1391, 09:08 صبح
سلام.
وقتی میخوایم همزمان از چند جدول بخونیم باید از Join استفاده کنیم.دستور select شما اینطور میشه :

SqlDataAdapter da = new SqlDataAdapter("select moshtari.name,moshtari.family,khedmat,gheymat,pard akhti,hamkar.family,sefaresh.tarikh,darsade_hamkar ,sahme_hamkar,sahme_arayeshgah from sefaresh INNER JOIN moshtari ON sefaresh.id_moshtari = moshtari.id_moshtari INNER JOIN hamkar ON sefaresh.id_hamkar = hamkar.id_hamkar where tarikh between '" + textBox4.Text + "' and '" + textBox3.Text + "'", con);
DataTable dt = new DataTable();
da.Fill(dt);
ReportDocument rd = new ReportDocument();
rd.Load("rpt_daramad.rpt");
rd.SetDataSource(dt);
CrystalReportViewer1.ReportSource = rd;
CrystalReportViewer1.Show();
بهتره تا حد امکان از دیتاتیبل به جای دیتاست استفاده کنید. چون شی سبکتریه و رم کمتری رو استفاده میکنه.
راستی واسه دستور between اول تاریخ اول میاد (اگر تاریخ اول رو درون textbox3 می ریزد) پس باید داخل دستور select هم اول بیاد. همچنین وقتی از between استفاده میشه تاریخ شروع و پایان هم شاملش میشه (ابتدا و انتها رو هم علاوه بر بین دو تاریخ در نظر میگیره).
موفق باشید.

sima_ahmadi
دوشنبه 21 اسفند 1391, 18:22 عصر
سلام.
وقتی میخوایم همزمان از چند جدول بخونیم باید از Join استفاده کنیم.دستور select شما اینطور میشه :

SqlDataAdapter da = new SqlDataAdapter("select moshtari.name,moshtari.family,khedmat,gheymat,pard akhti,hamkar.family,sefaresh.tarikh,darsade_hamkar ,sahme_hamkar,sahme_arayeshgah from sefaresh INNER JOIN moshtari ON sefaresh.id_moshtari = moshtari.id_moshtari INNER JOIN hamkar ON sefaresh.id_hamkar = hamkar.id_hamkar where tarikh between '" + textBox4.Text + "' and '" + textBox3.Text + "'", con);
DataTable dt = new DataTable();
da.Fill(dt);
ReportDocument rd = new ReportDocument();
rd.Load("rpt_daramad.rpt");
rd.SetDataSource(dt);
CrystalReportViewer1.ReportSource = rd;
CrystalReportViewer1.Show();
بهتره تا حد امکان از دیتاتیبل به جای دیتاست استفاده کنید. چون شی سبکتریه و رم کمتری رو استفاده میکنه.
راستی واسه دستور between اول تاریخ اول میاد (اگر تاریخ اول رو درون textbox3 می ریزد) پس باید داخل دستور select هم اول بیاد. همچنین وقتی از between استفاده میشه تاریخ شروع و پایان هم شاملش میشه (ابتدا و انتها رو هم علاوه بر بین دو تاریخ در نظر میگیره).
موفق باشید.

تکستها مشکل نداره شمارش جا بجا شده
کد شما هم جواب نمیده ؟چرا؟
ارورم نمیده ...خروجی نمیده
چرا ی جواب درست توی هیچکدوم از تاپیک های مرتبط نیست ...لطفا راهنمایی کنید...

veniz2008
دوشنبه 21 اسفند 1391, 19:44 عصر
اول کوئری رو اجرا کنید (یا توی sql یا توی همین سی شارپ). ببینید اصلا خروجی داره؟. شاید واقعا چیزی برگشت داده نمیشه.