PDA

View Full Version : جست و جوی پیشرفته



masoodz
جمعه 17 خرداد 1392, 11:15 صبح
با سلام
دویتان من یه برنامه ای دارم که از پایگاه داده اس کیو ال استفاده می کنه .
تو یه قسمت از برنامه نیاز به سرچ دارم که بصورت زیر باشه :
جست و جو بر اساس نام مشتری هستش . می خوام وقتی حرف حرف نام رو می نویسم نام هایی که با اون حروف مطابقت داره رو نشونم بده (توی دیتاگرید ویو نمایش می ده)
مثال : مثلا وقتی می خوام اسم مسعود رو سرچ کنم
مرحله اول : م رو وارد می کنم -- اسم هایی که اولشون م هست رو نشون بده مثل : مازیار - مسعود - مهیار و ...
مرحله دوم : س رو وارد کنم ---- داده هایی مثل : مستانه - مسعود و ...
و همینجوری پیش بره
ممنون از کمکتون
لازم به ذکره قبل اینکه تاپیک بزنم خیلی گشتم فقط یه مورد پیدا کردم که اون از dll استفاده کرده بود

fool66
جمعه 17 خرداد 1392, 11:25 صبح
جستجوووووووووووووو
http://barnamenevis.org/showthread.php?202586-%D8%AC%D8%B3%D8%AA-%D9%88-%D8%AC%D9%88%DB%8C-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87

keyvan_s89
جمعه 17 خرداد 1392, 11:26 صبح
تویه Text_change اینطوری بنویس.
SqlConnection objconn = new SqlConnection();
objconn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Dbname.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlCommand objcomm = new SqlCommand("select Name from Table_1", objconn);
objconn.Open();
SqlDataReader myReader = objcomm.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(myReader);
DataView dv = new DataView(dt);
dataGridView3.DataSource = dv;
dv.RowFilter = "Name LIKE'%" + textBox1.Text + "%'";

if (textBox1.Text == "")
{
dataGridView3.DataSource = "";
}

matin.soft
جمعه 17 خرداد 1392, 11:27 صبح
سلام دوست عزیز
شما از این دستور اس کیو ال استفاده کنید.
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
به جای پترن می تونید بر حسب نیاز از این موارد استفاده کنید :
اگه می خواهید جستجو بر حسب حرف اول باشه : %م
اگر می خواهید جستجو بر حسب حرف آخر باشد : م%
اگر می خواهید حرف دوم یا سوم و .. جستجو شود : %م_
توضیحات کامل مقاله رو می تونید در لینک زیر به زبان اصلی ببینید.
http://www.w3schools.com/sql/sql_like.asp
موفق باشید

hessam2003
جمعه 17 خرداد 1392, 11:34 صبح
سلام.
دوست عزیز شما رو یک راهنکایی کلی میکنم.
تمامی جستجو ها با دستور Like انجام میشه هر جور که فکر کنید میتونید با این دستور جستجو کنید این دستور را خوب یاد بگیرید.
به طور مثال:
select name from table1 where name like '--a' dar in dastor
این دستور تمام اسم هایی که حرف سومشون ش است را بر میگرداند.
مثل: abas , ......

masoodz
جمعه 17 خرداد 1392, 11:45 صبح
دوست من اینجا خوب باید حرف رو خودمون توی دستور بنویسیم
من نمی خوام اینجوری باشه
می خوام حرفی که توی تکست باکس می نویسه رو برام سرچ بزنه

سلام.
دوست عزیز شما رو یک راهنکایی کلی میکنم.
تمامی جستجو ها با دستور Like انجام میشه هر جور که فکر کنید میتونید با این دستور جستجو کنید این دستور را خوب یاد بگیرید.
به طور مثال:
select name from table1 where name like '--a' dar in dastor
این دستور تمام اسم هایی که حرف سومشون ش است را بر میگرداند.
مثل: abas , ......

mfungroup
جمعه 17 خرداد 1392, 11:46 صبح
اگه منظورت تحت وبه من با php و ajax توضیح میدم:
اول یه تکست باکس ایجاد می کنیم برای وارد کردن عبارت جستجو و یه لایه زیرش برای نمایش ریزالت ها و یه فایل php کنارش برای جستجو و یه بانک اصلاعاتی

مثلا اگه اسم فایل php باشه search.php تو فایل html یه همچین کدی رو وارد کن:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script language="javascript" type="text/javascript">
function dosearch(){
name = document.search_frm.name.value;
var xmlhttp;
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}
else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState!=4){
document.getElementById('result').innerHTML="";
}
else if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById('result').innerHTML=xmlhtt p.responseText;
}
}
xmlhttp.open("GET",'search.php?name='+name,true);
xmlhttp.send();
}
</script>
</head>

<body>
<form name="search_frm">
<input name="name" onkeyup="dosearch()" />
<div id="result"></div>
</form>
</body>
</html>
بعد تو فایل php یه همچین کدی رو باید وارد کنی:

