thongkorn โพสต์ 2018-3-14 12:14:01

[VB.NET] การค้นหาข้อมูลอย่างรวดเร็วทันใจ (Quick Search)

http://www.g2gnet.com/webboard/images/vbnet/QuickSearch.png


สำหรับบทความนี้ แอดมินขอนำเสนอวิธีการค้นหาข้อมูลอย่างรวดเร็ว โดยการกดคีย์ หรือคำที่ต้องการ ระบบมันก็จะทำการประมวลผล Query ใหม่ เพื่อทำการค้นหาคำที่มีลักษณะใกล้เคียงกัน ด้วยคำสั่ง LIKE ... Visual Basic จะมีหลักการที่สำคัญ คือ Event/Driven ...
Event คือ เหตุการณ์ ในตัวอย่างนี้จะเกิดเหตุการณ์ที่ txtSearch_TextChanged โดยมีการกดคีย์ลงในช่อง TextBox แล้วเกิดการเปลี่ยนแปลงค่า
Driven คือ เมื่อเกิดเหตุการณ์ในการกดคีย์ แล้วจะให้มันไปทำอะไร ... นั่นคือ ค้นหาข้อมูล


LIKE Syntax
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;

ตัวอย่าง การค้นหาคำที่ขึ้นต้นด้วยอะไรก็ได้ แต่ตามด้วย 'a'
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';


ตัวอย่าง การค้นหาคำที่ขึ้นต้น หรือลงท้ายด้วยอะไรก็ได้ แต่มี 'a' อยู่ภายในนั้น
SELECT * FROM Customers
WHERE CustomerName LIKE '%a%';

เช่น '12a6599XYZ' หรือ 'a2222'

หมายเหตุ: การที่เครื่องหมาย Single Quote ' ปิดหัวท้าย หมายความว่าเป็นการค้นหาข้อมูลแบบ String


ตัวอย่างของการใช้งานจริง ...
      Dim Statement As String = _
            " Select * FROM ProvinceData WHERE " & _
            " ProvinceName LIKE '%" & txtSearch.Text & "%'" & _
            " OR " & _
            " ShortThai LIKE '%" & txtSearch.Text & "%'" & _
            " OR " & _
            " ShortEng LIKE '%" & txtSearch.Text & "%'" & _
            " ORDER BY ProvincePK, ProvinceName "เป็นการค้นหาชื่อจังหวัด (ProvinceName) หรือ ชื่อจังหวัดไทยแบบย่อ (ShortThai) หรือ ชื่อจังหวัดอังกฤษแบบย่อ (ShortEng) ไปพร้อมๆกัน โดยมีการต่อเชื่อมเงื่อนไขด้วย OR (หรือ) โดยที่ Users ไม่จำเป็นที่จะมาเลือกก่อนว่า ต้องการค้นหาข้อมูลแบบไหน ...

มาดูโค้ดกันเถอะ ...
' / --------------------------------------------------------------------
' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
' / eMail : thongkorn@hotmail.com
' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
' / Facebook: https://www.facebook.com/commonindy (Worldwide)
' / Purpose: Quick search database by specifying the ProvinceName, ShortThai and ShortEng keyword.
' / Microsoft Visual Basic .NET (2010) SP1

' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
' / You can modify and/or distribute without to inform the developer.
' / --------------------------------------------------------------------

Imports System.Data.OleDb

Public Class frmQuickSearch
    Dim Conn As OleDb.OleDbConnection

    Private Sub frmQuickSearch_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      Me.CenterToScreen()
      txtSearch.Text = ""
      '/ Configure my DataBase Path
      Dim strPath As String = Application.StartupPath
      '/ strPath to Lower Case and Replace.
      strPath = strPath.ToLower.Replace("\bin\debug", "\")

      '/ Connection String
      Dim strConn As String = _
            " Provider=Microsoft.ACE.OLEDB.12.0;" & _
            " Data Source = " & strPath & "ProvinceData.accdb; " & _
            " Persist Security Info=False;"

      Try
            '/ Connect DataBase
            Conn = New OleDb.OleDbConnection(strConn)
            '/ Conn.Open()
      Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Information)
      End Try

    End Sub

    Private Sub txtSearch_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtSearch.TextChanged
      '/ Cut off the characters unwanted.
      txtSearch.Text = txtSearch.Text.Replace("%", "").Replace("'", "").Replace("*", "")

      '/ Skip this sub if null value.
      If Trim(txtSearch.Text) = "" Or Len(Trim(txtSearch.Text)) = 0 Then Exit Sub
      '/ Set SQL statements
      Dim Statement As String = _
            " Select * FROM ProvinceData WHERE " & _
            " ProvinceName LIKE '%" & txtSearch.Text & "%'" & _
            " OR " & _
            " ShortThai LIKE '%" & txtSearch.Text & "%'" & _
            " OR " & _
            " ShortEng LIKE '%" & txtSearch.Text & "%'" & _
            " ORDER BY ProvincePK, ProvinceName "
      '/ Connect already in Form_Load
      If Conn.State = ConnectionState.Closed Then Conn.Open()

      Dim Cmd = New OleDbCommand(Statement, Conn)
      Dim DR As OleDbDataReader = Cmd.ExecuteReader
      Dim DT As New DataTable
      DT.Load(DR)
      dgvData.DataSource = DT
      DR.Close()
      Conn.Close()

    End Sub

    Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
      Me.Close()
    End Sub

    Private Sub frmQuickSearch_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
      Conn.Close()
      Me.Dispose()
      Application.Exit()
    End Sub

End Class


ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...




g2gsoftuser โพสต์ 2022-10-25 19:35:10

ขอบคุณครับ
หน้า: [1]
ดูในรูปแบบกติ: [VB.NET] การค้นหาข้อมูลอย่างรวดเร็วทันใจ (Quick Search)