Dynamiczne konstruowanie ciągu połączenia z bazą danych w czasie wykonywania
Obrazy bohaterów/obrazy Getty
Po zakończeniu Rozwiązanie bazodanowe Delphi , ostatnim krokiem jest pomyślne wdrożenie go na komputerze użytkownika.
Ciąg połączenia w locie
Jeśli używałeś komponentów dbGo (ADO), Ciąg połączenia własność TADOPołączenie określa informacje o połączeniu dla magazynu danych.
Oczywiście przy tworzeniu aplikacji bazodanowych, które mają być uruchamiane na różnych maszynach, połączenie ze źródłem danych nie powinno być zakodowane na sztywno w pliku wykonywalnym. Innymi słowy, baza danych może znajdować się w dowolnym miejscu na komputerze użytkownika (lub na innym komputerze w sieci) — ciąg połączenia użyty w obiekcie TADOConnection musi zostać utworzony w czasie wykonywania. Jednym z sugerowanych miejsc do przechowywania parametrów parametrów połączenia jest Rejestr systemu Windows (lub możesz zdecydować się na użycie „zwykłego” TE pliki ).
Ogólnie rzecz biorąc, aby utworzyć ciąg połączenia w czasie wykonywania, musisz:
a) umieścić Pełną Ścieżkę do bazy danych w Rejestrze; oraz
b) za każdym razem, gdy uruchamiasz aplikację, przeczytaj informacje z Rejestru, „utwórz” ConnectionString i „otwórz” ADOConnection.
Baza danych... Połącz!
Aby pomóc Ci zrozumieć ten proces, stworzyliśmy przykładową aplikację „szkielet” składającą się z jednego formularza (forma główna aplikacji) oraz modułu danych. Moduły danych Delphi dostarczają wygodnego narzędzia organizacyjnego, które jest używane do izolowania części aplikacji, które obsługują łączność z bazą danych i reguły biznesowe.
The Przy utworzeniu zdarzenie modułu danych to miejsce, w którym umieszczasz kod, aby dynamicznie skonstruować ConnectionString i połączyć się z bazą danych.
|_+_|Notatka : Nazwa modułu danych to 'DM'. Nazwa komponentu TADOConnection to „AdoConn”.
The DBPołącz funkcja wykonuje rzeczywistą pracę połączenia z bazą danych, oto kod:
|_+_|
Funkcja DBConnect łączy się z bazą danych MS SQL Server — ConnectionString jest konstruowany przy użyciu lokalnego connStr zmienny.
Nazwa serwera bazy danych jest przechowywana w Nazwa serwera zmienna, nazwa bazy danych jest przechowywana w Nazwa DB zmienny. Funkcja rozpoczyna się od odczytania tych dwóch wartości z rejestru (za pomocą niestandardowego Czytaj rejestr() procedura). Po zmontowaniu ciągu ConnectionString po prostu wywołujemy wtedy AdoConn.Open metoda. Jeśli to wywołanie zwróci 'true', pomyślnie połączyliśmy się z bazą danych.
Uwaga: Ponieważ jawnie przekazujemy informacje logowania przez ConnectionString, ponieważ moduł danych jest tworzony przed formularzem głównym, można bezpiecznie wywołać metody z modułu danych w zdarzeniu OnCreate MainForm. Zaloguj się właściwość jest ustawiona na false, aby zapobiec niepotrzebnemu dialogowi logowania.
Zabawa zaczyna się, gdy wystąpi wyjątek. Chociaż może być wiele przyczyn niepowodzenia metody Open, załóżmy, że nazwa serwera lub nazwa bazy danych jest nieprawidłowa.
W takim przypadku umożliwimy użytkownikowi określenie prawidłowych parametrów, wyświetlając niestandardowy formularz okna dialogowego.
Przykładowa aplikacja zawiera również jeden dodatkowy formularz (DatabasePromptForm), który umożliwia użytkownikowi określenie serwera i nazwy bazy danych dla składnika Connection. Ten prosty formularz zawiera tylko dwa pola edycyjne, jeśli chcesz zapewnić bardziej przyjazny interfejs użytkownika, możesz dodać dwa pola ComboBox i wypełnić je, wyliczając dostępne serwery SQL Server i pobierając bazy danych na serwerze SQL Server.
Formularz DatabasePrompt zapewnia niestandardową metoda klasy named Execute, który akceptuje dwa zmienne (var) parametry: ServerName i DBName.
Mając „nowe” dane dostarczone przez użytkownika (nazwa serwera i bazy danych), po prostu ponownie wywołujemy funkcję DBConnect() (rekursywnie). Oczywiście informacje są najpierw przechowywane w Rejestrze (przy użyciu innej niestandardowej metody: WriteRegistry).
Upewnij się, że DataModule jest pierwszym utworzonym „formularzem”!
Jeśli spróbujesz samodzielnie utworzyć ten prosty projekt, możesz napotkać wyjątki naruszenia zasad dostępu podczas uruchamiania aplikacji.
Domyślnie pierwszym formularzem dodanym do aplikacji jest MainForm (pierwszy utworzony). Po dodaniu modułu danych do aplikacji moduł danych jest dodawany do listy „automatycznie tworzonych formularzy” jako formularz, który jest tworzony po formularzu głównym.
Teraz, jeśli spróbujesz wywołać dowolne właściwości lub metody modułu danych w zdarzeniu OnCreate formularza MainForm, otrzymasz wyjątek naruszenia zasad dostępu — ponieważ moduł danych nie został jeszcze utworzony.
Aby rozwiązać ten problem, musisz ręcznie zmienić utworzoną kolejność modułu danych — i ustawić go jako pierwszy formularz, który zostanie utworzony przez aplikację (za pomocą okna dialogowego Właściwości projektu lub edytując Plik źródłowy projektów ).
Ponieważ moduł danych jest tworzony przed formularzem głównym, można bezpiecznie wywoływać metody z modułu danych w zdarzeniu OnCreate MainForm.