View Full Version : مشکل با گزارش
f_naderi
جمعه 20 شهریور 1388, 01:16 صبح
سلام
من یک گزارش با کریستال ریپورت در ست کردم که با زدن دکمه صورت حساب اطلاعات خرید یک مشتری که کدش درون تکست باکس وارد شده رو نشون بده ولی وقتی که این دکمه رو می زنم اطلاعات همه مشتریان رو به من نشون میده ، این هم کد مربوط به دکمه صورتحساب:
CrystalReport1 rpt = new CrystalReport1();
int code = Convert.ToInt32(textBox12.Text);
ds1.Clear();
ds1.Tables.Clear();
string strsql = "select moshtari.codemoshtari,moshtari.name,bedehkari,kala .name,forosh.date,sefaresh.tedadkala from sefaresh,moshtari,kala,forosh where kala.codekala=sefaresh.codekala and sefaresh.shomarehsefaresh=forosh.shomarehsefaresh and forosh.codemoshtari=moshtari.codemoshtari and moshtari.codemoshtari=" + code;
oleDbConnection1.Open();
da1 = new OleDbDataAdapter(strsql, oleDbConnection1);
da1.Fill(ds1);
oleDbConnection1.Close();
Form2 re = new Form2();
rpt.SetDataSource( ds1);
re.crystalReportViewer1.ReportSource = rpt;
re.ShowDialog();
sara.f
جمعه 20 شهریور 1388, 03:19 صبح
سلام.
من قبلا یک برنامه مثل این نوشتم،البته برنامه من کمی با شما متفاوت بود.
با این حال من الانم کدتون را توی برنامم گذاشتم و درست می گید، اطلاعات همه را نشون میده.
البته میخوام بدونم،شما crystalreport را در فرم 2 گذاشتید و textbox را در فرمی که اون دکمه گزارش گیری هست؟
اگر اینطوره، این کدی هست که من باهاش جواب گرفتم، البته با data base خودم، که فقط کافیه به جای دستور select ، دستور خودتو بذاری.
فقط یک فرق کوچیک اساسی با کد شما داره که اگه اونو رعایت کنی، جواب می گیری و میخوام ببینم خودت متوجه میشی، فرقش کجاست؟!!!! :لبخند:
CrystalReport1 rpt = newCrystalReport1();
int code = Convert.ToInt32(textBox12.Text);
ds1.Clear();
ds1.Tables.Clear();
string strsql = "select * from employee where code="+code;
objconn.Open();
SqlDataAdapter da1 = newSqlDataAdapter(strsql,objconn);
da1.Fill(ds1,"employee");
objconn.Close();
Form2 re = new Form2();
rpt.SetDataSource(ds1);
re.crystalReportViewer1.ReportSource = rpt;
re.ShowDialog();
اگر متوجه نشدی، سوال بپرس،من همین دورو برام.
پیروز باشی.:لبخندساده:
f_naderi
جمعه 20 شهریور 1388, 04:48 صبح
از جوابتون خیلی ممنونم
بله من کریستال ریپورت رو در فرم دوم و تکست باکس رو در فرم اول گذاشتم.
فرقش در موقع پر کردن دیتا آداپتره که شما اسم جدولتون رو نوشتید درسته؟ من هم بعد از دیدن کد شما این کار رو انجام دادم ولی به جای اسم جدول strsql نوشتم چون من اطلاعاتم رو دارم از چهار جدول میگیرم ولی با انجام این کار هم درست نشد ، به نظر شما باید چی می نوشتم؟
sara.f
جمعه 20 شهریور 1388, 05:18 صبح
از جوابتون خیلی ممنونم
بله من کریستال ریپورت رو در فرم دوم و تکست باکس رو در فرم اول گذاشتم.
فرقش در موقع پر کردن دیتا آداپتره که شما اسم جدولتون رو نوشتید درسته؟ من هم بعد از دیدن کد شما این کار رو انجام دادم ولی به جای اسم جدول strsql نوشتم چون من اطلاعاتم رو دارم از چهار جدول میگیرم ولی با انجام این کار هم درست نشد ، به نظر شما باید چی می نوشتم؟
سلام.
خب این که فکر نمی کنم درست باشه.
شما دستورsql را بنویسید و یک datatable یا dataset را با اطلاعات بدست آمده از دستورتون پر کنید و بعد اسم اون data table یا dataset را به report بدید.
تا هستم این کارو انجام بدید، که اگه سوالی بود بپرسید.
sara.f
جمعه 20 شهریور 1388, 05:23 صبح
آها،یه لحظه.
این بهتره که از همون data table استفاده کنید که دیگه اسم جدول هم نخواد، ببینید درست میشه؟
f_naderi
جمعه 20 شهریور 1388, 06:19 صبح
منظور شما اینه که اینطوری بنویسم:
CrystalReport1 rpt = new CrystalReport1();
int code = Convert.ToInt32(textBox12.Text);
ds1.Clear();
ds1.Tables.Clear();
string strsql = "select moshtari.codemoshtari,moshtari.name,bedehkari,kala .name,forosh.date,sefaresh.tedadkala from sefaresh,moshtari,kala,forosh where kala.codekala=sefaresh.codekala and sefaresh.shomarehsefaresh=forosh.shomarehsefaresh and forosh.codemoshtari=moshtari.codemoshtari and moshtari.codemoshtari=" + code;
oleDbConnection1.Open();
da1 = new OleDbDataAdapter(strsql, oleDbConnection1);
da1.Fill(ds1);
oleDbConnection1.Close();
DataTable dt = new DataTable();
dt = ds1.Tables[0];
Form2 re = new Form2();
rpt.SetDataSource(dt);
re.crystalReportViewer1.ReportSource = rpt;
re.ShowDialog();
این خطا رو میده:
cannot determine the queries necessary to get data for this report.
faild to open a rowswt.
زیرش هم یک آدرس می نویسه.
sara.f
جمعه 20 شهریور 1388, 06:36 صبح
منظور شما اینه که اینطوری بنویسم:
CrystalReport1 rpt = new CrystalReport1();
int code = Convert.ToInt32(textBox12.Text);
ds1.Clear();
ds1.Tables.Clear();
string strsql = "select moshtari.codemoshtari,moshtari.name,bedehkari,kala .name,forosh.date,sefaresh.tedadkala from sefaresh,moshtari,kala,forosh where kala.codekala=sefaresh.codekala and sefaresh.shomarehsefaresh=forosh.shomarehsefaresh and forosh.codemoshtari=moshtari.codemoshtari and moshtari.codemoshtari=" + code;
oleDbConnection1.Open();
da1 = new OleDbDataAdapter(strsql, oleDbConnection1);
da1.Fill(ds1);
oleDbConnection1.Close();
DataTable dt = new DataTable();
dt = ds1.Tables[0];
Form2 re = new Form2();
rpt.SetDataSource(dt);
re.crystalReportViewer1.ReportSource = rpt;
re.ShowDialog();
این خطا رو میده:
cannot determine the queries necessary to get data for this report.
faild to open a rowswt.
زیرش هم یک آدرس می نویسه.
نه دیگه نیاز نیست اینقدر بپیچونیش!
data table رو همون اول new کن و اینو به جای کد خودت بنویس
da1.Fill(dt);
دیگه نیازی نیست بریزی توی dataset و بعد بریزی توی data table،اصلا dataset را ولش کن.
فقط زودتر نتیجه را بگو.
sara.f
جمعه 20 شهریور 1388, 06:45 صبح
این خطا رو میده:
cannot determine the queries necessary to get data for this report.
faild to open a rowswt.
زیرش هم یک آدرس می نویسه.
در ضمن، این خطا میگه که: " نمی تونه ملزومات query ها رو تعیین کنه."
دستوری که واسه query نوشتی را توی sql server امتحان کردی؟ جواب میده؟
f_naderi
جمعه 20 شهریور 1388, 06:45 صبح
دوست عزیز باز هم همون اررور رو میده.
sara.f
جمعه 20 شهریور 1388, 06:55 صبح
دوست عزیز باز هم همون اررور رو میده.
دوست عزیز از اونجا که دیشبو نخوابیدم، الان دیگه فکرم کار نمیکنه.
تنها چیزی که می تونم الان بهت بگم اینه که دستور query را توی sql امتحان کن، شاید اشکال از اونه.
اگر نکته جدیدی به ذهنم رسید، کمکت می کنم.
یه راه حل بهتر برنامتو بذار تا نگاش کنم، اینطوری شاید اشکالشو بفهمم، چون بهت گفتم که؛ کدی که واست گذاشتم به من جواب میده.
f_naderi
جمعه 20 شهریور 1388, 06:58 صبح
من این بانک رو بااکسس درست کردم وتوی اکسس نمی دونم چطور باید query بنویسم .
ولی اگه فقط بنویسم که da.fill(ds1);
هیچ ارروری نمی گیره (ولی همه ی رکوردها رو نشون میده) و فقط وقتی که اطلاعات رو توی تیبل می ریزم و می خوام نشون بدم ایراد می گیره پس شاید sql درست باشه.
یک چیز دیگه اینکه من توی گزارشم اطلاعات سه تا فیلد رو گروه بندی میکنم البته نیازی به گروه بندی نبود ولی مجبور بودم چونکه می خواستم مثلا کد مشتری رو فقط یکبار نشون بده ولی وقتی گروه بندی نمی کردم به ازای هر رکورد کد مشتری رو می نوشت (از distinctاستفاده کردم ولی اررور می داد)
sara.f
جمعه 20 شهریور 1388, 13:10 عصر
من این بانک رو بااکسس درست کردم وتوی اکسس نمی دونم چطور باید query بنویسم .
ولی اگه فقط بنویسم که da.fill(ds1);
هیچ ارروری نمی گیره (ولی همه ی رکوردها رو نشون میده) و فقط وقتی که اطلاعات رو توی تیبل می ریزم و می خوام نشون بدم ایراد می گیره پس شاید sql درست باشه.
یک چیز دیگه اینکه من توی گزارشم اطلاعات سه تا فیلد رو گروه بندی میکنم البته نیازی به گروه بندی نبود ولی مجبور بودم چونکه می خواستم مثلا کد مشتری رو فقط یکبار نشون بده ولی وقتی گروه بندی نمی کردم به ازای هر رکورد کد مشتری رو می نوشت (از distinctاستفاده کردم ولی اررور می داد)
دوست عزیز،من تا حالا با Access کار نکردم.
ولی می دونم که distinct توی sql جواب میده و همچنین این کد شما با datatable هم در sql جواب داد.
حالا 2 راه می مونه:
1.یا این را با sql بنویسی و من را هم در جریان بذاری.
2.یا یکی از دوستانی که access بلده کمکت کنه.
f_naderi
جمعه 20 شهریور 1388, 17:00 عصر
برنامه ام حجمش خیلی زیاده ، اگه بذارمش و شما دانلود کنید از حجم دانلودتون گرفته میشه.
f_naderi
جمعه 20 شهریور 1388, 22:44 عصر
با عرض شرمندگی من بانکم رو اینجا قرار میدم چون حجمش کمه، کدهای زیر دکمه ی صورتحساب رو هم قبلا قرار دادم ، اگه میتونید شما خودتون یک فرم درست کنید و یک دکمه ی صورتحساب روی اون قرار بدید و یک فرم دیگه و یک کریستال ریپورت هم ایجاد کنید و ببینید که اشکال کار از کجاست(چون کدهای ثبت اطلاعات رو اینجا قرار ندادم اطلاعات رو لطفا دستی وارد کنید) ، داخل کریستال ریپورتم روی سه تا فیلد گروه بندی کردم
forosh.codemoshtari
moshtari.name
moshtari.bedehkari
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.