SSブログ

「VBA覚書」データベースの接続方法 [VBA覚書]

「VBA覚書」データベースの接続方法

「前提条件 - 環境設定」
①Oracleのクライアントがインストールされていること
②接続するDBのサービスが設定されていること
③接続が確立されていること

※環境設定については後日、別途記載予定

「実行環境」
Microsoft Office Professional Plus [Excel 2007 SP3]

「前準備」
①参照設定「OracleInProc Server 5.0 Type Library」

「ツール(T)」→参照設定
vba0001.jpg

一覧の中ほど
vba0002.jpg

「サンプルコード」

''''''''''''''ORACLE DB接続
Public pOraSession As OraSession
Public pOraDatabase As OraDatabase

Private Const cnstInstance As String = "******"
Private Const cnstUserPass As String = "*****/*****"
'*****************************************
' データベース接続(Oracle)
'*****************************************
Public Sub connectOracle()
On Error GoTo Err_

''接続前に切断を実行する
Call disConnectOracle

''セッションを開く
Set pOraSession = CreateObject("OracleInProcServer.XOraSession")

''開いたセッションからデータベースに接続する
Set pOraDatabase = pOraSession.OpenDatabase(cnstInstance, cnstUserPass, ORADB_DEFAULT)

Err_:
''エラー時の処理
If Err.Number <> 0 Then
''エラーの内容を表示する
MsgBox (Err.Description)

''処理を中断する
End

End If

End Sub

'*****************************************
' データベース切断(Oracle)
'*****************************************
Public Sub disConnectOracle()
On Error Resume Next ''エラーを無視して次行を実行する

''データベースを閉じて解放する
pOraDatabase.Close
Set pOraDatabase = Nothing

''セッションを閉じて解放する
pOraSession.Close
Set pOraSession = Nothing

On Error GoTo 0 ''エラー番号をリセットする

End Sub

'*****************************************
' レコードを取得してExcelに出力する
'*****************************************
Public Function procMain() As Integer

Dim rsOra As OraDynaset ''データセット
Dim objField As OraField ''フィールド

Dim rowNum As Integer ''行番号
Dim colNum As Integer ''列番号

On Error GoTo Err_

''DB接続
Call connectOracle

''SQL実行
Set rsOra = pOraDatabase.CreateDynaset(selectSql(), ORADYN_READONLY)

''取得したレコードのカラム名を一行目に表示する
rowNum = 1
colNum = 1
For Each objField In rsOra.Fields
''カラム名を出力する
Cells(1, colNum) = objField.Name
''次の列番号を取得する
colNum = colNum + 1
Next objField

''取得したレコードの表示
rowNum = 2
If Not rsOra.EOF Then
While Not rsOra.EOF
''イベントをOSで実行させる
DoEvents

''レコードを出力する
Cells(rowNum, 1) = rsOra.Fields("PROD_ID").Value
Cells(rowNum, 2) = rsOra.Fields("PROD_NAME").Value
Cells(rowNum, 3) = rsOra.Fields("PRICE").Value

''次の行番号を取得する
rowNum = rowNum + 1

''次のレコードを取得する
rsOra.MoveNext

Wend

End If

''DB解放
Set rsOra = Nothing
''DB切断
Call disConnectOracle

Err_:

''エラー時の処理
If Err.Number <> 0 Then
''エラーの内容を表示する
MsgBox (Err.Description)
End If

End Function

'*****************************************
' SQL文の作成
'*****************************************
Public Function selectSql() As String

Dim strSql As String

strSql = ""
strSql = strSql & " SELECT"
strSql = strSql & " PROD_ID"
strSql = strSql & " , PROD_NAME"
strSql = strSql & " , PRICE"
strSql = strSql & " FROM"
strSql = strSql & " PRODUCT"

selectSql = strSql

End Function


''=================================

「実行結果」

vba0003.jpg






-----[PR]-----





-----------【PR】-------------

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。