ورود

View Full Version : سوال: جستجو در بانک اطلاعاتی



vb8334
دوشنبه 08 شهریور 1389, 10:54 صبح
با سلام به تمامی دوستان

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

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

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

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

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

ممنون

M.T.P
دوشنبه 08 شهریور 1389, 15:50 عصر
در کد زیر فرض بر این هست که:
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
دوشنبه 08 شهریور 1389, 16:42 عصر
ممنون دوست عزیز

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

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

ممنون

M.T.P
دوشنبه 08 شهریور 1389, 16:57 عصر
نحوه انتخاب رکوردهای بین دو تاریخ:


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
دوشنبه 15 شهریور 1389, 00:41 صبح
سلام چرا شما از بیتوین استفاده نمی کنین

afsharan
چهارشنبه 17 شهریور 1389, 09:00 صبح
سلام
من يك بانك داده اكسس دارم كه حجمش زياد چه جوري ميتونم با سرعت زياد در بانك جستجو كنم
طريقه ايندكس كردن چه جوريه و كارش چيه
باتشكر

mds_boy
چهارشنبه 17 شهریور 1389, 12:36 عصر
در کد زیر فرض بر این هست که:
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
چهارشنبه 17 شهریور 1389, 13:04 عصر
متغیر 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
چهارشنبه 17 شهریور 1389, 13:32 عصر
دوسته عزیز M.T.P (http://www.barnamenevis.org/forum/member.php?u=132020) ممنون از راهنماییت، همیشه اولین کسی هستی که من رو به جواب میرسونی :چشمک: .
البته کمی تو نوشتن کد مشکل داشت که ، کاملش میکنم :

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
چهارشنبه 17 شهریور 1389, 13:48 عصر
کدی که شما استفاده کردین(*) فکر کنم برای 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
چهارشنبه 17 شهریور 1389, 14:09 عصر
همه مطالبتون درسته، ولی نمیدونم کدی که من بالا نوشتم، تو 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 PredicateRemarks

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
چهارشنبه 17 شهریور 1389, 16:09 عصر
كد صحيح:


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

M.T.P
چهارشنبه 17 شهریور 1389, 16:38 عصر
بله درسته کد من ناقص بود ، کاراکتر ( ' ) رو بعد از * نزاشتم. :خجالت:
در واقع % همون * هست هیچ فرقی ندارن.
این کد رو تست کنید:



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

پست 10 ویرایش شد.

mds_boy
چهارشنبه 17 شهریور 1389, 17:24 عصر
در واقع % همون * هست هیچ فرقی ندارن.
این کد رو تست کنید:



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

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

M.T.P
چهارشنبه 17 شهریور 1389, 17:37 عصر
این کد رو تست کردم جواب نداد ! .
% با * فرقی میکنه :لبخندساده: .
تو vb % کار میکنه، تست شده است.
موفق باشید.


تو دیکشنری از همین روش استفاده کردم:
Sub Srch رو در برنامه زیر ببینید:
http://barnamenevis.org/forum/showpost.php?p=1055042&postcount=427

afsharan
پنج شنبه 18 شهریور 1389, 07:39 صبح
سلام
من يك بانك داده اكسس دارم كه حجمش زياد چه جوري ميتونم با سرعت زياد در بانك جستجو كنم
طريقه ايندكس كردن چه جوريه و كارش چيه
باتشكر
كمممممممممممممممممممممممم ك كنيد

farshidshd
جمعه 03 دی 1389, 14:07 عصر
سلام

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


ممنون

sajad_boj70
شنبه 04 دی 1389, 09:27 صبح
با سلام به تمامی دوستان

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

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

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

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

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

ممنون


سلام vb8334 (http://barnamenevis.member.php?94708-vb8334)‏
من هم یک مدتی بود خیلی دنبال این مطالب میگشتم و هر کی یه جوابی داد و با زحمت زیاد به چیزی که میخواستم رسیدم
حالا من برات یک برنامه میزارم که دقیقا همون چیزی که میخوای رو بهت میده
http://www.persiangig.com/pages/download/?dl=http://sajadboj71.persiangig.com/beheshti.rar

farshidshd
شنبه 04 دی 1389, 11:54 صبح
سلام دوست من
من هم یک مدیتی بود خیلی دنبال این مطالب میگشتم و هر کی یه جوابی داد و با زحمت زیاد به چیزی که میخواستم رسیدم
حالا من برات یک برنامه میزارم که دقیقا همون چیزی که میخوای رو بهت میده
http://www.persiangig.com/pages/download/?dl=http://sajadboj71.persiangig.com/beheshti.rar


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

sajad_boj70
شنبه 04 دی 1389, 20:13 عصر
لینک تست شده.
کاملا درسته
ولی بازم اگه کسی مشکل داره ایمیلش رو بگه براش ایمیل کنم
(http://sajadboj71.persiangig.com/beheshti.rar)

mpk2119
شنبه 03 دی 1390, 11:46 صبح
من يه datareport دارم كه به DataEnvironment وصل كردم و مشكلي نداره ولي ميخوام رکوردهای بین دو تاریخ رو نشون بده واسم اين كد كه گفتين رو تو كدوم قسمت بايد قرار بدم؟

anaefrit
یک شنبه 04 دی 1390, 00:04 صبح
دوستان من یه پایگاه داده از نوع 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 هایی که برای هر فیلد دیتابیس تو فرم گذاشتیم به نمایش در بیاره .

79657

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

sehm67
یک شنبه 04 دی 1390, 15:33 عصر
دراین پست گذاشتن فیلتر روی adodc

http://barnamenevis.org/showthread.php?318866-گذاشتن-فیلتر-روی-adodc#6

ehsanocx
دوشنبه 05 دی 1390, 10:51 صبح
در کد زیر فرض بر این هست که:
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 & "*'"


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