0

私はinstantobjectsを試しています。2つの単純なクラスtbandとtcountryがあり、どちらも保存済みとして定義されています。tbandには、tcountryクラス/テーブルを参照するtcountryという名前のプロパティがあります。(国はルックアップテーブルです)。新しいバンドを作成するとき、ユーザーがリスト/コンボからフォームで国を選択し、バンドオブジェクトを保存できるようにしたいです。私は次のようなことを試しました:

Band.Create(nil);
Country.Create(nil);
Country := CountrySelector.CurrentObject as TCountry; // here I get an exception
Band.Country := Country;
Band.Store;

CountryConnectorはTInstantConnectorです。「select*from TCountry」というクエリがあり、DbComboBoxに値を表示します。

4

2 に答える 2

1

コードは次のようになります。コネクタが適切なブローカーに接続され、データベース接続がアクティブであり、データベーススキーマが作成されていることを前提としていることに注意してください(モデルエクスプローラーから後の手順を非常に簡単に実行できます)。

var
  Band : TBand;
begin
  // Query the database for all TCountry instances or descendants
  CountrySelector.Close;
  CountrySelector.Command.Text := 'SELECT * FROM ANY TCountry';
  CountrySelector.Open;

  if ContactSelector.ObjectCount > 0 then
    begin
      Band := TBand.Create(Connector);

      try
        // Take currently selected Country and assign to Band's Country property
        // Reference counting is handled automatically
        Band.Country := CountrySelector.CurrentObject as TCountry;
        Band.Store;
      finally
        Band.Free;  // Free reference to Band so we do not leak an object
      end;
    end;
end;

また、Selectorは通常のアプリケーション要件に対応していないため、あまり頻繁には使用しません。私のユーザーは、DevExpress Quantumグリッドを使用してFirebirdから2万件以上のレコードを取得することが多く、応答時間は一貫して2秒未満であると予想しています。私のクエリは多くのテーブルにまたがり、複雑なフィルタリング要件があるため、この要件を満たすには、IBExpert(風変わりですがそれ以外は優れたツール)を使用して非常に注意深い設計と調整が必要でした。

IOについて言えることは、モデルエクスプローラーを使用してデザインがポイントアンドクリックプロセスに縮小されるため、データモデリングが容易になるということです。IOは、複雑なオブジェクトグラフもデータセットとして「公開」し、プロパティをビジュアルコントロールにバインドできるため、優れたデータバインディングフレームワークでもあります。私が気に入っているもう1つの部分は、挿入クエリまたは更新クエリを手動で作成したり、永続オブジェクトを追加または変更するための列値を設定したりする必要がなくなったことです。IOは、コーディングをほとんど行わずに、舞台裏でこれ以上のことを行います。

デビッド

于 2009-06-05T17:46:51.643 に答える
-1

CountrySelectorにはnil以外の値がありますか?

于 2009-06-05T11:27:22.157 に答える