Blob поле из SqLite. Набор байтов
Добавлено: 15.04.2016 19:04:17
Привет.
Имеется необходимость считать поле типа Blob из базы SqLite.
SQLite Manager (Firefox-addon) и SQlite Viewer отображает размер поля равный 230 байтам.
Мне нужен именно набор байт, не нужного его во что-то преобразовывать (не в изображение или что-то подобное).
Испробовал несколько найденных в интернетах методов, не завелся не один.
Как же в итоге читать эти грешные блобы?:(
Имеется необходимость считать поле типа Blob из базы SqLite.
SQLite Manager (Firefox-addon) и SQlite Viewer отображает размер поля равный 230 байтам.
Мне нужен именно набор байт, не нужного его во что-то преобразовывать (не в изображение или что-то подобное).
Испробовал несколько найденных в интернетах методов, не завелся не один.
- Код: Выделить всё
var
arB:TBytes;
bf:TBlobField;
Stream:TStream;
//<...>
SQLite := TSqlite3Dataset.Create(nil);
//Задаем свойства FileName, TableName, SQL
SQLite.Open;
SQLite.First; //Запрос выполняется. НЕблоб поля считываются нормально.
//Первый способ
arB:=SQLite.FieldByName('bytes').AsBytes;
//Length(arB); всегда будет 255, хотя по логике должен бы вернуть заветные 230?
//Второй способ
BF:=TBlobField.Create(nil);
BF:=SQLite.FieldByName('bytes') as TBlobField;
//BF.BlobSize - вообще выдает ошибку, но FSIZE опять 255
//Третий способ (ну а вдруг бы?)) )
st:=SQLite.FieldByName('bytes').AsString;
//Длина вовсе будет нулевой, а содержимое содержать что-то несусветное, но явно не исходные байты (выводил в файл TFileStream)
//Четвертый способ
Stream:=SQLite.CreateBlobStream(SQLite.FieldByName('bytes'), bmRead);
BF:=TBlobField.Create(nil);
BF.LoadFromStream(Stream);
//На третьей строке ошибка, т.к. Stream.size имеет длину в 1-ку и вновь косой.
Как же в итоге читать эти грешные блобы?:(