سلام دوستان این دستور فیلتر رو چطور بنویسم :
انتخاب کن اسامی رو که برابر با مقدار texbox1 هست به طوری که تاریخ بین دو زمان مورد نظر date1 و date2 باشد
سلام دوستان این دستور فیلتر رو چطور بنویسم :
انتخاب کن اسامی رو که برابر با مقدار texbox1 هست به طوری که تاریخ بین دو زمان مورد نظر date1 و date2 باشد
من تو یه پروژه از این استفاده کردم خودم معتقدم بهینه نیست :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();
}
از Quary زیر استفاده کن :
SELECT * FROM TableName Where FiledName = textBox1 BETWEEN date1 AND date2
من چون میخوام این فیلتر رو توی textchanged بنویسم با این select جواب نداد
من فیلتر رو با دو شرط اینطوری مینویسم اما با سه شرط جواب نمیده راهنماییم کنیید!!!
string filterStr = string.Format("shomare LIKE '%{0}%' AND tarikh LIKE '%{1}%'", textBox1.Text, year+"/00/00");
moshBindingSource2.Filter = filterStr;
من خيلي به اين دستور نياز دارم
واقعا اینقدر سقخته
ممنون جناب bsng110 .
من هم نظر شما رو داشتم اما به این صورت جواب نمیده!! 3 تایی شرطا رو قبول نمیکنه.
من اصل ماجرا رو دوستان توضیح بدم .من با ورود به فرمم اطلاعات دیتا گرید رو با سالی که در فرم قبل تنظیم شده فیلتر میکنم
حالا یه تکست باکس دارم تو همین فرمم که وقتی توش تایپ میشه باید فلان اسم رو که داره نوشته میشه پیدا کنه .که خوب با فیلتر معمولی میشه اما چون باید شرط اینکه اون اسم در بین فقط اطلاعات سالی که قبلا مشخص شده باشه نمیدونم چطور اینکار رو بکنم
هم اسم رو بیاره هم حواسش باشه که این اسم از توی اطلاعات سالای دیگه نباشه !!
نمیدونم اگه میشد همون فیلتر اولیه دیتاگرید رو بر اساس سال حفظ کرد و روی اون یه فیلتر بااسم گذاشت حل میشه اما فکر نمیکنم همچین چیزی باشه ؟؟؟؟؟؟؟
دستور روبه رو که قبل هم دوستان به آن اشاره کرده اند من دراکثر برنامه های مشابه استفاده کرده و نتیجه گرفته ام :
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