PDA

View Full Version : جستجو بر اساس کاراکترهای وارد ردشه در TextBox



ندا2611
جمعه 11 بهمن 1387, 08:45 صبح
میخوام Search براساس کارکترهایی که در TextBox نوشته میشه و در DataBase انجام بشه بدون نیز به کلیک کردن روی دکمه جستجو
از کدام دستور Sql استفاده کنم؟
با سپاس

ACorvinus
جمعه 11 بهمن 1387, 09:02 صبح
در رویداد TextChange مربوط به Textbox اینجوری بنویس:





OleDb_SQL_Cmd = New OleDbCommand("Select Sname From Student Where Sname Like '" & TextBox1.Text & "%'", Connection)
OleDb_DA = New OleDbDataAdapter(OleDb_SQL_Cmd)
OleDb_DS = New DataSet
OleDb_DA.Fill(OleDb_DS, "Student")
DataGridView1.DataSource = OleDb_DS.Tables("Student")




که در این کد Sname نام فیلد و Student نام بانک مورد نظرتون هستش.
البته همونجور که میبینین من حاصل جستجو رو به یه DataGridView بند کردم.

موفق باشی. ( ACorvinus )

ندا2611
شنبه 12 بهمن 1387, 07:38 صبح
در رویداد TextChange مربوط به Textbox اینجوری بنویس:





OleDb_SQL_Cmd = New OleDbCommand("Select Sname From Student Where Sname Like '" & TextBox1.Text & "%'", Connection)
OleDb_DA = New OleDbDataAdapter(OleDb_SQL_Cmd)
OleDb_DS = New DataSet
OleDb_DA.Fill(OleDb_DS, "Student")
DataGridView1.DataSource = OleDb_DS.Tables("Student")





که در این کد Sname نام فیلد و Student نام بانک مورد نظرتون هستش.



البته همونجور که میبینین من حاصل جستجو رو به یه DataGridView بند کردم.




موفق باشی. ( ACorvinus )




از بابت کد متشکرم .اما الان 1مشکل دیگه به وجود اومده.وقتی سعی میکنم در رویداد TextCheng با Sql ارتباط برقرار کنم به Connection ، ایراد میگیره در حالی که من از همون کدی استفتده میکنم که برای DataGridW استفاده میکنم این کد در DataGrid درست عمل میکنه اما در رویداد ،TextChange ،Error میگیره.
Error زیر
Object Reference not Set to an instance of an object
با سپاس

mostafaaa
شنبه 12 بهمن 1387, 09:56 صبح
سلام دوستان من
به این مطلب توجه داشته باشید که معمولا زمانی که از این روش استفاده میشه(بقول دوستمون جستجوی بلافاصله به محض تایپ کردن یک حرف در TextBox ) در واقع عمل فیلتر کردن انجام میشه نه جستجوی چند باره دیتابیس!!
که البته برای برنامه های کوچیک اشکال نداره ولی برای برنامه های بزرگ و جدی منطقی نیست که برای پیدا کردن مثلا یه رکورد ده حرفی ، ده تا تراکنش با دیتابیس انجام بدیم!!
روش بهتر فیلتر کردن محتویات DataSet یا DataTable یا ... هر چیز دیگه ای است که اطلاعاتمون رو بر روی حافضه نگهداری می کنند برای مثال به این کد ها توجه کنید.

Imports System.Data.OleDb
Public Class Form1
Const ConnectionString As String = _
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Database1.accdb"
Private Connection As OleDbConnection
Private Command As OleDbCommand
Private DataAdapter As OleDbDataAdapter
Private Dset As New DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Connection = New OleDbConnection(ConnectionString)
Command = New OleDbCommand("SELECT * FROM Table1", Connection)
DataAdapter = New OleDbDataAdapter(Command)
DataAdapter.Fill(Me.Dset, "Table1")
Me.DataGridView1.DataSource = Dset.Tables("Table1")
End Sub

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dset.Tables("Table1").DefaultView.RowFilter = "Name LIKE '%" & Me.TextBox1.Text & "%'"
End Sub
End Class
البته دیتابیس من Access بود توی این مثال ، ولی برای SQL هم اصلا فرقی نمیکنه الا اینکه به جای اشیای OLEDBباید از اشیای SQL استفاده کنی.
یا علی

ندا2611
یک شنبه 13 بهمن 1387, 07:52 صبح
از کفوق اساده کردم کخوب اما مشکل ی اینه:
اگر این کد در چند TextBox در یک فرم کار ببرم Fiter قبلی ابین میرره و DataGrid یک فی جدید رو نشون میده.من میخوام Filter بر اساس چند Textbox انجام بشه؟

mostafaaa
یک شنبه 13 بهمن 1387, 09:59 صبح
سلام دوست من
شما برای این کار به راحتی میتونی از اپراتورهای AND یا OR استفاده کنی :

Dset.Tables("Table1").DefaultView.RowFilter = _
"Name LIKE '%" & Me.TextBox1.Text & "%' AND (Family LIKE '%" & Me.TextBox2.Text & "%')"

bashir_nashi
یک شنبه 13 بهمن 1387, 18:55 عصر
سلان .
من می خواستم برای سوالم یه تاپیک بزنم ولی چون دیدم موضوش نزدیک به این تاپیک بود همین جا مطرح می کنم.
من برای جستجو در جدولی از بانکم از همین روش (فیلتر کردن هنگام تغییر متن تکست باکس) استفاده میکنم.
مشکل اینجاست که این جستجو در بین اسامی افراد صورت می گیرد . من می خوام همه حالات رو پیدا کنه . یعنی مثلا اگه نوشتیم علیرضا اون علی رضا رو پیدا کنه یا فائضه و فایضه یا پورآقایی و پوراقایی و ...
من یه تابع نوشتم که اسم رو می گیره و همه فاصله ها رو حذف کرده و ئ را به ی و آ را به ا و .... تبدیل می کنه تا بشه جستجو کرد.
ولی در متد فیلتر نمی شه مقدار یک فیلد رو با این تابع جوری تغییر داد تا جستجوی موفقی داشته باشیم.

ممنون میشم اگه راهکاری ارائه بشه