Оригинал Я хочу сохранить/получить отчет из fastreports, который использует SaveToStream/LoadToStream для этой цели. Я использую RAD Studio XE6 (upd1).Delphi поток в/из базы данных с FireDAC
В базе данных у меня есть таблица Reports с полем индекса 'StVn'type int и поле' Определение 'type ntext. База данных MSSQL и для сохранения отчета я использую:
FDCommand.CommandText.Text:='UPDATE Reports SET Definition= :pDefinition WHERE StVn=1';
FDCommand.Params.ParamByName('pDefinition').LoadFromStream(MyStream, ftWidememo);
FDCommand.Execute;
и для извлечения:
FDQuery.SQL.Text:='SELECT * FROM Reports WHERE StVn=1';
FDQuery.Open();
MyStream:=FDQuery.CreateBlobStream(FDQuery.FieldByName('Definition'),bmRead);
Это работало в течение нескольких коротких отчетов, но и для любой реальной экономии/восстанавливающие развращает сообщить определение.
Так я делаю тест, по новой форме с как раз Memo и пытался сохранить/восстановить его с такой же установкой Асесс данных (FDConnection, FDCommand, FDQuery) и следующий код:
procedure TForm1.BMemoSaveClick(Sender: TObject);
var TmpStream:TStream;
begin
TmpStream:=TMemoryStream.Create;
Memo1.Lines.SaveToStream(TmpStream);
ShowMessage(IntToStr(TmpStream.Size));
FDCommand1.Params.Clear;
FDCommand1.CommandText.Text:='UPDATE Reports SET Definition= :pDefinition WHERE StVn=1';
FDCommand1.Params.ParamByName('pDefinition').LoadFromStream(TmpStream,ftWideMemo);
FDCommand1.Execute();
TmpStream.Free;
end;
procedure TForm1.BMemoLoadClick(Sender: TObject);
var TmpStream:TStream;
begin
FDQuery.SQL.Text:='SELECT * FROM Reports WHERE StVn=1';
FDQuery.Open();
TmpStream:=FDQuery.CreateBlobStream(FDQuery.FieldByName('Definition'),bmRead);
ShowMessage(IntToStr(TmpStream.Size));
Memo1.Lines.LoadFromStream(TmpStream);
TmpStream.Free;
end;
Как вы можете см. Я добавил ShowMessage, чтобы увидеть размер потока при сохранении и восстановлении, и если я сохраню только текст по умолчанию «Memo1», я получаю длину 7 при сохранении и длину 14 при загрузке заметки (она всегда удваивается).
Любые идеи, что я делаю неправильно?