summaryrefslogtreecommitdiff
path: root/packages/fcl-db/src/sqlite/customsqliteds.pas
diff options
context:
space:
mode:
Diffstat (limited to 'packages/fcl-db/src/sqlite/customsqliteds.pas')
-rw-r--r--packages/fcl-db/src/sqlite/customsqliteds.pas19
1 files changed, 14 insertions, 5 deletions
diff --git a/packages/fcl-db/src/sqlite/customsqliteds.pas b/packages/fcl-db/src/sqlite/customsqliteds.pas
index c01aaf1333..34aa2d97a7 100644
--- a/packages/fcl-db/src/sqlite/customsqliteds.pas
+++ b/packages/fcl-db/src/sqlite/customsqliteds.pas
@@ -161,7 +161,6 @@ type
//TDataSet overrides
function AllocRecordBuffer: PChar; override;
procedure ClearCalcFields(Buffer: PChar); override;
- function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override;
procedure DoBeforeClose; override;
procedure DoAfterInsert; override;
procedure DoBeforeInsert; override;
@@ -191,19 +190,20 @@ type
procedure SetExpectedAppends(AValue: Integer);
procedure SetExpectedUpdates(AValue: Integer);
procedure SetExpectedDeletes(AValue: Integer);
- procedure SetFieldData(Field: TField; Buffer: Pointer); override;
- procedure SetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean); override;
procedure SetRecNo(Value: Integer); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function BookmarkValid(ABookmark: TBookmark): Boolean; override;
function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Longint; override;
+ function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override;
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; override;
function GetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean): Boolean; override;
function Locate(const KeyFields: String; const KeyValues: Variant; LocateOptions: TLocateOptions) : Boolean; override;
function LocateNext(const KeyFields: String; const KeyValues: Variant; LocateOptions: TLocateOptions) : Boolean;
function Lookup(const KeyFields: String; const KeyValues: Variant; const ResultFields: String): Variant; override;
+ procedure SetFieldData(Field: TField; Buffer: Pointer); override;
+ procedure SetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean); override;
// Additional procedures
function ApplyUpdates: Boolean;
procedure ClearUpdates(RecordStates: TRecordStateSet = [rsAdded, rsDeleted, rsUpdated]);
@@ -658,7 +658,7 @@ begin
else
FieldOffset := FieldDefs.Count + FCalcFieldList.IndexOf(Field);
- if State <> dsCalcFields then
+ if not (State in [dsCalcFields, dsInternalCalc]) then
FieldRow := PPDataRecord(ActiveBuffer)^^.Row[FieldOffset]
else
FieldRow := PPDataRecord(CalcBuffer)^^.Row[FieldOffset];
@@ -1220,11 +1220,20 @@ end;
function TCustomSqliteDataset.Lookup(const KeyFields: String; const KeyValues: Variant; const ResultFields: String): Variant;
var
TempItem: PDataRecord;
+ SaveState: TDataSetState;
begin
CheckBrowseMode;
TempItem := FindRecordItem(FBeginItem^.Next, KeyFields, KeyValues, [], False);
if TempItem <> nil then
- Result := TempItem^.Row[FieldByName(ResultFields).FieldNo - 1]
+ begin
+ SaveState := SetTempState(dsInternalCalc);
+ try
+ CalculateFields(PChar(@TempItem));
+ Result := FieldByName(ResultFields).Value;
+ finally
+ RestoreState(SaveState);
+ end;
+ end
else
Result := Null;
end;