* applied patch from Lacak2

Mantis #22858 TCustomBufDataset.SaveToFile in XML format fails if fields are ftBytes or ftVarBytes and contain binary data 
    

git-svn-id: trunk@22633 -
This commit is contained in:
marco 2012-10-13 11:25:05 +00:00
parent e98213814b
commit 287adff8a1

View File

@ -347,20 +347,20 @@ begin
AFieldNode := FRecordNode.Attributes.GetNamedItem(FieldDefs[FieldNr].Name);
if assigned(AFieldNode) then
begin
if FieldDefs[FieldNr].DataType in [ftMemo,ftBlob] then
s := AFieldNode.NodeValue;
if (FieldDefs[FieldNr].DataType in [ftBlob, ftBytes, ftVarBytes]) and (s <> '') then
s := DecodeStringBase64(s);
if FieldDefs[FieldNr].DataType in [ftBlob, ftMemo] then
begin
ABufBlobField.BlobBuffer:=ADataset.GetNewBlobBuffer;
afield := Fields.FieldByNumber(FieldDefs[FieldNr].FieldNo);
AField.SetData(@ABufBlobField);
s := AFieldNode.NodeValue;
if (FieldDefs[FieldNr].DataType = ftBlob) and (s<>'') then
s := DecodeStringBase64(s);
ABufBlobField.BlobBuffer^.Size:=length(s);
ReAllocMem(ABufBlobField.BlobBuffer^.Buffer,ABufBlobField.BlobBuffer^.Size);
move(s[1],ABufBlobField.BlobBuffer^.Buffer^,ABufBlobField.BlobBuffer^.Size);
end
else
Fields.FieldByNumber(FieldDefs[FieldNr].FieldNo).AsString := AFieldNode.NodeValue; // set it to the filterbuffer
Fields.FieldByNumber(FieldDefs[FieldNr].FieldNo).AsString := s; // set it to the filterbuffer
end
end;
end;
@ -375,7 +375,7 @@ begin
for FieldNr := 0 to ADataset.FieldDefs.Count-1 do
begin
AField := ADataset.Fields.FieldByNumber(ADataset.FieldDefs[FieldNr].FieldNo);
if AField.DataType=ftBlob then
if AField.DataType in [ftBlob, ftBytes, ftVarBytes] then
ARecordNode.SetAttribute(AField.FieldName,EncodeStringBase64(AField.AsString))
else
ARecordNode.SetAttribute(AField.FieldName,AField.AsString);