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.