PDA

View Full Version : تعيين بهترين حالت جستجو براي چند پارامتر



csharpprogramer88
شنبه 24 بهمن 1388, 20:48 عصر
سلام
در فرمي براي جستجو 5 پارامتر دارم و مي خواهم جستجو طوري باشد كه كاربر بتواند به طريقه هاي زير جستجو كند :
يا فقط يكي از پارامترها را وارد كند
يا تمام اين پارامترها را وارد كند
يا دو، سه يا چهار
بطور خلاصه كاربر هر يك از پارامترها را وارد كرد خروجي داشته باشد اما خرجي صحيح .
دوستان لطف كنيد راهنمايي كنيد تا بهترين حالت جستجو را تعيين كنم

shahab_ss
شنبه 24 بهمن 1388, 21:19 عصر
شما میتونی بر اساس مقادیر وارد شده توسط کاربر دستور SELECT رو بسازی و قسمت WHERE رو با هم AND کنی.

مثلاً فرض کنیم که شما فیلد های : FirstName , LastName , Address رو داشته باشی و 3 تا TextBox برای گرفتن اطلاعات داشته باشی حالا میتونی چک کنی که هرکدوم از اینها مقدار داشت ,برای اون فیلد شرط رو به Select اضافه کنی :

چیزی شبیه به این :

int intParameterCounter =0;
String strSql = "Select * from Tbl1";

if(txtFirstName.Text.Lenght() >0 || txtLastName.Text.lenght() >0 ||txtAddress.Text.lenght() >0)
strSql+="Where ";

if(!String.IsNullOrEmpty(txtFirstName.Text))
{
if(intParameterCounter>0)
strSql+="And ";
strSql+="FirstName = "+txtFirstName.text;

intParameterCounter++;
}

if(!String.IsNullOrEmpty(txtLastName.Text))
{
if(intParameterCounter>0)
strSql+="And ";

strSql+="LastName = "+txtLastName.text;
intParameterCounter++;
}

if(!String.IsNullOrEmpty(txtAddress.Text))
{
if(intParameterCounter>0)
strSql+="And ";

strSql+="Address = "+txtLAddress.text;
intParameterCounter++;
}

csharpprogramer88
شنبه 24 بهمن 1388, 21:46 عصر
intParameterCounter
براي چيه چه معني داره كه تعداد پارامترها را بشماريم

دوست عزيز اگر امكانش هست بيشتر توضيح بدين اگر هم كد دارين آپلود كنيد
باتشكر

shahab_ss
شنبه 24 بهمن 1388, 21:56 عصر
دوست عزیز ،شما در نهایت باید یک دستور Select داشته باشی که شامل پارامتر های مورد نظرت باشه. دیگه روش ساخت این Select بسته به سلیقه خودت میتونه به هر شکلی پیاده سازی بشه.

اما در مورد "intParameterCounter" , اگر بدون شمارش تعداد پارامتر ها گزینه "And" رو به Select اضافه کنید رشته مناسبی بدست نمیاد.برای همین با استفاده از یک شمارنده میتونید در صورت نیاز And رو اضافه کنید.

