![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток.
Решил я написать очередной велосипед - небольшую БД для себя. Встал вопрос - как хранить данные строки, притом что количество и тип полей заранее неизвестно? Можно ли в Run-time создавать record-ы, содержащие данные нужных типов? Заранее спасибо. |
|
#2
|
||||
|
||||
|
нет, в рантайме рекорд не сделать, да это и не нужно для этой задачи. Делается обычно вот что:
Сначала создается заголовок файла, где содержится описание количества полей в структуре. Далее идет описние каждого поля в отдельности. На основании этой информации вы можете уже узнать размерность записи и соответственно вычислить положение любой записи в БД. Эта схема примерно описывает классический DBF. Схема эта во многом удобна, но не будет работать, если у вас используются поля имеющие нефиксированный размер. В этом случае можно поступить так, под такие данные выделить другой файл, а в основном файле хранить только позицию и длину такого поля. Так в общем и реализовано хранение Memo в DBF |
|
#3
|
|||
|
|||
|
Забыл упомянуть, я хочу делать БД, которая бы полностью в памяти хранилась. С файлами было бы куда проще, естественно.
|
|
#4
|
||||
|
||||
|
Есть же SQLite.
|
|
#5
|
||||
|
||||
|
есть уже такой велосипед и очень не плохой - для хранения таблиц в памяти удобно использовать стандартный TClientDataSet:
Код:
ClientDataSet1.FieldDefs.Clear;
ClientDataSet1.FieldDefs.Add('ID', ftInteger);
ClientDataSet1.FieldDefs.Add('Name', ftString, 10);
ClientDataSet1.CreateDataSet; |