SQLの基本的なコードパターン

SQLの基本的なコードパターン

ExcelVBAからADOを使ってSQL文を利用する場合の基本的なコードのパターンは2種類に分類できる。
パターン 内容
結果セットを返すパターン レコードの抽出や結合を行い、その結果を受け取って利用する時に使用する。
結果セットを返さないパターン データベース側の内容を変更し、その結果を受け取る必要がないパターン。
テーブル内のフィールドを変更したり、テーブルを作成したりする場合に使用する。

結果セットを返すパターン

必要とするレコードのみを抽出して、その結果を利用する場合のパターン。
いわゆる「選択クエリ」に相当する。

Sub SQL実行パターン1_1()
Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset
Dim mySrc As String, mySQL As String
Dim i As Integer, j As Integer

'接続先データベース
mySrc = ThisWorkbook.Path & "\mdb\4-sampleDB.mdb"
'実行するSQL
mySQL = "select * from 社員 where 所属 = '営業1課';"

'接続
With myCon
  .Provider = "Microsoft.Jet.OLEDB.4.0;"
  .Open mySrc
End With

'レコードセットを取得
myRS.Open mySQL, myCon

'結果を使った処理
Range("A1").CopyFromRecordset myRS

myRS.Close: Set myRS = Nothing
myCon.Close: Set myCon = Nothing

End Sub

フィールド名も転記するパターン

Sub SQL実行パターン1_2()
Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset
Dim mySrc As String, mySQL As String
Dim i As Integer, j As Integer

'接続先データベース
mySrc = ThisWorkbook.Path & "\mdb\4-sampleDB.mdb"
'実行するSQL
mySQL = "select * from 社員 where 所属 = '営業1課';"

'接続
myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
           "Data Source=" & mySrc

'レコードセットを取得後、フィールドを含めて転記
With myRS
  .Open mySQL, myCon
  For i = 0 To .Fields.Count - 1
    Range("A1").Offset(0, i) = .Fields(i).Name
  Next
Range("A2").CopyFromRecordset myRS
End With

myRS.Close: Set myRS = Nothing
myCon.Close: Set myCon = Nothing

End Sub