PDA

View Full Version : سوال: نوشتن یک جستجوی خاص برای گزارش کلی



ma.rad
پنج شنبه 17 آذر 1390, 20:03 عصر
سلام دوستان
جدیدا یه برنامه ای می نویسیم ، مشتری میخواد یه گزازش از همه فید ها داشته باشه به صورت تعدادی
مثلا کمبوباکس مدرک تحصیلی : تعداد بی سواد ها تعداد سیکل ها تعداددیپلم ها .........
یا کمبو باکس تاهل : تعداد مجردها تعداد متاهل ها
البته بگم تو جدول مقدار عددی اینکس ذخیره نشده بلکه آیتم ها ذخیره شدن
حالا حساب کنید 12 تاکمبوباکس که هرکدوم 2 تا 7 ایتم دارن بعلاوه 4 تا فیلد دیگه
نوشتن جستجو برای این تعداد ایتم خیلی زیاد میشه وترکیبی هم نمی شه نوشتش
دوستان چه راهی رو پیشنهاد می کنن؟

system32
پنج شنبه 17 آذر 1390, 20:40 عصر
کافیه که رشته جستجو را به این صورت بسازی که بیایید و ببنی آیا کاربر فیلد مورد نظر را برای جستجو انتخاب کرده یا نه اگر انتخاب کرده به رشته جستجوی خود شرط مورد نظر را اضافه کن. به مثال زیر توجه کنید:

string query="select * from person where sta=1";
if (textbox1text!=string.empty)
{
query=query+" and name=@p1";
}
if (textbox2.text!=strng.empty)
{
query=query+" and family=@p2";
}
و الی آخر در نهایت که رشته جستجوی شما ساخته شد رشته را به کلاس کامند خود ارسال کنید تا دستور شما اجرا گردد. تنها نکته ای که می ماند این است که باید همیشه یه شرط درست در عبارت where داشته باشید که اگر هیچ یک از تکست باکس ها تکمیل نشده بو جمله سلکت شما ناقص از آب درنیادد. موفق باشید.

ma.rad
پنج شنبه 17 آذر 1390, 20:53 عصر
نه عزیز دل این روش مال زمانی که کاربر می خواد مثلا براساس یک پارامتر کمبوباکس جستجو کنه-من توجستجوی ترکیبی مشکلی ندارم
مشکل ما این نیست من میخوام آمار کلی بدون دگیر کردن کاربر داشته باشیم
بگه چند تا مجرد داریم چند تا متاهل و.......................

ali_habibi1384
پنج شنبه 17 آذر 1390, 21:09 عصر
منم اوني كه دوستمون برداشت كرد از سوالتون فهميدم. ميشه واضحتر بگيد چي ميخوايد؟

ma.rad
پنج شنبه 17 آذر 1390, 21:54 عصر
جدول من 12 تا فیلد داره که چند تا پارامتره هستن-به طور مثال فیلد مدرک هفت گزینه داره بی سواد-ابتدایی-راهنمایی -سیکل-و.......
حالا من تو گزارشی که میخوام بگیرم باید با بگم چندتا بیسواد داریم چند تا ابتدایی چند تا راهنمایی
خوب راه حل اینه که برا هرکروم یه سرچ بنویسم select count(madrak) from tb where madrak="لیسانس"
با توجه به تعداد ایتم ها حدود 42 جستجو باید بنویسم
برای این مورد یه راه حل میخوام؟

rt3073
جمعه 18 آذر 1390, 17:24 عصر
خوب مگه نمیشه از group by استفاده کنی؟

select madrak,count(madrak) from tb GROUP BY madrak

reza_mostafavi63
جمعه 18 آذر 1390, 19:42 عصر
با foreach براي آيتم هاي ComboBox و تابع زير شايد بشه .(اگه درست متوجه سوال شده باشم)

private int Search1(string TableName, string Variable, string Value)
{
//Intalize Connection & DataTable
//.....
int Count = 0;
String Query = "select count(" + Variable + ") from " +
TableName + " where madrak='" + Value + "'";
//......
return (Count);
}

h-rafiee
جمعه 18 آذر 1390, 20:18 عصر
بهترین سرچی که می تونی ایجاد کنی اینه که از دستور Like استفاده کنی که هم به صورت تکی هم به صورت ترکیبی و هم در صورت خالی بودن تمامی محتوای بانک رو جستجو می کنه دستورش هم خیلی ساده است.

cmd.Commandtext = "select * from table where id like '%"+Textbox1.text+"%'and name like '%"+textbox2.text+"%'and group like '%"+combo.text+"%'";

ali_habibi1384
شنبه 19 آذر 1390, 01:27 صبح
چيزي كه من فهميدم ميخواي در همه حالتهاي مختلف اينها رو بشماري مثلا اگر مدرك 0 تا 6 باشه و تاهل 0 تا 1 ميشه 2*7=14 حالت جواب داره بنابراين شما ميتوني توي 2تا for تو در تو اونو پياده سازي كني و دستور كامندي كه ميخواي به اس كيوال پاس بدي رو هر بار بسازي اجرا كني و جوابشو برگردوني.
اگر فرض رو بر اين بگيريم كه كومبو مدرك 7 تا آيتم و كومبو تاهل 2 تا آيتم داشته باشه الگوريتمش حالت زير ميشه:


for (int i = 0;i<=6;i++)
for (int j = 0 ; j<=1;j++)
cmd="select count(*) from TableName where ( Madrak = " + combo1.itmems(i)+ "And" + combo2.items(j) + ")";

بقيش هم كه ديگه خودت ميدوني بايد داخل for آخري cmd رو به اس كيو ال بفرستي جواب بگيري و توي يك آرايه چند بعدي اونو ثبت كني براي چاپ گزارشت.

ma.rad
شنبه 19 آذر 1390, 15:23 عصر
خوب دوست عزیز اون and که بینشون گذاشتی کارو خراب می کنه مثلا یه بار تعداد متاهل هایی رو که مدرکشون لیسانسه می ده ویه بار مجرد هایی که لیسانس هستند در صورتی که من ترکیب شون رو نمی خوام من فقط لیسانسه ها رو میخوام و یا تعداد مجردها رو و...

ali_habibi1384
شنبه 19 آذر 1390, 15:53 عصر
and ها رو نذار for هات رو هم تو در تو ننويس هر for براي يك نوع داده اينجوري كه راحت تره