すみません。教えていただけませんでしょうか。
「アプリケーションの配布」でお世話になったビギナです。
疑問の解決がさらに疑問を生んでしまいました。web上で探してみたのですが
はっきりわかる資料が見当たりませんでした。
表題のとおりなんですが、先だってDEKOさんに「コンポーネントは動的に作成している」というお話があり、私もトライしてみようと思ったのですが、うまくいかず、これは今後の課題としたのですが、自分のアプリケーションをじっくり見直してみると必要ないのにクエリが複数あったりむだが多いことがわかりました。いろいろ調べてみるとデータモジュールというのがあり、非可視の
コンポーネントをおくトレイのようなものらしいです。ここへ接続などのデータベース関係のコンポーネントを集約させればよいのではと考え着手しました。うまくいっていたのですがひとつの壁に当たりました。イベントです。例で示します。Form1のコンポーネントをDataModule1にあるqueryにつないでいます。DataModule1にあるQueryのAfterPostのイベントで計算された数値をForm1のLabelにほしいのです。ハンドラをDataModule1に書いてForm1のLabelを参照してcaptionに代入すればよいかと考えたのですが、循環参照になってしまいますよね。Form1にDataModule1のイベントハンドラがかければよいのですが、具体的方法がわかりません。ご教授いただけませんでしょうか。
Form1 で DataModule を uses して、Form1 側で
procedure TForm1.ClientDataSet1AfterPost(DataSet: TDataSet);
begin
Label1.Caption := なんちゃら;
end;
こんなのを用意しておき、Form1.FormCreate (OnCreate) で、
DataModule.ClientDataSet.OnAfterPost := ClientDataSet1AfterPost;
みたいにすればいいです。必要なくなったら
DataModule.ClientDataSet.OnAfterPost := nil;
としてください。
# ClientDataSet の部分は任意のデータセット (Query / Table) です。
うまくいきました。ありがとうございます。これで接続関係やデータベース関係の
コンポーネントの集約ができ、すっきりとしました。今までは必要ないのに接続が3つ
もあったり、Queryなどは5つもあったり(小規模なembedデータベースを使った
アプリケーションなのにこんなに必要ないだろうと思うくらい)今何がどの
Connectionが接続しているのかもわからないほどでした。delphiを何度か触っている
とはいっても特殊機能電卓程度のアプリケーションしか作っていなかったため実用的な
システムを作るには全然力不足だったようです。今回の「他のフォームのイベント」も
よく調べてみると鉄板的な技法のようですね。私にはdelphiは巷に情報量が少ないという先入観
がありまして、どうしてもすぐ訊いてしまうことがおおく、同じスレばかり答えさせられる
諸先輩方にはご迷惑をおかけしています。これに懲りず、ご指導ください
ビギナ
ツイート | ![]() |