Динамическое создание структуры RECORD
Модератор: Модераторы
- bloodlines
- постоялец
- Сообщения: 100
- Зарегистрирован: 05.11.2008 10:26:19
Динамическое создание структуры RECORD
Собственно проблема. Из спец. файла производится последовательное чтение с помощью структуры типа PACKED RECORD, которую приходиться чётко описывать в разделе TYPE. Но можно ли создать такую структуру динамически, т.е. в зависимости от определённых условий добавить необходимые поля. Единственное, что пока приходит на ум это TCollection. Вообще использую PACKED RECORD для чтения данных из *.BTR файла. Но для каждого нового файла приходиться заново заводить своё описание PACKED RECORD, а хотелось бы получить нечто в стиле TDBF. Покопавшись в исходниках последнего понял, что используется TCollection. Собственно, можно ли както модифицировать структуры PACKED RECORD или использовать TCollection для чтения данных из файла?
record и TCollection cовершенно разные вещи. Это всёравно, что сравнивать лопату с ведром и спрашивать "как можно сделать так чтобы в лопате носить воду" 
- bloodlines
- постоялец
- Сообщения: 100
- Зарегистрирован: 05.11.2008 10:26:19
record и TCollection cовершенно разные вещи
Полностью согласен. Но суть вопроса не в совмещении этих двух типов. TCollection упомянул в связи с TDBF.
TMemDataSet?
Mr.Smart писал(а):record и TCollection cовершенно разные вещи. Это всёравно, что сравнивать лопату с ведром и спрашивать "как можно сделать так чтобы в лопате носить воду"
Ну, при неизбежности, можно кувалдой сделать в лопате углубление
Понравилось сравнение, спасибо!
Добавлено спустя 7 минут 53 секунды:
Record, это в реале последовательный, неразрывный участок памяти, в котором располагаются описанные переменные. Динамически это можно сделать, если единый пул загрузить в память, а потом через определенные промежутки (смещения), участки памяти приводить к нужным типам. Структуру такого пула, нужно также хранить и прочитывать вместе с пулом, чтобы знать что за чем следует и какие данные. Другого метода я не знаю. Сама Record, это лишь указание компилятору, по какому адресу находятся данные и что с ними можно делать.
- bloodlines
- постоялец
- Сообщения: 100
- Зарегистрирован: 05.11.2008 10:26:19
TMemDataSet
А можно немного по подробнее?
Файлы с гибкой структурой? - XML, например.
v-t-l писал(а):Файлы с гибкой структурой? - XML, например.
Нет в данном случае имеется ввиду файл базы данных *.BTR
bloodlines писал(а):TMemDataSet
А можно немного по подробнее?
Вам в любом случае придётся парсить файл базы данных (*.BTR), а TMemDataSet это просто компонент представляющий базу в памяти в своей структуре (удобен для создания временных таблиц, которые сохранять негде не нужно!). Хотя можно подсмотреть как он хранит и предоставляет данные в память
TDBF тоже умеет свои таблицы в памяти хранить. Только нет механизма запросов... 
- bloodlines
- постоялец
- Сообщения: 100
- Зарегистрирован: 05.11.2008 10:26:19
Вам в любом случае придётся парсить файл базы данных (*.BTR)
Парсить их уже умею. Хватает стандартных функций из Pervasive SDK. Вообщем могу уже выполнять почти все операции с BTR файлами (кроме разве что продвинутых SQL запросов, которые знают как выполнять только сами разрабы
TMemDataset позволяет динамически создать структуру с нужными типами на лету - это то, что надо.
Хотя я бы обошелся TList или связанным списком - в свое время написал самописку для чтения *.dbf файлов.
> Vadim
Речь не о данных, а о структуре файла.
Хотя я бы обошелся TList или связанным списком - в свое время написал самописку для чтения *.dbf файлов.
> Vadim
Речь не о данных, а о структуре файла.
- bloodlines
- постоялец
- Сообщения: 100
- Зарегистрирован: 05.11.2008 10:26:19
TMemDataset позволяет динамически создать структуру с нужными типами на лету - это то, что надо.
Я конечно извиняюсь, но можно пожалуйста пример кода?
Можно визуально увидеть - кинете на форму TMemDataset.
И посмотрите свойство FielDefs. Создаете Field и выбираете нужный DataType.
И посмотрите свойство FielDefs. Создаете Field и выбираете нужный DataType.
Код: Выделить всё
MemDataset1.FieldDefs.Add(...);GrayEddy писал(а):Речь не о данных, а о структуре файла.
Может быть Вы удивитесь, но я это понимаю.
GrayEddy писал(а):TMemDataset позволяет динамически создать структуру с нужными типами на лету - это то, что надо.
Абсолютно тоже самое можно сказать и о TDBF.
- bloodlines
- постоялец
- Сообщения: 100
- Зарегистрирован: 05.11.2008 10:26:19
Абсолютно тоже самое можно сказать и о TDBF.
Согласен. Я об этом уже писал.
Спасибо! Тогда я скорее всего смогу сделать свою компоненту TSimpleBtrTable наследником TMemDataset и велосипед изобретать не надо будет (извиняюсь за оффтоп это по моему уже к Лазарю относится)... Осталось только попробовать из BTR прочитать с помощью этой структуры...