$connection=mysql_connect('127.0.0.1','root','')or die(mysql_error());
@mysql_select_db('test',$connection)or die(mysql_error());
$name = trim($_GET['name']);
$query = "SELECT * FROM `owners` WHERE(`name` LIKE '%$name%')";
if($name != "" ){
if(mysql_num_rows(mysql_query($query)) < 1){
echo 'رکوردی یافت نشد';
}
else{
$num = mysql_num_rows(mysql_query($query));
for ( $a=1 ; $a <= $num ; $a++ ){
$b = $a - 1;
$name = mysql_fetch_array(mysql_query($query." LIMIT $b ,$num" , $connection) );
echo $name['name']."<br />";
}
}
}

masoodz
جمعه 17 خرداد 1392, 11:46 صبح
دوست من اینجا خوب باید حرف رو خودمون توی دستور بنویسیم
من نمی خوام اینجوری باشه
می خوام حرفی که توی تکست باکس می نویسه رو برام سرچ بزنه
سلام.
دوست عزیز شما رو یک راهنکایی کلی میکنم.
تمامی جستجو ها با دستور Like انجام میشه هر جور که فکر کنید میتونید با این دستور جستجو کنید این دستور را خوب یاد بگیرید.
به طور مثال:
select name from table1 where name like '--a' dar in dastor
این دستور تمام اسم هایی که حرف سومشون ش است را بر میگرداند.
مثل: abas , ......

fool66
جمعه 17 خرداد 1392, 11:53 صبح
تایپیکی که دادم رو نگاه می کردی
System.Data.SqlClient.SqlCommand SqlCommand = new System.Data.SqlClient.SqlCommand();
SqlCommand.Connection = SqlConnection;
SqlCommand.CommandType = CommandType.Text;
SqlCommand.CommandText = "SELECT id , name , fname , namepedar FROM ViewName WHERE id<>0 ";

if (this.textBox_name.Text.Trim().Length != 0)
SqlCommand.CommandText += "AND name LIKE(N'" + this.textBox_name.Text.Trim() + "%') ";

if(this.textBox_fname.Text != string.Empty)
{
SqlCommand.CommandText += " AND fname LIKE(N'" + this.textBox_fname.Text.Trim() + "%') ";
}
if (this.textBox_namepedar.Text != string.Empty)
{
SqlCommand.CommandText += " AND namepedar LIKE(N'" + this.textBox_namepedar.Text.Trim() + "%') ";
}

SqlCommand.CommandText += "ORDER BY fname";
DataTable dataTable = new DataTable();
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.SelectCommand = SqlCommand;
sqlDataAdapter.Fill(dataTable);
this.dataGridView1.DataSource = dataTable;

دوستمون هم جناب keyvan_s89 کدشون درسته

بقیه هم درسته فقط باید تکست باکس رو به دستور sql اضافه کنی

masoodz
جمعه 17 خرداد 1392, 12:01 عصر
دمت گرم داداش
تویه Text_change اینطوری بنویس.
SqlConnection objconn = new SqlConnection();
objconn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Dbname.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlCommand objcomm = new SqlCommand("select Name from Table_1", objconn);
objconn.Open();
SqlDataReader myReader = objcomm.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(myReader);
DataView dv = new DataView(dt);
dataGridView3.DataSource = dv;
dv.RowFilter = "Name LIKE'%" + textBox1.Text + "%'";

if (textBox1.Text == "")
{
dataGridView3.DataSource = "";
}

roolinjax
جمعه 17 خرداد 1392, 12:06 عصر
سلام جواب کیوان درسته دیگه
اینم یه روش دیگه
private void txtfamily_TextChanged(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("کانکشن استرینگ");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
con.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM tbl1 where name like '%" + txtname.Text + "%'",con);
da.SelectCommand = cmd;
da.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
dataGridView1.DataSource = ds.Tables[0];
else dataGridView1.DataSource = null;
}

masoodz
جمعه 17 خرداد 1392, 12:19 عصر
آره روش کیوان درسته فقط یه اشکال کوچولو داره . وقتی یه حرف رو وارد می کنی برای حرف بعدی ارور باز بودن کانکشن رو میده باید آخر دستورات connection.close() رو بزنیم

roolinjax
جمعه 17 خرداد 1392, 12:23 عصر
آره روش کیوان درسته فقط یه اشکال کوچولو داره . وقتی یه حرف رو وارد می کنی برای حرف بعدی ارور باز بودن کانکشن رو میده باید آخر دستورات connection.close() رو بزنیم

بله درسته اصلا به نظر من اگر لایه ای بنویسید که خیلی بهتره (روش دیگه اینه که همین کارایی که شما انجام دادین رو به شکل دیگه انجام بدین؛ به این صورت که توی فرم لود ارتباط رو برقرار کنید و موقع بستن فرم کانکشن رو ببنید " این بهینه تره "
کانکشن رو Dispose هم میشه کرد