Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

Invalid blob id   Найти похожие ветки 

 
Sour   (2004-06-05 09:57) [0]

Firebird, IB6.5.

Возникает ошибка Invalid blob id при вызове хранимой процедуры (ExecProc) с параметрами типа blob.


 
Johnmen ©   (2004-06-06 20:36) [1]

Сочувствую.


 
PEAKTOP   (2004-06-07 03:57) [2]

А работать с БЛОБами через IBTable + DB-controls низя ?


 
Sour   (2004-06-08 14:06) [3]

На данном этапе имеется класс, который динамически создает IBStroedProc b выполняет их.

Так в чем может быть проблема? Из-за чего такая ошибка появляется?

>Johnmen Очень, очень аргументированный ответ.


 
Johnmen ©   (2004-06-08 18:56) [4]

>Sour  Очень, очень информативный вопрос.


 
Sour   (2004-06-09 08:35) [5]

При вызове хранимой процедуры (ExecProc) с параметрами типа blob
возникает ошибка "Invalid blob id". Что это за ошибка такая и как с ней бороться??


 
Johnmen ©   (2004-06-09 09:04) [6]

>Что это за ошибка

Ошибка определения/передачи параметра типа блоб

>как с ней бороться??

Исправлением.


 
Mike Kouzmine ©   (2004-06-09 09:07) [7]

Sour   (09.06.04 08:35) [5] Johnmen © намекает, что неплохо бы поподробнее о своих действиях написать...


 
Johnmen ©   (2004-06-09 09:11) [8]

>Mike Kouzmine ©   (09.06.04 09:07) [7]

Да уже практически открытым текстом кричу...:)


 
Sour   (2004-06-09 12:31) [9]

Я пытаюсь выполнить хранимую процедуру, передавая ей в качестве параметров значения типа 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 отказаться не могу. Хотя вряд ли эта ошибка из-за динамического создания.


 
Соловьев ©   (2004-06-09 13:11) [10]

TBlobField.LoadFromStream+F1


 
Sour   (2004-06-09 20:54) [11]

Сделал так:
 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


 
Sour   (2004-06-10 09:53) [12]

>Соловьев
TBlobField.LoadFromStream+F1 - непомогает


 
Johnmen ©   (2004-06-10 11:45) [13]

>Sour

Убери детализацию описания параметров процедуры типа блоба.
Но дело не в этом.
Я подозреваю, что это багофича IBX. Поэкспериментируй с др.библиотеками доступа. Напр. FIBPlus.


 
Sour   (2004-06-11 14:30) [14]

Проблема решилась удивительным спосопом, создание базы из скрипта. Только данные заново перебивать пришлось...

Что это за багофича так и не выяснилось



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.045 c
1-1088554460
Alexey Leonchik
2004-06-30 04:14
2004.07.11
Список открытых окон в меню (MDI)


3-1087283159
denis24
2004-06-15 11:05
2004.07.11
Как проверить существование таблицы на сервере БД


14-1087984521
syte_ser78
2004-06-23 13:55
2004.07.11
Почему?


1-1088510781
Alex_2004
2004-06-29 16:06
2004.07.11
Ориентация страницы в MS Word


8-1082697515
Gia Gvatua
2004-04-23 09:18
2004.07.11
Картография