2

サービスのドロップダウンと選択したサービスのアドオンのグリッドを持つフォームを Delphi で作成しています。私が取得しているデータは API から取得され、サービスのデータを次のように ADODataSet に格納しています。

ID (integer)
Name (string)
Description (string)
BasePrice (currency)
AddOns (array of AddOn, not currently stored in the ADODataSet)

ドロップダウンからの選択に基づいて、グリッドに AddOn データを入力したいと思います (各サービスには、アドオンの異なるリストがあります)。サービス情報に関連付けられるように、アドオン情報を保存するにはどうすればよいですか? 2 番目の ADODataSet を作成する必要がありますか、それともサービスと同じ ADODataSet に格納する方法はありますか?

アドオンには次のフィールドがあります。

ID (integer)
Name (string)
Description (string)
UnitPrice (currency)
Quantity (integer)

私は Delphi 2005 を使用しており、Indy for Delphi を使用しています。

編集

データセットのフィールド エディターを調べてみると、「DataSet」タイプのフィールドを作成できることがわかりました。これで2つを結び付けることができますか?もしそうなら、誰かがそれがどのように行われるか説明できますか?

2 番目のデータセット (ADODataSetAddOns) を作成し、最初のデータセット (ADODataSetServices.AddOns) のデータセット フィールドに新しいデータセットを割り当てることでそれを実行しようとしましたが、「データセットに一致する ADO データ型がありません」というエラー メッセージが表示されます。データセットが見つからない AddOns フィールドを参照しています。

4

1 に答える 1

2

2つのデータセット(master-detail)を使用して、サービスとアドオンの関係を示し、メモリデータセットとして、ペアをインデックスとしてTClientDataset使用して選択を保存できます。このクライアントデータセットの構造は、次のように実行時に作成できます。Service IdAddon Id

  ClientDataSet1.FieldDefs.Clear;
  ClientDataSet1.FieldDefs.Add('IdService', ftInteger);
  ClientDataSet1.FieldDefs.Add('IdAddon ', ftInteger);
  //add morr fieldd here is you want 
  ClientDataSet1.IndexDefs.Add('Index1','IdService;IdAddon',[ixPrimary, ixUnique]);
  ClientDataSet1.IndexName:='Index1';
  ClientDataSet1.CreateDataSet;

最後に、ユーザーが選択したデータをサービスに渡す必要がある場合は、他のTDatasetと同じようにClientDatasetを反復処理できます。

于 2012-04-18T18:38:47.330 に答える