PDA

View Full Version : مشکل با جستجو سریع



khz-web1
چهارشنبه 27 شهریور 1387, 01:57 صبح
سلام
من از کد زیر جهت جستجو کردن سریع استفاده می کنم



Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\learning\bin\Debug\person.mdb")
Dim sql AsString = "select * from register where codperson like'%'" + "'" + TextBox1.Text + "'"
Dim da As OleDbDataAdapter = New OleDbDataAdapter(sql, con)


Dim ds AsNew DataSet


con.Open()
da.Fill(ds, "register")
con.Close()
DataGridView1.DataBindings.Add(New Binding("datasource", ds, "register"))

در واقع من می خوام بازدن اولین حرف تمامی حروف یا اعداد زده شده که اولشان بان این حرف شروع میشود لیست شوند (یه نوع جستجو سریع می خوام )
ولی خوب متاسفانه از خط زیر ارور میگیره ....



DataGridView1.DataBindings.Add(New Binding("datasource", ds, "register"))


با تشکر

Did_Taze
چهارشنبه 27 شهریور 1387, 03:41 صبح
دوست عزیز این عمل با یک Index ساده روی بانک اطلاعاتی شما ممکن است . کافی است در فرمان خود در Sql از پارامتر With Index استفاده کنید . البته مجبورید تغییراتی نیز در بخشهای دیگر بدهید . این بخش را در برنامه قرعه کشی بانک استفاده کرده ام و سرعت آن بسیار مناسب است . با بیش از 12 میلیون رکورد خوب جواب داد . امیدوارم رکوردهای شما بیشتر نباشد .

khz-web1
چهارشنبه 27 شهریور 1387, 03:49 صبح
میشه یکم بیشتر توضیح بدید ... یا لا اقل یه تکه کد بزارید ...
با تشکر

MORTEZA66
چهارشنبه 27 شهریور 1387, 10:16 صبح
كدهاي شما كاملا درسته به غير از همون خطي كه ارور ميده كه اصلا لازم نيست و راه آسونتر داره


dset1.Dispose()
dset1 = New DataSet
dap1.SelectCommand.CommandText = sqlcommand
dset1.Clear()
dap1.Fill(dset1, TableName)
dgView.DataSource = dset1
dgView.DataMember = TableName

dset كه مشخص هست از نوع dataset هست dap1 هم ازنوع oledbdataadapter هست در واقع شما بايد خطي رو كه ارور مي ده برداريد و دو خط آخر اين كد رو بگذاريد درست ميشه اما خط 1 و 2 براي اين هست كه وقتي چند دستور Select رو اجرا كنيد كه ستون هاي مختلفي رو انتخاب كنند ممكنه در دستور Select بعدي بياد اون ستونهاي قبلي رو هم در ديتاست نمايش بده كه با اين دو خط مانع از اين كار ميشيد
Dset1.clear هم براي اين هست كه در هر بار fill شدن مقادير قبلي در ديتاست از بين بره و فقط مقادير جديد يا نتايج جديد بمونه

MORTEZA66
چهارشنبه 27 شهریور 1387, 10:20 صبح
دستور SQL شما هم اشتباه است اگر شما ميخاهيد با زدن هر حرف كل نتايجي كه با اون حرف شروع ميشه نمايش پيدا كنند بايستي به صورت


Like '+textbox1.text.trim+%'

يعني اولش با اين حرف شروع بشه بقيش هر چي ميخاد باشه باشه

khz-web1
پنج شنبه 28 شهریور 1387, 01:50 صبح
آقا اون اروره حل شده دستت درد نکنه .... فقط می خواستم بدونم که شما اینو تو چه اونتی از یه تکست می نویسی

MORTEZA66
پنج شنبه 28 شهریور 1387, 17:35 عصر
خوب اين ديگه معلومه رويداد TextChanged مي ريزم و توي چندين پروزه هم استفاده كردم و هيچ مشكلي نداره از بابت كند شدن عرض مي كنم البته اگه خيلي كد نويسي تون غير استاندارد باشه جستجو كند مي شه

khz-web1
جمعه 29 شهریور 1387, 22:55 عصر
من هم تو textchanged می نویسم ... ولی خوب جستجو نمیکنه و ستون های گرید رو خالی نشون میده ...