2013-04-13 121 views
2

我想創建一個程序,它將根據名稱搜索動物。我目前有這個部分的工作,但我想添加一個可選的搜索,使用戶可以搜索特定的數據,如體重和組合框將顯示所有動物的結果具有匹配的重量,用戶可以然後選擇他想要的一個,它會打開我設計的表單,並顯示正確的數據。不幸的是,我對編程有一個非常基本的理解,所以任何幫助將非常感謝。用組合框搜索數據庫並顯示多個結果

這是我目前的代碼。主要的搜索功能可用,但可選的功能不可用。我被告知這是由於我編寫它的方式,因爲每一行sql都會自行替換,所以它只會以最後一個答案結束。

Private Sub btnsear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsear.Click 
    If (txtname.Text = "") Then 
     MsgBox("Invalid Search") 
    Else 
     Try 
      Dim newsql As String 
      newsql = "select * from Animals where AnimalName like " & "'%" & txtname.Text & "%'" 
      'MsgBox("select * from Animals where AnimalName like " & "'" & txtname.Text & "'") 
      'msgbox(newsql) 
      Dim con As New OleDb.OleDbConnection 
      Dim da As New OleDb.OleDbDataAdapter 

      ' dim ds as NewDataTable 
      Dim dt As New DataTable("Animals") 
      ' uses the 2010 compatible connection string 
      con.ConnectionString = "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source = h:\Animals.accdb" 
      con.Open() 

      da = New OleDb.OleDbDataAdapter(newsql, con) 
      da.Fill(dt) 

      Form2.Show() 

      'show name in unbound text box 
      Form2.nametxt.Text = dt.Rows(0).Item(1) 
      Form2.latintxt.Text = dt.Rows(0).Item(2) 
      Form2.locationtxt.Text = dt.Rows(0).Item(3) 
      Form2.heighttxt.Text = dt.Rows(0).Item(4) 
      Form2.weighttxt.Text = dt.Rows(0).Item(5) 
      Form2.diettxt.Text = dt.Rows(0).Item(6) 
      Form2.statustxt.Text = dt.Rows(0).Item(7) 
      Form2.lifetxt.Text = dt.Rows(0).Item(8) 
      Form2.breedtxt.Text = dt.Rows(0).Item(9) 
      Form2.lengthtxt.Text = dt.Rows(0).Item(10) 
      Form2.txtimage.Text = dt.Rows(0).Item(11) 

     Catch 
      MsgBox("Item Not Found") 
      'con.close() 
     End Try 
    End If 

    If (txtopt.Text = "'") Then 
     Try 
      Dim sql1 As String 
      Dim sql2 As String 
      Dim sql3 As String 
      Dim sql4 As String 
      Dim sql5 As String 
      Dim sql6 As String 
      Dim sql7 As String 
      Dim sql8 As String 
      Dim sql9 As String 
      Dim sql10 As String 

      sql1 = "select * from Animals where AnimalName like " & "'%" & txtopt.Text & "%'" 
      sql2 = "select * from Animals where LatinName like " & "'%" & txtopt.Text & "%'" 
      sql3 = "select * from Animals where Location like " & "'%" & txtopt.Text & "%'" 
      sql4 = "select * from Animals where AverageHeight like " & "'%" & txtopt.Text & "%'" 
      sql5 = "select * from Animals where AverageWeight like " & "'%" & txtopt.Text & "%'" 
      sql6 = "select * from Animals where DietaryNeeds like " & "'%" & txtopt.Text & "%'" 
      sql7 = "select * from Animals where ConservationStatus like " & "'%" & txtopt.Text & "%'" 
      sql8 = "select * from Animals where AverageLifeSpan like " & "'%" & txtopt.Text & "%'" 
      sql9 = "select * from Animals where BreedingSeason like " & "'%" & txtopt.Text & "%'" 
      sql10 = "select * from Animals where AverageLength like " & "'%" & txtopt.Text & "%'" 

     Catch 
     End Try 
    End If 

End Sub 
+0

請加上使用的編程語言的正確標籤。 – Lokesh

+0

完成,對不起,我忘了:D – Silver

回答

0

試着像...

Private Sub btnsear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsear.Click 
    If txtname.Text = "" Then 
     MsgBox("Invalid Search") 
    Else 
     Try 
      Dim newsql As String = "SELECT * FROM Animals WHERE AnimalName LIKE " & "'%" & txtname.Text & "%'" 

      If txtopt.Text <> "" Then 

       newsql &= " AND (AnimalName LIKE " & "'%" & txtopt.Text & "%'" & _ 
          " OR LatinName LIKE " & "'%" & txtopt.Text & "%'" & _ 
          " OR Location LIKE " & "'%" & txtopt.Text & "%'" & _ 
          " OR AverageHeight LIKE " & "'%" & txtopt.Text & "%'" & _ 
          " OR AverageWeight LIKE " & "'%" & txtopt.Text & "%'" & _ 
          " OR DietaryNeeds LIKE " & "'%" & txtopt.Text & "%'" & _ 
          " OR ConservationStatus LIKE " & "'%" & txtopt.Text & "%'" & _ 
          " OR AverageLifeSpan LIKE " & "'%" & txtopt.Text & "%'" & _ 
          " OR BreedingSeason LIKE " & "'%" & txtopt.Text & "%'" & _ 
          " OR AverageLength LIKE " & "'%" & txtopt.Text & "%')" 
      End If 

      Dim con As New OleDb.OleDbConnection 
      Dim da As New OleDb.OleDbDataAdapter 

      Dim dt As New DataTable("Animals") 

      con.ConnectionString = "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source = h:\Animals.accdb" 
      con.Open() 

      da = New OleDb.OleDbDataAdapter(newsql, con) 
      da.Fill(dt) 

      Form2.Show() 

      'show name in unbound text box 
      Form2.nametxt.Text = dt.Rows(0).Item(1) 
      Form2.latintxt.Text = dt.Rows(0).Item(2) 
      Form2.locationtxt.Text = dt.Rows(0).Item(3) 
      Form2.heighttxt.Text = dt.Rows(0).Item(4) 
      Form2.weighttxt.Text = dt.Rows(0).Item(5) 
      Form2.diettxt.Text = dt.Rows(0).Item(6) 
      Form2.statustxt.Text = dt.Rows(0).Item(7) 
      Form2.lifetxt.Text = dt.Rows(0).Item(8) 
      Form2.breedtxt.Text = dt.Rows(0).Item(9) 
      Form2.lengthtxt.Text = dt.Rows(0).Item(10) 
      Form2.txtimage.Text = dt.Rows(0).Item(11) 

     Catch 
      MsgBox("Item Not Found") 
      'con.close() 
     End Try 
    End If 

End Sub 

我沒有測試這一點,並期待在更多的細節,這是假定所有列是字符列。

如果您擁有最有可能擁有的Ints,Dates,Chars等等的組合,那麼您可能需要更具體地瞭解您的搜索條件。您需要根據您的用戶嘗試進行的可選搜索來分離可選SQL。

+0

非常感謝您的回覆。我已經在我的程序中通過嘗試搜索記錄來測試此代碼。兩個記錄都有相同的動物名稱「馬」,但具有不同的保護狀態。不幸的是,當搜索不同的記錄時,它不起作用,例如我搜索了帶有「活着」數據的可選框的馬,並返回了保存狀態爲「死亡」的記錄,因爲它是「活着」記錄之前的凸輪。 我完全感謝您對此主題的快速回復:) – Silver

+0

對不起,對於遲到的回覆...您的表單是否有一個ComboBox供他們選擇正在執行哪個可選搜索? – PGallagher

相關問題