PDA

View Full Version : این دستور فیلتر رو چطور بنویسم :



User-os
جمعه 08 شهریور 1387, 16:07 عصر
سلام دوستان این دستور فیلتر رو چطور بنویسم :
انتخاب کن اسامی رو که برابر با مقدار texbox1 هست به طوری که تاریخ بین دو زمان مورد نظر date1 و date2 باشد

Zaparo
جمعه 08 شهریور 1387, 16:30 عصر
من تو یه پروژه از این استفاده کردم خودم معتقدم بهینه نیست :D
ولی خوب چون کاره ما Force بود باید سریع جمش میکردیم منم وقت زیادی نداشتم هر دمبیل شد



private string GenerateSQL()
{
int lower_limit = Convert.ToInt32(this.integerInput1.Value);
int upper_limit = Convert.ToInt32(this.integerInput2.Value);
int type_id = Convert.ToInt32(this.TypeIdCmb.SelectedValue.ToStr ing());
StringBuilder sb = new StringBuilder();
StringBuilder sbWhere = new StringBuilder();
sb.Append("SELECT * FROM TransactionLog ");
//sb.Append("WHERE (");
sbWhere.Append(this.integerInput1.Value.ToString() + " < ");
sbWhere.Append("impure_weight_in");
sbWhere.Append(") AND (");
sbWhere.Append("impure_weight_in");
sbWhere.Append(" < " + this.integerInput2.Value.ToString());
sbWhere.Append(") AND (");
sbWhere.Append(this.integerInput1.Value.ToString() + " < ");
sbWhere.Append("pure_weight_in");
sbWhere.Append(") AND (");
sbWhere.Append("pure_weight_in");
sbWhere.Append(" < " + this.integerInput2.Value.ToString());
sbWhere.Append(") AND (");
sbWhere.Append(this.integerInput1.Value.ToString() + " < ");
sbWhere.Append("impure_weight_out");
sbWhere.Append(") AND (");
sbWhere.Append("impure_weight_out");
sbWhere.Append(" < " + this.integerInput2.Value.ToString());
sbWhere.Append(") AND (");
sbWhere.Append(this.integerInput1.Value.ToString() + " < ");
sbWhere.Append("pure_weight_out");
sbWhere.Append(") AND (");
sbWhere.Append("pure_weight_out");
sbWhere.Append(" < " + this.integerInput2.Value.ToString());
sbWhere.Append(") AND (type_id = ");
sbWhere.Append(type_id.ToString());
if (first_comionet_in_dateDateTimePicker.Enabled == true)
{
sbWhere.Append(") AND ('");
sbWhere.Append(this.DateToString(this.first_comion et_in_dateDateTimePicker.SelectedDateTime) + "' < ");
sbWhere.Append(" first_comionet_in_date ");
}
if (last_comionet_in_dateDateTimePicker.Enabled == true)
{
sbWhere.Append(") AND ('");
sbWhere.Append(this.DateToString(this.first_comion et_in_dateDateTimePicker.SelectedDateTime) + "' < ");
sbWhere.Append(" last_comionet_in_date ");
}
if (first_comionet_out_dateDateTimePicker.Enabled == true)
{
sbWhere.Append(") AND (");
sbWhere.Append(" first_comionet_out_date < '");
sbWhere.Append(this.DateToString(this.first_comion et_in_dateDateTimePicker.SelectedDateTime));
sbWhere.Append("'");
}
if (last_comionet_out_dateDateTimePicker.Enabled == true)
{
sbWhere.Append(") AND (");
sbWhere.Append(" last_comionet_in_date < '");
sbWhere.Append(this.DateToString(this.first_comion et_in_dateDateTimePicker.SelectedDateTime));
sbWhere.Append("'");
}
if (this.textBox1.Text != string.Empty)
{
sbWhere.Append(") AND (");
sbWhere.Append("letter_reg_no ='");
sbWhere.Append(this.textBox1.Text);
sbWhere.Append("'");
}
if (this.textBox2.Text != string.Empty)
{
sbWhere.Append(") AND (");
sbWhere.Append("last_letter_no ='");
sbWhere.Append(this.textBox2.Text);
sbWhere.Append("'");
}
sbWhere.Append(")");
if (sbWhere.Length != 0 && sbWhere.ToString() != string.Empty)
{
sb.Append(" WHERE (");
sb.Append(sbWhere.ToString());
}
return sb.ToString();
}

