Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

---|Ветка была без названия|---


Дмитрий К.К. ©   (2002-12-05 12:33:00) 

В одном приложении я пользуюсь таблицей в памяти TkbmMemTable. Бывают такие ситуации, что структура таблицы меняется (от версии к версии) и новая оболочка при загрузке старого формата дает ошибку:

kbmMemTable1 := TkbmMemTable.Create(Self);
kbmMemTable1.FieldDefs.Clear;
kbmMemTable1.FieldDefs.Add("ID", ftSmallint, 0, False);
kbmMemTable1.FieldDefs.Add("Name", ftBlob, 0, False);
kbmMemTable1.FieldDefs.Add("NewField", ftSmallint, 0, False);
kbmMemTable1.CreateTable;
kbmMemTable1.Open;
kbmMemTable1.LoadFromBinaryFile("test.bin");

Ошибка - "Invalid property value"

Как исправить положение?
Спасибо.


Дмитрий К.К.   (2002-12-06 12:33:00) [1]

Пожалуй, задам вопрос на форуме разработчика TkbmMemTable.
Всем спасибо за помощь.


ЮЮ   (2002-12-06 12:02:00) [2]

Посмотреть код методов LoadFromBinaryFile, SaveToBinaryFile для начала


Дмитрий К.К.   (2002-12-06 11:47:00) [3]


> Sergey13 © (06.12.02 11:07)
> 2Дмитрий К.К. © (06.12.02 10:35)
> Тогда, ИМХО, только предварительный анализ твоего бинарника
> тебе поможет.


И с етим полностью согласен... но как сие осуществить?


Sergey13   (2002-12-06 11:07:00) [4]

2Дмитрий К.К. © (06.12.02 10:35)
>Как только меняется - тут же ошибка.
Вот ведь сволочь, нет бы недельку еще поработала.8-)
Тогда, ИМХО, только предварительный анализ твоего бинарника тебе поможет.


Дмитрий К.К.   (2002-12-06 10:35:00) [5]

2ald

Совершенно верно, идет смещение!

"Бывают ситуации" относится не к тому, что вываливается ошибка, а к тому, меняется структура. Как только меняется - тут же ошибка.

Но как бороться с ней?


ald   (2002-12-06 10:31:00) [6]

А не этот ли здесь случай, когда при изменившейся структуре таблицы ты впихиваешь данные уже неверного формата(.bin - предполагается, что в нём привязки к именам полей нет - всё одним потоком забирается. Так?). На первой же записи у тебя пойдёт смещение на размер новых полей. А что к концу загрузки будет? Смущают только слова "бывают ситуации". Мне кажется, что в такой ситуации, загрузка должна обламываться всегда.


Sergey13   (2002-12-06 10:11:00) [7]

2Дмитрий К.К. © (05.12.02 12:33)
>В одном приложении я пользуюсь таблицей в памяти TkbmMemTable. Бывают такие ситуации, что структура таблицы меняется (от версии к версии) и новая оболочка при загрузке старого формата дает ошибку:
------------------
Не очень понятна проблема. Я вот работаю с обычными таблицами в базе (иногда использую RxMemoryData) и при изменении структуры таблиц вынужден менять код программы которая с ними работает. Чего тут необычного то - нормальная работа. Все так делают. Невозможно, ИМХО, написать узко специализированную программу с приличным интерфейсом на произвольную структуру.


DarkGreen   (2002-12-06 09:37:00) [8]

Попробуй поменять имя поля "NewField" на другое


Max Zyuzin   (2002-12-06 09:12:00) [9]

Ахх.. ну извините что потревожил...


Дмитрий К.К.   (2002-12-06 09:10:00) [10]


> Max Zyuzin © (06.12.02 09:02)
> В каком месте ругается? При создании при открытии или при
> загрузке? Кстати объясните мне непонятливому, что именно
> делает строка
> kbmMemTable1.LoadFromBinaryFile("test.bin");


Подразумевается, что ответы будут давать люди ПОНЯТЛИВЫЕ.


Max Zyuzin   (2002-12-06 09:02:00) [11]

В каком месте ругается? При создании при открытии или при загрузке? Кстати объясните мне непонятливому, что именно делает строка
kbmMemTable1.LoadFromBinaryFile("test.bin");


ЮЮ   (2002-12-06 07:28:00) [12]

А без FieldDefs нельзя? Неужели в BinaryFile не хранится структура?


Дмитрий К.К.   (2002-12-06 06:46:00) [13]

Мдя...


Дмитрий К.К.   (2002-12-05 15:07:00) [14]

Up!


Наверх

Титульная страница Поиск, карта сайта Написать письмо