Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

Сочувствую.


Наверх

Титульная страница Поиск, карта сайта Написать письмо