# Native Code > برنامه نویسی در 6 VB > مطالب مرتبط با بانکهای اطلاعاتی در VB6 > سوال: جستجو در بانک اطلاعاتی

## vb8334

با سلام به تمامی دوستان

من می خواستم کدی بنویسم که در جستجوی دیتابیس برنامه به این شکل عمل کنه

یعنی اینکه وقتی می خوام یه اسم رو جستجو کنم براساس نام یا نام خانوادگی و....

مثلآ : اولین حرفی که زدم (م) تمام اسم ها که اولشون م دارن لیست بشن البته نمی خوام

که توی تکست باکس بنویسم بعد بیام دکمه سرچ رو بزنم بلکه می خوام توی همون تکست

باکس انجام بشه

ممنون

----------


## M.T.P

در کد زیر فرض بر این هست که:
Rs رکوردست شما.
Users جدول بانک.
FName فیلد مورد جستجو.
در واقع علامت ' تعیین میکند که اول عبارت مورد جستجو باید دقیقا کلمه داخل تکس باکس باشه و عبارت * در آخر کد یعنی اینکه مابقی عبارت هرچی باشه مهم نیست.

If Text1.Text = vbNullString Then Exit Sub
If Rs.State = 1 Then Rs.Close
Rs.open "Select * From Users Where FName Like '" & Text1.Text & "*'"

----------


## vb8334

ممنون دوست عزیز

در صورتی که بخوام از یه تاریخ تا یه تاریخ رو مورد جستجو قرار بدم چطوریه؟

در ضمن اون rs.sate=1 به چه معنیه؟

ممنون

----------


## M.T.P

نحوه انتخاب رکوردهای بین دو تاریخ:
Dim DateFrom As String
Dim DateTo As String
DateFrom = "1389/01/01"
DateTo = "1389/06/01"
If Rs.State = 1 Then Rs.Close
Rs.Open "Select * From Tabel Where Date > " & DateFrom & " And Date < " & DateTo




> در ضمن اون rs.sate=1 به چه معنیه؟


چون در Adodb در هربار باز کردن رکوردست باید قبلا بسته باشه، کد بالا چک میکنه اگه رکوردست باز بود اون رو میبنده.

----------


## SilverGold

سلام چرا شما از بیتوین استفاده نمی کنین

----------


## afsharan

سلام
من يك بانك داده اكسس دارم كه حجمش زياد چه جوري ميتونم با سرعت زياد در بانك جستجو كنم
طريقه ايندكس كردن چه جوريه و كارش چيه
باتشكر

----------


## mds_boy

> در کد زیر فرض بر این هست که:
> Rs رکوردست شما.
> Users جدول بانک.
> FName فیلد مورد جستجو.
> در واقع علامت ' تعیین میکند که اول عبارت مورد جستجو باید دقیقا کلمه داخل تکس باکس باشه و عبارت * در آخر کد یعنی اینکه مابقی عبارت هرچی باشه مهم نیست.
> 
> If Text1.Text = vbNullString Then Exit Sub
> If Rs.State = 1 Then Rs.Close
> Rs.open "Select * From Users Where FName Like '" & Text1.Text & "*"


rs رو برابر چه خصوصیتی میکنیم ؟
و چیزی که من میخوام اینه:
1 کامبوباکس داریم، که با وارد کردن حروف یا رقم طبقه یک فیلد از جدولم فیلتر بشه درعانه واحد، تا وقتی که به چیزه دلخواهمون برسیم.
مثل :
 ___________
|  ^ |  فروشن                                                  |
 ----------------
               | فروشنده 1                    |       
                   --------------
              | فروشنده 2                                  |
                   -------------
تقریبا این شکلی !!!
با نوشتنه فروش لیست با فیلتر کردن همه ی فیلده رکوردها که اولش فروش هست رو برام بیاره .
اگه ممکنه مثال بزنید.
با تشکر

----------


## M.T.P

متغیر Rs رکوردستی از نوع Adodb.Recordset هست. برای مواقعی که نمیخوایم از کنترل Adodc استفاده کنیم.
Dim Rs As New ADODB.Recordset
شما اگه از Adodc استفاده میکنین کدتون اینطوری میشه:
If Combo1.Text = vbNullString Then Exit Sub
Adodc1.RecordSource = "Select * From Users Where FName Like '" & Combo1.Text & "*"
یا اینکه از فیلتر استفاده کنید:
Adodc1.Filter = "FName Like '" & Combo1.Text & "*"که در حالت فیلتر سرعت بیشتر هست ( به شرط اینکه قبل از دستور فیلتر کل جدول تو RecordSource ریخته شده باشد)

----------


## mds_boy

دوسته عزیز  M.T.P ممنون از راهنماییت، همیشه اولین کسی هستی که من رو به جواب میرسونی  :چشمک:  .
البته کمی تو نوشتن کد مشکل داشت که ، کاملش میکنم :
If Combo1.Text = vbNullString Then Exit Sub
Adodc1.RecordSource = "Select * From Users Where FName Like '" & Combo1.Text & "*"

