mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 22:14:25 +02:00
* Implemented TBufDataset.Refresh + simple test/fixed test
git-svn-id: trunk@14099 -
This commit is contained in:
parent
a2ca16be91
commit
5bfbd8e15d
@ -438,6 +438,8 @@ type
|
||||
procedure SetOnUpdateError(const aValue: TResolverErrorEvent);
|
||||
procedure SetFilterText(const Value: String); override; {virtual;}
|
||||
procedure SetFiltered(Value: Boolean); override; {virtual;}
|
||||
procedure InternalRefresh; override;
|
||||
procedure BeforeRefreshOpenCursor; virtual;
|
||||
{abstracts, must be overidden by descendents}
|
||||
function Fetch : boolean; virtual;
|
||||
function LoadField(FieldDef : TFieldDef;buffer : pointer; out CreateBlob : boolean) : boolean; virtual;
|
||||
@ -2622,7 +2624,7 @@ begin
|
||||
inherited;
|
||||
|
||||
// refilter dataset if filtered
|
||||
if IsCursorOpen and Filtered then Refresh;
|
||||
if IsCursorOpen and Filtered then Resync([]);
|
||||
end;
|
||||
|
||||
procedure TBufDataset.SetFiltered(Value: Boolean); {override;}
|
||||
@ -2635,7 +2637,25 @@ begin
|
||||
|
||||
// only refresh if active
|
||||
if IsCursorOpen then
|
||||
Refresh;
|
||||
Resync([]);
|
||||
end;
|
||||
|
||||
procedure TBufDataset.InternalRefresh;
|
||||
var StoreDefaultFields: boolean;
|
||||
begin
|
||||
StoreDefaultFields:=DefaultFields;
|
||||
SetDefaultFields(False);
|
||||
FreeFieldBuffers;
|
||||
ClearBuffers;
|
||||
InternalClose;
|
||||
BeforeRefreshOpenCursor;
|
||||
InternalOpen;
|
||||
SetDefaultFields(StoreDefaultFields);
|
||||
end;
|
||||
|
||||
procedure TBufDataset.BeforeRefreshOpenCursor;
|
||||
begin
|
||||
// Do nothing
|
||||
end;
|
||||
|
||||
function TBufDataset.Fetch: boolean;
|
||||
|
@ -259,6 +259,7 @@ type
|
||||
Function GetDataSource : TDatasource; override;
|
||||
Procedure SetDataSource(AValue : TDatasource);
|
||||
procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBufBlobField); override;
|
||||
procedure BeforeRefreshOpenCursor; override;
|
||||
public
|
||||
procedure Prepare; virtual;
|
||||
procedure UnPrepare; virtual;
|
||||
@ -1572,6 +1573,16 @@ begin
|
||||
TSQLConnection(DataBase).LoadBlobIntoBuffer(FieldDef, ABlobBuf, FCursor,(Transaction as tsqltransaction));
|
||||
end;
|
||||
|
||||
procedure TCustomSQLQuery.BeforeRefreshOpenCursor;
|
||||
begin
|
||||
// This is only necessary because TIBConnection can not re-open a
|
||||
// prepared cursor. In fact this is wrong, but has never led to
|
||||
// problems because in SetActive(false) queries are always
|
||||
// unprepared. (which is also wrong, but has to be fixed later)
|
||||
if IsPrepared then with TSQLConnection(DataBase) do
|
||||
UnPrepareStatement(FCursor);
|
||||
end;
|
||||
|
||||
function TCustomSQLQuery.GetStatementType : TStatementType;
|
||||
|
||||
begin
|
||||
|
@ -139,7 +139,7 @@ begin
|
||||
begin
|
||||
open;
|
||||
delete;
|
||||
refresh;
|
||||
Resync([]);
|
||||
applyupdates;
|
||||
AssertTrue(IsEmpty);
|
||||
|
||||
|
@ -57,6 +57,7 @@ type
|
||||
procedure TestInsertReturningQuery;
|
||||
|
||||
procedure TestTemporaryTable;
|
||||
procedure TestRefresh;
|
||||
|
||||
procedure TestParametersAndDates;
|
||||
procedure TestExceptOnsecClose;
|
||||
@ -925,6 +926,43 @@ begin
|
||||
inherited RunTest;
|
||||
end;
|
||||
|
||||
procedure TTestFieldTypes.TestRefresh;
|
||||
var ADataset: TDataset;
|
||||
i: integer;
|
||||
AFldID, AFldName: TField;
|
||||
begin
|
||||
ADataset := TSQLDBConnector(DBConnector).GetNDataset(true,5);
|
||||
|
||||
Adataset.Open;
|
||||
AFldId:=Adataset.Fields[0];
|
||||
AFldName:=Adataset.Fields[1];
|
||||
for i := 1 to 5 do
|
||||
begin
|
||||
AssertEquals(i,AFldID.asinteger);
|
||||
AssertEquals('TestName'+inttostr(i),AFldName.asstring);
|
||||
ADataset.Next;
|
||||
end;
|
||||
|
||||
ADataset.Next;
|
||||
AssertTrue(ADataset.EOF);
|
||||
TSQLDBConnector(DBConnector).Connection.ExecuteDirect('update FPDEV set NAME=''test'' where ID=2');
|
||||
|
||||
ADataset.Refresh;
|
||||
|
||||
ADataset.First;
|
||||
for i := 1 to 5 do
|
||||
begin
|
||||
AssertEquals(i,AFldID.AsInteger);
|
||||
if i = 2 then
|
||||
AssertEquals('test',AFldName.AsString)
|
||||
else
|
||||
AssertEquals('TestName'+inttostr(i),AFldName.AsString);
|
||||
ADataset.Next;
|
||||
end;
|
||||
ADataset.Next;
|
||||
AssertTrue(ADataset.EOF);
|
||||
end;
|
||||
|
||||
procedure TTestFieldTypes.TestEmptyUpdateQuery;
|
||||
begin
|
||||
TSQLDBConnector(DBConnector).Connection.ExecuteDirect('update FPDEV set name=''nothing'' where (1=0)');
|
||||
|
Loading…
Reference in New Issue
Block a user