Russian Qt Forum

Qt => Базы данных => Тема начата: sector от Декабрь 14, 2005, 06:29



Название: работа с BLOB-ами
Отправлено: sector от Декабрь 14, 2005, 06:29
Подскажите плиз каким образом при работе с BLOB (lo_import и lo_export) обойтись без создания темповых файлов???
т.е в базе лежит картинка и надо ее вывести на экран без lo_export(name_file)???
Заранее спасибо.
:? :? :?


Название: работа с BLOB-ами
Отправлено: sector от Декабрь 20, 2005, 07:17
Ура почти разобрался))) правда через пятую точку)))
Приходится делать еще один коннект через стандартный интерфейс поставляемый postgres(((
Как подцепится через QSqlDatabase пока не знаю. Может кто подскажет.....
Вообщем после долгого капания в нете нашел одну ссылку http://archives.postgresql.org/pgsql-general/2003-03/msg00989.php
где находится полная реализация!!! Мучает один вопрос - почему это не реализовано в QT???

Мне в принципе понадобилась только одна функция - немного подкорректировал и вот ....
Код:

#include <libpq-fe.h>
#include <pgsql/libpq/libpq-fs.h>

. . .

QByteArray picWidget::readBlob(int oid)
{
PGconn *db;
PGresult *res;
db = PQconnectdb("host=localhost port=5432 dbname=mydb user=name_user password=pass");
    if(PQstatus(db) != CONNECTION_OK)
    QMessageBox::warning(this, QObject::tr("Невозможно открыть БАЗУ ДАННЫХ"), QObject::tr("???"));

QByteArray ba;
res = PQexec(db, "begin");
PQclear(res);
int fd = lo_open(db, oid, INV_READ);
if (fd < 0)
{
qWarning( "QPGSQLResult::readBlob: unable to open large object for read" );
return ba;
}

int size = 0;
int retval = lo_lseek(db, fd, 0L, SEEK_END);
if (retval >= 0)
{
        size = lo_tell(db, fd);
lo_lseek(db, fd, 0L, SEEK_SET);
}
if (size == 0)
{
lo_close(db, fd);
return ba;
}
char *buf = new char[size];

retval = lo_read(db, fd, buf, size);

if (retval < 0)
{
qWarning( "QPGSQLDriver::readBlob: unable to read large object" );
}
else
{
ba = QByteArray(buf, size);
}
delete [] buf;
lo_close(db, fd);
res = PQexec(db, "end");
PQclear(res);
PQfinish(db);
return ba;
}


... оно работает!!!!


Название: работа с BLOB-ами
Отправлено: Dendy от Декабрь 20, 2005, 09:47
Може у цій задачі є труднощі з кросовостю між різними БД.