Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > Что не так с BLOB


Автор: former 2.3.2008, 13:55
Здравствуйте!

С IB начал работать недавно, поэтому строго не судите.

БД в которой есть таблица производителей (Producer) со следующими полями: 
- ID (ProducerID) - Integer
- Название организации (Name) - Varchar
- Страна (Country) - Varchar
- Сайт (Site) - Varchar
- Логотип (Logo) - Blob

Для BLOB заданы следующие параметры: Segment Size - 1024, Subtype - 0.

Клиент создаётся на Delphi. Использую стандартные компоненты для работы с IB.

Для добавления новой записи использую следующий запрос:
Код

Insert into Producer (NAME,COUNTRY,SITE,LOGO)
  VALUES (:NAME,:COUNTRY,:SITE,:LOGO);


В настройках параметров запроса для LOGO задал:DataType-ftBlob, Size-1024.

Изображение загружаю в TImage, а после этого в таблицу.
Параметру картинку из TImage передаю так:
Код

IBQ.ParamByName('LOGO').Assign(LogoImg.Picture);

или, если изображение не добавлялось, то:
Код

IBQ.Params.ParamByName('LOGO').AsBlob:='null';


Однако при выполнении запроса появляется следующая ошибка (см. ссылку).

Что делаю не так?


Автор: former 3.3.2008, 02:13
Сделал пример с 3 полями (ID,Varchar,Blob). Выводит всё тоже сообщение. Выкладываю. Что не так?

Автор: Deniz 3.3.2008, 10:08
Смотри
1. http://www.ibase.ru/ibfaq.htm#bss
2. http://www.ibase.ru/ibfaq.htm#blob

Автор: former 3.3.2008, 16:26
Deniz, информация конечно полезная. Вот только одного не пойму, что должно быть на месте blobvar (см. цитату ниже), если объект изображение в TImage?

Цитата

1. передача blob через параметр. Имеется в виду запрос вида
insert into table (field1, field2, blbfield) values (:param1, :param2, :blb); :

 IBQuery1.ParamByName('blb').asBlob:=blobvar;

Автор: Deniz 4.3.2008, 06:25
А что мешает попробовать:
Код

IBQuery1.ParamByName('BlobField').AsBlob:=Image.Picture.Graphic;

или через TStream.

Автор: former 4.3.2008, 21:56
Цитата(Deniz @  4.3.2008,  06:25 Найти цитируемый пост)
А что мешает попробовать:
Выделить всёкод Pascal/Delphi
1:
    
IBQuery1.ParamByName('BlobField').AsBlob:=Image.Picture.Graphic;

или через TStream.


Deniz, пробовал, но ругается, что разные типы данных. Хотя должно быть всё равно, обычный текст или бинарный код.

Решил использовать FIBPlus.

Спасибо за помощь и материал. +

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)