LibreOffice Base

LibreOffice Base は LibreOffice に含まれるデータベースである。

LibreOffice Base

目次

  1. データベースの最適化
  2. LibreOffice Basicからデータベースにアクセスする

データベースの最適化

データベースを運用していくうちに、OpenDocumentデータベース(.odbファイル)のサイズが肥大化してゆく。この中には無駄な領域も含まれているので、データベースの最適化を行うとOpenDocumentデータベース(.odbファイル)のサイズを小さくすることができる。

データベースの最適化を行う手順を次に示す。

  1. LibreOffice Baseの [ツール] メニューから [SQL] を選択する。
  2. [SQLステートメントの実行] ダイアログが表示されるので、[実行コマンド] の欄に CHECKPOINT DEFRAG と入力する。
    SQLステートメントの実行
  3. [実行] ボタンをクリックする。
  4. [ステータス] 欄に「1: コマンドは正常に実行されました。」と表示されたら、OpenOffice.org Baseを終了する。

LibreOffice Basicからデータベースにアクセスする

データベースを登録する

LibreOffice Baseで作成したOpenDocumentデータベース(*.odb)に LibreOffice Basicからアクセスするには、まずデータベースを登録する必要がある。

LibreOffice BaseでOpenDocumentデータベース(*.odb)を新規作成した場合は、自動的にデータベースが登録されるので改めて登録する必要は無い。

しかし、他のコンピュータで作成したOpenDocumentデータベース(*.odb)のファイルをコピーしてきた場合は、データベースを登録する必要がある。データベースの登録手順は次の通り。

  1. LibreOffice の [ツール] メニューから [オプション] を選択する。

    この操作は LibreOffice Baseの他、LibreOffice Calc等で行ってももよい。

  2. オプションダイアログで [LibreOffice Base] - [データベース] を選択し、[新規作成] ボタンをクリックする。
    オプション
  3. データベースを作成ダイアログで [データベースファイル] にOpenDocumentデータベース(*.odb)のパス名を入力するか、[検索] ボタンをクリックしてOpenDocumentデータベース(*.odb)を指定する。[登録名] に登録名が表示されるので、登録名を変更したければ新たな登録名を入力する。

    最後に [OK] ボタンをクリックする。

    データベースリンクを作成
  4. これでデータベースの登録が完了する。

次にデータベースアクセスする LibreOffice Basicマクロの例を示す。

Dim DatabaseContext As Object
Dim DataSource As Object
Dim Connection As Object
Dim Statement As Object
Dim ResultSet As Object

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("MyTestDB")
Connection = DataSource.getConnection("", "")

Statement = Connection.createStatement()
ResultSet = Statement.executeQuery("select * from MyTestDB")

If IsNull(ResultSet) Then
MsgBox "検索されたレコード件数が0件"
Else
While ResultSet.next
sValue1 = ResultSet.getString(1)
sValue2 = ResultSet.getLong(2)
Wend
End If

Statement.Close()
Connection.Close()
Connection.Dispose()

DatabaseContext

com.sun.star.sdb.DatabaseContext はデータベースコンテキストを表すオブジェクトである。

DatabaseConext createUnoService(String)

引数には "com.sun.star.sdb.DatabaseContext" を指定する。

DataSource

DataSource はデータソースを表すオブジェクトである。

DataSource DatabaseContext::getByName(String)

パラメータには、OpenOffice.org Base に登録されたデータベースの登録名を指定する。

登録されたデータベースの登録名を確認するには、OpenOffice.org Base を起動して、[ツール] メニューから [オプション] を選ぶ。[オプション - OpenOffice.org Base - データベース] ダイアログが表示されるので、[登録されたデータベース] に登録名およびデータベースファイルの一覧が表示される。通常、データベースファイルが MyTestData.odb ならば登録名は MyTestData である。

データベースへの接続を確立

Connection はデータベースへの接続を表すオブジェクトである。

Connection DataSource::getConnection(String, String)

引数にはユーザ名とパスワードを指定する。データベースがパスワード保護されていなければ、空白でよい。

データベースがパスワード保護されているか否かを判断してからデータベースへの接続を確立するには次のように行なう。

If Not DataSource.IsPasswordRequired Then
Connection = DataSource.getConnection("", "")
Else
InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
Connection = DataSource.connectWithCompletion(InteractionHandler)
End If

SQLステートメントの準備と実行

StatemetnはSQLステートメントを表すオブジェクトである。Statementオブジェクトを作成するには、ConnectionオブジェクトのcreateStatemntメソッドを使用する。

Statement Connection::createStatement()

問い合わせを行うには、executeQueryメソッドを使用する。

ResultSet Statement::executeQuery(String)

行の挿入や更新を行うには、executeUpdateメソッドを使用する。

Integer Statement::executeUpdate(String)

結果セットからデータの取得

ResultSetは結果セットを表すオブジェクトである。

データ取得用メソッド

結果セットからデータを取得するには、以下に示すメソッドを使用する。

メソッド サポートするSQLのデータ型
getByte() 数値、文字、文字列
getShort() 数値、文字、文字列
getInt() 数値、文字、文字列
getLong() 数値、文字、文字列
getFloat() 数値、文字、文字列
getDouble() 数値、文字、文字列
getBoolean() 数値、文字、文字列
getString() すべてのデータ型
getBytes() バイナリデータ
getDate() 数値、文字列、日付と時刻のタイムスタンプ
getTime() 数値、文字列、日付と時刻のタイムスタンプ
getTimestamp() 数値、文字列、日付と時刻のタイムスタンプ
getCharacterStream() 数値、文字列、バイナリデータ
getUnicodeStream() 数値、文字列、バイナリデータ
getBinaryStream() バイナリデータ
getObject() すべてのデータ型

いずれのメソッドも、データを取得する列の番号をパラメータとして指定する。

ナビゲーション用メソッド

next
Boolean ResultSet::next()

次のデータレコードへ移動する。正常に終了したらTrue、失敗したらFalseを戻す。

previous
Boolean ResultSet::previous()

前のデータレコードへ移動する。正常に終了したらTrue、失敗したらFalseを戻す。

first
Boolean ResultSet::first()

最初のデータレコードへ移動する。正常に終了したらTrue、失敗したらFalseを戻す。

last
Boolean ResultSet::last()

最後のデータレコードへ移動する。正常に終了したらTrue、失敗したらFalseを戻す。

beforeFirst
Boolean ResultSet::beforeFirst()

最初のデータレコードの前へ移動する。正常に終了したらTrue、失敗したらFalseを戻す。

afterLast
Boolean ResultSet::afterLast()

最後のデータレコードの次へ移動する。正常に終了したらTrue、失敗したらFalseを戻す。

カーソル位置確認用メソッド

isBeforeFirst
Boolean ResultSet::isBeforeFirst()

ResultSet が最初のデータレコードの前にあるかを判定する。

isAfterLast
Boolean ResultSet::isAfterLast()

ResultSet が最後のデータレコードの次にあるかを判定する。

isFirst
Boolean ResultSet::isFirst()

ResultSet が最初のデータレコードにあるかを判定する。

isLast
Boolean ResultSet::isLast()

ResultSet が最後のデータレコードにあるかを判定する。

例外

SQL文でエラーが発生すると、com.sun.star.sdbc.SQLException 例外が発生する。