Artykuły opracowane przez HoBBit'a.


Połączenie z sieciową bazą danych. [Subiekt GT]

 

Użyte nazwy produktów lub nazwy zastrzeżone są własnością ich prawnych właścicieli i zostały tu użyte jedynie w celach edukacyjnych. Autor nie ponosi odpowiedzialności za szkody wynikające z działalności czytelnika.

 

Z uwagi na znikomą ilość tematów o bazach danych, postanowiłem się podzielić doświadczeniem jakie zebrałem katując się nad trywialnymi, z aktualnego punktu widzenia, problemami.
Pierwsza rzecz jaką udało mi się zaliczyć do dużego sukcesu jest podpięcie się do bazy danych programu "Subiekt GT". Oto krótki tutorial jak to zrobić.

I. Przygotowanie

Co potrzeba:

 

  1. Zainstalowane oprogramowanie wraz z serwerem bazy danych,

  2. Połączenie sieciowe z bazą (zbędne jeżeli serwer jest uruchomiony lokalnie),

  3. Konfiguracja aliasu bazy (przygotowanie bazy subiekta do obsługi)

  4. Środowisko C++ Borlanda.

 

Lista Komponentów:

 

 

1. Konfigurujemy alias bazy SubiektaGT,
2. Wszystkie potrzebne komponenty wrzucamy na formę,
3. Konfigurujemy połączenia między komponentami.

Mamy 3 sposoby na konfigurację połączenia naszego programu z bazą:

1. podanie ścieżki do pliku bazy danych znajdującego się na dysku,
2. podanie nazwy bazy danych lokalnej lub sieciowej,
3. podanie nazwy sesji.

 

My użyjemy trzeciego sposobu.

II. Konfiguracja aliasu bazy SubiektaGT

Przedstawię tu konfigurację za pomocą narzędzia Źródła danych ODBC co pozwoli ominąć ograniczenia stworzone przez środowisko Borlanda, które nie pozwalają uruchomić programu bez zainstalowanego silnika BDE (np. komputer kolegi).

Przechodzimy kolejno:

1. START
® Panel Sterowania ® Narzędzia Administracyjne ® Źródła danych (ODBC)
2. Przechodzimy do zakładki [Systemowe DSN]
3. Naciskamy przycisk [Dodaj...], z listy wybieramy "SQL Serwer" i naciskamy przycisk [Zakończ].

Pokazuje się nam nowe okienko gdzie przeprowadzimy konfigurację dla połączenia.

4. W pole [Nazwa] wpisujemy np: "Edu_SubiektGT"
5. W polu opis możecie wpisać co wam się podoba.
6. W polu [Serwer] należy wybrać ten serwer którego ścieżka dostępu kończy się "..\INSERTGT" (np: SERWER\INSERTGT). Klikamy [Dalej>].
7. Wybieramy opcję Uwierzytelniania serwera SQL za pomocą identyfikatora logowania.
8. Jako identyfikator logowania wpisujemy "sa" i hasło zostawiamy puste. Klikamy [Dalej>].
9. Zaznaczamy opcję "Zmień domyślną bazę danych na.." i wybieramy tą do której chcemy się podłączyć (może być wyświetlonych więcej jak jedna). Klikamy [Dalej>].
10. Zaznaczamy opcję "Zmień język komunikatów systemowych serwera SQL na: " i wybieramy z listy "Polish". Klikamy [Zakończ].
11. Klikamy {Testuj źródło danych..}.

Jeżeli wszystko poszło dobrze to powinniśmy przejść test śpiewająco.. W innym wypadku piszcie posty i pytajcie..

III. Konfiguracja programu

1. Nadajemy nazwę dla naszej sesji. Wpisujemy w polu SessionName komponentu Session1 dowolną nazwę sesji unikając polskich znaków (ja nadam jej nazwę "nowa").
2. W polu SessionName komponentu Table1 wybieramy naszą nazwę sesji (Edu_SubiektGT).
3. W polu DataSet komponentu DataSource1 wybieramy Table1.
4. W polu DataSource komponentu DBGrid1 wybieramy DataSource1.

