2011-09-15 10 views
0

私は、テキストボックスから検索ボタンを使用してAccessデータベースを照会し、結果をリストボックスに挿入しようとしています。DBにアクセスするSQL検索クエリ?

Dim con As New OleDbConnection(DBcon) 
    Try 
     lbresults.Items.Clear() 
     Dim dr As OleDbDataReader 
     Dim command As New OleDbCommand("Select I.InstName, S.StuName FROM Instructor I, Student S WHERE I.InstName Like '%" & txtsearch.Text & "%' and S.StuName like '%" & txtsearch.Text & "%'", con) 

     con.Open() 

     command.Connection = con 
     dr = command.ExecuteReader 

     While dr.Read() 
      lbresults.Items.Add(dr("InstName")) 
      lbresults.Items.Add(dr("StuName")) 
     End While 

    Catch ex As Exception 

私がいる問題は、それがリストボックスにInstNameここで両方とStuNameを複数回返すだである:ここでは私がこれまで持っているコードです。私はitems.addを2回行っているので、それはだと思います。私は "[oledbcommand変数名] .parameters.addwithvalue"を使用しようとしていましたが、 "好きな"機能でそれを行う方法を理解できませんでした。あなたがやっているので、クエリがレコードを返す複数回されているので

答えて

1

それがドロップダウンリストにInstNameこことStuNameを複数回追加することだ場合は、おそらくですselect ... where ... like...

(DISTINCT言葉に注目してください)にごselect文を変更してみてください:

Dim command As New OleDbCommand("Select DISTINCT I.InstName, S.StuName FROM Instructor I, Student S WHERE I.InstName Like '%" & txtsearch.Text & "%' and S.StuName like '%" & txtsearch.Text & "%'", con) 
0

クエリでは、関係を指定せずに2つのテーブルが関連付けられています。

猫を肌にするが、私は、私は結果を制御てることを保証するために、これを行うと、複数の方法があります:組合に対する組合を使用して

dim SQL as new string = _ 
    "Select 'Instructor' as NameType, I.InstName as NameValue " _ 
    "from Instructor I " _ 
    "where I.InstName Like '%" & txtsearch.Text & "%' " & _ 
    "union " & _ 
    "Select 'Student' as NameType, S.StuName as NameValue " _ 
    "from Student S " _ 
    "where S.StuName Like '%" & txtsearch.Text & "%' " 

Dim command As New OleDbCommand(SQL, con) 

は、すべてのインストラクターが普及しているとのデータセット間で明確なレコードを返します。重複した名前の場合はテーブル。

関連する問題