Uruchomienie programu przez kilku użytkowników naraz.

0

Witam,
natknąłem się na problem z uruchomieniem programu przez kilku użytkowników.

Program jest połączony z bazą firebird embedded 2.5.3(i tu jest problem).

Jeśli uruchomię program na jednym koncie z prawami administratora, następnie przełączę użytkownika na drugiego, również z prawami administratora wszystko działa poprawnie.

Jednak gdy uruchomię program na jednym koncie z prawami administratora i przełączę użytkownika z prawami normalnymi i tam uruchomię program otrzymuję błąd:

Database is probably already opened another engine instance in another Windows session

Słyszałem o czymś takim jak wbudowana baza danych, która nie jest połączona(jak dotychczas) za pomocą komponentu IBDatabase tylko należy ją podpiąć w jakiś sposób ale nie wiem czy w Delphi 2009 można.Może ktoś coś więcej słyszał?

Jest jakiś sposób na rozwiązanie tego problemu?
Zainstalowanie serwera nie wchodzi w grę, muszę działać na bazie embedded.

0

Jak się łączysz do bazy danych?
Podajesz adres IP? Nie podajesz, to podaj i po sprawie.

0

Nie rozumiem.
Mam plik baza.FDB i podłączam go w Delphi tym sposobem:

IBDatabase1.DatabaseName:='C:\BazaDanych\baza.FDB'; 
IBDatabase1.Connected := True;

Mógłbyś wytłumaczyć z tym adresem IP ?

0

Mógłbyś wytłumaczyć z tym adresem IP ?

Znasz pojęcie RTFM? Nie znasz, to poznaj.
Wpisz tak:

IBDatabase1.DatabaseName:=127.0.0.1:C:\BazaDanych\baza.FDB; 
IBDatabase1.Connected := True;

I na pewno będzie OK.

0

Otrzymuję błąd

Failed to establish a connection

A istnieje jakis inny sposób ?

0

Matko... To wszystko jest opisane manualu i chyba nawet w IBX (komponenty o nazwie Interbase Express).
Format ConnectionString (ogólnie, bo można też za pomocą aliasu ale zostawmy to) dla bazy firebird jest taki:
[ServerName][Protocol][FullPathToDatabase]
gdzie:
[ServerName] -> nazwa komputera lub adres IP, na którym został uruchomiony serwer Firebrid.
[protocol] -> identyfikator protokołu połączenia. Dla TCP/IP będzie to ':' czyli dwukropek.
[FullPathToDatabase] -> pełna ścieżka dostępu do pliku z bazą danych na komputerze, na którym działa usługa serwera Firebird;

A więc, jeśli serwer Firebird zainstalowałeś i uruchomiłeś jako usługa na swoim komputerze (mam nadzieję, że wiesz na co wskazuje adres IP 127.0.0.1?), to powinno dać się połączyć tak jak napisałem.
I nie ma tu żadnej magii.

0

Tak rozumiem dziękuję za odpowiedź.
Ale ja mam bazę embedded, czyli nie instaluje nigdzie serwera tylko mam plik *.fdb
I szukam sposobu na rozwiązanie tego problemu.
A Ty jak widzę mówisz o serwerze, chyba że jestem w błędzie.

0

Tak, piszę o serwerze - wersja osadzona nie służy do połączeń symultanicznych.
Od wersji 2.5 można, ale tylko i wyłącznie pod warunkiem, że owe połączenia pochodzą z tej samej aplikacji. U Ciebie jest podobnie - ten sam użytkownik = ta sama aplikacja.
Różni użytkownicy = różne aplikacje, a przynajmniej silnik tak to traktuje, nawet jeśli to "ta sama" aplikacja, ale jej instancje są różne.
Poczytaj:
http://stackoverflow.com/questions/8593637/is-it-possible-to-use-firebird-embedded-for-small-number-of-users
http://www.firebirdfaq.org/faq284/

0

Właśnie o tym piszę ale pomyślałem, że może ktoś rozwiązanie jakieś wymyślił.

Podtrzymuje temat, jeśli ktoś taki problem rozwiązał.

Dziekuje z góry za podpowiedzi.

0

Nie ma innego rozwiązania dla Firebrid, poza instalacją pełnego serwera albo wprowadzeniem dodatkowej warstwy pośredniej.
Koniec kropka.

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