Weet iemand hoe ik ervoor kan zorgen dat een TFDConnection (in dit geval MSSQL) het na (bijvoorbeeld) 5 seconden opgeeft in plaats van de eeuwigheid 30 seconden of langer?
Geen enkele timeout param lijkt enige invloed te hebben.
Weet iemand hoe ik ervoor kan zorgen dat een TFDConnection (in dit geval MSSQL) het na (bijvoorbeeld) 5 seconden opgeeft in plaats van de eeuwigheid 30 seconden of langer?
Geen enkele timeout param lijkt enige invloed te hebben.
zo iets:
Bij de Connection parameters kan je eventueel ook nog een LoginTimeOut ( deze staat default op 30 seconden ) of een CommunicationTimeOut opgeven.Code:FDEventAlerter1.Names.Clear; FDEventAlerter1.Names.Add('Customers'); case FDConnection1.RDBMSKind of mkOracle: FDEventAlerter1.Options.Kind := 'DBMS_ALERT'; mkInterbase: FDEventAlerter1.Options.Kind := 'Events'; end; FDEventAlerter1.Options.Synchronize := True; FDEventAlerter1.Options.Timeout := 10000; FDEventAlerter1.OnAlter := DoAlert; FDEventAlerter1.OnTimeout := DoTimeout; FDEventAlerter1.Active := True; End; Procedure TForm1.DoAlert(ASender: TFDCustomEventAlerter; const AEventName: String; const AArgument: Variant); begin if CompareText(AEventName, 'Customers') = 0 then qryCustomers.Refresh; end; Procedure TForm1.DoTimeout(ASender: TObject); begin // do something end;
Dan heb je ook nog een ReadTimeOut en een WriteTimeOut, maar die heb je vermoedelijk niet nodig
gr.Peter
Last edited by Wok; 14-Apr-18 at 12:50.
10.4.2, Delphi2010, of Lazarus 2.2.0
Ik snap niet goed waar die eventalerter code voor is :-)
probleem is dat
geen enkel effect heeft. Het blijft 30 seconden.Code:Connection.Params.Values['LoginTimeout'] := '5';
Als ik je vraag teruglees is dit niet helemaal wat je bedoel.......
Maar hier wel wat uitleg over de eventhandler
De EventAlerter kan je gebruiken in b.v. een synchroniseeropdracht en dat kan eventueel in een achtergrondthread.
Je kan binnen je toepassing een time-out voor waarschuwingen instellen door Opties op te geven.
Wanneer er zijn geen waarschuwingen voor gespecificeerde tijd, dan zal de gebeurtenishandler OnTimeout aangeroepen.
Aan de serverkant zal je wel een trigger moeten instellen
Met firebird :
CREATE TRIGGER TR_CUSTOMERS FOR CUSTOMERS
ACTIVE AFTER INSERT OR UPDATE OR DELETE
BEGIN
POST_EVENT 'tabelnaam';
END;
Last edited by Wok; 15-Apr-18 at 01:15.
10.4.2, Delphi2010, of Lazarus 2.2.0
Ok. de trigger. Ja voor firebird heb ik die weleens gebruikt. Dat is handig maar inderdaad niet helemaal wat ik bedoel.
Ik denk eingelijk dat de timeout waarde voor de connection compleet genegeerd wordt door sql native client.
Ik zal eens kijken met een oude langzame computer, daar een testdatabase opzetten en volzetten met actieve programma's of ik een goede time out kan simuleren.
Ik werk meestal om dit probleem heen om bv een splashscreen of een inlogscherm te tonen.
10.4.2, Delphi2010, of Lazarus 2.2.0
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks