PDA

View Full Version : گزارش گیری از دو جدول همزام که به هم هیچ ربطی ندارند



ebtekar
سه شنبه 13 فروردین 1387, 21:40 عصر
یه برنامه بعد از کلیک شدن روی لیست ویو با توجو به ست شدن یک فیلد از جدول مورد نظر گزارش می گیره حالا سوال اینه من می خوام اطلاعات یه جدول دیگه هم به اون اضافه بشه که اون اگه به صورت استاتیک باشه بهتره یعنی نیازی به ست شدن نداره ولی موقع گزاش گیری اصلا انگار من اون جدول رو اضافه نکردم و دیده نمیشه

این کد رو هم من استفاده کردم تو بانک اکسس جواب داده و لی با اسکیو ال جواب نمی ده



string selectitem = listView1.Items[listView1.FocusedItem.Index].SubItems[1].Text;
//تهیه گزارش پرینت
SqlConnection objConnection = newSqlConnection("Persist Security Info=False; server=exam; database=waranty; Integrated Security=True;");
SqlDataAdapter objDataAdapter = newSqlDataAdapter();
DataSet objDataSet = newDataSet();
objDataAdapter.SelectCommand = newSqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = "SELECT sabt_kala.no_kala,sabt_kala.serial,sabt_kala.mosha khasat,sabt_kala.daryaftaz,sabt_kala.waranty,sabt_ kala.daryaft_date,sabt_kala.moshkel,sabt_kala.tozi hat,user_t.company_name,user_t.zir1,user_t.zir2 FROM sabt_kala,user_t where serial like '" + selectitem + "%'";
objDataAdapter.SelectCommand.CommandType = CommandType.Text;
objConnection.Open();
// بار گذاری جدول در دیتا آداپتور
objDataAdapter.Fill(objDataSet, "sabt_kala,user_t");
objConnection.Close();
//********************************************
frm_sabt_report sabt_report = newfrm_sabt_report();
crystalReport11.SetDataSource(objDataSet.Tables["sabt_kala,user_t"].DefaultView);
sabt_report.crystalReportViewer1.ReportSource = crystalReport11;
sabt_report.ShowDialog();


من این کار رو برای زیر نویس فاکتور و نام شرکت می خوام انجام بدم که کار بر می تونه اون رو در فرم دیگه ای تغییر بده ولی مشکلم الان اینه که نمی تونم تو گزارشم بیارمش

gdevnb
سه شنبه 13 فروردین 1387, 21:49 عصر
فکر کنم اگه یه ریلیشن هم تو کدت بنویسی و اونها رو بهم ربط بدی مشکلت حل میشه

ebtekar
سه شنبه 13 فروردین 1387, 22:13 عصر
بیشتر راهنماییم کنید ممنون می شم کتاب sql ندارم فعلا زیادم sql وارد نیستم

gdevnb
سه شنبه 13 فروردین 1387, 23:24 عصر
ربطی به sql نداره منظورم دیتا ریلیشن Ado.net بود



DataRelation drl = new DataRelation("RelationName","ParentColumn","ChildColumn");
dataset1.Relations.Add(drl) ;

choobin84
چهارشنبه 14 فروردین 1387, 01:19 صبح
فکر کنم اگه یه ریلیشن هم تو کدت بنویسی و اونها رو بهم ربط بدی مشکلت حل میشه
می فرمایند ، جداول ربطی به هم ندارند.

choobin84
چهارشنبه 14 فروردین 1387, 01:32 صبح
من این کار رو برای زیر نویس فاکتور و نام شرکت می خوام انجام بدم که کار بر می تونه اون رو در فرم دیگه ای تغییر بده ولی مشکلم الان اینه که نمی تونم تو گزارشم بیارمش
ابدا نیازی به کد بالا نیست.
این کار را با ارسال پارامتر به گزارشتان انجام دهید.
نمونه برنامه (http://barnamenevis.org/forum/showpost.php?p=425640&postcount=36)

vahiddastitash
چهارشنبه 14 فروردین 1387, 02:08 صبح
سلام من یه سوال در مورد datagrid داشتم با این اوصاف که چطور در گرید میشه combo هم داشت مثل subform در access با تشکر.

ebtekar
چهارشنبه 14 فروردین 1387, 15:52 عصر
سلام من یه سوال در مورد datagrid داشتم با این اوصاف که چطور در گرید میشه combo هم داشت مثل subform در access با تشکر.

دوست عزیز سرچ کنی زیاد پیدا می کنی

ebtekar
چهارشنبه 14 فروردین 1387, 22:39 عصر
ابدا نیازی به کد بالا نیست.
این کار را با ارسال پارامتر به گزارشتان انجام دهید.
نمونه برنامه (http://barnamenevis.org/forum/showpost.php?p=425640&postcount=36)
من کد شما رو نگاه کردم ولی اون چیزی رو که من می خوام توش نتونستم پیدا کنم این کد تو اکسس جواب می ده ولی تو اسکیو ال جواب نمیده نمی دونم مشکل از چی هستش راهنماییم کنید لطفا

choobin84
چهارشنبه 14 فروردین 1387, 23:06 عصر
من کد شما رو نگاه کردم ولی اون چیزی رو که من می خوام توش نتونستم پیدا کنم این کد تو اکسس جواب می ده ولی تو اسکیو ال جواب نمیده نمی دونم مشکل از چی هستش راهنماییم کنید لطفا

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

ebtekar
چهارشنبه 14 فروردین 1387, 23:08 عصر
آقا من فهمیدم مشکل از کجاست ولی نمیتونم حلش کنم من یه شرط برای کامانتم گذاشتم که در صورت مساوی بودن serial با فیلد اول دیتا ویو اطلاعات اون جدول بار گذاری بشه حالا چون تو جدول دوم serial وجود نداره پس نمی تونه با اطلاعات جدول دوم رو نشون بده بخاطر همین من تو گزارشم جدول اول میاد ولی جدول دوم نمیاد تو اکسس اینطور نبود

حالا اگه روش دیگه ای برای select کردن وجود داره که هستش ولی من بلد نیسم لطف کنید تا منم استفاده کنم

سار
پنج شنبه 15 فروردین 1387, 09:56 صبح
من هنوز یک چیز رو درک نکردم و اون اینکه چطور دو جدولی که به هم ارتباطی ندارن رو میخوای بینشون Relation برقرار کنی!!!

این ارتباط بر مبنای کدام فیلدها هست؟

choobin84
پنج شنبه 15 فروردین 1387, 12:24 عصر
فایل گزارشتون رو با کریستال ریپورت باز کنید.
از منوی view ‌ گزینه field Explorer رو انتخاب کنید . در پنجره field explorer گزینه parameter fields وجود دارد روی آن راست کلیک کنید و سپس new را بزنید.
company_name را در باکس name وارد کنید . Ok رو بزنید.
company_name رو روی گزارشتون بذارید و تغییرات رو ذخیره کنید.
در محیط کد نویسی اونجایی که می خواهید گزارش رو چاپ کنید این تیکه کد ها رو بنویسید:


ParameterFields paramFields=new ParameterFields();
ParameterField paramField1=new ParameterField();
ParameterDiscreteValue discreteVal1=new ParameterDiscreteValue();


paramField1.ParameterFieldName = " company_name ";
discreteVal1.Value = "برنامه نویس";
paramField1.CurrentValues.Add(discreteVal1);
paramFields.Add(paramField1);


datatable رو هم فقط از جدول اولتون پر کنید.
.
.
.

گزارشتون رو صدا بزنید.


کلاس reports موجود در برنامه ای که لینک گذاشتم هم همین کار رو انجام میده

choobin84
پنج شنبه 15 فروردین 1387, 12:27 عصر
من هنوز یک چیز رو درک نکردم و اون اینکه چطور دو جدولی که به هم ارتباطی ندارن رو میخوای بینشون Relation برقرار کنی!!!

این ارتباط بر مبنای کدام فیلدها هست؟

می توان چند تا جدول رو که با هم هیچ فیلد مشترکی ندارند الحاق کرد.
الحاق(پیوند) در این جود مواقع از نوع کاملش هست و مستلزم اینه که به ازای هر رکود از جدول اول ، رکورد های جدول دوم پیوند بخورند.
یه چیزی توی مایه های ضرب کارتزین.

این روش به هیچ عنوان پیشنهاد نمی شود ، ضرب کارتزین جداول سربار زیادی برای سیستم ایجاد می کند.

پیوند جداولی که فیلد مشترکی دارند، سربارشان کمتر است.