|
#1
|
|||
|
|||
TMemoryStream
Привет.
Может ли кто подсказать как разрешить данную ситуацию в Delphi2010? В 2007 всё верно Код:
Re: TRichEdit; a:string; b: string; Stream:= TMemoryStream.Create; a:='12345'; re.Lines.Add(a); Re.Lines.Savetostream(stream); b:='67890'; Stream.Write(PChar(b)^, Length(b)*SizeOf(Char)); Stream.Position := 0; Stream.SaveToFile('Путь к файлу'); ТО есть 6х7х8х9х0х Переменная a записывается корректно. Первоначально в Stream записывались данные полученные из запрос к БД с помощью (qryBlobAccess.FieldByName(FieldName) as TBlobField).SaveToStream(Stream) но с таким же некорректным результатом/ В чем может быть проблема? Что-то с кодировкой? Как можно обойти эту проблему? Последний раз редактировалось Admin, 21.08.2010 в 23:23. |
#2
|
||||
|
||||
Код:
var ... b: AnsiString; ... Ибо в Д2010 по умолчанию юникод, то-бишь двухбайтовый WideString, от него и "лишний" символ. З.Ы. SizeOf(Char) - улыбнуло, символ сколько байт занимает? Правильно, 1. Лишнее вычесление. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 17.08.2010 в 12:27. |
#3
|
|||
|
|||
Цитата:
Спасибо! )) По крайней мере с Write сработало )) А как разобраться когда в Stream пишется вот так: qryBlobAccess : TCssBlobQuery; begin qryBlobAccess.SQL.Clear; qryBlobAccess.SQL.Add( Statement ); qryBlobAccess.Open; try if qryBlobAccess.FieldByName(FieldName).IsNull then Exit; Result := TMemoryStream.Create; (qryBlobAccess.FieldByName(FieldName) as BlobField).SaveToStream(Result); Result.Position := 0; Вот в таком виде она тоже "приклеивает" лишнее |
#4
|
||||
|
||||
Честно, с этим компонентом не работал, да и вообще его не видел. Есть подозрение, что он устанавливался дополнительно, и (возможно) писался под другую версию Delphi - следовательно, метод SaveToStream не заточен явно под ANSI.
Что делать? Либо переписывать самому, либо искать аналог под 2010. З.Ы. ТЕГИ, ***, где? Правила читаем? Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |