Search code examples
delphifiredac

Delphi: FireDac Connection blocking the application


I'm working to an application with a login form at the start-up.

Until user is writing the login data, I would like to connect discreetly to the SQL server.

The problem is that, when I have a slow connection or a wrong path to the server, the application is looking for the server or trying to connect and in this time the application is not responding.

For connection I use this procedure:

//-- SQL connect --//
procedure TSql.Connect;
var
  DriverId: String;
  i: Byte;
begin
  try
    Screen.Cursor:=crAppStart;

    //connection DriverName
    DriverId:=Server[FServerType].DriverId;
    FConnection.DriverName:=DriverId;

    //connection Params
    FConnection.Params.Clear;
    FConnection.Params.Add('DriverID='+DriverId); //mandatory
    if FConnString.Count>0 then
       for i := 0 to FConnString.Count-1 do FConnection.Params.Add(FConnString.Strings[i]);

    try
      FConnection.Open;
      FQuery.Connection:=FConnection;
    except
      on E : Exception do ShowError(_('Connection could not be established!'),E);
    end;
  finally
    Screen.Cursor:=crdefault;
  end;
end;

Please help me with some suggestion about how this can be done. I've read about threads and Application.ProcessMessages but I did not succeed to make it work smoothly.


Solution

  • Create a new thread, and do everything you need on it, that will not hang the main form and the user will not see anything you can see simillar functionality here