🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#82539
Author: Adam Siwoń
Date: Fri, 26 Jun 2015 19:10
42 lines
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
#82540
Author: Eugeniusz Rink
Date: Mon, 29 Jun 2015 08:56
10 lines
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
#82541
Author: Adam Siwoń
Date: Mon, 29 Jun 2015 11:03
18 lines
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
#82542
Author: Tomek D
Date: Mon, 29 Jun 2015 11:47
21 lines
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
#82543
Author: Eugeniusz Rink
Date: Mon, 29 Jun 2015 12:24
31 lines
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
#82544
Author: Adam Siwoń
Date: Mon, 29 Jun 2015 12:42
39 lines
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
#82545
Author: szemrany
Date: Mon, 29 Jun 2015 14:33
18 lines
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
#82546
Author: Adam Siwoń
Date: Mon, 29 Jun 2015 19:04
28 lines
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
#82547
Author: mmm
Date: Tue, 30 Jun 2015 11:02
24 lines
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
#82548
Author: Adam Siwoń
Date: Wed, 01 Jul 2015 10:04
44 lines
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