11 May 2008

OpenOffice BaseからMySQLサーバに接続 (その2)

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文が受け付けられる。

不思議な仕様