【Base】ExcelVBAからBaseに接続してデータを取得するサンプル手順
Base は、LibreOffice や Apache OpenOffice 等に搭載されている
ライセンスフリーのデータベースソフトです。
Base は Java で書かれたデータベースである HSQLDB を標準で利用するので、
JRE をインストールしている必要があります。
Office を持っている人でも
Access を含んだパッケージを購入している方は少ないかと思います。
なので、Access の代替品として Base を使うのもありかなと思います。
今日は、ExcelVBA から Base で作ったデータベースに接続して
テーブルのデータを Excel シートに表示させてみたいと思います。
Contents
前提条件
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