Teraz możemy przejść do kodowania naszego programu.

IV. Kod programu

Pobieranie nazw baz danych realizuje klasa TSession przez funkcję GetDatabaseNames().

 

//---------------------------------------------------------------------------
 __fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
  Session1->GetDatabaseNames(ComboBox1->Items); //pobiera wszystkie nazwy baz
  ComboBox1->ItemIndex = 0; //ustawia się na górze listy
  Table1->ReadOnly = true; //na potrzeby edukacyjne zapis zablokowany
}
//---------------------------------------------------------------------------


Pobieranie nazw tabel zrealizowane jest w zdarzeniu OnClick komponentu ComboBox1.
Składnia funkcji:

 

GetTableNames(AnsiString DatabaseName, AnsiString Pattern, bool Extensions, bool SystemTables, TStrings * List);

AnsiString DataBaseName - Ustala nazwę bazy do obsługi. U nas pobierzemy nazwę z ComboBox1 właściwości Text
AnsiString Pattern - Można wyświetlić nazwy baz z filtrem np:"*a" zostaną wyświetlone bazy których nazwa kończy się na a
bool Extensions - definiuje czy do nazwy ma się zaliczać rozszerzenie pliku bazy danych (dla bazy SQL ustaw na false)
bool SystemTables - Ustaw SystemTables na true dla baz danych opartych na SQL dla zwracania tabel systemowych i tabel danych definiujących strukturę bazy. Dla baz Paradox i dBASE ustaw na false.
TStrings * List - Lista klasy String do której zostaną wpisane wszystkie nazwy tabel z bazy.


Podczas wyboru bazy danych w uruchomionym programie, może pojawić się komunikat o podanie loginu i hasła. W bazie Subiekta GT domyślny login to bodajże sa i hasło puste.

 

//---------------------------------------------------------------------------
void __fastcall TForm2::ComboBox1Click(TObject *Sender)
{
  Session1->GetTableNames(ComboBox1->Text, "", true, false, ComboBox2->Items); //pobiera nazwy tabel do ComboBox2
  ComboBox2->ItemIndex = 0; //ustawia się na górze listy
}
//---------------------------------------------------------------------------

Podczas zmiany bazy danych należy wyczyścić listę tabel, w innym przypadku odwołamy się do tabeli która nie istnieje w nowej bazie danych i program zgłosi błąd. Funkcję tą najlepiej jest wywoływać gdy ComboBox1 zostanie przez użytkownika rozwinięte, czyli w zdarzeniu OnDropDown.

//---------------------------------------------------------------------------
void __fastcall TForm2::ComboBox1DropDown(TObject *Sender)
{
 ComboBox2->Items->Clear(); //czyści listę tabel
}
//---------------------------------------------------------------------------

Teraz nie pozostało nam nic innego jak wczytać zawartość tabeli do kontrolki DBGrid1. Aby to zrobić nie trzeba nawet znać nazw kolumn. Całą procedurę umieszczamy w zdarzeniu OnClick kontrolki ComboBox2.

//---------------------------------------------------------------------------
void __fastcall TForm2::ComboBox2Click(TObject *Sender)
{
  Table1->Active = false; //zapobiega otwarciu otwartej już tabeli
  Table1->DatabaseName = ComboBox1->Text; //przypisuje nazwę bazy danych
  Table1->TableName = ComboBox2->Text; //przypisuje nazwę tabeli
  Table1->Active = true; //wyświetla wybraną tabelę
}
//---------------------------------------------------------------------------

I gotowe!
Teraz jak mamy już dostęp do bazy danych, możemy rozwijać nasz program dalej.


Alias sieciowej bazy danych przez ODBC zamiast BDE [MS Access]

 

Użyte nazwy produktów lub nazwy zastrzeżone są własnością ich prawnych właścicieli i zostały tu użyte jedynie w celach edukacyjnych. Autor nie ponosi odpowiedzialności za szkody wynikające z działalności czytelnika.

 

