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

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

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

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

Сообщение Lemboy » 25.02.2010 23:26:48

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

Хочеться создать несколько универсальных классов для работы с БД (выбран движок 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;

Я не сильно размечтался? Или, может быть, вообще есть более другое решение для таких вещей?
Lemboy
незнакомец
 
Сообщения: 8
Зарегистрирован: 14.02.2010 01:46:13
Откуда: Крым

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

Сообщение Максим » 26.02.2010 00:54:28

Чем не устраивает TList либо динамический массив?
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 598
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

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

Сообщение Lemboy » 26.02.2010 11:24:34

Максим
Может быть и устраивает, можно пример в 2-х словах?
Lemboy
незнакомец
 
Сообщения: 8
Зарегистрирован: 14.02.2010 01:46:13
Откуда: Крым

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

Сообщение Максим » 27.02.2010 01:11:17

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

Чтобы дать более развёрнутый ответ, мне нужно знать, что конкретно у вас не получается. В вашем сообщении такой информации явно не достаточно.
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 598
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

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

Сообщение VirtUX » 27.02.2010 02:35:57

Вместо DictCont := TDict.Create;, скорее всего, нужно писать DictContr := TDict.Create;
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение AbakAngelSoft » 27.02.2010 11:03:01

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
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

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

Сообщение Lemboy » 27.02.2010 21:01:12

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

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

Тогда уж буду использовать, хоть и длинновато:
Код: Выделить всё
DictContr.DataSrc.FieldByName['ID'].AsString

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


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 55

Рейтинг@Mail.ru