2

ルックアップ フィールドが必要なデータセットがあります。問題は、このデータセットの構造がクエリの結果によって定義されることです。上書きされるため、設定前にフィールドを TFieldDef として追加することはできません。また、開いているデータセットの構造を変更できないため、クエリの実行後に.Active = true;追加することもできません。

これを行うには何らかの方法が必要です。誰も方法を知っていますか?

編集:私が探しているものについていくつかの混乱があるようです。クエリ時にルックアップを探しているわけではありません。ルックアップ フィールド、FieldKind = fkLookup の TField オブジェクトを探しているので、クエリが結果を返した後にデータを編集するために、データベース対応のルックアップ コンボ ボックスで使用できます。これは SQL とはまったく関係がなく、すべて Delphi のデータセット モデルとデータベース対応コントロールと関係があります。

4

4 に答える 4

4

最も簡単な方法は、設計時に永続フィールドを定義することです。

SQLステートメントを変更して、サーバーから計算値を取得することもできます。

于 2009-08-19T08:06:34.373 に答える
3

データセットを開く前に、自分でフィールドを作成する必要があります。

まず、データベースからすべてのフィールド定義を取得します

  DataSet.FieldDefs.Update;

次に、各フィールド定義をループして通常のフィールドを作成し、必要に応じてルックアップ フィールドも作成します。このようなコードの簡略化されたバージョン。

  for I := 0 to DataSet.FieldDefs.Count - 1 do
  begin
    // Allocate a normal field
    AField := DataSet.FieldDefs[I].CreateField(DataSet);

    // Add lookup field if we have another table to look it up from
    if (??? this is the key field of a lookup table) then
    begin
      AField := TStringField.Create(DataSet.Owner);
      AField.FieldName := ???;
      AField.DataSet := DataSet;
      AField.FieldKind := fkLookup;
      AField.KeyFields := ???;
      AField.LookupKeyFields := ???;
      AField.LookupDataSet := ???;
      AField.LookupResultField := ???;
    end;
  end;

その後、データセットを開くことができます。

于 2009-08-20T03:55:47.197 に答える
0

フォームに 2 つのデータセットがあります (たとえば、 tblOrdertblCustomer )注文の 1 つのフィールドは、顧客テーブルcustomerId
への外部キーです 顧客テーブル のキー フィールドはId、 Name = Nameです


すべてのフィールドを追加します (データセット、フィールド エディターを右クリックし、すべてのフィールドを追加します。

次に、注文テーブルを右クリックし、フィールド エディターを選択してから、新しいフィールドを右クリックします。

Name = myLookup、Type は文字列、Size は xx、FieldType = Lookupです。
キー フィールド = customerid、データセット = tblCustomer、ルックアップ キー = Id、結果フィールド = Name

これでルックアップ フィールドが定義されました。
エディターで (TDBLookupCombo などで) 動作させるには、フォームdsOrder
にデータソースを追加します 。それを tblOrder に接続します。

ここで、datasource = dsOrder,Field = myLookup
を設定します。ルックアップ ソースを設定する必要はありません...

于 2009-08-22T06:17:33.900 に答える