ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/branches/journaling/runtime/nongui/IBCustomDataSet.pas
(Generate patch)

Comparing ibx/trunk/runtime/nongui/IBCustomDataSet.pas (file contents):
Revision 209 by tony, Wed Mar 14 12:48:51 2018 UTC vs.
Revision 217 by tony, Fri Mar 16 10:27:26 2018 UTC

# Line 49 | Line 49 | interface
49   uses
50   {$IFDEF WINDOWS }
51    Windows,
52 < {$ELSE}
52 > {$ENDIF}
53 > {$IFDEF UNIX}
54    unix,
55   {$ENDIF}
56    SysUtils, Classes, IBDatabase, IBExternals, IB,  IBSQL, Db,
# Line 301 | Line 302 | type
302      FDelayTimerValue: integer;
303      FTimer: TFPTimer;
304      procedure HandleRefreshTimer(Sender: TObject);
305 +    procedure SetDelayTimerValue(AValue: integer);
306    protected
307      procedure ActiveChanged; override;
308      procedure RecordChanged(Field: TField); override;
# Line 310 | Line 312 | type
312      constructor Create(ADataSet: TIBCustomDataSet);
313      destructor Destroy; override;
314      property DelayTimerValue: integer {in Milliseconds}
315 <            read FDelayTimerValue write FDelayTimerValue;
315 >            read FDelayTimerValue write SetDelayTimerValue;
316    end;
317  
318    TIBGeneratorApplyOnEvent = (gaeOnNewRecord,gaeOnPostRecord);
# Line 1410 | Line 1412 | begin
1412    inherited Create;
1413    FDataSet := ADataSet;
1414    FTimer := TFPTimer.Create(nil);
1415 <  FTimer.Enabled := true;
1415 >  FTimer.Enabled := false;
1416    FTimer.Interval := 0;
1417    FTimer.OnTimer := HandleRefreshTimer;
1418    FDelayTimerValue := 0;
# Line 1425 | Line 1427 | end;
1427  
1428   procedure TIBDataLink.HandleRefreshTimer(Sender: TObject);
1429   begin
1430 <  FTimer.Interval := 0;
1431 <  FDataSet.RefreshParams;
1430 >  FTimer.Enabled := false;
1431 >  if FDataSet.Active then
1432 >    FDataSet.RefreshParams;
1433 > end;
1434 >
1435 > procedure TIBDataLink.SetDelayTimerValue(AValue: integer);
1436 > begin
1437 >  if FDelayTimerValue = AValue then Exit;
1438 >  FDelayTimerValue := AValue;
1439 >  {$IF FPC_FULLVERSION >= 30002}
1440 >  if (AValue > 0) and not IsMultiThread then
1441 >    IBError(ibxMultiThreadRequired,['TIBQuery/TIBDataset MasterDetailDelay']);
1442 >  FTimer.Interval := FDelayTimerValue;
1443 >  {$IFEND}
1444   end;
1445  
1446   procedure TIBDataLink.ActiveChanged;
# Line 1445 | Line 1459 | procedure TIBDataLink.RecordChanged(Fiel
1459   begin
1460    if (Field = nil) and FDataSet.Active then
1461    begin
1462 +    {$IF FPC_FULLVERSION >= 30002}
1463      if FDelayTimerValue > 0 then
1464 +    with FTimer do
1465      begin
1466 <      FTimer.Interval := FDelayTimerValue;
1467 <      FTimer.StartTimer;
1466 >      CheckSynchronize; {Ensure not waiting on Synchronize}
1467 >      if Enabled then
1468 >      begin
1469 >        StopTimer;
1470 >        StartTimer;
1471 >      end
1472 >      else
1473 >        Enabled := true;
1474      end
1475      else
1476 +    {$IFEND}
1477        FDataSet.RefreshParams;
1478    end;
1479   end;
# Line 5075 | Line 5098 | end;
5098   function TIBDataSetUpdateObject.GetRowsAffected(
5099    var SelectCount, InsertCount, UpdateCount, DeleteCount: integer): boolean;
5100   begin
5101 +  Result := true;
5102    SelectCount := 0;
5103    InsertCount := 0;
5104    UpdateCount := 0;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines