Получить порцию BLOB-данных

Синтаксические правила

q.prepare("FetchBlob")  | q.prepare("FetchBlob(?,?,?.?)");
q.bindValue( 0, 2 );
q.bindValue( 1, 3 );
q.bindValue( 2, ba );
q.bindValue( 3, 6 );

Описание

Функция предоставляет заданную порцию BLOB-значения.

После выполнения q.prepare("FetchBlob") необходимо привязать к этому запросу 4 параметра:

  • 0-й параметр – порядковый номер BLOB-столбца в строке таблицы (отсчет начинается с 0);

  • 1-й параметр – смещение (в байтах) запрашиваемой порции BLOB-данных (отсчет начинается с 0);

  • 2-й параметр – адрес буфера для приема порции BLOB-данных (переменная типа QVariant::ByteArray). Размер буфера должен соответствовать размеру запрашиваемой порции данных;

  • 3-й параметр – размер считываемой порции BLOB-данных (в байтах).

Возвращаемое значение

QSqlQuery::prepare() и exec() возвращают true в случае нормального завершения, и false при ошибках.

Чтобы узнать реальную длину полученной порции BLOB-данных, необходимо проверить длину буфера. Она будет меньше или равна заданному размеру буфера.

Пример

q.exec(Qstring("select blobcolumn from test;"));
q.first();
q.prepare( "FetchBlob" );
ba.resize( 6 );
q.bindValue( 0, 1 );  //Номер BLOB-столбца (1)
q.bindValue( 1, 1 );  //Смещение порции BLOB-данных (1)
q.bindValue( 2, ba ); //Адрес буфера для приема BLOB-данных
q.bindValue( 3, ba.size() ); //Размер порции BLOB-данных
if ( !q.exec() )
{
   cout < <  q.lastError().driverText();
   return 1;
 }