OpenOffice 2.3のCalcからBASICを用いて、OpenOffice Base 経由でMySQLサーバに接続する。
OpenOffice Calc を起動して、マクロ(Open Office BASIC)を用いてプログラムを行う。
(1)データベースにSELECTコマンドを発行(全データ読み込み)
MySQLへの接続設定したDBファイルを、MySQL-Test.odbとする。また、MySQLを利用するためのユーザ名を「testuser」、パスワードを「****」とする。
Sub Sheet3_MySQLConnect
Dim Sheet As Object
Dim DatabaseContext as object
Dim DataSource as Object
Dim Connection as Object
Dim Statement as Object
Dim ResultSet as Object
Dim i As Integer
' ***** データベースのコネクション *****
DatabaseContext=createUnoService("com.sun.star.sdb.DatabaseContext")
' カレントフォルダの DataBase-Test01.odb というBASEファイルを開く
DataSource=DatabaseContext.getByName("MySQL-Test")
' ユーザ名、パスワードを空白で接続
Connection = DataSource.GetConnection("testuser","****")
' ***** SQLの実行 *****
Statement = Connection.createStatement()
ResultSet= Statement.executeQuery("Select * From TBL_MAIN")
' ***** レコードの表示 *****
Sheet = ThisComponent.currentController.ActiveSheet
i = 0
If IsNull(ResultSet) Then
MsgBox("レコードがありません")
Else
' 1行目にカラム名を表示
Sheet.getCellByPosition(0, 0).String = ResultSet.Columns.ElementNames(0)
Sheet.getCellByPosition(1, 0).String = ResultSet.Columns.ElementNames(1)
Sheet.getCellByPosition(2, 0).String = ResultSet.Columns.ElementNames(2)
Sheet.getCellByPosition(3, 0).String = ResultSet.Columns.ElementNames(3)
Sheet.getCellByPosition(4, 0).String = ResultSet.Columns.ElementNames(4)
While ResultSet.next
Sheet.getCellByPosition(0, 1+i).String = ResultSet.getString(1)
Sheet.getCellByPosition(1, 1+i).String = ResultSet.getString(2)
Sheet.getCellByPosition(2, 1+i).String = ResultSet.getString(3)
Sheet.getCellByPosition(3, 1+i).String = ResultSet.getString(4)
Sheet.getCellByPosition(4, 1+i).String = ResultSet.getString(5)
i = i + 1
Wend
End If
Statement.Close()
Connection.Close()
End Sub
(2)データベースにSELECTコマンドを発行(WHEREで条件設定)
ResultSet= Statement.executeQuery("Select * From TBL_MAIN WHERE mode = 1")
書き換えの必要な場所は、例えばこんな感じになる
(3)データベースにINSERTコマンドを発行
Dim nResult As Long
nResult= Statement.executeUpdate("INSERT INTO TBL_MAIN (mode, date, time, data_str) VALUES(4, '2008-05-01', '13:45:28', 'テスト')")
(4)データベースにUPDATEコマンドを発行
Dim nResult As Long
nResult= Statement.executeUpdate("UPDATE TBL_MAIN SET mode=0 WHERE mode <> 0")
ちなみに、OpenOffice Base のクエリ画面では、SELECT文しか受け付けないようだ。ツール メニュー → SQL のダイアログでのみ、INSERTやUPDATE文が受け付けられる。
不思議な仕様