Поврежденные данные в столбце BLOB-объектов после вставки в SQLite - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь вставить двоичные данные в столбец BLOB-объектов

PackedStr:=GZCompressStr(tmpStr);    

AssignFile(F,'c:\RequestHeaders.bin');
Rewrite(F,1);
BlockWrite(F,PackedStr[1],length(PackedStr));
CloseFile(F);

if SQLite3_Bind_Blob(Stmt,ParamNum,@PackedStr[1],length(PackedStr),0)<>SQLITE_OK then
  RaiseError('Error binding parameter', '');

 iStepResult := Sqlite3_step(Stmt);

if (iStepResult <> SQLITE_DONE) then
  RaiseError('Error executing SQL statement', SQL);

SQLite3_Reset(Stmt);

Нет ошибок, строка вставлена, но данные, фактически сохраненные в столбце, не соответствуют данным в файле.
Я проверил, сохранен данные с sqlite3_column_blob и с внешним инструментом, оба возвращают одни и те же данные с оригинальным размером, но байты данных имеют много различий с сохраненным файлом.
GZDecompressStr не может распаковать данные столбца, но распаковать данные из файла без проблем.
Как скажем SQLite, хранить данные как есть, не меняя их?

1 Ответ

1 голос
/ 01 апреля 2020

Проблема решена, значение PackedStr было изменено между SQLite3_Bind_Blob и Sqlite3_step, поскольку SQLite3_Bind_Blob принимает указатель в качестве параметра, изменения в PackedStr влияют на хранимые данные

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...