FC2ブログ

スポンサーサイト 


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--

Category: スポンサー広告

TB: --  /  CM: --

top △

奥が深い 


連結にしたフォーム/フォームを連結にするために、レコードソースを設定しますね。
今まで、レコードソースに指定したものが使われるのは、
・フォームを起動
・Requery ( FilterOn / OrderByOn 含む)
した時だけ・・・と思い込んでいました。

hatena さんの新記事「帳票フォームでガントチャート(マウスドラッグで範囲指定)」は衝撃でしたね・・・
カレントの内容が変更される度に、レコードソースが解釈/動くんですね・・・???
こういった動きを使って・・・・ (知らなかったので何もしてませんでしたが・・・・)
色々と応用できそう・・・・

応用するにしても、動きを調べておこうかという事で・・・・

kEnt202.jpg

のフォームで確認してみる事に・・・
2つのフォームをサブフォームとして組み込んだものになります。
動きとしては、テーブル「T1」に「IX」「IY」の数値があって、基本これをレコードソースに・・・

上側のフォームでは、
フォーム上で [IX]*[IY] したものをコントロールソースとして持つテキストボックスの配置
フッタには、=Sum([IX]*[IY]) を設定

下側のフォームでは、
レコードソース内で、IX * IY AS IXY したフィールドを作っておいて、
テキストボックスのコントロールソースで、そのまま IXY を参照しただけのもの
フッタには、=Sum([IXY]) を設定

動きとしては、
・編集し始めると、[IX]*[IY] でも [IXY] でもすぐに表示に反映
・ただし、フッタ部分の合計の数値は編集を確定するまで、どちらも変化なし
 変化させたい場合は、hatena さんの「フォームでの集計をレコード保存する前に反映させる」が必要そう・・・

追加でわかったのは、
・編集状態になっても、Me.Recordset 自体には変化なし
 Me.Recordset.EditMode は変わらなかったので、どこかに情報を持っていて・・・
 確定時に Recordset をいじっているのかも・・・・

疑問が残ったけど・・・・
 カレントに限り(?)、レコードソースの内容が解釈されるのって・・・ どこまで???
 FROM の前までなのかな???
 WHERE にイッパイ記述していたら・・・ その部分も再解釈???

わからないけど・・・ 今のところ、FROM の前まで・・・ と、しておこうかな???
FROM の前には、必要以上に関数(D系/ユーザ定義)を使わない方が良い???

う~~ん・・・ レコードソースは解釈するけど・・・ EditMode は変わらない・・・
ふ~~ん・・・ まだ納得できる動きじゃないけど… そう動くんですもんね・・・・
 
フォームのデザインは以下の様な感じです

kEnt202_D.jpg

各サブフォームのヘッダ部分には、ラベル「lab1」を配置して、
マウス移動時に、Me.Recordset.EditMode を表示するようにしています。

また、メインフォームでは、サブフォームの OnEnter 時に、
Requery と ラベル「lab1」を初期化する様に
Private Function fncRequery()
  With Me.ActiveControl
    .Requery
    .Form.lab1.Caption = ""
  End With
End Function


Private Sub Form_Load()
  Me.FSUB1.OnEnter = "=fncRequery()"
  Me.FSUB2.OnEnter = "=fncRequery()"
End Sub

フォーム「FM1」を起動して、「IX」「IY」部分を変更してみてください・・・

ふ~~ん
 MouseMove って、そのコントロールの親がフォーカスを得ていなくても動くんですね・・・
 うむ・・・シュウカク・収穫


※ でも、何か・・・ わかってきたような気も・・・

 FROM の前・・・・ という事ではなくて、
 式に参照していたフィールドが、
 フォーム上の何らかのコントロールに割り当てられた時、
 その情報を内部で持っておいて、
 そのコントロールが変更されたら、内部に持った情報から求め直す事をする・・・

 そういう処理が内部で行われていたら、処理を一元化できますよね・・・

 コントロールソースに =[IX]*[IY] としていたら、
 [IX] [IY] のコントロールに変更あったら、計算し直す・・・

 レコードソース内で IX * IY AS IXY ・・・
 IXY をコントロールソースとするコントロールの表示は、
 [IX] [IY] をコントロールソースとしたコントロールに変更あったら、計算し直す・・・

まぁ・・・ 実際にどうなっているかわかりませんけど・・・
連結させるフォームのレコードソースの記述は、何か面白い・・・


サンプルは以下
 バージョン 20002003 (2002)2007
 ファイル kEnt202_2000.zipkEnt202_2003.zipkEnt202_2007.zip
 サイズ 20,06820,56522,488
※ ファイルは zip 形式
※ 2007 以外は、2007 保存時に変換 & 各バージョンで動作確認 & 最適化

関連記事

2014/08/31

Category: やってみる

TB: --  /  CM: 0

top △

この記事に対するコメント

top △

コメントの投稿

Secret

top △


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。