Top > OOobbs3 > 71

** [[OOobbs3/71]] [#eb25f4dd]
-''サマリ'': Baseでのテーブル情報取得について
-''環境'': Basic
-''状態'': 解決
-''投稿者'': [[My]]
-''投稿日'': 2011-10-14 (金) 19:10:28
*** 質問 [#x0626691]
いつもお世話になっております。

 OpenOffice.org3.2.1でBaseを使用しております。

 unoidl.com.sun.star.sdbc.XConnectionサービスを使用してテーブルに接続し、unoidl.com.sun.star.sdbc.XStatementサービスの
 executeQueryメソッドやexecuteUpdateメソッドでSQLの実行ができることは確認しました。

 そこで、テーブルのフィールドのタイプを取得することはできますでしょうか?(VARCHAR(20)等)

 取得メソッドがあるのではと探していましたが、なかなか見つけることができずに困っております。

もしわかる方いらっしゃいましたら、よろしくお願い致します。
*** 回答 [#tf9aa459]
- ActiveConnection から接続された状態で、&idlref(com.sun.star.sdbcx.IndexEnumerable); インターフェースでテーブルの一覧をまず取得します。該当するテーブルのカラムの情報にアクセスできるので、そこから型なども取得できます。

 Sub GetColumnInfo
  oCurrentController = ThisComponent.getCurrentController()
  oActiveConnection = oCurrentController.ActiveConnection
  oTables = oActiveConnection.getTables()
  
  oObj_1 = oTables.getByIndex(0)
  oColumns = oObj_1.getColumns()
  oElementNames = oColumns.getElementNames()
  
  oColumn = oColumns.getByName("NAME")
  msgbox "type: " & CStr(oColumn.Type) & ", " & _
         "len: " & CStr(oColumn.Precision)
  ' 12: VARCHAR
 End Sub
カラムのプロパティ値は &idlref(com.sun.star.sdbcx.Column); のサービスで定義されています。
また、Type の値は &idlref(com.sun.star.sdbc.DataType); の定数で定義されています。

ちなみに、X から名前が始まっているのはインターフェースでサービスではありません。

どこかに書いたはずとおもったら、[[OOoBasic/Base/Column]]の表と同じですね。これじゃ分かりにくいですねぇ。

-- はにゃ? &new{2011-10-14 (金) 20:44:43};

#comment
*** 感想,コメント,メモ [#g86b872d]
はにゃ?さん、早速のご回答ありがとうございます。書いてある場所があったんですね、探し方がまだまだ甘いようですいません。
いろいろと詳しくして説明いただきありがとうございます。
いろいろと詳しく説明していただきありがとうございます。
#comment

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes