Results 1 to 6 of 6

Thread: firedac connection timeout

  1. #1
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382

    firedac connection timeout

    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.

  2. #2
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    zo iets:

    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;
    Bij de Connection parameters kan je eventueel ook nog een LoginTimeOut ( deze staat default op 30 seconden ) of een CommunicationTimeOut opgeven.
    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

  3. #3
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    Ik snap niet goed waar die eventalerter code voor is :-)

    probleem is dat
    Code:
    Connection.Params.Values['LoginTimeout'] := '5';
    geen enkel effect heeft. Het blijft 30 seconden.

  4. #4
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Als ik je vraag teruglees is dit niet helemaal wat je bedoel.......
    Maar hier wel wat uitleg over de eventhandler

    Quote Originally Posted by EricLang View Post
    Ik snap niet goed waar die eventalerter code voor is :-)
    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

  5. #5
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    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.

  6. #6
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    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

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •