Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» C++ Builder и PostgreSQL

Автор: plan
Дата сообщения: 23.04.2003 14:12
Имеется база на постгре на Линукс серваке.
Надо написать прогу на С++ Билдере которая будет работать с этой базой, сложность в том что как large object вытягивать в СBuilder, т.е. картинки музыку и тд из БД на постгре.
Очень надо.
Автор: lex_ii
Дата сообщения: 23.04.2003 17:59
plan
Есть такая библиотечка как Zeos Database Objects.
Там есть компоненты для работы с blob - например ZBlobStream.
Для MySql, Postresql и еще кого-то.

Автор: plan
Дата сообщения: 23.04.2003 19:48
Круто. А ты не подскажиш где ее можно стянуть очень нужна.
Ну просто позарез.
Заранее премного блогадарен.
Автор: pavluha
Дата сообщения: 24.04.2003 08:39
Если сильно надо я тебе на мыло кину.
Ну а кроме этого есть еще вот такая штука
http://www.microolap.com/products/dac/postgresdac.htm
PostgresDAC
но платная.
По сему вопрос ктонить знает где можно стянуть крякнутую компоненту PostgresDAC.
Киньте в нас линком, а может и сами найдем.
Автор: plan
Дата сообщения: 25.04.2003 08:43
Спасибочки.
Посмотрел на твой линк.
Жаль что нигде крячка нет на эту преблуду.
ЙО - помогите с PostgresDAC - или может ктонить знает другое решение.
Автор: lex_ii
Дата сообщения: 05.05.2003 15:51
Zeos Library - https://sourceforge.net/projects/zeoslib/
Автор: pavluha
Дата сообщения: 05.05.2003 16:35
Да а ты lex_ii случайно не знаеш как с блоб полями при помощи этой библиотеки работать.
Например засунуть картинку и извлечь потом если надо.
Автор: Palma
Дата сообщения: 05.05.2003 18:57
Z e o s D a t a b a s e O b j e c t s

PS: а через ODBC нельзя ?
Автор: pavluha
Дата сообщения: 06.05.2003 09:21
Просвети если не сложно как через ODBC добовлять и извлекать Large Objects в PostgreSQL
Автор: Palma
Дата сообщения: 07.05.2003 05:50
// Способ 1

Получить:

TBlobField* bf = dynamic_cast<TBlobField*>(AdoQuery->FieldByName("My_BlobField"));
TADOBlobStream* bl = new TADOBlobStream(bf, bmRead);
try {
bl->SaveToFile("bitmap.bmp");
}
__finally {
delete bl;
}

Положить:

AdoQuery->Edit();
TBlobField* bf = dynamic_cast<TBlobField*>(AdoQuery->FieldByName("BLOBFIELD"));
TADOBlobStream* bl = new TADOBlobStream(bf, bmWrite);

try {
bl->LoadFromFile("bitmap.bmp");
}
__finally {
delete bl;
AdoQuery->Post();
}
-------------------
// Способ 2

Получить:

AdoQuery->SQL->Add( "INSERT INTO MyTable (MyBlob) VALUES (:blob)" );
TMemoryStream *MS = new TMemoryStream;

MS->Write( MyBlobBuffer, sizeof( MyBlobBuffer ) );
MS->Seek( 0, soFromBeginning );
AdoQuery->Parameters->Items[0]->LoadFromStream( MS, ftBlob );
delete MS;

AdoQuery->ExecSQL();



Положить:

AdoQuery->SQL->Add( "SELECT MyBlob FROM MyTable WHERE ..." );
AdoQuery->Open();
TBlobStream *pBlob = (TBlobStream *)AdoQuery->CreateBlobStream(AdoQuery->FieldByName("MyBlob"), Db::bmRead );
pBlob->Position = 0;
pBlob->Read( (void *) MyBlobBuffer, sizeof( MyBlobBuffer ) );
delete pBlob;


MSVC && ADO ))

bool CHBux::ImField2File(FieldPtr &fld, _bstr_t ofile)
{
_variant_t varBLOB;
long lDataLength = 0;
char *pBuf = NULL;
int nDataLenRetrieved = 0;

try {
lDataLength = fld->ActualSize;
if(lDataLength > 0) {
VariantInit(&varBLOB);
varBLOB = fld->GetChunk(lDataLength);

if(varBLOB.vt == (VT_ARRAY | VT_UI1)) {
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
ofstream fo(ofile, ios::out | ios::binary);
fo.write(pBuf,lDataLength);
fo.close();
SafeArrayUnaccessData(varBLOB.parray);
}

}
}
catch(_com_error &e) {
ErrorMessageBox(e.ErrorMessage());
return false;
}
return true;
}

Автор: pavluha
Дата сообщения: 07.05.2003 15:02
Спасибочки щас пойду пробывать.
Автор: mgsv
Дата сообщения: 20.08.2003 09:43
Представленный выше код (Palma), цитирую:

1 AdoQuery->SQL->Add("SELECT MyBlob FROM MyTable WHERE ..." );
2 AdoQuery->Open();
3 TBlobStream *pBlob = (TBlobStream *)
AdoQuery->CreateBlobStream(AdoQuery->FieldByName("MyBlob"), Db::bmRead );
4 pBlob->Position = 0;
5 pBlob->Read( (void *) MyBlobBuffer, sizeof( MyBlobBuffer ) );
6 delete pBlob;

возбуждает исключительную ситуацию «Invalid class typecast» в строке 3. На мой взгляд, это справедливо,
т.к. «MyBlob» (я предполагаю) имеет тип данных oid (а это указатель).

Огромная просьба объяснить, КАК ВСЕ ЖЕ РАБОТАТЬ С Large Object’s через ODBC.
И как при этом настраивается ODBC драйвер.

Заранее благодарен всем участникам.
P.S. Мозг больной свело.

Страницы: 1

Предыдущая тема: CreateProcessAsUser


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.