Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2012, 12:27   #1
Khayzenberg
Пользователь
 
Регистрация: 21.07.2011
Сообщений: 54
Вопрос мини БД на основе конструкции

Естественно, что мини БД это громко сказано! На самом деле есть конструкция:
--------------------------------------------------------------------------
type TFieldName = array of ShortString;//массив имен полей таблицы

type TFieldType = array of TTypes;//типи данных полей таблицы

type THeading = record//заголовок таблицы
FieldName:TFieldName;//имена полей таблицы
FieldType:TFieldType;//типы полей таблицы
end;

type TCell=array of String;//одна ячейка это строка

type TRow = array of TCell;//ячейки строки таблицы

type TRows = array of TRow;//строки таблицы

type TMyTable = record//таблица
Title:ShortString;//имя таблицы
Heading:THeading;//шапка таблицы
Row:TRows;//рядки таблицы
end;

type TMyTabls = array of TMyTable;//одна с таблиц

type TMyDB=^TMDB;
TMDB = record
Table:TMyTabls;//таблицы
end;
------------------------------------------------------------------------
Можно ли эту конструкцию сохранять и читать без потери данных с файла. И вообще правильная ли реализация. Может у кого будет идея получше, выслушаю все!
Khayzenberg вне форума Ответить с цитированием
Старый 30.09.2012, 22:08   #2
xoodoo
Форумчанин
 
Регистрация: 11.04.2012
Сообщений: 212
По умолчанию

Цитата:
Может у кого будет идея получше
Не страдать изобретением велосипеда, если конечно это не учебная задача, а взять на вооружение любую из готовых реализаций, например, TADODataSet или TClientDataSet.
xoodoo вне форума Ответить с цитированием
Старый 30.09.2012, 22:12   #3
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

вот в данном случае я за TClientDataSet
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 30.09.2012, 23:07   #4
Khayzenberg
Пользователь
 
Регистрация: 21.07.2011
Сообщений: 54
По умолчанию

В том то й дело что это и есть учебная задача( а плюс самому интересно! Прошу помогите, или ссылки на ресурсы....
Khayzenberg вне форума Ответить с цитированием
Старый 01.10.2012, 09:17   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) конструкция вида array of <что-то> в Delphi - это УКАЗАТЕЛЬ.
Писать его в файл абсолютно БЕССМЫСЛЕННО и БЕСПОЛЕЗНО!
Если это Вам действительно необходимо, тогда можно для каждого типа написать процедуру сохранения, когда сначала записывается значение размерность массива, потом (в цикле) - элементы массива. При этом не забудьте, что элементы типа String (для AnsiString) - это по сути тоже указатели, каждая строчка в этом случае тоже должна записываться - сначала длина, потом содержимое строки. При чтении поступать обратным образом - считываем размерность, выделяем память, считываем элементы в выделенную память.
Технически в этом нет никаких проблем.

2) а почему бы не воспользоваться ООП ? Классы - это те же структуры данных + методы их обработки. В качестве подобных методов в вашем случае будут процедуры сохранения/чтения.
Цитата:
type TCell=array of String;//одна ячейка это строка
3) а что, в вашей таблице могут быть только строки? (впрочем, справедливости ради надо признать, что такие форматы таблиц есть. Например, DBF содержит исключительно текстовые данные)

4) БД - это не только возможность что-то записать и прочитать. Это ещё возможность эффективно получать необходимые данные (наличие ключей, индексов и т.п.) и возможность эффективно манипулировать этими данными (ну представьте, что будет с файлом вашей "мини БД", если Вы добавите таблицу или удалите одну из таблиц... Прийдётся полностью перезаписывать ВСЕ данные? Или когда удалена одна строчка из таблицы - тоже перезапись всей БД ?



p.s. всё это в Delphi давным давно реализовано. Можете "подглядывать" в исходники...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические конструкции San111 Паскаль, Turbo Pascal, PascalABC.NET 7 16.05.2012 09:27
Цикл конструкции Do While Trimbl Microsoft Office Excel 2 29.02.2012 19:00
Интересные конструкции с++ Sparky Помощь студентам 6 13.10.2011 22:47
циклические конструкции nex 9119 Помощь студентам 1 18.12.2010 17:34
Вопрос по конструкции if() С++ ROD Помощь студентам 2 20.12.2008 20:14