mariuz / flamerobin

FlameRobin is a database administration tool for Firebird RDBMS. Our goal is to build a tool that is: lightweight (small footprint, fast execution) cross-platform (Linux, Windows, Mac OS X, FreeBSD) dependent only on other Open Source software
http://flamerobin.org
MIT License
214 stars 66 forks source link

Connection parameters for Firebird portable server running as an application #199

Open zoltanleo opened 3 years ago

zoltanleo commented 3 years ago

Currently, for Windows, your application is probably trying to load the fbclient from %windir%\system32. This works if the firebird was installed by the regular installer. However, if I run the portable firebird as an application with a non-standard port number (e.g., firebird.exe -a -p 3051) without installation, flamerobin throws the expected error

Unhandled Error in FlameRobin
*** IBPP :: LogicException ***
Context: GDS :: Call ()
Message: Can't find or load FBCLIENT.DLL or GDS32.DLL

Can I ask you to add new functionality to the program that would allow you to specify the client library explicitly?

luronumen commented 3 years ago

Hi @Jdochoa and @arvanus

Suggestion to partially fix this issue. Search for the fbclient.dll library before attempting the connection following this priority:

  1. Current FlameRobin directory
  2. %ProgramFiles%\Firebird\Firebird_4_0\fbclient.dll
  3. %ProgramFiles%\Firebird\Firebird_3_0\fbclient.dll
  4. %ProgramFiles%\Firebird\Firebird_2_5\bin\fbclient.dll
  5. %SystemRoot%\system32

Best Regards, Luciano

zoltanleo commented 3 years ago

Perhaps I have not expressed my point clearly enough. I asked to add the ability to select fbclient.dll/.so from any directory or set the path to it via environment variables (like FIREBIRD).

I think that the functionality and popularity of your application will increase several times.

Unfortunately, your application is currently using hard links to connect to fbclient.dll/.so. This greatly limits its potential.

Jdochoa commented 3 years ago

Perhaps I have not expressed my point clearly enough. I asked to add the ability to select fbclient.dll/.so from any directory or set the path to it via environment variables (like FIREBIRD).

I think that the functionality and popularity of your application will increase several times.

Unfortunately, your application is currently using hard links to connect to fbclient.dll/.so. This greatly limits its potential.

I agree. I work in this.

./jo

arvanus commented 3 years ago

Hello @zoltanleo, how are you? About the port number, if you are not using the defautt (3050) you can define it normally in the server reg. info, so Fr will override the default from the installation (obviouslly this isn't your problem) Windows only: About defining a specific library PER connection I'm not sure IBPP (the component used to interact with FB) is able to support it :\ some conversation was done to the "new" IBPP driver, but hasn't evolved since a long time I use regularly FR with the fbclient.dll in the same folder of the FR installation, this doesn't work for you? You could even use fbembed.dll, that works fine for remote databases too

arvanus commented 3 years ago

Also, if you what to use embedded (without Fb server running) you already can do it with current Fr, just keep "server" variable empty, and place your fbembed.dll (if Fb2.5<) or fbclient.dll(Fb3.0>) (and additional DLLs icu*, msvc, intl folder or whatever you need) in the same folder of Fr image

zoltanleo commented 3 years ago

Also, if you what to use embedded (without Fb server running) you already can do it with current Fr, just keep "server" variable empty, and place your fbembed.dll (if Fb2.5<) or fbclient.dll(Fb3.0>) (and additional DLLs icu*, msvc, intl folder or whatever you need) in the same folder of Fr image

Hi, @arvanus. Thank U for the answer.

I will try to put fbclient.dll near with the executable. But this is a workaround, but not a solution to the problem.

hershkoy commented 3 years ago

I also have this issue. Firebird is installed in a non-default folder and with a non-default port. I copied fbclient.dll to the %windir%\system32 directory, and I am still getting this error. Anyway to fix that?

hershkoy commented 3 years ago

In my case the issue was probably because I used flamerobin 64 bit. I uninstalled and reinstalled flamerobin 32 bit, and it solved the issue

luronumen commented 2 years ago

Hi @zoltanleo

Could you please retest this issue on FlameRobin 0.9.3.12 and close it if it is no longer reproducible?

Thanks in advance, Luciano

zoltanleo commented 2 years ago

Could you please retest this issue on FlameRobin 0.9.3.12 and close it if it is no longer reproducible?

Hi Luciano.

I'm sorry. But the issue is not resolved. To understand my problem, I attached a screenshot of the connection to the same database for IBExpert (ignore that I use a 32-bit fbclient for a 64-bit server. IBExpert is always a 32-bit application).

scr_021

scr_019

scr_022

scr_020

arvanus commented 11 months ago

I'm reworking DLL loading order, as looks like Fb x64 has a strange design behavior https://github.com/FirebirdSQL/firebird/issues/6979 The new order will be:

  1. specifically defined path
  2. local directory fbembed
  3. local directory fbclient
  4. PATH and System directories
  5. Look at Win registry for Fb setup folder
  6. gds32.dll

Hi @Jdochoa and @arvanus

Suggestion to partially fix this issue. Search for the fbclient.dll library before attempting the connection following this priority:

1. Current FlameRobin directory

2. %ProgramFiles%\Firebird\Firebird_4_0\fbclient.dll

3. %ProgramFiles%\Firebird\Firebird_3_0\fbclient.dll

4. %ProgramFiles%\Firebird\Firebird_2_5\bin\fbclient.dll

5. %SystemRoot%\system32

Best Regards, Luciano

Jdochoa commented 11 months ago

I'm reworking DLL loading order, as looks like Fb x64 has a strange design behavior FirebirdSQL/firebird#6979 The new order will be:

1. specifically defined path

2. local directory fbembed

3. local directory fbclient

4. PATH and System directories

5. Look at Win registry for Fb setup folder

6. gds32.dll

Hi @Jdochoa and @arvanus Suggestion to partially fix this issue. Search for the fbclient.dll library before attempting the connection following this priority:

1. Current FlameRobin directory

2. %ProgramFiles%\Firebird\Firebird_4_0\fbclient.dll

3. %ProgramFiles%\Firebird\Firebird_3_0\fbclient.dll

4. %ProgramFiles%\Firebird\Firebird_2_5\bin\fbclient.dll

5. %SystemRoot%\system32

Best Regards, Luciano

Hi @arvanus.

If you look the source code, actually the order is: 1.- Specifically defined path. 2.- Specifically defined path for parameter. 3.- Local directory for fbembed.dll. 4.- Local directory for fbclient.dll. 5.- Windows Registry for fbclient.dll 6.- Windows Registry for WOW64\fbclient.dll 7.- Windows Registry for bin\fbclient.dll (FB 2.5-) 8.- Windows Registry for bin\WOW64\fbclient.dll (FB 2.5) 9.- Path and system directories. 10.- gds32.dll.

IMHO all options are covers.

./jo

arvanus commented 11 months ago

So, the problem lies exactly here: For the default configuration for x86 builds you get an error trying to connect to an Fb server thar requires chacha plugin, to avoid this I'll swap the order moving item 9 to be before 5

6.- Windows Registry for WOW64\fbclient.dll 8.- Windows Registry for bin\WOW64\fbclient.dll (FB 2.5) 9.- Path and system directories.

arvanus commented 11 months ago

Other users had this problem, and they solution was to always copy fbclient.dll to Flamerobin directory

arvanus commented 11 months ago

About item 2

2.- Specifically defined path for parameter.

Looks like you are not using this option, but I can easily missed this

Jdochoa commented 11 months ago

So, the problem lies exactly here: For the default configuration for x86 builds you get an error trying to connect to an Fb server thar requires chacha plugin, to avoid this I'll swap the order moving item 9 to be before 5

6.- Windows Registry for WOW64\fbclient.dll 8.- Windows Registry for bin\WOW64\fbclient.dll (FB 2.5) 9.- Path and system directories.

During my tests, the error is not fixed with the order you propose. The best request was the one left. I think choosing the correct version of fbclient.dll should be the responsibility of the user.

Jdochoa commented 11 months ago

About item 2

2.- Specifically defined path for parameter.

Looks like you are not using this option, but I can easily missed this

It was left for compatibility with IBPP

arvanus commented 11 months ago

I'll pull a change to my repo. Can you can try from there? Also I'm doing this change https://github.com/mariuz/flamerobin/issues/332