Titan Error 22, после перехода с 7.11 на 7.12
Модераторы: m0p3e, edward_K, Модераторы
Titan Error 22, после перехода с 7.11 на 7.12
используются: Delphi 6, Pervasive SQL 2000i, Titan
программка делала отчеты, собирая данные из нескольких таблиц, пересчитывая и тп.
всё работало.
обновили Галактику с 7.11 до 7.12, конвертировали базу
=> при обращении к таблице SPORDER в конвертированной базе выдается следующее:
"Btrieve Status 22 - The data buffer parameter is too short.
DBI Erro Code = Titan (BDE) Error 22."
Вылетает на третьей строке вот этого куска кода:
//
tbTable7.TableName:='SPORDER';
tbTable7.IndexName:='12 - CSPSOPR+VIDORDER+DORD';
tbTable7.Active:=true; //вот тут
//
Вот что пишут в "Btrieve™ Status Codes & Messages":
"
22: The data buffer parameter is too short.
The data buffer parameter specified by the application was not large enough to accommodate either the minimum length of the record for an Insert or Update operation, or the entire record length for a Get or Step operation. Also, the data buffer may not be large enough to accommodate the length of data required for operations such as Create, Create Index, Stat, Get By Percentage, Find Percentage, or Version.
For Get or Step operations, the MicroKernel returns as much data as it can and this status code, indicating that it cannot return the entire record.
For an Insert operation, the MicroKernel does not insert the record if the data buffer is shorter than the fixed-length portion of the record.
For an Update operation, if the data buffer is too short to contain the fixed-length portion of a record, the MicroKernel does not update the record.
For the Create, Stat, and Create Index operations, the data buffer is not long enough to contain all the file specifications, the key specifications, and (if specified) the ACS definition.
For the Get by Percentage or Find Percentage operation, the data buffer length is less than 4 bytes.
For the Version operation, the data buffer length is less than 5 bytes.
This status code can also indicate a corrupt file if the file allows variable-length records and you receive this status code on a Get or Step operation. In such a corrupt file, you can receive Status Code 54 when you use Get or Step operations to read other records. Recover the file according to the instructions in the User's Guide.
"
То есть либо не хватает размера буфера (если так, то где он задается?), либо "This status code can also indicate a corrupt file if the file allows variable-length records" (файл битый, так?), но в то же время самой Галактикой эта табличка спокойно просматривается.
Если натравливаю программку на неконвертированную базу - все работает. На конвертированной - вот такая вот беда.
Причем обращения к нескольким остальным таблицам (KATMC, KATSOPR, SPSOPR и тп.) идут нормально, то есть если комментирую в коде все что связано с SPORDER, либо если в базу копирую _старый_ SPORDER.dat то все работает.
В чем может быть дело? И как с этим бороться...? Никак не соображу... Неужели кривые руки?
Help plz
программка делала отчеты, собирая данные из нескольких таблиц, пересчитывая и тп.
всё работало.
обновили Галактику с 7.11 до 7.12, конвертировали базу
=> при обращении к таблице SPORDER в конвертированной базе выдается следующее:
"Btrieve Status 22 - The data buffer parameter is too short.
DBI Erro Code = Titan (BDE) Error 22."
Вылетает на третьей строке вот этого куска кода:
//
tbTable7.TableName:='SPORDER';
tbTable7.IndexName:='12 - CSPSOPR+VIDORDER+DORD';
tbTable7.Active:=true; //вот тут
//
Вот что пишут в "Btrieve™ Status Codes & Messages":
"
22: The data buffer parameter is too short.
The data buffer parameter specified by the application was not large enough to accommodate either the minimum length of the record for an Insert or Update operation, or the entire record length for a Get or Step operation. Also, the data buffer may not be large enough to accommodate the length of data required for operations such as Create, Create Index, Stat, Get By Percentage, Find Percentage, or Version.
For Get or Step operations, the MicroKernel returns as much data as it can and this status code, indicating that it cannot return the entire record.
For an Insert operation, the MicroKernel does not insert the record if the data buffer is shorter than the fixed-length portion of the record.
For an Update operation, if the data buffer is too short to contain the fixed-length portion of a record, the MicroKernel does not update the record.
For the Create, Stat, and Create Index operations, the data buffer is not long enough to contain all the file specifications, the key specifications, and (if specified) the ACS definition.
For the Get by Percentage or Find Percentage operation, the data buffer length is less than 4 bytes.
For the Version operation, the data buffer length is less than 5 bytes.
This status code can also indicate a corrupt file if the file allows variable-length records and you receive this status code on a Get or Step operation. In such a corrupt file, you can receive Status Code 54 when you use Get or Step operations to read other records. Recover the file according to the instructions in the User's Guide.
"
То есть либо не хватает размера буфера (если так, то где он задается?), либо "This status code can also indicate a corrupt file if the file allows variable-length records" (файл битый, так?), но в то же время самой Галактикой эта табличка спокойно просматривается.
Если натравливаю программку на неконвертированную базу - все работает. На конвертированной - вот такая вот беда.
Причем обращения к нескольким остальным таблицам (KATMC, KATSOPR, SPSOPR и тп.) идут нормально, то есть если комментирую в коде все что связано с SPORDER, либо если в базу копирую _старый_ SPORDER.dat то все работает.
В чем может быть дело? И как с этим бороться...? Никак не соображу... Неужели кривые руки?
Help plz
спасибо.Алексей писал(а):Это не отдельная программа, а часть саппорта. Его модуль. Как SQL или журнализация, так же и ADF2DDF. У вас должна быть лицензия на этот модуль, что бы из саппорт а запускать этот модуль.
Это НЕ отдельная программа, при чём тут Ехе-шник.
этот модуль не куплен
какие-то еще пути есть? кроме покупки
удалил в galnet.cfg адрес на ключик.sim писал(а):зайди в support в демо-режиме, будет доступна утилита adf-ddf
вот только будет ли она работать в таком варианте? история об этом умалчивает
запустился саппорт. ругнулся. сказал что работает в демо.
в [=]->"Главное меню" и в [=]->"Утилиты" нету adf2ddf... похоже что нельзя... щас попробую переставить саппорт не подсовывая ему лики
Последний раз редактировалось VIY 10 фев 2006, 12:45, всего редактировалось 1 раз.
хм...
в общем сделалось data\ddf\*.ddf
скопировал их еще и в data\
саппортом же еще и проверил целостность таблиц базы. он вроде как отрапортовал, что все в норме.
запускаю прогу. опять та же история. с другими таблицами вроде все норм, с sporder - error 22 :\
действия были правильными?
где еще теоретически может быть беда?
RECOVER2.BAT натравленный на эту таблицу тоже не помог... эффект тот же.
Может дело в загадочном буфере?
А может ли помочь установка свежей версии Pervasive ? или Титана?
уже не знаю за что цепляться... поставил ну другой комп Delphi, пробовал откомпилировать там - не помогло. Все та же ошибка.
в общем сделалось data\ddf\*.ddf
скопировал их еще и в data\
саппортом же еще и проверил целостность таблиц базы. он вроде как отрапортовал, что все в норме.
запускаю прогу. опять та же история. с другими таблицами вроде все норм, с sporder - error 22 :\
действия были правильными?
где еще теоретически может быть беда?
RECOVER2.BAT натравленный на эту таблицу тоже не помог... эффект тот же.
Может дело в загадочном буфере?
А может ли помочь установка свежей версии Pervasive ? или Титана?
уже не знаю за что цепляться... поставил ну другой комп Delphi, пробовал откомпилировать там - не помогло. Все та же ошибка.
посмотрел свойства таблиц SPORDER в 7.11 и 7.12...
в глаза бросилось, что в версии от 7.11 "Number of Indexes" = 29, а в версии от 7.12 их уже 30.
Может беда компоненты что не может глотать такие большие таблицы (более 100 Мб) с таким количеством индексов... завтра попробую поэкспериментировать...
Никто не сталкивался с похожим?
Другие идеи появления ошибки есть?
в глаза бросилось, что в версии от 7.11 "Number of Indexes" = 29, а в версии от 7.12 их уже 30.
Может беда компоненты что не может глотать такие большие таблицы (более 100 Мб) с таким количеством индексов... завтра попробую поэкспериментировать...
Никто не сталкивался с похожим?
Другие идеи появления ошибки есть?
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
А проект пересобирать типа не надо ?
Титановские компоненты с однажды определенной структурой сами умеют перестраиваться на основе словаря ? Скорее всего нет ...
1) У всех проблемных таблиц в проекте удалить все поля
2) Произвести их отключение/подключение дабы компонента смогла перечитать структуру таблицы
3) У всех проблемных таблиц в проекте добавить поля
4) Пересобрать проект
Титановские компоненты с однажды определенной структурой сами умеют перестраиваться на основе словаря ? Скорее всего нет ...
1) У всех проблемных таблиц в проекте удалить все поля
2) Произвести их отключение/подключение дабы компонента смогла перечитать структуру таблицы
3) У всех проблемных таблиц в проекте добавить поля
4) Пересобрать проект
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Сегодня делал следующее:Goblin писал(а):А проект пересобирать типа не надо ?
Титановские компоненты с однажды определенной структурой сами умеют перестраиваться на основе словаря ? Скорее всего нет ...
1) У всех проблемных таблиц в проекте удалить все поля
2) Произвести их отключение/подключение дабы компонента смогла перечитать структуру таблицы
3) У всех проблемных таблиц в проекте добавить поля
4) Пересобрать проект
1. Скопировал конвертированную в 7.12 базу на жесткий (H:\Feb\data\)
2. Настроил локальную Галактику на эту базу
3. Прогнал базу через ADF2DDF, используя на время лишенный lic-файла саппорт. Файлы DDF скопировал в корневик базы (H:\Feb\data\)
4. Создал в Delphi 6.0 _новый_ проект.
5. Положил на форму:
- tbDataBase
- tbTable (2 штуки)
6. Прописал в tbDataBase:
- AliasName = H:\Feb\data\
- DataBase = MyBase
- SessionName = Btrieve
7. В таблице tbTable1 :
- Databasename = MyBase
- кликаю в TableName - показывается окошко первасива(соединение с базой). прячется. в TableName выводится перечень таблиц базы. Выбираю первую попавшуюся (ну, например, SPISK).
- кликаю в IndexName - показывается перечень... выбираю любой. Всё ок.
8. В таблице tbTable2 :
- Databasename = MyBase
- кликаю в TableName - выводится перечень таблиц базы. Выбираю на этот раз уже конкретно SPORDER. Выбрал.
- кликаю в IndexName - вываливается та самая ошибка "Btrieve Status 22 - The data buffer parameter is too short. DBI Erro Code = Titan (BDE) Error 22."
===============================================
вот такие вот дела... :/