Adodc1.RecordSource = "Select * From Users Where FName Like '" & Combo1.Text & "%'" 
کدی که شما استفاده کردین(*) فکر کنم برای  FoxPro باشه .
که معادلش تو vb میشه (%) .
موفق باشی، بازم ممنون.

----------


## M.T.P

> کدی که شما استفاده کردین(*) فکر کنم برای  FoxPro باشه .
> که معادلش تو vb میشه (%) .


نه مربوط به Foxpro نیست یک استاندارد در دستورات SQL هست.
ببینید:

در کد زیر ما میخوایم اسامی یاقت شده ، عبارت اولشون دقیقا مثل عبارت داخل Combo باشه ، یعنی در کد زیر اگه شما Ali رو تایپ کنید برای شما Ali و Ali Reza و Ali Mohammad یا هر اسم دیگه ای که اولش Ali باشه رو پیدا میکنه.( که بیشتر در جستجوی دیکشنری استفاده میشه)
"FName Like '" & Combo1.Text & "*'"
در کد زیر عبارت یافت شده دقیقا عبارت تایپ شده خواهد بود:
"FName Like '" & Combo1.Text & "'"
در کد زیر عبارت یافت شده ممکن هست در هر جای جمله یا متن موجود در رکورد باشه یعنی اگه شما کلمه Ali تایپ کنید عبارت هایی مثل:
 Ali یا Ali Reza یا Amir Ali یا AhmadAli Karimi و کلا رکوردهایی که به هر شکلی توش کلمه Ali باشه مدنظر قرار میگیره.
"FName Like *" & Combo1.Text & "*"

----------


## mds_boy

همه مطالبتون درسته، ولی نمیدونم کدی که من بالا نوشتم، تو vb جواب داد، ولی کد شما رو میزنم جواب نمیده ولی میدونم درسته !!!
من خودم هم میدونم اینشکلیه، ولی شما برید تست کنید با * و % .
و یک نکته دیگه بعد از * یک کوتیشن تکی(کاما یا همچین چیزی (')) بود اسمش نمیدونم یادم رفته  :متفکر:  !!!
ممنون، شما هم تست کنید، تو sql * جواب میده فکر کنم، اگه جواب داد تو vb بگین مشکل کد من چیه !!!
    On Error Resume Next
    ado.CursorLocation = adUseClient
    If txtFind = "" Then
            ado.RecordSource = "SELECT *  FROM T_Froshandegan ORDER BY id_ff"
        Else
            ado.RecordSource = "Select * From T_Froshandegan Where lname_ff LIKE '" & txtFind & "%'"
    End If
    ado.Refresh
    dg.Refresh
همین کد جواب داد !!!

اینم از داخله msdn :
LIKE Predicate*Remarks*

 In a *LIKE* search pattern, to use the percent sign ( % ), underscore (  _ ),and left square bracket ( [ ) as literal characters rather than as wildcard  characters, surround the characters with square brackets. The right square  bracket ( ] ) matches itself unless preceded by a left square bracket. The range  character ( - ) matches itself unless it is inside square brackets and preceded  and followed by a single character.
 The following table shows patterns that illustrate using wildcard characters  as literal characters.
    Pattern Meaning  *LIKE* 'd%' d followed by any string of 0 or more characters   *LIKE* 'd[%]' d%   *LIKE* '_n' an, in, on, etc.   *LIKE* '[_]n' _n   *LIKE* '[a-cdf]' a, b, c, d, or f   *LIKE* '[-acdf]' -, a, c, d, or f   *LIKE* '[[]' [   *LIKE* ']' ]   *LIKE* '[ab]cd]e' acd]e, or bcd]e 
*Examples*

 The following example returns rows consisting of the DocAuthor, DocTitle, and  size properties for all files under the virtual roots "/contracts" and "/legal",  written by authors whose names are "Smith", "Smyth", "Smythe", and so on, where  the comment field of those documents does not contain words starting with  "real", such as "realty" or "realtor".
SELECT DocAuthor, DocTitle, size
  FROM SCOPE('"/contracts", "/legal"')
  WHERE DocAuthor LIKE 'SM_TH%'
    AND DocComments NOT LIKE 'REAL%'

----------


## parselearn

كد صحيح:

ado.RecordSource = "Select * From T_Froshandegan Where lname_ff LIKE '%" & txtFind & "%'"

----------


## M.T.P

