Thread View: pl.comp.lang.delphi.bazy-danych
10 messages
10 total messages
Started by Adam Siwoń
Fri, 26 Jun 2015 19:10
Firebird Embedded - problem z dostępem do bazy danych
Author: Adam Siwoń
Date: Fri, 26 Jun 2015 19:10
Date: Fri, 26 Jun 2015 19:10
42 lines
3207 bytes
3207 bytes
Cześć, mam problem z uruchomieniem mojej aplikacji u klienta. Aplikacja zgłasza błędy dostępu do bazy danych (dokładnie nieprawidłowy user i hasło) Nie było by w tym nic dziwnego, gdyby nie to że aplikacja korzysta z Firebird Embedded 2.5, więc użytkownik i hasło powinny być jej obojętne. Aplikacja napisana z użyciem AnyDACa w XE4, chodzi poprawnie w kilkudziesięciu lokalizacjach. Własność VendorLib ustawiona na stałe na fbembed.dll. Dllka wraz z resztą plików z pakietu embedded umieszczona w folderze aplikacji. Tryb połączenia Local. No i mam z nią problem na dwóch stacjach roboczych, na których jest zainstalowana inna aplikacja stosująca Firebird 2.1.1. Prześledziłem działanie mojej aplikacji ProcessMonitorem. O ile u mnie, na kilku testowych konfiguracjach apka szuka sobie biblioteki fbembed.dll i po jej znalezieniu łączy się bez problemów z bazą danych, to u klienta zamiast szukać fbembed.dll otwiera od razu fbclient.dll i próbuje otworzyć bazę danych przez serwer FireBird. No i oczywiście na tym się wykłada, bo serwer nie ma zdefiniowanego odpowiedniego konta i hasła użytkownika. Nie chciałbym zakładać konta użytkownika na instancji Firebird obcej aplikacji. Nie mogę tylko wyczaić czemu moja aplikacja ładuje bibliotekę fbclient.dll zamiast fbembed.dll co ma zahardkodowane w źródłach. W instancjach testowych nawet jak ma dostęp do biblioteki fbclient.dll to i tak zawsze łączy się z użyciem fbembed.dll. To co mnie jeszcze dziwi to to, że u mnie aplikacja szuka biblioteki kolejno po ścieżkach podanych w zmiennej środowiskowej path. A z loga ProcessMonitora wynika, że fbclient.dll jest odczytywany przy drugiej próbie dostępu (fakt, że z folderu Windows\System32) - jakby system wiedział, gdzie ma szukać tej biblioteki. Czy ktoś spotkał się z takim zachowaniem Any/FireDACa i FireBirda? Zastanawiam się czy może ta druga aplikacja coś zmodyfikowała w konfiguracji systemu, że próba odwołania do biblioteki fbembed.dll jest przekierowywana do fbclient. Może już popadam w paranoję bo szukam przyczyny drugi dzień i na nic nie mogę trafić. Będę wdzięczny za wszelkie sugestie. -- z pozdrowieniami Adam Siwoń
Re: Firebird Embedded - problem z dostępem do bazy danych
Author: Eugeniusz Rink
Date: Mon, 29 Jun 2015 08:56
Date: Mon, 29 Jun 2015 08:56
10 lines
1294 bytes
1294 bytes
Hej... Próbowałeś w swojej aplikacji wpisać ścieżkę do biblioteki klienckiej?? Ja miałem podobny problem w CodeTyphonie+ZEOS, pomogło wpisanie ścieżki do biblioteki klienckiej na sztywno. Pozdrawiam Eugeniusz Rink
Re: Firebird Embedded - problem z dostępem do bazy danych
Author: Adam Siwoń
Date: Mon, 29 Jun 2015 11:03
Date: Mon, 29 Jun 2015 11:03
18 lines
1834 bytes
1834 bytes
W dniu 2015-06-29 o 10:56, Eugeniusz Rink pisze: > Hej... > > Próbowałeś w swojej aplikacji wpisać ścieżkę do biblioteki klienckiej?? > > Ja miałem podobny problem w CodeTyphonie+ZEOS, pomogło wpisanie ścieżki > do biblioteki klienckiej na sztywno. No właśnie miałem odpowiadać, że pomogło wpisanie w konfiguracji: .\fbembed.dll Chciałbym tylko wiedzieć dlaczego na większości komputerów działa podanie samej nazwy biblioteki a na niektórych konieczne jest jawne podawanie ścieżki. -- z pozdrowieniami Adam Siwoń
Re: Firebird Embedded - problem z dostępem do bazy danych
Author: Tomek D
Date: Mon, 29 Jun 2015 11:47
Date: Mon, 29 Jun 2015 11:47
21 lines
1684 bytes
1684 bytes
W dniu 2015-06-29 o 13:03, Adam Siwoń pisze: > W dniu 2015-06-29 o 10:56, Eugeniusz Rink pisze: >> Hej... >> >> Próbowałeś w swojej aplikacji wpisać ścieżkę do biblioteki >> klienckiej?? >> >> Ja miałem podobny problem w CodeTyphonie+ZEOS, pomogło wpisanie >> ścieżki do biblioteki klienckiej na sztywno. > > No właśnie miałem odpowiadać, że pomogło wpisanie w konfiguracji: > .\fbembed.dll > > Chciałbym tylko wiedzieć dlaczego na większości komputerów działa > podanie samej nazwy biblioteki a na niektórych konieczne jest jawne > podawanie ścieżki. > Inaczej ustawiony katalog roboczy dla aplikacji? Tomek D.
Re: Firebird Embedded - problem z dostępem do bazy danych
Author: Eugeniusz Rink
Date: Mon, 29 Jun 2015 12:24
Date: Mon, 29 Jun 2015 12:24
31 lines
2258 bytes
2258 bytes
W dniu 29.06.2015 o 13:03, Adam Siwoń pisze: > W dniu 2015-06-29 o 10:56, Eugeniusz Rink pisze: >> Hej... >> >> Próbowałeś w swojej aplikacji wpisać ścieżkę do biblioteki klienckiej?? >> >> Ja miałem podobny problem w CodeTyphonie+ZEOS, pomogło wpisanie ścieżki >> do biblioteki klienckiej na sztywno. > > No właśnie miałem odpowiadać, że pomogło wpisanie w konfiguracji: > .\fbembed.dll > > Chciałbym tylko wiedzieć dlaczego na większości komputerów działa > podanie samej nazwy biblioteki a na niektórych konieczne jest jawne > podawanie ścieżki. > Z obserwacji wynika, że program szuka bibliotek np windows/system32 (w systemach x64 jest to katalog chyba WOW64) potem w katalogu z którego uruchamiasz exe. W naszych aplikacjach dla wyeliminowania takich sytuacji w konfiguracji bazy (Okienko logowania do programu Ctrl+k) wprowadzamy potrzebne elementy konfiguracyjne bazy danych, bibliotek, czy też dodatkowych ścieżek np do baz Accessa czy DBF... W Twoim przypadku napotkał program bibliotekę w system32 i ją podpiął nie szukając dalej... Pozdrawiam Eugeniusz Rink
Re: Firebird Embedded - problem z dostępem do bazy danych
Author: Adam Siwoń
Date: Mon, 29 Jun 2015 12:42
Date: Mon, 29 Jun 2015 12:42
39 lines
2822 bytes
2822 bytes
W dniu 2015-06-29 o 14:24, Eugeniusz Rink pisze: > W dniu 29.06.2015 o 13:03, Adam Siwoń pisze: >> W dniu 2015-06-29 o 10:56, Eugeniusz Rink pisze: >>> Hej... >>> >>> Próbowałeś w swojej aplikacji wpisać ścieżkę do biblioteki klienckiej?? >>> >>> Ja miałem podobny problem w CodeTyphonie+ZEOS, pomogło wpisanie ścieżki >>> do biblioteki klienckiej na sztywno. >> >> No właśnie miałem odpowiadać, że pomogło wpisanie w konfiguracji: >> .\fbembed.dll >> >> Chciałbym tylko wiedzieć dlaczego na większości komputerów działa >> podanie samej nazwy biblioteki a na niektórych konieczne jest jawne >> podawanie ścieżki. >> > > Z obserwacji wynika, że program szuka bibliotek np windows/system32 (w > systemach x64 jest to katalog chyba WOW64) potem w katalogu z którego > uruchamiasz exe. > W naszych aplikacjach dla wyeliminowania takich sytuacji w konfiguracji > bazy (Okienko logowania do programu Ctrl+k) wprowadzamy potrzebne > elementy konfiguracyjne bazy danych, bibliotek, czy też dodatkowych > ścieżek np do baz Accessa czy DBF... > > W Twoim przypadku napotkał program bibliotekę w system32 i ją podpiął > nie szukając dalej... Ok. Tylko czemu podpiął fbclient.dll zamiast fbembed.dll? Sprawdzałem w źródłach AnyDACa i ten jeśli ma podaną nazwę biblioteki to szuka podanej. Dopiero, gdy nie ma to próbuje znaleźć fbclient.dll a następnie fbembed.dll. Więc jakbym nie miał nic wpisane w własności VendorLib to mogło by być wytłumaczenie. Ale wpis był na fbembed.dll a do programu była linkowana biblioteka fbclient.dll. -- z pozdrowieniami Adam Siwoń
Re: Firebird Embedded - problem z dostępem do bazy danych
Author: szemrany
Date: Mon, 29 Jun 2015 14:33
Date: Mon, 29 Jun 2015 14:33
18 lines
1915 bytes
1915 bytes
On Mon, 29 Jun 2015 14:42:00 +0200, Adam Siwoń wrote: > Ok. Tylko czemu podpiął fbclient.dll zamiast fbembed.dll? Sprawdzałem w > źródłach AnyDACa i ten jeśli ma podaną nazwę biblioteki to szuka > podanej. Dopiero, gdy nie ma to próbuje znaleźć fbclient.dll a następnie > fbembed.dll. Więc jakbym nie miał nic wpisane w własności VendorLib to > mogło by być wytłumaczenie. Ale wpis był na fbembed.dll a do programu > była linkowana biblioteka fbclient.dll. A nie wykonujesz najpierw jakiejś operacji typu sprawdzanie bazy, klienta, serwera PRZED oficjalnym podłączeniem do bazy? Może jakiś pomocniczy wątek czy coś takiego? -- howgh szemrany "Trzeba z żywymi naprzód iść, po życie sięgać nowe, a nie w uwiędłych laurów liść z uporem stroić głowę"
Re: Firebird Embedded - problem z dostępem do bazy danych
Author: Adam Siwoń
Date: Mon, 29 Jun 2015 19:04
Date: Mon, 29 Jun 2015 19:04
28 lines
2918 bytes
2918 bytes
W dniu 2015-06-29 o 16:33, szemrany pisze: > On Mon, 29 Jun 2015 14:42:00 +0200, Adam Siwoń wrote: > >> Ok. Tylko czemu podpiął fbclient.dll zamiast fbembed.dll? Sprawdzałem w >> źródłach AnyDACa i ten jeśli ma podaną nazwę biblioteki to szuka >> podanej. Dopiero, gdy nie ma to próbuje znaleźć fbclient.dll a następnie >> fbembed.dll. Więc jakbym nie miał nic wpisane w własności VendorLib to >> mogło by być wytłumaczenie. Ale wpis był na fbembed.dll a do programu >> była linkowana biblioteka fbclient.dll. > > A nie wykonujesz najpierw jakiejś operacji typu sprawdzanie bazy, klienta, > serwera PRZED oficjalnym podłączeniem do bazy? Może jakiś pomocniczy wątek > czy coś takiego? > No właśnie nie. Komponent ADConnection leży na jednym data module z ADPhysIBDriverLink. VendorLib ustawione w trybie projektowania. DataModule jest co prawda tworzone dynamicznie, ale tylko w jednej kopii. Poza tym gdy obserwuję aplikację na ProcessMonitorze to widziałbym, że u mnie szuka najpierw fbclient.dll a dopiero potem fbembed.dll. A u mnie od razu dobiera się do fbembed.dll a u klienta od razu do fbclient.dll. Niestety nie mam dostępu do tej stacji roboczej - może wtedy udało by się coś więcej zdiagnozować. Zastanawiałem się, czy przypadkiem w rejestrze systemowym w gałęzi KnownDlls nie ma dziwnych wpisów, ale niestety nie mam jak tego sprawdzić. -- z pozdrowieniami Adam Siwoń
Re: Firebird Embedded - problem z dostępem do bazy danych
Author: mmm
Date: Tue, 30 Jun 2015 11:02
Date: Tue, 30 Jun 2015 11:02
24 lines
2344 bytes
2344 bytes
> No właśnie nie. Komponent ADConnection leży na jednym data module z > ADPhysIBDriverLink. VendorLib ustawione w trybie projektowania. > DataModule jest co prawda tworzone dynamicznie, ale tylko w jednej kopii. > Poza tym gdy obserwuję aplikację na ProcessMonitorze to widziałbym, że u > mnie szuka najpierw fbclient.dll a dopiero potem fbembed.dll. A u mnie > od razu dobiera się do fbembed.dll a u klienta od razu do fbclient.dll. > Niestety nie mam dostępu do tej stacji roboczej - może wtedy udało by > się coś więcej zdiagnozować. Zastanawiałem się, czy przypadkiem w > rejestrze systemowym w gałęzi KnownDlls nie ma dziwnych wpisów, ale > niestety nie mam jak tego sprawdzić. > Dwa pomysły do sprawdzenia 1) Ciekawe jak by zareagowała aplikacja jakbyś dodał aktualny katalog przez SetDllDirectory(....) zamiast ścieżki do DLL ? 2) http://delphi.wikia.com/wiki/Remote_Debugger +do tego TigerVNC albo jakiś inny "zdalny pulpit" +profilaktycznie tunel po SSH jak za NAT-em Fizyczny dostęp nie będzie potrzebny ;) M
Re: Firebird Embedded - problem z dostępem do bazy danych
Author: Adam Siwoń
Date: Wed, 01 Jul 2015 10:04
Date: Wed, 01 Jul 2015 10:04
44 lines
3287 bytes
3287 bytes
W dniu 2015-06-30 o 13:02, mmm pisze: > >> No właśnie nie. Komponent ADConnection leży na jednym data module z >> ADPhysIBDriverLink. VendorLib ustawione w trybie projektowania. >> DataModule jest co prawda tworzone dynamicznie, ale tylko w jednej kopii. >> Poza tym gdy obserwuję aplikację na ProcessMonitorze to widziałbym, że u >> mnie szuka najpierw fbclient.dll a dopiero potem fbembed.dll. A u mnie >> od razu dobiera się do fbembed.dll a u klienta od razu do fbclient.dll. >> Niestety nie mam dostępu do tej stacji roboczej - może wtedy udało by >> się coś więcej zdiagnozować. Zastanawiałem się, czy przypadkiem w >> rejestrze systemowym w gałęzi KnownDlls nie ma dziwnych wpisów, ale >> niestety nie mam jak tego sprawdzić. >> > > Dwa pomysły do sprawdzenia > > 1) Ciekawe jak by zareagowała aplikacja jakbyś dodał aktualny katalog > przez SetDllDirectory(....) zamiast ścieżki do DLL ? Nie mam już gdzie próbować :-). W dodatku w dokumentacji funkcji jest napisane: After calling SetDllDirectory, the standard DLL search path is: 1. The directory from which the application loaded. 2. The directory specified by the lpPathName parameter. 3. The system directory. Use the GetSystemDirectory function to get the path of this directory. The name of this directory is System32. Czyli na pierwszym miejscu wciąż jest ścieżka z aplikacją. > 2) http://delphi.wikia.com/wiki/Remote_Debugger > +do tego TigerVNC albo jakiś inny "zdalny pulpit" > +profilaktycznie tunel po SSH jak za NAT-em > Fizyczny dostęp nie będzie potrzebny ;) To zawsze mogę, ale skoro aplikacja działa, to klient nie jest już specjalnie chętny do testów. Myślę, że nie będę już specjalnie drążył tematu, bo teraz mogę sobie gdybać, ale nie mam środowiska do testów. Dziękuję wszystkim za udział w dyskusji. -- z pozdrowieniami Adam Siwoń
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads