PDA

View Full Version : مبتدی: مشکل در کریستال ریپورت



mortezasar
دوشنبه 02 اردیبهشت 1392, 22:42 عصر
سلام دوستان من گزارشم رو در کریستال طراحی کردم اماحالا فهمیدم که اطلاعات رو اضافی چاپ می کنه مثلا من 3تا سطر دارم توی جدولم اما واسم توی گزارش 5 تا چاپ می کنه یعنی 2 تا رو تکرار می کنه اینم کدی هست که نوشتم اگه میشه راهنمایی کنید


try
{
SqlConnection conn1 = new SqlConnection("Data Source=(local);Initial Catalog=TEST;Integrated Security=True");
conn1.Open();
SqlCommand cmd1 = new SqlCommand();
cmd1.Connection = conn1;
cmd1.CommandText = "select nosanad,kan_name,kan_datetasis,kan_totmetr,kan_ehd akon,kan_sazan,kan_morabimen,kan_mentel,kan_morabi women,kan_womentel,kan_vazbana,kan_vazfal,kan_vazf alcom,kan_taminprice,kan_emkanat_sottasvir,kan_emk anat_farsh,kan_emkanat_book,kan_emkanat_nobook,kan _emkanat_compi,kan_emkanat_service,kan_emkanat_tel ,kan_emkanat_notel,kan_emkanat_sysgarma,kan_emkana t_mazhabbook,kan_emkanat_other,kan_emkanat_syssarm a,kan_emkanat_jabekomak,kan_othercomm,no_sanad,way ,cityname,rosta_name,faseleh,mosname,datemos from Table_kanon,base_rosta where Table_kanon.nosanad=base_rosta.no_sanad";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd1;
DataTable dt = new DataTable();
da.Fill(dt);
conn1.Close();
ReportDocument RD = new ReportDocument();
RD.FileName = "ReportKan.rpt";
RD.SetDataSource(dt);
crv2.ReportSource = RD;
crv2.Show();
}
catch (Exception ex)
{
MessageBox.Show("" + ex.Message, "خطایی رخ داده است ", MessageBoxButtons.OK);
}


ضمنا دستور سلکت از دو جدول هست

aliasghar2
دوشنبه 02 اردیبهشت 1392, 22:50 عصر
توی کوئری left Join استفاده کن

mortezasar
دوشنبه 02 اردیبهشت 1392, 23:02 عصر
میشه بیشتر توضیح بدید

aliasghar2
دوشنبه 02 اردیبهشت 1392, 23:06 عصر
احتمالا کودریت هست که 5 رکورد رو بر می گردونه که می تونی اینو توی خود sql چک کنی
البته من اشتباه گفتم که left join باید ار inner join استفاده کنی اینجوری
Selct .... from Table_kanon inner join base_rosta on Table_kanon.nosanad=base_rosta.no_sanad

mortezasar
دوشنبه 02 اردیبهشت 1392, 23:17 عصر
متاسفانه بازم اطلاعاتم تکرار میشه من تو جدول کانون 2 تا کانون ثبت دارم اما تو گزارش 4تا واسم میاره تکرارش میکنه اطلاعات رو

aliasghar2
دوشنبه 02 اردیبهشت 1392, 23:22 عصر
رابطه کانون به روستا دقیقا چیه و توی روستا چنتا رکورد داری

mortezasar
دوشنبه 02 اردیبهشت 1392, 23:26 عصر
اول یک روستا ثبت میشه و برای هر روستا n تا کانون و از طریق شماره سند با هم در ارتباط اند (البته توی sql رابطه تعیین نکردم )

aliasghar2
دوشنبه 02 اردیبهشت 1392, 23:31 عصر
ایا رابطه بین روستا و کانون nosanad هست اگر غیر اینه باید از کد زیر استقاده کنی با فرض k.NoRosta , rosta.No
[SQL]Select * from Kanon inner join rosta on kanon.Norosta=rosta.no[/SQL ]

mortezasar
دوشنبه 02 اردیبهشت 1392, 23:35 عصر
من توی sql رابطه تعیین نکردم اما nosanad جدول کانون همون nosanad جدول روستا هستش

mortezasar
دوشنبه 02 اردیبهشت 1392, 23:38 عصر
باز هم بجای اطلاعات 2 تا کانون 4 تا اورد تکرار کرد

aliasghar2
دوشنبه 02 اردیبهشت 1392, 23:40 عصر
خب یعنی nosanad کلید اصلی روستا , کلید خارجی کانون هست
بهتره که یه بار کوئری رو در خود sql اجرا کنی تا ببینیم چه مقادری بر میگردونه ایا اونجا هم 4 تاس در صورت امکان یه عکس از خروجی sql بزار

mortezasar
دوشنبه 02 اردیبهشت 1392, 23:51 عصر
فهمیدم فکر کنم اشکال در sql باشه من فقط توی جدول روستا nosanad رو کلید اصلی تعریف کردم و دیگه هیچ کاری نکردم
ببین من یک جدول روستا دارم که اطلاعات روستا توش ثبت میشه و یک نسخه سند به کاربر میده بعد کاربر میاد توی صفحه ثبت کانون نسخه سند رو میزنه و اطلاعات روستا رو واسش نشون میده و کاربر اطلاعات کانون رو ثبت می کنه حالا در جدول کانون امکان داره 3 تا نسخه سند یکسان باشه (یعنی واسه یک روستا 3 تا کانون ثبت شه )

aliasghar2
سه شنبه 03 اردیبهشت 1392, 00:03 صبح
Selct .... from Table_kanon inner join base_rosta on Table_kanon.nosanad=base_rosta.no_sanad where Table_kanon.NoSanad=100