Większość osób konfiguruje Aliasy baz danych przez BDE. W systemie Windows XP istnieje jednak narzędzie w pełni zastępujące narzędzie Borlanda. Mowa tu o ODBC. Nie jestem pewien, czy jest ono dostępne od momentu instalacji systemu czy instalacji serwera SQL (tak że proszę o komentarz).
Omówię to narzędzie na przykładzie bazy danych programu MS Access z użyciem komponentów BDE.

 

Lista niezbędników:

  1. Plik bazy danych programu MS Access umieszczony na serwerze zawierający przynajmniej jedną tabelę z nazwanymi kolumnami.

  2. Zainstalowany program MS Access.

  3. Aktywne połączenie sieciowe.

  4. Narzędzie zarządzania źródłem danych ODBC.

Otwieramy kolejno: START ® Panel Sterowania ® Narzedzia Administracyjne ® Źródła danych ODBC
Zostaje uruchomiona aplikacja znajdująca się w katalogu "system32" pod nazwą "odbcad32.exe"

Domyślnie pokazuje się nam zakładka [DSN użytkownika]. Zdefiniowane tu źródła danych nie będą widoczne w sieci, choć lokalizacja pliku bazy może być sieciowa.
Jeżeli konfigurujemy SERWER (rozumiany jako hardware) który ma obsługiwać bazę i inne komputery mają łączyć się do Serwera Bazy Danych (rozumianego jako software np: MSSql Serwer) należy przejść do zakładki [Systemowe DSN].

Na liście są wyświetlone aktualnie istniejące Aliasy baz danych. My utworzymy nowy Alias pozwalający na połączenie się z bazą danych znajdującą się na komputerze o nazwie sieciowej "SERWER" w pliku "test.accdb".

  1. Klikamy {Dodaj..}

  2. Z listy sterowników wybieramy ten który obsługuje nowy format Access'a z rozszerzeniem *.accdb (u mnie 9-ty od góry)

  3. Klikamy {Zakończ} lub 2 razy w wybrany sterownik.

  4. W polu "Nazwa źródła danych" wpisujemy dowolną nazwę (ja wpiszę "AliasTestowy") która będzie Aliasem dla połączenia z bazą.Klikamy {Wybierz}.

  5. Klikamy {Sieć} jeżeli zasoby znajdują się na innym komputerze.

  6. Wyskoczy nam okno kreatora dysków sieciowych. Należy wybrać literę dysku pod jaką będzie zdefiniowana ścieżka dostępu do katalogu z plikiem bazy danych.Wpisujemy ścieżkę dostępu jeżeli ją znamy lub klikamy {Przeglądaj..} jeżeli nie jesteśmy pewni jak ją wpisać.

  7. Wybieramy z udostępnionych folderów ten w którym umieściliśmy plik "test.accdb" (u mnie \\SERWER\BAZY_DANYCH ). Klikamy {Zakończ}.

  8. Kreator zakończył pracę i powróciliśmy do poprzedniego okienka. Teraz po lewej stronie powinna być wypisana w moim przypadku nazwa pliku "test.accdb" (jeżeli jej nie ma, to znaczy że plik nie istnieje lub wybraliśmy zły folder źródłowy w pkt.9 ).

  9. Klikając {Zaawansowane} można zdefiniować szczegóły dostępu do pliku takie jak "ReadOnly" którego ustawienie na 1 zabezpieczy bazę przed zapisem.

  10. Klikamy {OK} i już możemy się pochwalić nowym Aliasem.

Ważne !! Przy korzystaniu z plików Access'a nie jest wymagane połączenie przez komponenty ODBC ponieważ jest to jedyny plik Microsoftu do którego można połączyć się przez komponenty BDE wykorzystując sterownik MSACCESS. Warunkiem jest jednak posiadanie zainstalowanego Access'a na komputerze.

 

opracował: HoBBit.