OOoBaseRTCの使用方法

RTCの起動

他のモジュールと通信をするためにRTCを起動する方法を説明します。

まず、OOoBaseRTC.odbを開いてください。
インストーラでインストールした場合はスタートメニューの全てのプログラムからOOoRTCs→OOoBaseRTC.odbを選択することでも開けます。

さらにフォームのOOoBaseControlをダブルクリックするとフォームが表示されます。

さらに起動ボタンを押すとRTCが起動します。

また、ツール→マクロ→マクロの実行からOOoBaseRTCcreateOOoBaseCompを実行することでもRTCを起動できます。

データベースへの接続

OOoBaseRTCはDataBase.idlで定義されたサービスポートのみを持つRTCです。
このサービスポートの持つ機能は以下の通りです。

詳細は仕様をご覧ください。

データベースの登録

このRTCを使用するためにはデータベースを登録しておく必要があります。
データベースを新規作成する場合、データベースウィザードで登録するか選択できるので登録してください。

既存のファイルの場合、まずはツールのオプションを選択してください。

表示されたダイアログからOpenOffice.org Baseのデータベースを選択して新規作成ボタンを押してください。

さらに表示されたダイアログからブラウズボタンを押して登録したいファイルを選択してOKボタンを押してください。

テーブルの作成

テーブルを作成するにはテーブルのデザイン表示でテーブルを作成を選択します。

そしてフィールド名とフィールドタイプを入力して、プライマリーキーを設定して保存してください。

そして作成したテーブルをダブルクリックするとデータを編集できます。

OOoBaseRTCからデータを取得するRTCの作り方

データを取得して何らかの作業をするRTCを作成するためにはまずDataBase.idlで定義されたサービスポートを追加する必要があります。

RTC Builderでサービスポートを作成する際IDLファイルをDataBase.idlに、インターフェース型にDataBase::mDataBaseを選択します。

もちろんサービスを利用する側なので方向はRequiredにしてください。

さらにonActivateでデータベースへの接続、問い合わせを行ってください。データレコードの移動、データを取得する機能を使用した場合、この問い合わせによる結果セットから取得することになります。つまり再度問い合わせを行った場合、結果セットは上書きされます。”OOoBaseRTC”は先ほど登録したデータベース名です。”RS1”の部分は任意の名前を付けてください。

def onActivated(self, ec_id):
     flag = True
     t1 = OpenRTM_aist.Time()
     while flag:
        t2 = OpenRTM_aist.Time()
        if (t2 - t1).getTime().toDouble() > 5:
            return RTC.RTC_ERROR
        try:
            f1 = self._database._ptr().setConnection("OOoBaseRTC","","")
            f2 = self._database._ptr().executeQuery("RS1", "OOoBaseRTC","select * from TABLE1")
            if f1 and f2:
                  flag = False
                                
                                
        except:
                  pass
     return RTC.RTC_OK

そしてonExcecute等でデータを取得してください。
先ほどexecuteQueryで取得した結果セットRS1からデータを取得しています。

def onExecute(self, ec_id):
      sys.stdin.readline()
      try:
          if self._database._ptr().ResultSetNext("RS1"):
                print self._database._ptr().getString("RS1",1)
                print self._database._ptr().getString("RS1",2)

      except:
                pass
      return RTC.RTC_OK

データベースの更新

データベースの更新にはexecuteUpdate文を使います。
以下の例はTABLE1のCDが3のデータの変更を行っています。

self._database._ptr().executeUpdate("OOoBaseRTC","UPDATE TABLE1 SET NAME = 'TEST' WHERE CD = 3")

このテーブルが以下のようになります。

次に新たなデータの入力を行います。
以下の例はCDが7、NAMEがTESTのデータを入力しています。

self._database._ptr().executeUpdate("OOoBaseRTC","INSERT INTO TABLE1(CD, NAME) VALUES(7, 'TEST')")

このテーブルが以下のようになります。

以下の例はCDが7のデータを削除しています。

self._database._ptr().executeUpdate("OOoBaseRTC","DELETE FROM TABLE1 WHERE CD = 7")

SQLについては参考になるサイトを最後に載せておきますので、そちらを参考にしてください。

テーブルの追加、削除

テーブルの追加、削除はSQL文でも出来るのですが、OpenOffice Baseの表示→テーブルの更新するを選択しないと更新されません。

なので追加の際はAddTable関数、削除の際はRemoveTable関数を使用してください。

まずテーブルの追加は以下のように記述できます。

self._database._ptr().AddTable("TEST", "OOoBaseRTC", ["ID", "NAME"], ["INTEGER", "VARCHAR"])

この例では”OOoBaseRTC”という登録名のデータベースにTESTという名前のテーブルを追加しています。引数の後ろ二つにはフィールドの名前、種類を入力します。IDという名前でタイプはINTEGER(整数)のフィールドとNAMEという名前でタイプはVARCHAR(テキスト)のフィールドを設定しています。

テーブルの削除は以下のような記述ができます。

self._database._ptr().RemoveTable("TEST", "OOoBaseRTC")

この例では”OOoBaseRTC”という名前のデータベースから”TEST”という名前のテーブルを削除しています。

データベースの追加、削除

データベースの追加、削除にはAddDataBase、RemoveDataBase関数を使用してください。

データベースの追加は以下のように記述できます。

self._database._ptr().AddDataBase("OOoBaseRTC2")

この例では”OOoBaseRTC2”という名前のデータベースを追加しています。この際、OOoBaseRTC2.odbという名前のファイルがコンフィギュレーションパラメータfilepathで設定されたフォルダに生成されます。

データベースの削除は以下のように記述できます。

self._database._ptr().RemoveDataBase("OOoBaseRTC2")

この例では”OOoBaseRTC2”という名前のデータベースを削除しています。ただし、AddDataBaseでデータベースを追加した際に生成されたOOoBaseRTC2.odbは削除されないので注意してください。登録が解除されるだけです。