Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
Delphi
(Модератор:
x77
) > Тема:
Packed records
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Packed records (Прочитано 10001 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Spender
Гость
Packed records
«
:
11-01-2006 16:45 »
Существует некое множество:
States = set of (A, B, C, D );
Существует структура, которая в качестве одного из полей содержит текущее состояние
Params = packed record
Name: string;
Number: integer;
curState: States;
Reserves: array[0..85] of byte;
end;
Существует класс, который со всем этим работает. В частности функции чтения/записи данных
function TestClass.Save: boolean;
var
FullName: string;
F: File;
Version: Integer;
begin
DataPath := '.\Data\';
if DirectoryExists(DataPath) or ForceDirectories(DataPath) then
begin
FullName := DataPath + IntToStr( Configuration.Number ) + '.tst';
if FileExists(FullName) then
DeleteFile(FullName);
AssignFile(F, FullName);
Rewrite(F, 1);
Version := 843334230; // VBD2 signature
BlockWrite(F, Version, sizeof(Version));
BlockWrite(F, Configuration, sizeof(Configuration));
CloseFile(F);
end;
Result := IOResult = 0;
end;
Вопрос заключается в том, что если я захочу добавить ещё одно состояние
States = set of (A, B, C, D, E );
то все перестает работать, так как размер меняется.
Почему так происходит, ведь я меню множество, при этом класс содержит текущее значение состояния, а не все множество.
Наличие packed является обязательным?!
«
Последнее редактирование: 18-12-2007 21:42 от Алексей1153++
»
Записан
Igel
Опытный
Offline
Пол:
Re: Packed records
«
Ответ #1 :
11-01-2006 17:42 »
Что-то я не понял. Т.е. ты в одной сессии программы создал запись и сохранил на диске параметры записи. По том изменил код программы, добавив во множество еще одно значение. И теперь с диска сохраненная запись не читается?
Может быть действительно из-за Packed. Только мне кажется это не тот путь. На этапе отладки, создания мне кажется такой проблемой не стоит зашиваться, тем более это не проблема, а просто доработка программы. Если же планируется или прогнозируется, что такое может быть в процессе эксплуатации (изменение например программного кода), то нужно проработать механизмы чтения и записи. Например отслеживать версию.
Записан
Ёжики, это не только ценные шкурки...
Spender
Гость
Re: Packed records
«
Ответ #2 :
11-01-2006 20:06 »
В том-то и дело, что программа давно функционирует. А текущая задача поменять базу данных. Просто не очень верится в то, что придется писать конвертер такой сложный. Ведь необходимо иметь информацию о старом множестве, новом множестве и аккуратно их поменять. Кто-нибудь знает выход попроще.
Записан
Igel
Опытный
Offline
Пол:
Re: Packed records
«
Ответ #3 :
12-01-2006 05:07 »
Именно БД? А при чем здесь запись в файл?
Записан
Ёжики, это не только ценные шкурки...
Spender
Гость
Re: Packed records
«
Ответ #4 :
12-01-2006 06:50 »
Ну база данных в смысле том, что это файл, в котором хранится информация. Да, реальные технолонии БД не применяются.
Записан
zubr
Гость
Re: Packed records
«
Ответ #5 :
12-01-2006 07:48 »
Цитата
Почему так происходит, ведь я меню множество, при этом класс содержит текущее значение состояния, а не все множество.
Наличие packed является обязательным?!
Размер множества поменяется, соответственно поменяется размер струтуры - ведь память выделяется под весь размер множества независимо от того сколько членов множества задействовано. Придется тебе как-то конвертировать файл, имхо.
Записан
Igel
Опытный
Offline
Пол:
Re: Packed records
«
Ответ #6 :
12-01-2006 16:41 »
Если тебе просто конвертнуть базу, то тут-то как раз проблем нет. Старая стуктура тебе известна, новая то-же.
Читаешь по старой структуре, преобразуешь в новую. Например две переменные recOld и recNew. В первую считываешь данные, во вторую спреобразуешь и сохраняешь вторую в новый файл, а в конце файл переименовываешь.
Только вот меня терзают смутные сомнения, что та структура, что ты дал плюс намеки на БД и классы, что все тут не просто так. Возможна завязка межу записями в файле хитрая какая... Хотя это уже детали, выпадающие из общей темы...
Записан
Ёжики, это не только ценные шкурки...
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
Delphi
(Модератор:
x77
) > Тема:
Packed records
Загружается...