mortezasar
سه شنبه 03 اردیبهشت 1392, 00:13 صبح
دیوونه شدم بازم 4 تا بر می گردونه:عصبانی++:

aliasghar2
سه شنبه 03 اردیبهشت 1392, 00:18 صبح
لطفا اسکریپت دوتا جدول رو بده ببینم چشه

mortezasar
سه شنبه 03 اردیبهشت 1392, 00:19 صبح
کوئری درسته وقتی توی dt ریخته میشه از توی local برنامه رو تست کردم توی دیتا تیبل دو سطر بود فقط اما توی گزارش 4 تا

mortezasar
سه شنبه 03 اردیبهشت 1392, 00:21 صبح
میشه بگین چه جوری اسکریپت رو باید بهت بدم شرمنده یاد ندارم یه توضیح بده

aliasghar2
سه شنبه 03 اردیبهشت 1392, 00:24 صبح
روی بانکت کلیک راست می کنی task\generateScripte بقیش دیگه ویزارده
فقط اخرش باید روی advanced کلیک کنی و توی یکی از گزینه ها که schema هست رو به schema and Data تغییر بدی

mortezasar
سه شنبه 03 اردیبهشت 1392, 00:33 صبح
شرمنده یکم دیر شد دوست عزیز واست اپلود کردم اینم آدرسش
http://www.mediafire.com/?2y2flvunlyxuvrj

aliasghar2
سه شنبه 03 اردیبهشت 1392, 00:57 صبح
این کودری رو توی sql و ببین چنتا میاره
ُselect * from Table_kanon inner joinbase_rosta on Table_kanon.NoSanad =base_rosta.Nosanad where Table_kanon.NoSanad=1020

mortezasar
سه شنبه 03 اردیبهشت 1392, 01:08 صبح
خطا میده تو متن کوئری

mortezasar
سه شنبه 03 اردیبهشت 1392, 01:10 صبح
من کوئری رو با دیتا تیبل چک کردم دو تا سطر بیشتر نمیداد گه درست هم بود

mortezasar
سه شنبه 03 اردیبهشت 1392, 01:10 صبح
له نظرت چه شه این برنامه ما :گیج::عصبانی::عصبانی++:

mortezasar
سه شنبه 03 اردیبهشت 1392, 01:14 صبح
کوئری رو اینجوری نوشتم اینم متن خطاش


"ُselect * from Table_kanon inner join base_rosta on Table_kanon.NoSanad = base_rosta.no_sanad where Table_kanon.NoSanad=1020"


Msg 2812, Level 16, State 62, Line 1
Could not find stored procedure 'select * from Table_kanon inner join base_rosta on Table_kanon.NoSanad = base_rosta.no_sanad where Table_kanon.NoSanad=1020'.

Msg 28102, Level 16, State 1, Line 1
Batch execution is terminated because of debugger request.
Msg 2812, Level 16, State 62, Line 1
Could not find stored procedure 'ُselect * from Table_kanon inner join base_rosta on Table_kanon.NoSanad = base_rosta.no_sanad where Table_kanon.NoSanad=1020'.
Query was cancelled by user.

mortezasar
سه شنبه 03 اردیبهشت 1392, 12:19 عصر
دوستان کسی توضیحی نداره دیگه اعصابم synyax error میده !

veniz2008
سه شنبه 03 اردیبهشت 1392, 16:34 عصر
این پست مشکل شما رو حل میکنه:
http://barnamenevis.org/showthread.php?356961-%D9%85%D8%B4%DA%A9%D9%84-%D8%A8%D8%A7-%D9%81%DB%8C%D9%84%D8%AF-%D9%87%D8%A7%DB%8C-%D8%B2%DB%8C%D8%A7%D8%AF-%D8%AF%D8%B1-%DA%AF%D8%B2%D8%A7%D8%B1%D8%B4-%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A8%D8%A7-%DA%A9%D8%B1%DB%8C%D8%B3%D8%AA%D8%A7%D9%84&highlight=%DA%A9%D8%B1%DB%8C%D8%B3%D8%AA%D8%A7%D9% 84
قبلا کامل در این پست توضیح دادم و یک برنامه هم گذاشتم که میتونه بهتون کمک کنه.
برای اضافه کردن sp خودتون به دیتاست هم بصورت زیر عمل کنید :
یک dataset به پروژه اضافه کنید. (داخل ویژوال مسیر زیر رو دنبال کنید Data---> Add New dataSource ---->DataBase ).
بعد از ساخن دیتاست و در پنجره server explorer باید sp خودتون رو به داخلش drag کنید. یک فایل crystal report به پروژه اضافه کنید و دیتاست خودتون رو که شامل اون sp هست بهش معرفی کنید. بقیه مراحل عینا مثل حالت معمولی هست که با کریستال کار میکنید

mortezasar
چهارشنبه 04 اردیبهشت 1392, 12:34 عصر
سلام متاسفانه با sp هم حل نشد دیگه واقعا موندم

majjjj
چهارشنبه 04 اردیبهشت 1392, 14:07 عصر
این رو یک نگاه بکنید

SqlConnection con = new SqlConnection("Data Source=ipserverton;Initial Catalog=databasenameton;Persist Security Info=True;User ID=sa;Password=passwordshoma");
SqlCommand cmd = new SqlCommand("name_sp_shoma ", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);

ReportDocument RepDoc = new ReportDocument();
string strreportpath = Application.StartupPath + @"\rptname_shoma.rpt";
RepDoc.Load(strreportpath);
RepDoc.SetDataSource(ds.Tables[0]);
RepDoc.VerifyDatabase();
crystalReportViewer1.ReportSource = RepDoc;