oo4o – 列名・列数の取得
列数の確認
表の列数を取得するには OraDynaset のプロパティ Fields.Count を利用する。
書式
OraDynasetオブジェクト.Fields.Count
列名の取得
列名を参照する場合、OraDynaset のプロパティ Name を利用する
書式
OraDynasetオブジェクト.Fields(インデックス).Name
サンプルコード
次の例では、emp表の列名を参照している
Private Sub CommandButton1_Click()
Dim OraSession As Object
Dim OraDatabase As Object
Dim OraDynaset As Object
On Error Resume Next
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("fcm2_fcmdb1", "scott/tiger", 0)
If Err.Description <> "" Then
MsgBox Err.Description, vbOKOnly + vbCritical, "接続エラー"
Exit Sub
End If
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0)
For i = 0 To OraDynaset.Fields.Count - 1
ThisWorkbook.ActiveSheet.Cells(1, i + 1) = OraDynaset.Fields(i).Name
Next
' 解放
Set OraDynaset = Nothing
Set OraSession = Nothing
Set OraDatabase = Nothing
End Sub
結果サンプル
oo4o – 接続と切断
接続の手順
まずはじめに OO4O を使用して Oracle サーバへ接続し、ログインします。OO4O では、セッションとデータベースをオブジェクトとして扱います。
Public OraSession As Object ' セッション Public OraDatabase As Object ' データベース
次にセッションの取得を行います。
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
セッションが取得できたらデータベースを取得します。
Set OraDatabase = _
OraSession.OpenDatabase("データベース", "ユーザー/パスワード", 0)
※この時点でOracleサーバにユーザセッションが生成されます。
以上が接続までの流れです。
接続の確認
実際に、Oracle サーバへ接続されているかどうかをプログラム内で判断したい場合は、データベースオブジェクトの ConnectionOK メソッドを使用します。
if OraDatabase.ConnectionOK
MsgBox "接続されています。"
else
MsgBox "接続されていません。"
endif
切断の手順
接続が不要になったら接続の切断処理を行います。OraDatabase には close メソッドが用意されていますが、このメソッドは実際には何も行いません。このメソッドはVisual Basic との互換性のために存在しているだけです。
切断は以下のように行います。
Set OraDatabase = Nothing Set OraSession = Nothing
セッションオブジェクト、データベースオブジェクトの参照先をなくすことで、自動的に切断処理が行われます。
まとめ
今回のコードをまとめると次のようになります。
Private Sub CommandButton1_Click()
Dim OraSession As Object
Dim OraDatabase As Object
On Error Resume Next
' 接続
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = _
OraSession.OpenDatabase("sampleDB", "scott/tiger", 0)
If Err.Description <> "" Then
MsgBox Err.Description, vbOKOnly + vbCritical, "接続エラー"
Else
MsgBox "接続しました。", vbOKOnly + vbInformation, "接続"
End If
' 解放
Set OraDatabase = Nothing
Set OraSession = Nothing
End Sub
oo4o – クリップボードに結果を転送する
CopyToClipboard
OraDynasetにはExcel専用メソッドCopyToClipboardが用意されています。このメソッドを使用すると現在OraDynasetに格納されている問い合わせ結果を一括してクリップボードに転送することができます。
一般的に、取得した行数が多い場合はカーソルで一行ずつループするより、一括してクリップボードにコピーすることができるCopyToClipboardメソッドを使用したほうが処理が速くなります。
書式
OraDynasetオブジェクト.CopyToClipboard _
[コピーする最大行数], [列区切り文字], [行区切文字]
サンプルコード
Private Sub CommandButton1_Click()
Dim OraSession As Object
Dim OraDatabase As Object
Dim OraDynaset As Object
On Error Resume Next
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = _
OraSession.OpenDatabase("sampleDB", "scott/tiger", 0)
If Err.Description <> "" Then
MsgBox Err.Description, vbOKOnly + vbCritical, "接続エラー"
Exit Sub
End If
Set OraDynaset = OraDatabase.CreateDynaset("SELECT * FROM emp", &H0&)
OraDynaset.CopyToClipboard
ThisWorkbook.ActiveSheet.Cells(1, 1).Select
ActiveSheet.Paste
If Err.Description <> "" Then
MsgBox Err.Description, vbOKOnly + vbExclamation, "エラー"
Exit Sub
End If
Set OraDynaset = Nothing
Set OraSession = Nothing
Set OraDatabase = Nothing
End Sub

