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