Po zakończeniu Rozwiązanie bazy danych Delphi, ostatnim krokiem jest pomyślne wdrożenie go na komputerze użytkownika.
ConnectionString On-The-Fly
Jeśli korzystasz ze składników dbGo (ADO),Ciąg połączenia właściwość TADOConnection określa informacje o połączeniu dla magazynu danych.
Oczywiście podczas tworzenia aplikacji bazodanowych, które mają być uruchamiane na różnych komputerach, połączenie ze źródłem danych nie powinno być zakodowane na stałe w pliku wykonywalnym. Innymi słowy, baza danych może znajdować się w dowolnym miejscu na komputerze użytkownika (lub na innym komputerze) komputer w sieci) - parametry połączenia użyte w obiekcie TADOConnection muszą zostać utworzone w czas pracy. Jednym z sugerowanych miejsc do przechowywania parametrów ciągu połączenia jest Rejestr systemu Windows (lub możesz zdecydować się na użycie „zwykłego” Pliki INI).
Ogólnie rzecz biorąc, aby utworzyć ciąg połączenia w czasie wykonywania, musisz
a) umieść pełną ścieżkę do bazy danych w rejestrze; i
b) przy każdym uruchomieniu aplikacji odczytaj informacje z rejestru, „utwórz” ConnectionString i „otwórz” ADOConnection.
Baza danych... Połączyć!
Aby pomóc Ci zrozumieć ten proces, stworzyliśmy przykładową „szkieletową” aplikację składającą się z jednej formy (główna forma aplikacji) i modułu danych. Moduły danych Delphi zapewniają wygodne narzędzie organizacyjne służące do izolowania części aplikacji, które obsługują łączność z bazą danych i reguły biznesowe.
The OnCreate Zdarzenie modułu danych polega na umieszczeniu kodu w celu dynamicznego utworzenia ConnectionString i połączenia z bazą danych.
procedura TDM.DataModuleCreate (Sender: TObject); zaczynaćgdyby DBConnect następnie ShowMessage („Połączono z bazą danych!”) jeszcze ShowMessage („NIE podłączony do bazy danych!”); koniec;
Uwaga: Nazwa modułu danych to „DM”. Nazwa komponentu TADOConnection to „AdoConn”.
The DBConnect funkcja wykonuje rzeczywistą pracę łączenia się z bazą danych, oto kod:
funcTDM.DBConnect: boolean; var conStr: string; Nazwa_serwera, nazwa_db: ciąg; zaczynaćServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry („DataCatalog”); conStr: = 'Provider = sqloledb;' + „Źródło danych =” + nazwa_serwera + ”;„ + „Początkowy katalog =” + DBName + ”;„ + „Identyfikator użytkownika = myUser; Hasło = moje Hasło ”; Wynik: = fałsz; AdoConn. Blisko; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = False;gdyby (NIE AdoConn. Połączony) następniepróbować AdoConn. Otwarty; Wynik: = prawda; z wyjątkiemna E: Wyjątek robićzaczynaćMessageDlg („Wystąpił błąd podczas łączenia się z. baza danych. Błąd: „+ # 13 # 10 + mi. Wiadomość, mtError, [mbOk], 0);gdybyNIE TDatabasePromptForm. Wykonaj (ServerName, DBName) następnie Wynik: = fałsz. jeszczezaczynać WriteRegistry („DataSource”, ServerName); WriteRegistry („DataCatalog”, DBName); // przywołaj tę funkcję Wynik: = DBConnect; koniec; koniec; koniec; koniec; //DBConnect
Funkcja DBConnect łączy się z bazą danych MS SQL Server - ConnectionString jest budowany przy użyciu lokalnego connStr zmienna.
Nazwa serwera bazy danych jest przechowywana w Nazwa serwera Zmienna, nazwa bazy danych jest przechowywana w DBName zmienna. Funkcja rozpoczyna się od odczytania tych dwóch wartości z rejestru (przy użyciu niestandardowego ReadRegistry () procedura). Po złożeniu ConnectionString po prostu wywołujemy wtedy AdoConn. otwarty metoda. Jeśli to wywołanie zwróci „prawda”, pomyślnie nawiązaliśmy połączenie z bazą danych.
Uwaga: Ponieważ jawnie przekazujemy dane logowania przez ConnectionString, moduł Ponieważ jest to moduł danych utworzony przed głównym formularzem, możesz bezpiecznie wywoływać metody z modułu danych w OnCreate MainForm zdarzenie.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 zła.
W takim przypadku dajemy użytkownikowi możliwość określenia poprawnych parametrów poprzez wyświetlenie niestandardowego formularza 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 komponentu Connection. Ten prosty formularz zawiera tylko dwa pola edycji, jeśli chcesz zapewnić bardziej przyjazny interfejs, możesz dodaj dwa zestawy ComboBox i wypełnij je, wyliczając dostępne serwery SQL i pobierając bazy danych na serwerze SQL.
Formularz DatabasePrompt zapewnia niestandardowy metoda klasowa o nazwie Wykonaj, który akceptuje dwa parametry zmiennej (var): nazwa_serwera i nazwa_db.
Dzięki „nowym” danym dostarczonym przez użytkownika (nazwa serwera i bazy danych) po prostu wywołujemy funkcję DBConnect () ponownie (rekurencyjnie). Oczywiście informacje są najpierw przechowywane w rejestrze (przy użyciu innej niestandardowej metody: WriteRegistry).
Upewnij się, że DataModule to pierwszy „formularz” stworzony!
Jeśli spróbujesz samodzielnie utworzyć ten prosty projekt, mogą wystąpić wyjątki naruszenia zasad dostępu podczas uruchamiania aplikacji.
Domyślnie pierwszym formularzem dodanym do aplikacji jest MainForm (pierwszy utworzony). Gdy dodajesz moduł danych do aplikacji, moduł danych jest dodawany do listy „automatycznie twórz formularze” jako formularz, który jest tworzony po głównym formularzu.
Teraz, jeśli spróbujesz wywołać dowolną właściwość lub metodę modułu danych w zdarzeniu OnCreate formularza głównego, otrzymasz wyjątek dotyczący naruszenia praw 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ć ją na pierwszy formularz tworzony przez aplikację (za pomocą okna dialogowego Właściwości projektu lub przez edycję Plik źródłowy projektów).
Ponieważ moduł danych jest tworzony przed głównym formularzem, możesz bezpiecznie wywoływać metody z modułu danych w zdarzeniu OnCreate MainForm.