mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-04 23:11:30 +02:00
* Fixed CreateDataset when TBufDataset.Filename is set
* Clear old fielddefs before reading TBufDataset from file * Call bindfields while reading a dataset from file while there are (calculated) fields present + test git-svn-id: trunk@21756 -
This commit is contained in:
parent
bc3bf09c92
commit
ec67f10680
@ -2733,26 +2733,30 @@ begin
|
||||
end;
|
||||
|
||||
procedure TCustomBufDataset.CreateDataset;
|
||||
var AStoreFilename: string;
|
||||
|
||||
begin
|
||||
CheckInactive;
|
||||
if not ((FieldCount=0) or (FieldDefs.Count=0)) then
|
||||
if ((FieldCount=0) or (FieldDefs.Count=0)) then
|
||||
begin
|
||||
Open;
|
||||
Exit;
|
||||
if (FieldDefs.Count>0) then
|
||||
CreateFields
|
||||
else if (fields.Count>0) then
|
||||
begin
|
||||
InitFieldDefsFromfields;
|
||||
BindFields(True);
|
||||
end
|
||||
else
|
||||
raise Exception.Create(SErrNoFieldsDefined);
|
||||
end;
|
||||
if (FieldDefs.Count>0) then
|
||||
begin
|
||||
CreateFields;
|
||||
// When a filename is set, do not read from this file
|
||||
AStoreFilename:=FFileName;
|
||||
FFileName := '';
|
||||
try
|
||||
Open;
|
||||
end
|
||||
else if (fields.Count>0) then
|
||||
begin
|
||||
InitFieldDefsFromfields;
|
||||
BindFields(True);
|
||||
Open;
|
||||
end
|
||||
else
|
||||
raise Exception.Create(SErrNoFieldsDefined);
|
||||
finally
|
||||
FFileName:=AStoreFilename;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCustomBufDataset.BookmarkValid(ABookmark: TBookmark): Boolean;
|
||||
@ -2772,8 +2776,12 @@ end;
|
||||
procedure TCustomBufDataset.IntLoadFielddefsFromFile;
|
||||
|
||||
begin
|
||||
FieldDefs.Clear;
|
||||
FDatasetReader.LoadFielddefs(FieldDefs);
|
||||
if DefaultFields then CreateFields;
|
||||
if DefaultFields then
|
||||
CreateFields
|
||||
else
|
||||
BindFields(true);
|
||||
end;
|
||||
|
||||
procedure TCustomBufDataset.IntLoadRecordsFromFile;
|
||||
|
@ -71,6 +71,7 @@ type
|
||||
procedure TestDeleteAllInsertXML;
|
||||
procedure TestStreamingBlobFieldsXML;
|
||||
procedure TestStreamingBigBlobFieldsXML;
|
||||
procedure TestStreamingCalculatedFieldsXML;
|
||||
|
||||
procedure TestAppendDeleteBIN;
|
||||
|
||||
@ -543,6 +544,35 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTestBufDatasetStreams.TestStreamingCalculatedFieldsXML;
|
||||
var
|
||||
ADataset: TCustomBufDataset;
|
||||
f: tfield;
|
||||
begin
|
||||
ADataset := DBConnector.GetNDataset(true,10) as TCustomBufDataset;
|
||||
f := TIntegerField.Create(ADataset);
|
||||
f.FieldName:='ID';
|
||||
f.dataset := ADataset;
|
||||
|
||||
f := TIntegerField.Create(ADataset);
|
||||
f.FieldName:='CalcID';
|
||||
f.dataset := ADataset;
|
||||
f.FieldKind:=fkCalculated;
|
||||
|
||||
f := TStringField.Create(ADataset);
|
||||
f.FieldName:='NAME';
|
||||
f.dataset := ADataset;
|
||||
|
||||
ADataset.Open;
|
||||
ADataset.SaveToFile('FieldsDS.xml',dfXML);
|
||||
ADataset.Close;
|
||||
|
||||
ADataset.LoadFromFile('FieldsDS.xml',dfXML);
|
||||
AssertEquals(ADataset.FieldByName('ID').AsInteger,1);
|
||||
AssertEquals(ADataset.FieldByName('NAME').AsString,'TestName1');
|
||||
ADataset.Close;
|
||||
end;
|
||||
|
||||
procedure TTestBufDatasetStreams.TestAppendDeleteBIN;
|
||||
begin
|
||||
TestChanges(@AppendDeleteChange);
|
||||
|
Loading…
Reference in New Issue
Block a user