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, |
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; |
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); |
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; |
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(ibxeMultiThreadRequired,['TIBQuery/TIBDataset MasterDetailDelay']); |
1442 |
> |
FTimer.Interval := FDelayTimerValue; |
1443 |
> |
{$IFEND} |
1444 |
|
end; |
1445 |
|
|
1446 |
|
procedure TIBDataLink.ActiveChanged; |
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; |
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; |