Page 1 of 1

TZConnection.DesignConnection and embedded FB

Posted: 26.07.2021, 12:55
by FrankBKK
Today I run into a rather curious issue with zConnection.DesignConnection when using Firebird3 Embedded.

When zConnection.DesignConnection = True and zConnection.Database property points to a FDB that does not exist on runtime the application just quits - no error message or anything. Naturally one thinks of a wrongly configured Embedded Server, issues with the connection strings etc. but for sure the last thing that comes to mind is a DesignTime property ...

That was even more annoying as Zeos seems to check on that before the DataModule's OnCreate event is triggered, so no chance for a proper debug session ;-)

What exactly is DesignConnection supposed to do and what other effects can I expect during runtime ?

Re: TZConnection.DesignConnection and embedded FB

Posted: 26.07.2021, 17:03
by marsupilami
Hello Frank,
FrankBKK wrote: 26.07.2021, 12:55 When zConnection.DesignConnection = True and zConnection.Database property points to a FDB that does not exist on runtime the application just quits - no error message or anything. Naturally one thinks of a wrongly configured Embedded Server, issues with the connection strings etc. but for sure the last thing that comes to mind is a DesignTime property ...

That was even more annoying as Zeos seems to check on that before the DataModule's OnCreate event is triggered, so no chance for a proper debug session ;-)
Erm - this is natural to Delphi. Design time properties get applied during the creation of DataModules and Forms. Zeos has to act as soon as properties get set.
FrankBKK wrote: 26.07.2021, 12:55What exactly is DesignConnection supposed to do and what other effects can I expect during runtime ?
This is what DesignConnection does at runtime:

Code: Select all

{**
  This method is required to support proper component initialization.
  Without it, the connection can start connecting before every property is loaded!
}
procedure TZAbstractConnection.Loaded;
begin
  inherited Loaded;
  try
    if FStreamedConnected then
      if (csDesigning in ComponentState) or not FDesignConnection then
        SetConnected(True);
  except
    if csDesigning in ComponentState then
      if Assigned(Classes.ApplicationHandleException) then
        Classes.ApplicationHandleException(ExceptObject)
      else
        ShowException(ExceptObject, ExceptAddr)
    else
      raise;
  end;
end;
FStreamedConnected gets set to True, during the deserialization of the connection component if you set Connected = True at designtime. So basically DesignConnection is a property that says "I might have set Connected to true at designtime but I don't want to automatically connect at runtime. I want that connection at designtime only."

So - usually setting DesignConnection to true should be a safe way to handle things.

Best regards,

Jan

Re: TZConnection.DesignConnection and embedded FB

Posted: 26.07.2021, 22:46
by FrankBKK
Hi Jan,

thanks for your prompt and extensive reply.
So - usually setting DesignConnection to true should be a safe way to handle things.

Hmm, the way you explain it I would agree - that is until the FDB set at design time does not exist at runtime (which I would say is the norm).

I just can't wrap my head around the fact that a design time property - set correctly or wrong - causes the runtime application to simply quit without further notification - I would at least expect an error to be raised.

Re: TZConnection.DesignConnection and embedded FB

Posted: 27.07.2021, 07:39
by marsupilami
FrankBKK wrote: 26.07.2021, 22:46 I just can't wrap my head around the fact that a design time property - set correctly or wrong - causes the runtime application to simply quit without further notification - I would at least expect an error to be raised.
Hmm - this is a part, that I don't understand too. Maybe you can prepare a small sample application that demonstrates the problem? Also I would have to know which Compiler and IDE you use, including version numbers.

Best regards,

Jan