mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 14:29:13 +02:00
* 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:
parent
e98213814b
commit
287adff8a1
@ -347,20 +347,20 @@ begin
|
|||||||
AFieldNode := FRecordNode.Attributes.GetNamedItem(FieldDefs[FieldNr].Name);
|
AFieldNode := FRecordNode.Attributes.GetNamedItem(FieldDefs[FieldNr].Name);
|
||||||
if assigned(AFieldNode) then
|
if assigned(AFieldNode) then
|
||||||
begin
|
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
|
begin
|
||||||
ABufBlobField.BlobBuffer:=ADataset.GetNewBlobBuffer;
|
ABufBlobField.BlobBuffer:=ADataset.GetNewBlobBuffer;
|
||||||
afield := Fields.FieldByNumber(FieldDefs[FieldNr].FieldNo);
|
afield := Fields.FieldByNumber(FieldDefs[FieldNr].FieldNo);
|
||||||
AField.SetData(@ABufBlobField);
|
AField.SetData(@ABufBlobField);
|
||||||
s := AFieldNode.NodeValue;
|
|
||||||
if (FieldDefs[FieldNr].DataType = ftBlob) and (s<>'') then
|
|
||||||
s := DecodeStringBase64(s);
|
|
||||||
ABufBlobField.BlobBuffer^.Size:=length(s);
|
ABufBlobField.BlobBuffer^.Size:=length(s);
|
||||||
ReAllocMem(ABufBlobField.BlobBuffer^.Buffer,ABufBlobField.BlobBuffer^.Size);
|
ReAllocMem(ABufBlobField.BlobBuffer^.Buffer,ABufBlobField.BlobBuffer^.Size);
|
||||||
move(s[1],ABufBlobField.BlobBuffer^.Buffer^,ABufBlobField.BlobBuffer^.Size);
|
move(s[1],ABufBlobField.BlobBuffer^.Buffer^,ABufBlobField.BlobBuffer^.Size);
|
||||||
end
|
end
|
||||||
else
|
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;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -375,7 +375,7 @@ begin
|
|||||||
for FieldNr := 0 to ADataset.FieldDefs.Count-1 do
|
for FieldNr := 0 to ADataset.FieldDefs.Count-1 do
|
||||||
begin
|
begin
|
||||||
AField := ADataset.Fields.FieldByNumber(ADataset.FieldDefs[FieldNr].FieldNo);
|
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))
|
ARecordNode.SetAttribute(AField.FieldName,EncodeStringBase64(AField.AsString))
|
||||||
else
|
else
|
||||||
ARecordNode.SetAttribute(AField.FieldName,AField.AsString);
|
ARecordNode.SetAttribute(AField.FieldName,AField.AsString);
|
||||||
|
Loading…
Reference in New Issue
Block a user