Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.08.2010, 11:48
Maxpoll Maxpoll вне форума
Прохожий
 
Регистрация: 17.08.2010
Сообщения: 2
Репутация: 10
Печаль 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('Путь к файлу');
Так вот когда записывается в Stream переменная B то в ней после каждого символа прибавляется еще один нечитаемый символ.
ТО есть 6х7х8х9х0х
Переменная a записывается корректно.
Первоначально в Stream записывались данные полученные из запрос к БД с помощью (qryBlobAccess.FieldByName(FieldName) as TBlobField).SaveToStream(Stream) но с таким же некорректным результатом/
В чем может быть проблема? Что-то с кодировкой? Как можно обойти эту проблему?

Последний раз редактировалось Admin, 21.08.2010 в 23:23.
Ответить с цитированием
  #2  
Старый 17.08.2010, 12:22
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Код:
var
  ...
  b: AnsiString;
  ...
А так же PAnsiChar, AnsiChar и т.д вместо аналогичных.
Ибо в Д2010 по умолчанию юникод, то-бишь двухбайтовый WideString, от него и "лишний" символ.
З.Ы. SizeOf(Char) - улыбнуло, символ сколько байт занимает? Правильно, 1. Лишнее вычесление.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 17.08.2010 в 12:27.
Ответить с цитированием
  #3  
Старый 17.08.2010, 12:42
Maxpoll Maxpoll вне форума
Прохожий
 
Регистрация: 17.08.2010
Сообщения: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от DJ PhoeniX
Код:
var
  ...
  b: AnsiString;
  ...
А так же PAnsiChar, AnsiChar и т.д вместо аналогичных.
Ибо в Д2010 по умолчанию юникод, то-бишь двухбайтовый WideString, от него и "лишний" символ.
З.Ы. SizeOf(Char) - улыбнуло, символ сколько байт занимает? Правильно, 1. Лишнее вычесление.

Спасибо! )) По крайней мере с 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  
Старый 17.08.2010, 16:22
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Честно, с этим компонентом не работал, да и вообще его не видел. Есть подозрение, что он устанавливался дополнительно, и (возможно) писался под другую версию Delphi - следовательно, метод SaveToStream не заточен явно под ANSI.

Что делать? Либо переписывать самому, либо искать аналог под 2010.

З.Ы. ТЕГИ, ***, где? Правила читаем?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter