Subject Re: [firebird-support] Re: Determining the Root_Directory
Author Helen Borrie
At 04:53 AM 28/12/2007, Dan Cooperstock wrote:

>I tried ProcessExplorer, and it also confirmed that it was the
>fbclient.dll in the expected directory that was being loaded. And that
>directory has a UDF subdirectory with my UDFs in it. They work when
>using Firebird Server, but not Embedded. (I switch in and out the
>appropriate versions of the DLL, and change my ODBC DSN appropriately,
>to switch between them.)

If you were using Delphi, you wouldn't be able to run an app that connects to the embedded server from inside the IDE. The reason for this is that the Delphi IDE makes its own connection to the database in design-time. If its connection is via a Windows embedded server process (which is Superserver) then that process -- owned by the Delphi IDE -- has the read-write lock on the database file. That blocks any other server instance from making a connection. It is designed that way deliberately. When you hit the Run button, the project executable is compiled and run but the connection to the database will fail.

That, in short, is why all the documentation warns you that the embedded server is a deployment option and is not designed for use in an integrated development environment.

If the architecture of the Powerbuilder IDE is in any part parallel with other IDEs, then a good guess would be that the embedded server process that is already running in the IDE "owns" the loaded instance of your UDF dll, making it inaccessible to whatever server process is started when you run the executable from the IDE. It does seem to be borne out by your observation that you don't see the problem when you run your executable directly.

For development, you can simulate the embedded server environment that you intend to deploy in various ways. The obvious one is to use the regular client and the full Superserver, with the IPServer "serverless" connection string. That's the only option if you are hard-coding your DPB parameters.

./heLen