powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / bytea
2 сообщений из 2, страница 1 из 1
bytea
    #34129896
Лена44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица объявленная в базе данных:
CREATE TABLE visitors
(
id int4 NOT NULL DEFAULT nextval('visitors_id_seq'::regclass),
firstname varchar(50) NOT NULL,
lastname varchar(50) NOT NULL,
patronymic varchar(50),
post varchar(50),
number varchar(50),
org_id int4 DEFAULT 0,
group_id int4 NOT NULL,
remark varchar(50),
photo bytea,
enabled bool NOT NULL,
CONSTRAINT pk_visitors PRIMARY KEY (id)
)
WITHOUT OIDS;
ALTER TABLE visitors OWNER TO postgres;

Первый вопрос: правильно ли объявлено поле photo в котором планируется хранить фотографии.

Вопрос номер два: как отправить фотографию в поле photo?

Делаю в С++ Builder 6 так:
Поместила на форму DBImage1 и привязала его к полю с фотографиями.
Пишу:
//PathPic путь к картинке
//DBImage1 привязан к полю photo из ClientDataSetVis
DataModule2->ClientDataSetVis->Edit();
DBImage1->Picture->LoadFromFile(PathPic);

После этого вижу картинку в DBImage1. Далее делаю:
DataModule2->ClientDataSetVis->Post();
И картинка из DBImage1 исчезает. :(

В самом событии AfterPost есть код:

void __fastcall TDataModule2::ClientDataSetVisAfterPost(TDataSet *DataSet)
{
ClientDataSetVis->ApplyUpdates(-1);
ClientDataSetVis->Active = false;
ADOQueryVis->Active = false;
ADOQueryVis->Active = true;
ClientDataSetVis->Active = true;
//ClientDataSetVis->First();

}

В ADOQueryVis текст select * from visitors order by lastname
Что может быть не правильно, почему картинка из DBImage1 не загоняется в базу?
...
Рейтинг: 0 / 0
bytea
    #34136084
Лена44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот ответ для C++ Builder:
Может кому пригодиться при работе с postgresql...
Код ниже заносит картинки bmp, jpg в базу.


#include <memory>
#include <Jpeg.hpp>
using namespace std;

AnsiString fileName = ThumbnailList1->Thumbnails->Items[ThumbnailList1->ItemIndex]->Filename;
auto_ptr<TMemoryStream> stream(new TMemoryStream());
auto_ptr<Graphics::TBitmap> bitmap(new Graphics::TBitmap());
if( ExtractFileExt(fileName) ==".jpg")
{
auto_ptr<TJPEGImage> jpeg (new TJPEGImage());
jpeg->LoadFromFile(fileName);
bitmap->Assign(jpeg.get());
}
else
{
bitmap->LoadFromFile(fileName);
}
bitmap->SaveToStream(stream.get());
stream->Position = 0;
DataModule2->ADOQueryVis->SQL->Text="UPDATE visitors SET photo=:img WHERE id =" + DataModule2->ClientDataSetVisid->AsString;
DataModule2->ADOQueryVis->Parameters->ParamByName("img")->DataType = ftBlob;
DataModule2->ADOQueryVis->Parameters->ParamByName("img")->LoadFromStream(stream.get(), ftBlob);
DataModule2->ADOQueryVis->ExecSQL();
DataModule2->ADOQueryVis->SQL->Text= "select * from visitors order by lastname";



Также необходимо установить последний драйвер odbs для postgresql 8.02.02.00 и в настройках поставить галочку использовать тип bytea как LO.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / bytea
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]