2014年6月22日日曜日

OpenOffice.org Basicからデータベースにアクセスする


 こちらのサイトを参考にしてサンプルコードをコピペして名称を変更して実行してみた。
http://itref.fc2web.com/openoffice/basic/base.html

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("DataBaseFile")
Connection = DataSource.getConnection("", "")

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

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()


 案の定エラーが発生。


 エラーメッセージはステートメントにあるテーブルが見つからないとのこと。
 テーブルが見つからないということは登録してあるデータベースへのアクセスはできているようだ。
 なら登録してあるデータベースを Base を起動して確認してみると該当のテーブルは作成済みである。
 んー。
 もしやと思いテーブル名称 Table を TestTable へ変更した。もちろん Basic 側も変更した。
 そして実行すると先ほどのエラーメッセージではなくて違うエラーメッセージが表示された。

 今度のエラーはテーブルから取得したデータは文字列だけどステートメントは整数になっているから data type が違うって言ってる。
 なので sValue2 = ResultSet.getString(2) にしてあげれば解決。

 あっけないくらいに Basic からデータベースへアクセスできるようになった。
 OpenOffice のオプションからデータベースの登録作業は必要ではあるがドライバのインストールが不要なのは良いことだ。

 次はテーブルから取得したデータを指定したセルへ入れたり次のレコードを読んだり出来るようにしてみよう。

 そういえばデータベースファイルはローカルを指定しているがネットワークドライブ越しのデータベースファイルを指定することは可能なのだろうか。
 気になる気になる。

0 件のコメント:

コメントを投稿

MELSECNET/HのリモートI/O局経由のMODBUS(R)通信について

http://fa-faq.mitsubishielectric.co.jp/faq/show/13661  別ネットワークの先にぶら下げるってどういうことだろう。