C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
PostgreSQL и OID поле (граф. файл), Проблемы извлечения содержимого OID поля
gen
Отправлено: 17.11.2005, 14:28


Дежурный стрелочник

Группа: Участник
Сообщений: 36



Привет!

Может кто сталкивался с OID полями в PostgreSQL (8.0)?
Суть проблемы: помещаю в поле "Foto" типа OID bmp картинку. Далее нужно показать ее в DBImage или простом Image. Делаю так:
CODE
Graphics::TBitmap *Bit = new Graphics::TBitmap();
Bit->Assign(Query1->FieldByName("Foto"));
Image1->Picture->Bitmap->Assign(Bit);

И получаю исключение EConvertError "Cannot assign a TIntegerField to TBitmap".
DBImage не ругается, но ничего и не показывает. Пробовал также с JPG форматом с аналогичным результатом. Почемуто Assign считает, что поле типа Integer...
Как же из PostgreSQL вытянуть двоичные данные?
gen
Отправлено: 21.11.2005, 17:57


Дежурный стрелочник

Группа: Участник
Сообщений: 36



Привет снова.

Наверное PostgreSQL еще не так популярен, чтобы кто-нибудь еще столкнулся с аналогичной проблемой...
Продолжительное копание мануалов и эксперименты показали, что в PostgreSQL поля Large Object из базы вытягиваються через указатель, которым собственно и есть OID, потому он и TIntegerField. Но как данные получить в Builder так и не понятно.
Пока делаю "рабочекрестьянским" способом: вставка картинки -
CODE
Update Staff set Photo=lo_import(Path),File="Name.jpg" where Staff.ID=111;

вытянуть картинку -
CODE
SELECT lo_export(Staff.Photo, "Name.jpg") from Staff where Staff.ID=111;

Ну а далее уже привычная работа с файлом.

PS
Надо добавить, что подключение у меня через ODBC, а то у ZeOSLib вроде есть специальный компонент доступа к Large Object PostgreSQL, но я этой библиотекой не пользовался.

Вернуться в Работа с базами данных в C++Builder