【Base】ExcelVBAからBaseに接続してデータを取得するサンプル手順

Base は、LibreOffice や Apache OpenOffice 等に搭載されている
ライセンスフリーのデータベースソフトです。

Base は Java で書かれたデータベースである HSQLDB を標準で利用するので、
JRE をインストールしている必要があります。

http://java.com/ja/

Office を持っている人でも
Access を含んだパッケージを購入している方は少ないかと思います。
なので、Access の代替品として Base を使うのもありかなと思います。

今日は、ExcelVBA から Base で作ったデータベースに接続して
テーブルのデータを Excel シートに表示させてみたいと思います。

前提条件

OS:Windows 7 64 bit
JRE:Java 7 Update 76
Excel:2007
LibreOffice:5.0.1.2

上記条件での動作は確認済み。他の環境での動作は保証はしません。

サンプルコード

Sub Main()
    ' OOoに接続
    Set objServiceManager = CreateObject("com.sun.star.ServiceManager")

    'ツール」->「オプション」->「OpenOffice.org Basic」->「データベース」で登録されている場合
    sBaseFile = "sample1"   '拡張子 .odb は不要
    
    '作成したBaseのデータベース名(登録していない場合)
    'sBaseFile = "file:///e:/base/sample.odb"
    
    'Connection処理
    Set oBaseContext = objServiceManager.CreateInstance("com.sun.star.sdb.DatabaseContext")
    Set oDataSource = oBaseContext.getByName(sBaseFile)
    Set oConnection = oDataSource.getConnection("", "")
    Set oStatement = oConnection.CreateStatement()

    ' データベースからデータを取得
    Set ResultSet = oStatement.executeQuery("SELECT * FROM 作業")

    j = 1
    nFields = ResultSet.getMetaData().getColumnCount()

    'フィールド名をシート上に展開する
    For i = 1 To nFields
      Cells(1, j).Value = ResultSet.getMetaData().getColumnName(i)
      j = j + 1
    Next i

    'ここからデータをシート上に展開する処理
    col = 1
    Row = 2
    While ResultSet.Next
      col = 1
      For i = 1 To nFields
        Cells(Row, col).Value = ResultSet.getString(i)
        col = col + 1
      Next i
      Row = Row + 1
    Wend
    ResultSet.Close
    oConnection.Close
    
    Set ResultSet = Nothing
    Set oConnection = Nothing
    Set oDataSource = Nothing
    Set oBaseContext = Nothing

End Sub

Base

Posted by 管理人