Как создать такой класс?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Lemboy
незнакомец
Сообщения: 8
Зарегистрирован: 14.02.2010 00:46:13
Откуда: Крым

Как создать такой класс?

Сообщение Lemboy »

Бьюсь уже неделю, не получается...

Хочеться создать несколько универсальных классов для работы с БД (выбран движок SQLite).
В частности класс для работы со списками (к примеру, справочниками) с некоторыми специфическими возможностями - отображение в виде групп и т.д.
Загвоздка в следующем - не могу реализовать такую штуку, как создание полей справочника в коде при создании экземпляра класса. Примерно так вот:

Код: Выделить всё

var
  DictContr: TDict;
  MyName: String;
...
DictCont := TDict.Create;
DictContr.DataSrc := qryDict;     // qryDict: TSQLQuery
DictContr.AddField('ID');            // Привязывается к qryDict.FieldByName('ID')
DictContr.AddField('NAME');
...
MyName := DictContr.ID.AsString;

Я не сильно размечтался? Или, может быть, вообще есть более другое решение для таких вещей?
Аватара пользователя
Максим
энтузиаст
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Максим »

Чем не устраивает TList либо динамический массив?
Lemboy
незнакомец
Сообщения: 8
Зарегистрирован: 14.02.2010 00:46:13
Откуда: Крым

Сообщение Lemboy »

Максим
Может быть и устраивает, можно пример в 2-х словах?
Аватара пользователя
Максим
энтузиаст
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Максим »

А какой пример нужно? Как работать с динамическим массивом? Так это есть и в документации к FPC, и в книжках/примерах по Delphi.

Чтобы дать более развёрнутый ответ, мне нужно знать, что конкретно у вас не получается. В вашем сообщении такой информации явно не достаточно.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Вместо DictCont := TDict.Create;, скорее всего, нужно писать DictContr := TDict.Create;
Аватара пользователя
AbakAngelSoft
постоялец
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар
Контактная информация:

Сообщение AbakAngelSoft »

Lemboy писал(а):создание полей справочника в коде при создании экземпляра класса

Lemboy писал(а):DictContr.AddField('ID');

Lemboy писал(а):DictContr.ID.AsString;

Поля класса создать в run-time невозможно!

Такой вариант не подойдет:

Код: Выделить всё

  TDictContr = class ...
  public
    property Field[Name: String]: TField read GetField write SetField; default;
  end;

Если создаваемые поля хранить в динамическом списке тогда их можно будет создавать в run-time и обращаться:

Код: Выделить всё

DictContr['ID'].AsString

Только про безопасность можно забыть все проверки тоже только в run-time
Lemboy
незнакомец
Сообщения: 8
Зарегистрирован: 14.02.2010 00:46:13
Откуда: Крым

Сообщение Lemboy »

AbakAngelSoft писал(а):Поля класса создать в run-time невозможно!

Увы...
AbakAngelSoft писал(а):Если создаваемые поля хранить в динамическом списке тогда их можно будет создавать в run-time и обращаться:
DictContr['ID'].AsString

Тогда уж буду использовать, хоть и длинновато:

Код: Выделить всё

DictContr.DataSrc.FieldByName['ID'].AsString

Спасибо!
Ответить