Дельфи7. Чтение поля BLOB с данными WideString в нем

Кто-нибудь может помочь? Я храню старый проект Delphi7, и у меня следующая проблема. Как я могу сохранить значение поля BLOB, если оно содержит строку Unicode? Я старался:

var
  str: WideString;
begin
  ...
  str := WideString(Fields[1].AsString); - but I get empty string
  ...

  ...
  str := VarToWideStr(Fields[1].AsVariant); - but I get "(BLOB)" result in str varible.
  ...
end;

Мое решение: Использование кода:

...
stream := TMemoryStream.Create;
try
  Fields[1].SaveToStream(stream);
  ss := MemStreamToWStr(stream);
finally
  stream.Destroy;
end;
...

И функция:

function TSnsFrame.MemStreamToWStr(Mstream: TMemoryStream): WideString;
begin
  Mstream.Seek(0, soFromBeginning);
  SetLength(Result, Mstream.size div 2);
  MStream.ReadBuffer(Result[1], Mstream.size);
end;

person Artem E    schedule 09.08.2013    source источник


Ответы (1)


Посмотрите на TDataSet.CreateBlobStream(). Он возвращает TStream, который можно использовать для чтения/записи необработанных данных поля большого двоичного объекта.

person Remy Lebeau    schedule 09.08.2013
comment
Я использовал SaveToStream для сохранения данных в поток, а затем создал Treader и попытался прочитать WideString. Но я получаю сообщение об ошибке при установке stream.position := 0; - person Artem E; 14.08.2013
comment
Пожалуйста, обновите свой вопрос, указав последний код, который вы используете. - person Remy Lebeau; 14.08.2013