Titan Error 22, после перехода с 7.11 на 7.12
Добавлено: 09 фев 2006, 13:57
используются: 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