![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
---|Ветка была без названия|---
Дмитрий К.К. © (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!