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, но я этой библиотекой не пользовался. |
|
|