bachebahal_1363
جمعه 08 شهریور 1387, 21:16 عصر
از Quary زیر استفاده کن :


SELECT * FROM TableName Where FiledName = textBox1 BETWEEN date1 AND date2

User-os
شنبه 09 شهریور 1387, 09:19 صبح
من چون میخوام این فیلتر رو توی textchanged بنویسم با این select جواب نداد

User-os
یک شنبه 10 شهریور 1387, 10:17 صبح
من فیلتر رو با دو شرط اینطوری مینویسم اما با سه شرط جواب نمیده راهنماییم کنیید!!!

string filterStr = string.Format("shomare LIKE '%{0}%' AND tarikh LIKE '%{1}%'", textBox1.Text, year+"/00/00");
moshBindingSource2.Filter = filterStr;

User-os
یک شنبه 10 شهریور 1387, 13:07 عصر
من خيلي به اين دستور نياز دارم

User-os
یک شنبه 10 شهریور 1387, 17:13 عصر
واقعا اینقدر سقخته

bsng110
یک شنبه 10 شهریور 1387, 20:45 عصر
من فیلتر رو با دو شرط اینطوری مینویسم اما با سه شرط جواب نمیده راهنماییم کنیید!!!

string filterStr = string.Format("shomare LIKE '%{0}%' AND tarikh LIKE '%{1}%'", textBox1.Text, year+"/00/00");
moshBindingSource2.Filter = filterStr;
هوالحکیم
سلام.
اگه اشتباه نکنم باید به این صورت بنویسی:


string strFilter = string.Format("shomare like '*{0}*' and tarikh >= {1} and tarikh <= {2}", textBox1.Text, firstYear, lastYear);

امیداورم که کار بده.
یا علی
حق نگهدارتون

User-os
یک شنبه 10 شهریور 1387, 22:56 عصر
ممنون جناب bsng110 .
من هم نظر شما رو داشتم اما به این صورت جواب نمیده!! 3 تایی شرطا رو قبول نمیکنه.

User-os
یک شنبه 10 شهریور 1387, 23:51 عصر
من اصل ماجرا رو دوستان توضیح بدم .من با ورود به فرمم اطلاعات دیتا گرید رو با سالی که در فرم قبل تنظیم شده فیلتر میکنم
حالا یه تکست باکس دارم تو همین فرمم که وقتی توش تایپ میشه باید فلان اسم رو که داره نوشته میشه پیدا کنه .که خوب با فیلتر معمولی میشه اما چون باید شرط اینکه اون اسم در بین فقط اطلاعات سالی که قبلا مشخص شده باشه نمیدونم چطور اینکار رو بکنم

هم اسم رو بیاره هم حواسش باشه که این اسم از توی اطلاعات سالای دیگه نباشه !!

نمیدونم اگه میشد همون فیلتر اولیه دیتاگرید رو بر اساس سال حفظ کرد و روی اون یه فیلتر بااسم گذاشت حل میشه اما فکر نمیکنم همچین چیزی باشه ؟؟؟؟؟؟؟

alireza1384
دوشنبه 11 شهریور 1387, 09:08 صبح
دستور روبه رو که قبل هم دوستان به آن اشاره کرده اند من دراکثر برنامه های مشابه استفاده کرده و نتیجه گرفته ام :
select * from TableName where SHOMARE like %textBox1.Text% and DATE between date1 and date2
دستورمذکور یک دستور استانداردو تست شده است که باید جواب دهد. درغیر این صورت می توانید از دستور طولانی تر زیر که البته غیربهینه نیز است استفاده کنید :

select * from TableName where TableID IN ( select TableID from TableName where date Between DATA1 AND DATE2 ) where shomare like TextBox1.text