بله درسته کد من ناقص بود ، کاراکتر ( ' ) رو بعد از * نزاشتم.  :خجالت: 
در واقع % همون * هست هیچ فرقی ندارن.
این کد رو تست کنید:

ado.RecordSource = "Select * From T_Froshandegan Where lname_ff LIKE '" & txtFind & "*'"
پست 10 ویرایش شد.

----------


## mds_boy

> در واقع % همون * هست هیچ فرقی ندارن.
> این کد رو تست کنید:
> 
> ado.RecordSource = "Select * From T_Froshandegan  Where lname_ff LIKE '" & txtFind & "*'"


این کد رو تست کردم جواب نداد ! .
  % با  *  فرقی میکنه   :لبخند:  .
تو vb % کار میکنه، تست شده است.
موفق باشید.

----------


## M.T.P

> این کد رو تست کردم جواب نداد ! .
>   % با  *  فرقی میکنه   .
> تو vb % کار میکنه، تست شده است.
> موفق باشید.



تو دیکشنری از همین روش استفاده کردم:
Sub Srch  رو در برنامه زیر ببینید:
https://barnamenevis.org/showpo...&postcount=427

----------


## afsharan

> سلام
> من يك بانك داده اكسس دارم كه حجمش زياد چه جوري ميتونم با سرعت زياد در بانك جستجو كنم
> طريقه ايندكس كردن چه جوريه و كارش چيه
> باتشكر


كمممممممممممممممممممممممم  ك كنيد

----------


## farshidshd

سلام

من میخوام با زدن دکمه ی search بر اساس نام توی adodc سرچ کنه و نتیجه رو توی datagrid نشون بده باید چه کار کنم؟؟( بانک SQL )
اگه هم چیزی پیدا نشد یه پیغام بده


ممنون

----------


## sajad_boj70

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



سلام vb8334‏
من هم یک مدتی بود خیلی دنبال این مطالب میگشتم و هر کی یه جوابی داد و با زحمت زیاد به چیزی که میخواستم رسیدم
حالا من برات یک برنامه میزارم که دقیقا همون چیزی که میخوای رو بهت میده
http://www.persiangig.com/pages/down...m/beheshti.rar

----------


## farshidshd

> سلام دوست من
> من هم یک مدیتی بود خیلی دنبال این مطالب میگشتم و هر کی یه جوابی داد و با زحمت زیاد به چیزی که میخواستم رسیدم
> حالا من برات یک برنامه میزارم که دقیقا همون چیزی که میخوای رو بهت میده
> http://www.persiangig.com/pages/down...m/beheshti.rar



لینک مشکل داره دانلود نمیشه

----------


## sajad_boj70

لینک تست شده.
کاملا درسته
ولی بازم اگه کسی مشکل داره ایمیلش رو بگه براش ایمیل کنم

----------


## mpk2119

من يه datareport دارم كه به DataEnvironment وصل كردم و مشكلي نداره ولي ميخوام رکوردهای بین دو تاریخ رو نشون بده واسم اين كد كه گفتين رو تو كدوم قسمت بايد قرار بدم؟

----------


## anaefrit

دوستان من یه پایگاه داده از نوع Access  دارم که داده اش از طریق Data  به فرم اضافه شده و اسم دادشو datAuthors گذاشتم . دو تا ComboBox با نام های cboRelOp و cboField بهش اضافه کردم و یک CommandButton مخصوص جست و جو با نام cmdGo و یک Textbox  با نام txtCriteria . در لیست cboRelOp مقادیر = و > و < و >=و <= و <> و Like  به کار برده شده . در لیست cboField هم مقادیر ID , UserNaem , Name , Family , Mail , YID , Tel , Income , City , Address  به کار رفته . حالا میخوام وقتی بر روی دکسمه ی جست و جو که همون cmdGo_click می باشه کلیک کنم  بیاد متنی رو که در txtCriteria.text وارد میکنیم رو با توجه به ComBoBox cboRelOp از یکی از مقادیری که براش انتخاب میکنیم مثل برابر یا شبیه و ... استفاده کنه و در فیلد های دیتابیسمون که در لیست cboField قرار داره سرچ کنه و مقادیرشو توی Textbox هایی که برای هر فیلد دیتابیس تو فرم گذاشتیم به نمایش در بیاره .

vbdb.GIF

این عکس برنامه هست
کسی از دوستان میتونه کمکم کنه و بگه دستوری که باید توی دکمه سرچ وارد کنم چیه ؟
ممنون میشم راهنمایی کنین

----------


## sehm67

دراین پست گذاشتن فیلتر روی adodc

https://barnamenevis.org/showthread.p...روی-adodC#‎6

----------


## ehsanocx

> در کد زیر فرض بر این هست که:
> Rs رکوردست شما.
> Users جدول بانک.
> FName فیلد مورد جستجو.
> در واقع علامت ' تعیین میکند که اول عبارت مورد جستجو باید دقیقا کلمه داخل تکس باکس باشه و عبارت * در آخر کد یعنی اینکه مابقی عبارت هرچی باشه مهم نیست.
> 
> If Text1.Text = vbNullString Then Exit Sub
> If Rs.State = 1 Then Rs.Close
> Rs.open "Select * From Users Where FName Like '" & Text1.Text & "*'"


من از این کد استفاده کردم این پیغام رو میده وقتی روی دکمه سرچ می زنم چرا؟
باید چیکار کنم؟
123.JPG

----------

