Category Archives: Systemy klienckie

Problem z systemowymi DSN w systemach z rodziny WINDOWS 7

Jedną z metod dostępu do baz danych SQL Server są źródła danych ODBC. O ile ustawienia DSN użytkownika jak i DSN systemowego nie jest żadną nowością, to w WINDOWS 7 (i prawdopodobnie VISTA) można się nieźle zdziwić.

Scenariusz problemu jest następujący:

Załóżmy, że pracujemy w firmie, która jest w trakcie migracji do WINDOWS 7 ze starszych systemów klienckich. Wraz z przejściem na nowy system modernizujemy sprzęt i instalujemy WINDOWS w wersji 64bit. Jedna z aplikacji z której korzystają użytkownicy używa ODBC do połączenia z bazą SQL Server. Po instalacji systemu przechodzimy więc do panelu sterowania, a stamtąd do okna „System i zabezpieczenia\Narzędzia administracyjne”. Następnie klikamy w skrót „Źródła danych (ODBC)” i z przyzwyczajenia ustawiamy systemowe DSN.

ODBC Administrator

Systemowe DSN z założenia jest dostępne do odczytu dla wszystkich użytkowników danego komputera, tak więc aplikacja powinna działać OK.  Przekazujemy komputer użytkownikowi, który się na niego loguje, po czym stwierdza, że niestety program łączący się z bazą nie działa tak jak powinien.

Okno błędu przykładowej aplikacji

W czym zatem tkwi problem?

Gdy zbadałem sprawę okazało się, że winowajcą jest funkcja „Windows 32 bit On Windows 64 bit”, w skrócie zwana WoW64. Z uwagi na to, że aplikacja korzystająca z ODBC jest 32 bitowa, to nie używa ona ustawionego przez nas DSN Systemowego w 64 bitowej wersji WINDOWS. Rozwiązaniem jest użycie 32 bitowego ODBC Administratora znajdującego się w katalogu:

C:\Windows\SysWOW64\odbcad32.exe.

Jego wygląd nie różni się niczym od wersji, którą odpalaliśmy używając panelu sterowania. Jedyną różnicą w jego działaniu jest to, że ustawia on DSN dla aplikacji 32 bit. Tworzymy za jego pomocą DSN systemowe, po czym uruchamiamy aplikację.

Działająca aplikacja używająca ODBC

Działa :). Pozostaje jednak jeszcze jedno pytanie:

Czy gdybyśmy ustawili DSN użytkownika to problem ten też by wystąpił?

Odpowiedzią jest NIE. Z tego co udało mi się wybadać WINDOWS kopiuje w pewnym momencie ustawienia DSN tak, by aplikacje 32-bitowe zachowywały się poprawnie. Ponieważ zwykły użytkownik nie ma uprawnień do konfiguracji DSN systemowych,  to mechanizm ten po prostu nie zadziałał. Jeżeli ustawimy DSN użytkownika problem z aplikacją nie wystąpi. Zwykły użytkownik ma prawo do tworzenia swoich DSN, więc WINDOWS po prostu przekopiuje ustawienia 64 bit na potrzeby 32 bitowych programów.

PS. Z uwagi, że winowajcą jest WoW64, to oczywistym jest, że na 32 bitowym systemie WINDOWS 7 problem ten nie występuje.

Reklamy