Страница 1 из 2

Titan Error 22, после перехода с 7.11 на 7.12

Добавлено: 09 фев 2006, 13:57
VIY
используются: 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

Добавлено: 09 фев 2006, 20:51
Max_Fin
а словарь? ADF2DDF выполнили?

Добавлено: 10 фев 2006, 10:39
VIY
Max_Fin писал(а):а словарь? ADF2DDF выполнили?
думал об этом.
нет. не выполнили(уточню, но вроде бы нет)...
в комплекте с саппортом не было ADF2DDF :/
Здесь есть выложенный?
ищу...

Добавлено: 10 фев 2006, 10:43
Алексей
этот модуль должен быть в лицензии с саппортом - это его часть.

Добавлено: 10 фев 2006, 11:41
VIY
в папке с установленным саппортом лежат
adf2ddf.cnt
и ADF2DDF.HLP
а Exe-шника нет. :/

Добавлено: 10 фев 2006, 11:44
Алексей
Это не отдельная программа, а часть саппорта. Его модуль. Как SQL или журнализация, так же и ADF2DDF. У вас должна быть лицензия на этот модуль, что бы из саппорт а запускать этот модуль.

Это НЕ отдельная программа, при чём тут Ехе-шник.

Добавлено: 10 фев 2006, 11:47
sim
зайди в support в демо-режиме, будет доступна утилита adf-ddf
вот только будет ли она работать в таком варианте? история об этом умалчивает ;)

Добавлено: 10 фев 2006, 12:35
VIY
Алексей писал(а):Это не отдельная программа, а часть саппорта. Его модуль. Как SQL или журнализация, так же и ADF2DDF. У вас должна быть лицензия на этот модуль, что бы из саппорт а запускать этот модуль.

Это НЕ отдельная программа, при чём тут Ехе-шник.
спасибо.
этот модуль не куплен :(
какие-то еще пути есть? кроме покупки
sim писал(а):зайди в support в демо-режиме, будет доступна утилита adf-ddf
вот только будет ли она работать в таком варианте? история об этом умалчивает
удалил в galnet.cfg адрес на ключик.
запустился саппорт. ругнулся. сказал что работает в демо.
в [=]->"Главное меню" и в [=]->"Утилиты" нету adf2ddf... похоже что нельзя... щас попробую переставить саппорт не подсовывая ему лики

Добавлено: 10 фев 2006, 12:41
sim
не так надо
убери на время лицензионник из SUP_EXE

Добавлено: 10 фев 2006, 12:50
VIY
уже переставил)
в менюшке появилось... вроде запустил конвертацию. посмотрим что получится... (на копии базы экспериментирую)

Добавлено: 10 фев 2006, 13:32
VIY
хм...
в общем сделалось data\ddf\*.ddf
скопировал их еще и в data\

саппортом же еще и проверил целостность таблиц базы. он вроде как отрапортовал, что все в норме.

запускаю прогу. опять та же история. с другими таблицами вроде все норм, с sporder - error 22 :\

действия были правильными?
где еще теоретически может быть беда?

RECOVER2.BAT натравленный на эту таблицу тоже не помог... эффект тот же.
Может дело в загадочном буфере?

А может ли помочь установка свежей версии Pervasive ? или Титана?
уже не знаю за что цепляться... поставил ну другой комп Delphi, пробовал откомпилировать там - не помогло. Все та же ошибка.

Добавлено: 13 фев 2006, 19:15
VIY
посмотрел свойства таблиц SPORDER в 7.11 и 7.12...
в глаза бросилось, что в версии от 7.11 "Number of Indexes" = 29, а в версии от 7.12 их уже 30.
Может беда компоненты что не может глотать такие большие таблицы (более 100 Мб) с таким количеством индексов... завтра попробую поэкспериментировать...

Никто не сталкивался с похожим?
Другие идеи появления ошибки есть?

Добавлено: 14 фев 2006, 08:42
Goblin
А проект пересобирать типа не надо ?
Титановские компоненты с однажды определенной структурой сами умеют перестраиваться на основе словаря ? Скорее всего нет ...

1) У всех проблемных таблиц в проекте удалить все поля
2) Произвести их отключение/подключение дабы компонента смогла перечитать структуру таблицы
3) У всех проблемных таблиц в проекте добавить поля
4) Пересобрать проект

Добавлено: 14 фев 2006, 18:41
VIY
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."
===============================================
вот такие вот дела... :/

Добавлено: 15 фев 2006, 11:26
Max_Fin
попробуйте с проверить с помощью Pervasive Control Center
если все путем, копайте Титановские компоненты.