Accessのテーブルに該当データが存在するか調べる

解決


ちゃまき  2013-01-17 19:12:15  No: 148054

VB.NET(2010)からAccess2000に接続するプログラムなのですが、
特定のテーブルに条件に合うレコードが存在するかどうかのみを知るために
以下のようなソースにしています。

Try
  strSQL = "SELECT * FROM テーブルA WHERE 整理番号 = 999"
  (999の部分は随時変わります)

 Dim CnnK3 As String = ACstr & _
     "Data Source=" & DataMdb & ";" & ACPassS
 Dim OleConn As OleDb.OleDbConnection = New OleDb.OleDbConnection
 Dim OleDA As New OleDbDataAdapter(strSQL, CnnK3)
 Dim dtSet As DataSet = New DataSet("TABLE")
 Dim cb As New OleDbCommandBuilder(OleDA)
 Dim table As New DataTable()

 OleDA.Fill(table)
 Dim Tcnt As Integer = table.Rows.Count
Catch ex As Exception
  MessageBox.Show(ex.Message, "Access接続エラー")
  Cursor.Current = Cursors.Default 'カーソル通常
   Exit Sub
End Try

table.Rows.Countが0かどうかを見て該当レコードがあるかどうかチェックしているのですが、さらに高速に結果を知るには他によい方法はありますでしょうか?


ブービー  2013-01-17 23:41:26  No: 148055

SQLのSELECT文を、

strSQL = "SELECT COUNT(*) FROM テーブルA WHERE 整理番号 = 999"

とすれば、該当レコードを全部読み込むことなく判断できると思います。


YuO  2013-01-18 04:38:00  No: 148056

DataAdapterとDataSetを使うのではなく,
OleDbCommandを使うことで,SQLを実行できます。
さらに,ExecuteScalarメソッドで単一の値のみを取得できます。


ちゃまき  2013-01-19 18:46:08  No: 148057

OleDbCommandを使用し、処理速度が上がりました。
SELECT COUNT 〜

SQLCm.ExecuteScalar  で該当レコード数を取得できました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加