![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Invalid blob id [D7, IB6.x]
Sour © (2004-06-05 09:57:00)Firebird, IB6.5.
Возникает ошибка Invalid blob id при вызове хранимой процедуры (ExecProc) с параметрами типа blob.
Sour (2004-06-11 14:30:00) [1]Проблема решилась удивительным спосопом, создание базы из скрипта. Только данные заново перебивать пришлось...
Что это за багофича так и не выяснилось
Johnmen (2004-06-10 11:45:00) [2]>Sour
Убери детализацию описания параметров процедуры типа блоба.
Но дело не в этом.
Я подозреваю, что это багофича IBX. Поэкспериментируй с др.библиотеками доступа. Напр. FIBPlus.
Sour (2004-06-10 09:53:00) [3]>Соловьев
TBlobField.LoadFromStream+F1 - непомогает
Sour (2004-06-09 20:54:00) [4]Сделал так:
with StoredProc do
begin
XMLStream := TMemoryStream.Create;
XMLStream.LoadFromFile(sTmp);
WordStream := TMemoryStream.Create;
BodyStream := TMemoryStream.Create;
ParamByName('new_id').AsInteger := FiID;
ParamByName('DATE').AsDateTime := FsDate;
ParamByName('NUMBER').AsString := FsNumber;;
ParamByName('ID_TEMPLATE').AsInteger := FiTemplateID;
ParamByName('XML').LoadFromStream(XMLStream, ftBlob);
ParamByName('WORD').LoadFromStream(WordStream, ftBlob);
ParamByName('BODY').LoadFromStream(BodyStream, ftBlob);
ParamByName('ID_STATUS').AsInteger := FiStatusID;
ParamByName('ID_ROUTE').AsInteger := FiRouteID;
ExecProc;
FiID := ParamByName('new_id').AsInteger;
XMLStream.Free;
WordStream.Free;
BodyStream.Free;
Free;
end;
Все равно ошибка "invalid blob id" при вызове ExecProc
Соловьев (2004-06-09 13:11:00) [5]TBlobField.LoadFromStream+F1
Sour (2004-06-09 12:31:00) [6]Я пытаюсь выполнить хранимую процедуру, передавая ей в качестве параметров значения типа blob.
Привожу код хранимой процедуры :
create PROCEDURE TBDOCS_I (
NEW_ID INTEGER,
"DATE" TIMESTAMP,
NUMBER VARCHAR(20) CHARACTER SET NONE,
ID_TEMPLATE INTEGER,
XML BLOB SUB_TYPE 1 SEGMENT SIZE 80,
WORD BLOB SUB_TYPE 0 SEGMENT SIZE 80,
BODY BLOB SUB_TYPE 0 SEGMENT SIZE 80,
ID_STATUS INTEGER,
ID_ROUTE INTEGER)
RETURNS (
ID INTEGER)
AS
begin
if (new_id <= 0) then
begin
id = gen_id(gen_tbdocs_id, 1);
insert into tbdocs (
id,
"DATE",
number,
id_template,
xml,
word,
body,
id_status,
id_route)
values (
:id,
:"DATE",
:number,
:id_template,
:xml,
:word,
:body,
:id_status,
:id_route);
end
else
begin
id = new_id;
update tbdocs
set "DATE" = :"DATE",
number = :number,
id_template = :id_template,
xml = :xml,
word = :word,
body = :body,
id_status = :id_status,
id_route = :id_route
where (id = :id);
end
end
Код ее вызывающий:
StoredProc := TIBStoredProc.Create(nil);
StoredProc.Database := DB;
StoredProc.StoredProcName := 'TBDOCS_I';
StoredProc.Prepare;
with StoredProc do
begin
ParamByName('new_id').AsInteger := FiID;
ParamByName('DATE').AsDateTime := FsDate;
ParamByName('NUMBER').AsString := FsNumber;;
ParamByName('ID_TEMPLATE').AsInteger := FiTemplateID;
ParamByName('XML').AsString := FsXML;
ParamByName('WORD').AsString := FsWord;
ParamByName('BODY').AsString := FsBody;
ParamByName('ID_STATUS').AsInteger := FiStatusID;
ParamByName('ID_ROUTE').AsInteger := FiRouteID;
ExecProc; // Тут и возникает ошибка
FiID := ParamByName('new_id').AsInteger;
Free;
end;
Так вод при вызове ExcecProc вылетает вышеупомянутая ошибка. Подскажите причину ее появления и возможные методы устранения.
P.S.От динамического создания IBStoredProc отказаться не могу. Хотя вряд ли эта ошибка из-за динамического создания.
Johnmen (2004-06-09 09:11:00) [7]>Mike Kouzmine © (09.06.04 09:07) [7]
Да уже практически открытым текстом кричу...:)
Mike Kouzmine (2004-06-09 09:07:00) [8]Sour (09.06.04 08:35) [5] Johnmen © намекает, что неплохо бы поподробнее о своих действиях написать...
Johnmen (2004-06-09 09:04:00) [9]>Что это за ошибка
Ошибка определения/передачи параметра типа блоб
>как с ней бороться??
Исправлением.
Sour (2004-06-09 08:35:00) [10]При вызове хранимой процедуры (ExecProc) с параметрами типа blob
возникает ошибка "Invalid blob id". Что это за ошибка такая и как с ней бороться??
Johnmen (2004-06-08 18:56:00) [11]>Sour Очень, очень информативный вопрос.
Sour (2004-06-08 14:06:00) [12]На данном этапе имеется класс, который динамически создает IBStroedProc b выполняет их.
Так в чем может быть проблема? Из-за чего такая ошибка появляется?
>Johnmen Очень, очень аргументированный ответ.
PEAKTOP (2004-06-07 03:57:00) [13]А работать с БЛОБами через IBTable + DB-controls низя ?
Johnmen (2004-06-06 20:36:00) [14]Сочувствую.