ExcelVBA 【データベース操作編】



目次


データベースへの接続

データベースに接続する処理について解説します。

プログラムソース

Sub データベースへの接続()

Dim Cn As Object
Dim strCn As String

strCn = "Provider=SQLOLEDB;" & _
         "Data Source=localhost\SQLExpress;" & _
         "Initial Catalog=Database;User ID=sa;Password=sa;"

Set Cn = CreateObject("ADODB.Connection")

Cn.ConnectionString = strCn

Cn.Open

MsgBox "接続成功"

Cn.Close

Set Cn = Nothing

End Sub

解説

ADODB.Connection

データベース接続に使用するオブジェクト

Connection.ConnectionString = 接続文字列

接続文字列を設定します。

Connection.Open

データベースに接続します。

Connection.Close

データベースとの接続を切断します。


データの取得

データを取得する処理について解説します。

プログラムソース

Sub データの取得()

Dim Cn As Object, Rs As Object
Dim strCn As String, strSQL As String

strCn = "Provider=SQLOLEDB;" & _
         "Data Source=localhost\SQLExpress;" & _
         "Initial Catalog=Database;User ID=sa;Password=sa;"

Set Cn = CreateObject("ADODB.Connection")
Cn.ConnectionString = strCn
Cn.Open

strSQL = "SELECT * FROM 社員マスタ"

Set Rs = CreateObject("ADODB.Recordset")
Rs.Open strSQL, Cn, 1

For I = 1 To Rs.RecordCount
 Cells(I, 1).Value = Rs("社員コード").Value
 Cells(I, 2).Value = Rs("社員名").Value
 Rs.MoveNext
Next I

Rs.Close: Set Rs = Nothing
Cn.Close: Set Cn = Nothing

End Sub

解説

ADODB.Recodeset

データ操作に使用するオブジェクト

Recodeset.Open SQL文 Connectionオブジェクト

レコードセットを作成します。

Recordset.Close

レコードセットを閉じます。


SQLの実行

SQLを実行する処理について解説します。

プログラムソース

Sub SQLの実行()

Dim Cn As Object
Dim strCn As String, strSQL As String

strCn = "Provider=SQLOLEDB;" & _
        "Data Source=localhost\SQLExpress;" & _
        "Initial Catalog=Database;User ID=sa;Password=sa;"

Set Cn = CreateObject("ADODB.Connection")
Cn.ConnectionString = strCn
Cn.Open

strSQL = "UPDATE 社員マスタ " & _
         "SET 部門コード = 3 " & _
         "WHERE 社員コード = 4"

Cn.Execute strSQL

Cells(1, 1).Value = "更新完了"

Cn.Close: Set Cn = Nothing

End Sub

解説

Connection.Execute SQL文

指定されたSQL文を実行します。


トランザクション処理

トランザクション処理について解説します。

プログラムソース

Sub トランザクション処理()
On Error Resume Next
Dim Cn As Object, strCn As String, strSQL As String
Dim blnErr As Boolean : blnErr = True
strCn = "Provider=SQLOLEDB;" & _
         "Data Source=localhost\SQLExpress;" & _
         "Initial Catalog=Database;User ID=sa;Password=sa;"
Set Cn = CreateObject("ADODB.Connection")
Cn.ConnectionString = strCn
Cn.Open

Cn.BeginTrans

strSQL = "INSERT 社員マスタ VALUES(1, '社員A', 1)"
Cn.Execute strSQL
If Err.Number <> 0 Then blnErr = False
strSQL = "INSERT 所有資格マスタ VALUES(1, 1, '簿記3級')"
Cn.Execute strSQL
If Err.Number <> 0 Then blnErr = False

If blnErr = True Then
   Cn.CommitTrans: MsgBox "更新完了"
Else
   Cn.RollbackTrans: MsgBox "更新失敗"
End If
Cn.Close: Set Cn = Nothing
End Sub

解説

Connection.BeginTrans

トランザクション処理を開始します。

Connection.CommitTrans

更新内容を確定する場合は、コミットします。

Connection.RollbackTrans

更新内容を破棄する場合は、ロールバックします。


データベース別の接続文字列

データベース別の接続文字列については、ご覧のとおりです。

プログラムソース

Oracle
strCn = "Provider=OraOLEDB.Oracle;" & _
         "Data Source=ホスト名:1521/XEPDB1;" & _
         "User Id=MYUSER;Password=MYUSER;"
MySQL
strCn = "DRIVER={MySQL ODBC 8.0 ANSI Driver};" & _
         "SERVER=localhost;PORT=3306; " & _
         "DATABASE=myschema;UID=root;PASSWORD=manager;"
Access
strCn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
         "Data Source=C:\Users\home\Desktop\Database.accdb"