Top > OOobbs3 > 5

OOobbs3/5 Edit

  • サマリ: baseでbasicのマクロでフォームに値を入れる
  • 環境: Basic
  • 状態: 解決
  • 投稿者: 七志乃権兵衛?
  • 投稿日: 2010-06-09 (Wed) 05:07:02

質問 Edit

baseのフォームでレコードが変化した時 or 設置したボタンを押した時に、月を指定するフォームから月を取得。 その月の収入・支出をbasic スクリプト内でクエリを利用して計算し、各々表示用のフォームに値を代入しようとしています。

Sub Btn_Push(ev)
 oForm = ev.Source.getModel().getParent()
 ev.Source.getModel().getParent().getByName("datDATE")

以前に教えていただいた方法を利用し、上記のようにして対象フォームを取得できたようなのですが、名前は取得できても値の取得や設定のやり方が分かりません。

任意のフォームにたいして情報を取得・設定をするにはどのようにすればよろしいのでしょうか? 利用したいフォームは「日付フィールド」と金額表示用の「書式設定されたフィールド」です。

回答 Edit

データベースに接続されたフォームから値を取得するには表示しているテーブルやクエリの構造、データ型などが分からなければいけません。

まず、ドキュメントからフォームを取得します。

 oDoc = ThisComponent
 oForm = oDoc.getDrawPage().getForms().getByIndex(0)

ここでの例では次のようなカラムを持ったテーブルです。これらのカラムの内部での ID を調べておきます。これらはデータの取得、更新に利用します。

 nIDID = oForm.findColumn("ID") ' INTEGER
 nNameID = oForm.findColumn("NAME") ' VARCHAR
 nImageID = oForm.findColumn("IMAGE") ' LONGVARBINARY

NAME カラムのデータを取得するには各種のメソッドが利用できますが、データ型に対応したものを利用します。NAME フィールドは VARCHAR 型のデータを保持しているので getString メソッドが利用できます。メソッドごとに利用できる型はドキュメント参照。

  • com.sun.star.sdb.XRow 取得したいフィールドのカラムインデックスを指定します。
    msgbox oForm.getString(nNameID)

日付データであれば getDate メソッドを利用します。返り値は com.sun.star.util.Date です。

データの更新などはOOobbs3/7などを参照。com.sun.star.sdbc.XRowUpdate のメソッドで行いますが、他の操作も必要ですので…。

  • はにゃ? 2010-06-09 (水) 23:30:23
  • お返事ありがとうございます。 質問の仕方が悪く、勘違いさせてしまい申し訳ありません。 私がやりたかったのは、例えばカーソルがある月の支出をクエリで集計し、 データベーステーブルと関連付けられていない、集計結果表示用のフォーム に値を集計結果を表示させると言うものでした。 質問の際の例題にも使った方法により取得したオブジェクトを調べたところ 値を設定できそうなメソッド・プロパティは「Text」くらいしか見つかりませんでした。 このプロパティに値を代入すると、一応表示されるのですが、対象が書式化されたフィールド の場合、書式が反映されていませんでした。 フォームに値を設定する場合は どのメソッド・プロパティを利用すればいいのでしょうか? -- 七志乃権兵衛 2010-06-13 (Sun) 06:51:19
  • EffectiveValue プロパティを利用します。OOoBasic/Dialog/FormattedField

フォームでデータベースに関連付けられていない場合にはダイアログと同じ IDL が利用されていますので、ダイアログコントロール関連のページOOoBasic/Dialogの各種コントロールが参考になります。

日付フィールドでは Date プロパティに日付データを指定します。OOoBasic/Dialog/DateField このとき日付が 2010/06/14 であれば 20100614 を long 型で指定します。データベースから取得した日付は css.util.Date なので変換が必要です。

Function GetDate(aDate As com.sun.star.util.Date) As Long
  GetDate = aDate.Year * 10000 + aDate.Month * 100 + aDate.Day
End Function
  • はにゃ? 2010-06-14 (月) 01:29:28
  • 書式化された値、日付ともに上手くいきました。 ありがとうございました! -- 七志乃権兵衛 2010-06-18 (Fri) 22:35:34

感想,コメント,メモ Edit



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