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