フォーム上のテーブル
戻 る   

フォーム上のデータをリフレッシュ
   Baseを始めた当初、Basicマクロでテーブルにデータを追加したり、修正したとき、 フォーム上のテーブルに表示されるデータに変化はなく、フォームを再表示すると、データはちゃんと反映されて表示され、???状態でした。
マクロでデータを処理した後、結果をフォーム上の表に反映させるには、フォームをリロードする必要があるとのことでした。

Form.Reload()

フォーム上の表を見やすくする
   「行間」を適度に設定します。
フォームの編集で、「テーブルコントロール」を開き、
フォントのサイズと「行の高さ」を調整すると、「行間」をあけることができます

フォーム上のテーブルに検索条件や整列条件を設定して表示する
   検索条件は、Filterプロパティ、整列条件は、Orderプロパティを使う。

[例]
Form.Filter = "RecID > 100 and RecID < 200"
Form.Order = "RecID"
Form.ApplyFilter = True
Form.Reload()

フォーム上の一覧表からマウスで選択したデータを取得する
   選択行のフィールド情報は、
Columns = Form.getColumns()
  • フィールドの個数 Columns.count
  • フィールド名 fldname = Columns([フィールド番号]).Name
  • フィールドデータ dstr = Columns([フィールド番号]).getString
などで取得できます。
マクロを作成し、テーブルコントロールで、
「マウスボタンを押した時」の「...」ボタンを押して、作成したマクロが呼び出されるように設定します。
[例]
Sub GetCurXXXData
(略)
 Rem フィールド情報を取得
 Columns = Form.getColumns()
 for i = 0 to Columns.count-1
  Rem フィールド名取得
  fldname = Columns(i).Name
  fldstr = Ucase(fldname)
  Rem フィールドデータ取得
  dstr = Columns(i).getString
  Select Case fldstr
  Rem テーブルに応じて
  Case "RECID"
    RecID = CLng(dstr)
  Case "YMD"
    YMD = dstr
  ~
  End Select
 next
(略)
End Sub

注)フィールドのデータ型は、Columns(i).Typeで取得可能

カレント行の変更
   データを編集した後、Form.Reload()でフォームをリフレッシュすると、レコードの先頭から表示されます。
データが多い場合、編集していたレコード近くを表示したいものです。
指定したレコード番号をカレントレコードにするマクロを利用します。

Rem 選択行のレコード番号を取得する
RecNo = Form.Row()

(Form.Reload()でフォームをリフレッシュ)

Rem 先ほど選択したデータの近くに移動
Call GotoRecordNo(Doc, RecNo)

指定したレコード番号をカレントレコードにするマクロ
[OpenOffice.org Q&A faq/6/53参照]
Sub GotoRecordNo(oDoc As Object, nRecNo As Long)
     Dim aProp(0) As New com.sun.star.beans.PropertyValue

aProp(0).Name = "Position"
aProp(0).Value = nRecNo

createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch( _
oDoc.CurrentController.Frame, ".uno:AbsoluteRecord", "", 0, aProp)
End Sub
戻 る