oo4o – 列名・列数の取得

1月 1, 2003 · Posted in oo4o · Comment 

列数の確認

表の列数を取得するには 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 – 接続と切断

1月 1, 2003 · Posted in oo4o · Comment 

接続の手順

まずはじめに 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 – クリップボードに結果を転送する

1月 1, 2003 · Posted in oo4o · Comment 

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

次ページへ »