SQLの基本的なコードパターン
| パターン | 内容 |
|---|---|
| 結果セットを返すパターン | レコードの抽出や結合を行い、その結果を受け取って利用する時に使用する。 |
| 結果セットを返さないパターン | データベース側の内容を変更し、その結果を受け取る必要がないパターン。 テーブル内のフィールドを変更したり、テーブルを作成したりする場合に使用する。 |
結果セットを返すパターン
必要とするレコードのみを抽出して、その結果を利用する場合のパターン。
いわゆる「選択クエリ」に相当する。
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