csharpprogramer88
شنبه 24 بهمن 1388, 23:48 عصر
if (!(txtid.Text == "") || !(txtonvan.Text == ""))
{
sqlselect = "select * from serinamayeshgah where id='" + txtid.Text + "' or onvan like'%"+txtonvan.Text+"%'";


اين كد را براي دو پارامتر نوشتم ، اگر كاربر هر دو پارامتر را وارد كرده باشد خروجي درست مي دهد ، اگر عنوان را به تنهايي وارد كند باز هم در ست خروجي مي دهد ولي اگر به تنهايي كد را وارد كند خروجي درست نمي دهد و كل اطلاعات جدول چاپ مي شود ضمنا فيلد كد از نوع int ميباشد

csharpprogramer88
شنبه 24 بهمن 1388, 23:49 عصر
if (!(txtid.Text == "") || !(txtonvan.Text == ""))
{
sqlselect = "select * from serinamayeshgah where id='" + txtid.Text + "' or onvan like'%"+txtonvan.Text+"%'";


اين كد را براي دو پارامتر نوشتم ، اگر كاربر هر دو پارامتر را وارد كرده باشد خروجي درست مي دهد ، اگر عنوان را به تنهايي وارد كند باز هم در ست خروجي مي دهد ولي اگر به تنهايي كد را وارد كند خروجي درست نمي دهد و كل اطلاعات جدول چاپ مي شود ضمنا فيلد كد از نوع int ميباشد

محمد سلیم آبادی
یک شنبه 25 بهمن 1388, 04:17 صبح
سلام
در فرمی برای جستجو 5 پارامتر دارم و می خواهم جستجو طوری باشد که کاربر بتواند به طریقه های زیر جستجو کند :
یا فقط یکی از پارامترها را وارد کند
یا تمام این پارامترها را وارد کند
یا دو، سه یا چهار
بطور خلاصه کاربر هر یک از پارامترها را وارد کرد خروجی داشته باشد اما خرجی صحیح .
دوستان لطف کنید راهنمایی کنید تا بهترین حالت جستجو را تعیین کنم
http://www.sommarskog.se/dyn-search-2005.html#introduction

csharpprogramer88
سه شنبه 27 بهمن 1388, 21:55 عصر
دوستان من برنامه نويسيم زياد خوب نيست خواهشا كمك كنين

csharpprogramer88
یک شنبه 02 اسفند 1388, 17:19 عصر
آقا تورو خدا اگه يكي نمونه داره رو كنه فوريه

mahdi87_gh
یک شنبه 02 اسفند 1388, 19:53 عصر
روشی که آقای shahab_ss گفتن روش خوبیه.میتونی این روش رو هم امتحان کنی

string conditions = "";
string selcommand = "Select * from Tablename";

if (txt1.Text.Trim() != string.Empty)
conditions = " field1=" + txt1.Text.Trim();

if (txt2.Text.Trim() != string.Empty)
{
if (conditions == string.Empty)
conditions = " field2=" + txt2.Text.Trim();
else
conditions += " And field2=" + txt2.Text.Trim();
}
...
if (conditions == string.Empty) selcommand+=" WHERE "+conditions;

csharpprogramer88
یک شنبه 02 اسفند 1388, 21:07 عصر
سلام
كدي كه خودم نوشتم با 4 تا پارامتر خوب كار مي كنه و خروجي هم درسته حالا اگر يكي از پارامترها حذف شود همه اطلاعات جدول چاپ مي شود در صورتيكه هيچكدام از مقادير جدول null نيستند اگر يكي از پارامترها كاراكتري باشد كه در آن فيلد وجود نداشته باشد هم خروجي درست است .

من ميخوام طوري باشه كه اگر كاربر همه را وارد كرد خروجي درست بدهد اگر يكي را هم وارد كرد جستجو براساس آن پارامتر باشد اگر دو يا سه تا جستجو براساس آن دو يا سه پارامتر باشد

دوستان خواهشا كمك كنيد فوريه

if (!(txtcode.Text == "")||!(cmbjensiat.Text=="")||!(cmbmadrak.Text=="")||!(cmbcity.Text=="")||!(cmbcity.Text==""))
{
sqlselect = "select * from webloger where id='" + txtcode.Text + "' or jensiat like'%" + cmbjensiat.Text + "%' or madrak like'%"+cmbmadrak.Text+"%' or city='"+cmbcity.Text+"'";

weblog.weblog_report frm = new weblog_report();
frm.Show();
}

darkprince
دوشنبه 03 اسفند 1388, 01:41 صبح
دوست عزیز منم تو برنامه ای که دارم مینویسم به این مشکل بر خوردم مشکل خودم رو اینجوری حل کردم کدش رو برات میذارم خیلی ساده و قابل فهمه

string Search="";
if(chk_Oid.Checked)
if (Search=="")
Search = Search+" oid='" + txt_Oid.Text + "'";
else
Search = Search + "and oid='" + txt_Oid.Text + "'";
if(chk_SaleLandedType.Checked)
if (Search=="")
Search = Search + " type1='" + cmbType1.SelectedIndex + "'and type2='" + cmbType2.SelectedIndex + "'";
else
Search = Search + "and type1='" + cmbType1.SelectedIndex + "'and type2='" + cmbType2.SelectedIndex + "'";
if(chk_Price.Checked)
if (Search == "")
Search=Search+" price='"+txt_Price.Text+"'";
else
Search = Search + "and price='" + txt_Price.Text + "'";
if(chk_Area.Checked)
if (Search == "")
Search = Search + " area='" + txt_Area.Text + "'";
else
Search = Search + "and area='" + txt_Area.Text + "'";
if(chk_Room.Checked)
if (Search == "")
Search = Search + " room='" + txt_Room.Text + "'";
else
Search = Search + "and room='" + txt_Room.Text + "'";
objDataView.RowFilter = Search;

توجه داشته باش که من چندتا چک باکس گذاشتم که توسط اونها تکست باکسهان فعال یا غیر فعال میشن، این کد را باید تو دگمه جستجو قرار بدی البته این در صورتی است که جستجو رو توسط dataview و rowfilter انجام بدی

Warrior
دوشنبه 03 اسفند 1388, 16:04 عصر
سلام دوستان,

می خواستم بدانم چطوری می توانم هــــــــــــــــــــر نوع اطلاعاتی را خواستم به صورت پویا جستجو کنم؟!
یعنی شاید من 10 textBox داشته باشم, 10 * 10 برابر 100 حالت مختلف می شود!!!
آیا باید برای تمامی این 100 حالت تک تک کد بنویسم؟!

راه بهتری وجود ندارد؟

ممنونم

csharpprogramer88
دوشنبه 03 اسفند 1388, 19:17 عصر
سلام دوستان,

می خواستم بدانم چطوری می توانم هــــــــــــــــــــر نوع اطلاعاتی را خواستم به صورت پویا جستجو کنم؟!
یعنی شاید من 10 textBox داشته باشم, 10 * 10 برابر 100 حالت مختلف می شود!!!
آیا باید برای تمامی این 100 حالت تک تک کد بنویسم؟!

راه بهتری وجود ندارد؟

ممنونم

دوست عزيز سوال منم دقيقا همينه ولي با توضيحات دوستان متوجه نمي شم

Warrior
دوشنبه 03 اسفند 1388, 19:23 عصر
آقا من متوجه شدم :خجالت:

داخل دانشگاه یک برنامه هم نوشتم که حتی حالت های OR و AND را هم می توان برایش انتخاب کرد یا حتی Like را.
فقط یک سوال.
دستورات دیگری که بشود آن ها را درود برنامه استفاده کرد مثل همین AND OR و Like چه چیز هایی هستند؟

برنامه خیلی توپ شد و استاد خیلی حال کرد :کف:

ممنونم

csharpprogramer88
دوشنبه 03 اسفند 1388, 19:47 عصر
پس لطف كن يه پروژه درست و درمان براي منم بفرست تا از تجربه شما هم استفاده كنيم تازه توي اين تاپيك بچه ها مي تونن دانلود بكنن من اون كدي را كه گذاشتم جوابش را گرفتم در اون از and وor و like هم استفاده كردم ولي نظرم راجلب نكرد

Warrior
دوشنبه 03 اسفند 1388, 20:56 عصر
متاسفانه برنامه روی کامپیوتر سایت دانشگاه نوشته شد و وقتی سیستم را برای کاری restart کردم متوجه شدم که تمامی تغییرات از بین رفته و انگار تازه Windows را با نرم افزار هایش نصب کرده اند!!!(DeepFreeze!!)

ولی از کد آخرین پست صفحه ی قبل استفاده کردم ولی کمی کامل ترش کردم.

Jozef
پنج شنبه 13 اسفند 1388, 17:37 عصر
سلام دوستان
یه نگاه به برنامه زیر بنداز
اگه همونه که مد نظرته بگو تا کدشو بذارم
قسمت فیلترش 4-5 خط کد داره

csharpprogramer88
پنج شنبه 13 اسفند 1388, 22:06 عصر
سلام دوستان
یه نگاه به برنامه زیر بنداز
اگه همونه که مد نظرته بگو تا کدشو بذارم
قسمت فیلترش 4-5 خط کد داره

دوست من تشكر از اينكه مثال فرستادي اما اين ظاهرا يك فايل اجرايي دلفي هست و من روسيستمم دلفي نصب نيست و هنگام اجرا استاديو به اون گير مي ده و اجرا نميشه تازه من دلفي بلد نيستم بالاخره زحمت كشيدي اگر كد سي شارپ داري بفرست يا لااقل بگو چطور اين فايل را روي سيستم خودم اجرا كنم

hakelberfin
جمعه 14 اسفند 1388, 02:13 صبح
این کد همون کاری که شما میخواین رو انجام میده

Jozef
جمعه 14 اسفند 1388, 10:20 صبح
اوه اوه
شرمنده
حواسم نبود :خجالت:
منم عکس شما زیاد سی شارپ کار نکردم
آماده میکنم و براتون میفرستم
الان نمیتونم

csharpprogramer88
جمعه 14 اسفند 1388, 17:50 عصر
دوست من تا جايي كه امكانش هست زرودتر با تشكر

Jozef
جمعه 14 اسفند 1388, 22:03 عصر
سلام دوست عزیز
اون روشی که تو برنامه قبلی بود به این صورته که شما با وارد کردن عبارت رو تمام فیلدها
جستجو انجام میداد. به نوبه خودش روش خوبیه.
اما کل تاپیک رو خوندم و متوجه نیازتون شدم. یه قطعه کد دلفی و یه عکس از نمونه فرمم
گذاشتم. فکر کنم مشکلتون رو حل کنه.قسمت های اضافی رو حذف کردم.یه روش ساده و
خوب.
توضیح خواستین خبر بدین.
دوستانی که براشون مفید بود، یه تشکر بزنن روشن شیم.:چشمک::لبخند: