Delphi - ADODataSet Subset

Я создаю форму в Delphi, в которой есть раскрывающийся список служб и сетка надстроек для выбранной службы. Данные, которые я получаю, поступают из API, и я храню данные для служб в ADODataSet следующим образом:

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

Я хотел бы, чтобы сетка заполнялась данными AddOn на основе выбора из выпадающего меню (у каждого Сервиса есть свой список надстроек). Как сохранить информацию AddOn, чтобы она могла быть связана с информацией о Сервисе? Нужно ли создавать второй ADODataSet или есть способ сохранить его в том же ADODataSet, что и службы?

Аддоны имеют следующие поля:

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

Я использую Delphi 2005 и у меня есть Indy для Delphi.

РЕДАКТИРОВАТЬ

В поисках редактора полей для наборов данных я обнаружил, что могу создать поле типа DataSet. Позволит ли это мне связать их вместе? Если так, может кто-нибудь объяснить, как это делается?

Я попытался сделать это, создав второй набор данных (ADODataSetAddOns) и присвоив новый набор данных полю набора данных в первом наборе данных (ADODataSetServices.AddOns), но получил сообщение об ошибке "Нет соответствующего типа данных ADO для набора данных", которое, как я полагаю, ссылаясь на поле AddOns, не находя набор данных.

1 ответ

Решение

Вы можете использовать 2 набора данных (master-detail), чтобы показать связь между Сервисами и Дополнениями, а затем использовать TClientDataset в качестве набора данных памяти вы можете сохранить выборки, используя Service Id, Addon 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;

и, наконец, когда вам нужно передать данные, выбранные пользователем, в службу, вы можете перебирать ClientDataset так же, как любой TDataset.

Другие вопросы по тегам