TXMLDatapacketReader.StoreRecord uses TFieldDef.Name to match TXMLDatapacketReader.RestoreRecord. Fixes case mismatch in PG tests. Patch by Lacak2, mantis #22367

git-svn-id: trunk@22710 -
This commit is contained in:
ludob 2012-10-17 19:58:28 +00:00
parent a95641e43c
commit 65c657006c

View File

@ -348,37 +348,39 @@ begin
if assigned(AFieldNode) then if assigned(AFieldNode) then
begin begin
s := AFieldNode.NodeValue; s := AFieldNode.NodeValue;
AField := Fields.FieldByNumber(FieldDefs[FieldNr].FieldNo);
if (FieldDefs[FieldNr].DataType in [ftBlob, ftBytes, ftVarBytes]) and (s <> '') then if (FieldDefs[FieldNr].DataType in [ftBlob, ftBytes, ftVarBytes]) and (s <> '') then
s := DecodeStringBase64(s); s := DecodeStringBase64(s);
if FieldDefs[FieldNr].DataType in [ftBlob, ftMemo] then 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.SetData(@ABufBlobField); AField.SetData(@ABufBlobField);
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 := s; // set it to the filterbuffer AField.AsString := s; // set it to the filterbuffer
end end
end; end;
end; end;
procedure TXMLDatapacketReader.StoreRecord(ADataset : TCustomBufDataset; ARowState : TRowState; AUpdOrder : integer = 0); procedure TXMLDatapacketReader.StoreRecord(ADataset : TCustomBufDataset; ARowState : TRowState; AUpdOrder : integer = 0);
var FieldNr : Integer; var FieldNr : Integer;
AField: TField; AFieldDef: TFieldDef;
s: string;
ARecordNode : TDOMElement; ARecordNode : TDOMElement;
begin begin
inc(FEntryNr); inc(FEntryNr);
ARecordNode := XMLDocument.CreateElement('ROW'); ARecordNode := XMLDocument.CreateElement('ROW');
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); AFieldDef := ADataset.FieldDefs[FieldNr];
if AField.DataType in [ftBlob, ftBytes, ftVarBytes] then s := ADataset.Fields.FieldByNumber(AFieldDef.FieldNo).AsString;
ARecordNode.SetAttribute(AField.FieldName,EncodeStringBase64(AField.AsString)) if AFieldDef.DataType in [ftBlob, ftBytes, ftVarBytes] then
ARecordNode.SetAttribute(AFieldDef.Name, EncodeStringBase64(s))
else else
ARecordNode.SetAttribute(AField.FieldName,AField.AsString); ARecordNode.SetAttribute(AFieldDef.Name, s);
end; end;
if ARowState<>[] then if ARowState<>[] then
begin begin