2012-09-30 35 views
5

Chúc mọi người ngày tốt lành! Tôi muốn yêu cầu giúp đỡ về mã của tôi ở đây. Mối quan tâm chính là tìm kiếm từ cơ sở dữ liệu MySQL từ khóa được cung cấp bởi một hộp văn bản. Đây là GUI của tôi để tham khảo.VB.NET - Chức năng tìm kiếm sử dụng Hộp văn bản và Hộp tổ hợp

The GUI of my program

Khi tôi gõ chìa khóa tìm kiếm của tôi trên hộp văn bản và chọn một cột trên combo box, truy vấn tìm kiếm sẽ có sản lượng của nó trên listview. Tôi đã thử nhiều kết hợp để đạt được kết quả, nhưng không có kết quả.

Đây là mã của tôi để bạn giúp tôi.

Private Sub Search() 

    lviClientList.Items.Clear() 
    Dim strSqlSearch As String = "SELECT code, Company, StAdd, City, ContactPerson, Phone, Mobile, Email, Remarks FROM tblclients WHERE '@Column' LIKE '%" & txtSearchCriteria.Text & "%'" 

    Dim item As New ListViewItem() 

    If cboColumns.SelectedIndex = 0 Then 
     column = "code" 
    ElseIf cboColumns.SelectedIndex = 1 Then 
     column = "Company" 
    ElseIf cboColumns.SelectedIndex = 2 Then 
     column = "StAdd" 
    ElseIf cboColumns.SelectedIndex = 3 Then 
     column = "City" 
    ElseIf cboColumns.SelectedIndex = 4 Then 
     column = "ContactPerson" 
    ElseIf cboColumns.SelectedIndex = 5 Then 
     column = "Phone" 
    ElseIf cboColumns.SelectedIndex = 6 Then 
     column = "Mobile" 
    ElseIf cboColumns.SelectedIndex = 7 Then 
     column = "Email" 
    ElseIf cboColumns.SelectedIndex = 8 Then 
     column = "Remarks" 
    End If 

    Dim mysqlCommand As New MySqlCommand(strSqlSearch, mysqlConnection) 
    mysqlCommand.Parameters.AddWithValue("@Column", column) 

    Try 
     mysqlConnection.Open() 
     mysqlReader = mysqlCommand.ExecuteReader() 

     Do While mysqlReader.Read() 

      item = lviClientList.Items.Add(mysqlReader("code").ToString) 
      item.SubItems.Add(mysqlReader("Company").ToString) 
      item.SubItems.Add(mysqlReader("StAdd").ToString) 
      item.SubItems.Add(mysqlReader("City").ToString) 
      item.SubItems.Add(mysqlReader("ContactPerson").ToString) 
      item.SubItems.Add(mysqlReader("Phone").ToString) 
      item.SubItems.Add(mysqlReader("Mobile").ToString) 
      item.SubItems.Add(mysqlReader("Email").ToString) 
      item.SubItems.Add(mysqlReader("Remarks").ToString) 

     Loop 

    Catch ex As Exception 

     MsgBox("No results found.", MsgBoxStyle.OkOnly, "Project Analysis System") 

    Finally 

     mysqlReader.Close() 
     mysqlConnection.Close() 

    End Try 

End Sub 

Trả lời

3

Không rõ tại sao mã của bạn không hoạt động tốt. Hãy thử thay đổi mã trong Catch khoản của bạn

MsgBox("No results found.", MsgBoxStyle.OkOnly, "Project Analysis System") 

vào

Msgbox(ex.Message.ToString(), MsgBoxStyle.OkOnly, "Project Analysis System") 

do đó bạn sẽ biết những gì các lỗi chính xác là.

Bạn có thể ghép nối giá trị cho ColumnName vì nó được đặt tĩnh trong mã của bạn. Nhưng giá trị trên WHERE phải được tham số hóa vì nó là giá trị được người dùng nhập.

Hãy thử Mã sửa đổi này,

Private Sub Search() 

    lviClientList.Items.Clear() 
    Dim item As New ListViewItem() 
    Dim _isFound As Boolean = False 

    Dim colName() As String = {"code", "Company", "StAdd", "City", "ContactPerson", "Phone", "Mobile", "Email", "Remarks"} 

    Dim strSqlSearch As String = "SELECT code, Company, StAdd, City, " & _ 
            "ContactPerson, Phone, Mobile, Email, Remarks " & _ 
            "FROM tblclients " & _ 
            "WHERE " & colName(cboColumns.SelectedIndex) & " LIKE CONCAT('%', @valueName, '%')" 

    Using myConn As New MySqlConnection("connectionStringHere") 
     Using myComm As New MySqlCommand() 
      With myComm 
       .Connection = myConn 
       .CommandType = CommandType.Text 
       .CommandText = strSqlSearch 
       .Parameters.AddWithValue("@valueName", txtSearchCriteria.Text); 
      End With 
      Try 
       myConn.Open() 
       Dim myReader As MySqlDataReader = myComm.ExecuteReader() 

       While myReader.Read() 
        _isFound = True 
        item = lviClientList.Items.Add(myReader("code").ToString) 
        item.SubItems.Add(myReader("Company").ToString) 
        item.SubItems.Add(myReader("StAdd").ToString) 
        item.SubItems.Add(myReader("City").ToString) 
        item.SubItems.Add(myReader("ContactPerson").ToString) 
        item.SubItems.Add(myReader("Phone").ToString) 
        item.SubItems.Add(myReader("Mobile").ToString) 
        item.SubItems.Add(myReader("Email").ToString) 
        item.SubItems.Add(myReader("Remarks").ToString) 
       End While 

       If Not _isFound Then 
        MsgBox("No results found.", MsgBoxStyle.OkOnly, "Project Analysis System") 
       End If 

      Catch ex As MySqlException 
       Msgbox(ex.Message.ToString(), MsgBoxStyle.OkOnly, "Project Analysis System") 
      End Try 
     End Using 
    End Using 

End Sub 
+0

Tôi sẽ cố gắng mã của bạn. :) –

+0

nếu có lỗi xảy ra, vui lòng đăng nó tại đây nhờ: D –

+1

Hey, nó đã hoạt động! Cảm ơn ngài rất nhiều. –

Các vấn đề liên quan