Ich bin jetzt wirklich am Verzweifeln.
Ich konvertiere von WPRichText nach DevExpress RichEditControl.
Das mache ich mit einem MemoryStream.
In meinem Konverter schreibe ich zum Test den
Stream in ein File. (
stream.rtf)
Delphi-Quellcode:
procedure TConvertWPRichText.ParseStream(AStream: TMemoryStream);
Var
I: Integer;
LStream: TMemoryStream;
LMergeField: TMergeField;
LNewText: Ansistring;
LNextPos: Integer;
begin
if (MergeFields.Count = 0) then
Exit;
LStream := TMemoryStream.Create;
try
AStream.Position := 0;
LStream.CopyFrom(AStream);
LStream.Position := 0;
AStream.Clear;
AStream.CopyFrom(LStream, FMergeFields[0].Position); // bis zum ersten Feld
for I := 0 to MergeFields.Count - 1 do
begin
LMergeField := FMergeFields[I];
LNewText := LMergeField.GetNewText;
AStream.WriteBuffer(LNewText[1], Length(LNewText)); // neues Feld
LStream.Seek(Length(LMergeField.Text) + 1, soFromCurrent); // Ende erstes Feld
if I = MergeFields.Count - 1 then
AStream.CopyFrom(LStream, LStream.Size - LStream.Position)
else
begin
LNextPos := MergeFields[I + 1].Position;
AStream.CopyFrom(LStream, LNextPos - LStream.Position);
end;
end;
finally
LStream.Free;
end;
end;
Den Inhalt des
Stream schreibe ich dann in die Datenbank
Delphi-Quellcode:
procedure TFRMEdtTextDokument.LoadTextFromDB;
var
LStream: TMemoryStream;
begin
if IsDestroying then
Exit;
RichEditControl.Clear;
if (DM.qryMain.FieldByName('DOKUMENT').IsNull) and (DM.qryMain.FieldByName('BRIEF').IsNull) then
Exit;
if (DM.qryMain.FieldByName('DOKUMENT').IsNull) then
begin
LStream := TMemoryStream.Create;
try
TBlobField(DM.qryMain.FieldByName('BRIEF')).SaveToStream(LStream);
TConvertWPRichText.Convert(LStream);
{$IFDEF DEBUG}
LStream.SaveToFile('stream.rtf');
{$ENDIF}
LStream.Position := 0;
DM.qryMain.Edit;
TBlobField(DM.qryMain.FieldByName('DOKUMENT')).LoadFromStream(LStream);
DM.qryMain.Post;
finally
LStream.Free;
end;
end;
RichEditControl.LoadFromBlobField(TBlobField(DM.qryMain.FieldByName('DOKUMENT')));
end;
Auch hier schreibe ich den
Stream in eine Datei.
In den Anlagen sind 2 rtf's
stream.rtf vor dem
Speichern in
DB
datenbankfeld.rtf - was in der Datenbank ankommt.
Wenn ich mit IBExpert die Datei
stream.rft in das Feld lade, ist es OK.
Warum kommt in der
DB der Müll an?
Frank