Windows 10 64bit, Delphi XE2, ZEOS i ORACLE - błąd przy próbie połączenia

0

Po dwóch latach musiałem wrócić do pewnego projektu, który współpracuje z bazą ORACLE i wprowadzić w nim kilka drobnych poprawek.

Od czasu gdy projekt został stworzony zdążyłem się przesiąść z Visty 32 bit na Windows 10 64 bit.

Na maszynie developerskiej mam zainstalowanego klienta ORACLE (32bit), Delphi XE2 działa normalnie, ale przy próbie uruchomienia programu ze środowiska Delphi (o debuggowaniu nie wspominając) pojawia się błąd, że nie można załadować biblioteki oci.dll oraz sugestia aby wprowadzić odpowiednią ścieżkę do properta LibraryPath. Ale to niestety nie pomaga.

Do połączenia z bazą ORACLE używam ZEOSa 7.0.3.

Problem jest o tyle dziwny, że po skompilowaniu - aplikacja uruchomiona poza środowiskiem IDE Delphi działa normalnie.

Wygląda to na jakiś problem ze ścieżkami przeszukiwania albo jakiś inny podobnie banalny problem.

Przeglądałem konfigurację Search Path w projekcie i środowisku, zmienną środowiskową PATH w systemie. Ustawiałem ORACLE_HOME w zmiennych środowiskowych i w rejestrze. Mysi być jeszcze jakieś miejsce, którego Delphi po prostu nie widzi.

Znalazłem też sposób, aby w delphi tuż przed połączeniem (drut-mode-on) na chwilę zmienić katalog roboczy aplikacji na katalog domowy (bin) klienta ORACLE. Sytuacja zmieniła się o tyle, że zamiast ładnego błędu dostaję błąd w stylu "krzki @$$#!@#@#R%#$%".

Poddajcie jakiś pomysł co jeszcze sprawdzić/ustawić.

0
  • w zmiennej PATH ścieżka do katalogu oracle\bin musi być pierwsza.
  • dodatkowa zmienna systemowa NLS_LANG z ustawieniem kodowania - dla polskiego windowsa wartość polish_poland.ee8mswin1250
  • jeśli używasz pliku tnsnames.ora to dodatkowa zmienna systemowa TNS_ADMIN, wartość - ścieżka do tego pliku
  • jeśli nie używasz ODBC to w rejestrze nic nie trzeba zmieniać

Przy takiej konfiguracji jeszcze mi się nie zdarzyło aby "ktoś" nie widział klienta oracle. BTW po zmianie/dodaniu zmiennych systemowych musisz przeresetować kompa (nie wiem czy wylogowanie usera wystarczy).

Istnieje myk aby mieć zarówno klienta 32-bit jak i 64-bit zainstalowanego i działającego (programy 32-bit potrzebują klienta 32-bit a programy 64-bit klienta 64-bit). Na przykładzie instantclienta 11g:

  • ściągamy paczki IC zarówno 32 bit jak i 64 bit
  • w katalogu c:\oracle tworzymy dwa katalogi - client_11g_32bit i client_11g_64bit i rozpakowywujemy do nich ściągnięte paczki (32 bit do 32bit a 64 bit do 64bit)
  • otwieramy konsolę CMD i wpisujemy cd %windir%\system32, mklink /j client_11g c:\oracle\client_11g_64bit, cd %windir%\SysWOW64, mklink /j client_11g c:\oracle\client_11g_32bit
  • teraz w zmiennej PATH podajemy zamiast ścieżki do c:\oracle\... ścieżkę do c:\windows\system32\client_11g
    I tyle. Działa to tak, że dla programów 32 bitowych system "zagląda" do katalogu SysWOW64\client_11g, który prowadzi do klienta 32-bit a dla programów 64 bitowych dostajemy system32\client_11g, która prowadzi do klienta 64-bit. Rozwiązuje to problem uruchamiania zarówno 32-bit jak i 64-bit programów wymagających klienta Oracle. W ten sam sposób możemy zainstalować różne wersje klientów innych baz.
0

a widzisz. Czyli kolejność w PATH ma znaczenie.

Dzięki za obszerne wyjaśnienia. Zdam relację co zadziałało.

0

teoretycznie nie ma ale kto tam wie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1