Как я могу получить набор данных объектов в памяти?

Кто-нибудь знает о потомке TDataset, который работает с Generics и RTTI, чтобы я мог писать такой код и использовать компоненты с поддержкой данных в графическом интерфейсе? :

...
ds:TDataset<TPerson>;
...

procedure DoStuff;
begin    
  ds:=TDataset<TPerson>.create;
  ds.add(TPerson.Create('A.','Hitler',77));
  ds.add(TPerson.Create('O.','Bin Laden',88));
 end; 

Это должно быть возможным. Fielddefs можно создать с помощью RTTI, поскольку известен точный тип данных. Значения также можно автоматически упорядочивать туда и обратно, поэтому вы можете просматривать и редактировать данные, которые находятся в классе или записи.

Я ненавижу писать много бесполезного сортировочного кода, в то время как необходимая информация для этого уже доступна через RTTI.

А может быть кто-то когда-то писал какой-то адаптер TEnumerable‹->TDataset?

Что-то подобное существует, или мне начать писать?

...

Самое близкое, что я смог найти, это (отлично!) пример от Marco Cantu, из Mastering Delphi 7, но сам код не использует новые возможности языка, такие как дженерики, новая система RTTI или атрибуты, и она не работает с Unicode delphi. TDataset также изменился с D7.


person Wouter van Nifterick    schedule 02.03.2012    source источник
comment
Я использовал компонент, основанный на коде Marco Cantus ObjectDataSet, и он стал Объектом большой ненависти и презрения, как только он был глубоко встроен в приложение, разрабатываемое командой разработчиков Delphi. Поэтому, если он станет важной частью вашей архитектуры в большом приложении, подумайте еще раз. В то время это казалось такой хорошей идеей, и теперь она живет в моей памяти как один из самых ужасных элементов любого приложения Delphi. Я потратил 500 часов на поиск странных сбоев внутри него, поэтому я никогда больше никому не порекомендую этот подход.   -  person Warren P    schedule 02.03.2012
comment
Это в основном для отладки... для быстрого просмотра состояния коллекции объектов. Отладчик Delphi немного бесполезен, если вы хотите быстро сканировать большое количество объектов в памяти. Теперь я использую SuperObject для сериализации в tmemo в формате json. Наличие сетки БД было бы легче читать.   -  person Wouter van Nifterick    schedule 02.03.2012


Ответы (5)


TAureliusDataSet, входящий в состав TMS Aurelius, очень близок к этому.

person Uwe Raabe    schedule 02.03.2012

Взгляните на набор данных EverClassy от Inovativa на www. inovativa.com.br/public.

person AlexSC    schedule 08.03.2013

другой — набор данных Snap Object http://digilander.libero.it/snapobject/.

person vavan    schedule 01.11.2013

DotNet4Delphi от Технология планирования A-Dato из Нидерландов подойдет вам.

введите здесь описание изображения

Котировки:

Из Delphi Торри

Подключите любую коллекцию к своим элементам управления данными.

DotNet4Delphi реализует множество классов коллекций .Net, включая универсальные типы, такие как List‹> и Dictionary‹>. Отличие от их аналога Delphi заключается в том, что наши универсальные коллекции также реализуют неуниверсальные интерфейсы (IList, IDictionary), позволяющие вам получать доступ к вашим коллекциям несколькими способами. Это открывает двери для использования любой коллекции в качестве источника данных для элементов управления, поддерживающих данные, что и обеспечивает (также включенный) компонент TListDataset.

Он нацелен на Delphi XE и XE2.

Это инициатива с открытым исходным кодом, Delphi рулит!!!

person menjaraz    schedule 09.04.2012

Я нашел более подходящий ресурс и не могу не поделиться им! Настолько актуально, что я думаю, что он заслуживает отдельного поста, а не просто обновления в моем первом ответе.


Библиотека Dduce для Delphi XE2-XE6 использует TListDataSet<...> универсальный набор данных. компонент, который можно использовать для представления общего списка в виде TDataSet.

Наиболее важными единицами, относящимися к реализации общего набора данных, являются:

Иерархия классов:

TDataSet ‹= TCustomVirtualDataset ‹= TListDataset ‹= TListDataset‹T›

Да, он наследует множество функций... единственное желание - иметь в своем распоряжении версию, работающую с меньшими требованиями (Delphi XE без большинства других наворотов).

Смотреть и чувствовать:

введите здесь описание изображения

person menjaraz    schedule 24.01.2015
comment
Спасибо, это выглядит полезным. Я проверяю это прямо сейчас. Хороший! - person Wouter van Nifterick; 25.01.2015