Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.03 c
1-1087988428
Сашка
2004-06-23 15:00
2004.07.11
Отлов расстыковки


6-1084770253
Graf
2004-05-17 09:04
2004.07.11
Работа TCP под ДОС


6-1084522330
0597345
2004-05-14 12:12
2004.07.11
Как работать с WinSock на АПИ?


14-1087932464
Sergey Masloff
2004-06-22 23:27
2004.07.11
Holy War! AMD vs INTEL $-)


3-1087281540
AlexXn
2004-06-15 10:39
2004.07.11
Картинки в БД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский