Форум » Clipper » internal error 1112 в clipper 5.2: как её победить ? » Ответить

internal error 1112 в clipper 5.2: как её победить ?

p519446: Всем привет. Сабж. Вроде как эта ошибка вылезает при попытке считывания memo-поля, в котором каким-то образом оказались данные длинной 64 Кб, так или нет ? Если да, то вопросы: 1) как вообще в мемо-поле может оказаться строка длинной свыше 64К 2) если "никак не может", то как / чем задушить эту ошибку ?

Ответов - 6

Pasha: Формат dbt не запрещает формировать memo-поля размером более 64к. Данные в memo пишутся блоками по 512 байт, длина нигде не фиксируется, а ограничителем являются 2 символа с кодом 26. Здесь есть 2 варианта: либо не сформировался ограничитель, либо размер поля действительно больше 64k. Клиппер вроде бы данные такого размера записать не может (харбор может). Возможно, это поле сформировано какими-то другими средствами. У формата fpt все немного по-другому. А задушить ошибку средствами клиппера можно только перезаписав это поле. Надо сохранить значение memo чем-то другим (мой dbedit подойдет), очистить его и записать данные размером менее 64k

Dima: Pasha пишет: Возможно, это поле сформировано какими-то другими средствами. Либо в этом поле мусор попавший в результате некорректного завершения программы. У самого было такое и не раз , в результате от мемо полей отказался.

p519446: У мну .fpt, там такое может быть, как выше написано про .dbt ? ЗЫ. Приложение переведено под ADS. Вроде бы он должен просто ничего не писать при некорректном срубе проги в .dbf, .fpt, .cdx - там же "журнальчики" создаются, которые записываются в базу только после ax_transaction_commit.


Pasha: Формат fpt отличается тем, что размер блока переменный (но по умолчанию тоже 512 байт), и длина поля хранится в самом блоке, так что ограничитель (хотя он и есть) уже не критичен. Под длину выделяется 4 байта, так что это явно больше 64к. Сам ads конечно же поддерживает размер мемо-поля более 64k, насчет клиппер-клиента точно не скажу. Если не поддерживает - то надо действовать как я написал ранее.

Pasha: Вот что сказано в ADS NG: AX_File2BLOB() will store a file of any type (ASCII or binary) into a memo field. The maximum size of the file to be stored is 16 MB. The BLOB data can be retrieved from the memo field via the AX_BLOB2File() function.

p519446: OK, спасибо. Буду думкать.



полная версия страницы