2016-12-08 4 views
0

Accessデータベースに2つのテーブルがあります。現在のところ、VS 2015には、特定のテーブルを検索する検索ボタンを持つ2つのフォームを持つC#winformアプリケーションがあります。唯一の類似点はSerialNumberフィールドですが、各テーブルのシリアル番号はさまざまな機器に関連しています。どのように1つのボタンで両方のテーブルの検索を実行するためのヒント?検索2 "無関係"ボタンをクリックしたアクセステーブル

private void searchItembtn_Click(object sender, EventArgs e) 
{ 
    if (!string.IsNullOrEmpty(serialSearch.Text)) 
    { 
     try 
     { 
      connection.Open(); 
      OleDbCommand command = new OleDbCommand(); 
      command.Connection = connection; 
      command.Transaction = transaction; 
      command.Parameters.Add("@searchSerial", OleDbType.VarWChar).Value = serialSearch.Text; 
      string searchFB = "SELECT * FROM Inventory WHERE SerialNumber = @searchSerial"; 
      command.CommandText = searchFB; 
      connection.Close(); 
      OleDbDataAdapter db = new OleDbDataAdapter(command); 
      DataTable dt = new DataTable(); 
      db.Fill(dt); 
      dataGridFB.DataSource = dt; 
     } 
     catch (OleDbException ex) 
     { 
      MessageBox.Show(ex.Message); 
      connection.Close(); 
     } 
     searchHide(); 
     connection.Close(); 
    } 
} 
+1

アクセスでユニオンクエリを作成し、 'inventory'の代わりに' searchFB'のrowsourceとしてそれを使用します。とbtwは、メモリリークを避けるために 'using(){}'ブロック、例えばデータアダプタ、コマンド、接続に 'IDisposable'を入れます。 – dlatikay

+0

さて、私はUnionの機能を読んでいましたが、それを理解しているように見えるかもしれません。あなたは私の質問を受け取り、私を始めさせることができます。私のテーブル名はインベントリと競争力があります – DSB

答えて

0

両方のテーブルからのデータが含まれている、AccessでUNIONクエリを作成します。

SELECT 
    SerialNumber, 
    InventoryField1 AS Field1, 
    InventoryFieldN AS FieldN 
FROM Inventory 

UNION ALL 

SELECT 
    SerialNumber, 
    CompetitiveField1 AS Field1, 
    CompetitiveFieldN AS FieldN 
FROM Competitive 

その後(CompetitiveInventoryは、クエリ名になります)あなたのコマンド内の行ソースとしてこのクエリを使用します。

string searchFB = "SELECT * FROM CompetitiveInventory WHERE [email protected]"; 

また、要件に応じて、JOINが必要な場合もあります。

+0

それはうまくいくと思われますが......ここに私のフルシナリオがあります。ユーザーが{フォームから}テーブル内の特定のシリアル番号を検索すると、そのシリアル番号に関連するその行のすべての情報が返されます。私の考えでは、1つの場所からシリアル番号を検索することができましたが、2つのテーブルを検索し、そのシリアル番号の情報だけを返します。 – DSB

+0

私は単にこれをテストとして試しましたが、あなたが望むシリアル番号をつかむことはありません。 - string searchFB = "SELECT(SerialNumber)FROMインベントリUNION SELECT(SerialNumber)FROM Competitive WHERE(SerialNumber)= @searchSerial"; – DSB

+0

私の提案は、MS Accessでデータベースを開き、クエリ、SQLビューを作成し、UNIONのコードを貼り付け、「CompetitiveInventory」などの名前で保存し、コード内のテーブル名の代わりにそのクエリ名を使用することを意味します。上記のコメントで書いたものと一緒に行くなら、WHERE句を各SELECTの後の両方の部分に2回含める必要があります。 – dlatikay

関連する問題