Получить порцию 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;
}