OpenOffice.org Basic > OpenOffice.org Base Basic
----
OpenOffice.org データベースソフト Base を用いるためのマクロの解説。また、外部データベースを用いるためのマクロも、ここで解説する。
[http://docs.sun.com/app/docs/doc/819-1332?=ja  Sun StarSuite 8 Basic プログラミングガイド]
BASE (HSQLDB) データベースに接続するために、StarSuite APIのcom.sun.star.sdb.DatabaseContextサービスを用いる。
OpenOffice Calcなど、BASE以外の環境からBASEを開いて作業する場合の例。
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") 
' DataBase_Test.odb というBASEファイルを開く
DataSource=DatabaseContext.getByName("DataBase_Test") 
' ユーザ名、パスワードを空白で接続
Connection = DataSource.GetConnection("","")
' *****SQLの実行 *****
Statement = Connection.createStatement()
ResultSet= Statement.executeQuery("Select * From TBL_MAIN")
' *****レコードの読み込みサンプル *****
If  IsNull(ResultSet) Then
  ' 検索されたレコード件数が0件の場合の処理をここに書く
Else
  ' 1つ目のカラム名の取得
  sColumnName1 = ResultSet.Columns.ElementNames(0)
  While ResultSet.next
    ' 1カラム目のデータ項目を取得
    sValue = ResultSet.getString(1)
  Wend
End If
	
' *****データベースを閉じる *****
Statement.Close()
Connection.Close()
Connection.Dispose()
OpenOffice.org APIリファレンス
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdb/DatabaseContext.html service DatabaseContext] > 
[http://api.openoffice.org/docs/common/ref/com/sun/star/container/XNameAccess.html#getByName getByname] 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdb/DataSource.html service DataSource] > 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XDataSource.html#getConnection getConnection] 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XConnection.html interface XConnection] > 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XConnection.html#createStatement createStatement] 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XStatement.html interface XStatement] > 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XStatement.html#executeQuery executeQuery]
SELECT文には、executeQuery関数を用いる。
UPDATE, INSERT, DELETE文には、executeUpdate関数を用いる。（なお、BASEのみを用いるのであれば、 executeQuery関数も可）
カラム項目名は、"..."で囲む。（外部データベースでSQLを用いる時と仕様が違うので注意が必要）
Dim ResultSet as Object
Dim nLines as Long
ResultSet= Statement.executeQuery("Select ""column1"",_ 
      ""column2"" From TBL_MAIN Where ((""column3"" = 1))")
nLines = Statement.executeUpdate("Insert into TBL_MAIN_
      (""column1"",""column2"") Values ('string1','string2')
OpenOffice.org APIリファレンス
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XStatement.html interface XStatement] > 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XStatement.html#executeQuery executeQuery], [http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XStatement.html#executeUpdate executeUpdate]
MySQL データベースに接続するために、StarSuite APIのcom.sun.star.sdb.DatabaseContextサービスを用いる。
この方法を用いるためには、OpenOfficeにJDBCドライバのクラスパスを登録しておく必要がある。
インストール方法： MySQL公式サイトよりJDBCドライバをダウンロードし、適当なフォルダに展開した後に、OpenOfficeのツール メニュー > オプション > OpenOffice > Java と設定メニューを開き、「クラスパスの追加」ボタンを押し「アーカイブを追加」でJDBCのjarファイルを指定すればよい。
公式サイトのドライバダウンロードページ
[http://www.mysql.com/products/connector/ MySQL Enterprise: Drivers] > 
[http://dev.mysql.com/downloads/connector/j/ MySQL Connector/J (JDBC driver) download]
Dim DatabaseContext as object
Dim sURL as String
Dim oProps(2) as new com.sun.star.beans.PropertyValue
Dim Connection as Object
Dim Statement as Object
Dim ResultSet as Object
 ' *****データベースを開く *****
DatabaseContext=createUnoService("com.sun.star.sdbc.DriverManager") 
' MySQLが稼動しているサーバ（192.168.1.1）とポート番号（3306）
sURL = "jdbc:mysql://192.168.1.1:3306/test?useUnicode=true&characterEncoding=UTF-8"
' ユーザ名とパスワード、ドライバ（JDBC）の指定
oProps(0).Name = "user"
oProps(0).value = "MySQLのユーザ"
oProps(1).Name = "password"
oProps(1).value = "MySQLのパスワード"
oProps(2).name = "JavaDriverClass"
oProps(2).value = "com.mysql.jdbc.Driver"
	
Connection = DatabaseContext.getConnectionWithInfo(sURL, oProps())
' *****SQLの実行 *****
Statement = Connection.createStatement()
ResultSet= Statement.executeQuery("Select * From TBL_MAIN")
' *****レコードの読み込みサンプル *****
If  IsNull(ResultSet) Then
  ' 検索されたレコード件数が0件の場合の処理をここに書く
Else
  ' 1つ目のカラム名の取得
  sColumnName1 = ResultSet.Columns.ElementNames(0)
  While ResultSet.next
    ' 1カラム目のデータ項目を取得
    sValue = ResultSet.getString(1)
  Wend
End If
	
' *****データベースを閉じる *****
Statement.Close()
Connection.Close()
Connection.Dispose()
OpenOffice.org APIリファレンス
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdb/DatabaseContext.html service DatabaseContext] > 
[http://api.openoffice.org/docs/common/ref/com/sun/star/container/XNameAccess.html#getByName getByname] 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XDriverManager.html interface XDriverManager] > 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XDriverManager.html#getConnectionWithInfo getConnectionWithInfo] 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XConnection.html interface XConnection] > 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XConnection.html#createStatement createStatement] 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XStatement.html interface XStatement] > 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XStatement.html#executeQuery executeQuery]
SELECT文には、executeQuery関数を用いる。
UPDATE, INSERT, DELETE文には、executeUpdate関数を用いる。
Dim ResultSet as Object
Dim nLines as Long
ResultSet= Statement.executeQuery("Select column1,_ 
      column2 From TBL_MAIN Where column3 = 1")
nLines = Statement.executeUpdate("Insert into TBL_MAIN_
      (column1,column2) Values ('string1','string2')
OpenOffice.org APIリファレンス
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XStatement.html interface XStatement] > 
[http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XStatement.html#executeQuery executeQuery], [http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/XStatement.html#executeUpdate executeUpdate]
MySQL 5.1 リファレンスマニュアル
[http://dev.mysql.com/doc/refman/5.1/ja/data-manipulation.html データ取り扱いステートメント]
この方法を用いるためには、OpenOfficeがインストールされた端末ににODBCドライバをインストールしておく必要がある。
公式サイトのドライバダウンロードページ
[http://www.mysql.com/products/connector/ MySQL Enterprise: Drivers] > 
[http://dev.mysql.com/downloads/connector/odbc/5.1.html MySQL Connector/ODBC download]
PostgreSQL データベースに接続するために、StarSuite APIのcom.sun.star.sdb.DatabaseContextサービスを用いる。
この方法を用いるためには、OpenOfficeにJDBCドライバのクラスパスを登録しておく必要がある。
公式サイトのドライバダウンロードページ
[http://jdbc.postgresql.org/download.html PostgreSQL JDBC Deriver]