Как да конструираме динамично връзката на базата данни на базата данни

След като приключите с вашия Решение за база данни на Delphi, последната стъпка е да го разгърнем успешно компютъра на потребителя.

ConnectionString On-The-Fly

Ако използвате dbGo (ADO) компоненти, тоConnectionString собственост на TADOConnection указва информацията за връзката за хранилището на данни.

Очевидно е, че когато създавате приложения за бази данни, които трябва да се изпълняват на различни машини, връзката с източника на данни не трябва да бъде кодирана твърдо в изпълнимия файл. С други думи, базата данни може да бъде разположена навсякъде на компютъра на потребителя (или на някой друг компютър в мрежа) - връзката, използвана в обекта TADOConnection, трябва да бъде създадена в време за изпълнение. Едно от предложените места за съхраняване на параметрите на връзката на връзката е Регистър на Windows (или можете да решите да използвате „обикновения“ INI файлове).

Като цяло, за да създадете връзката на връзката по време на изпълнение, което трябва
а) поставете Пълния път към базата данни в Регистъра; и

instagram viewer

b) всеки път, когато стартирате приложението си, прочетете информацията от системния регистър, „създайте“ ConnectionString и „отворете“ ADOConnection.

База данни... Connect!

За да ви помогнем да разберете процеса, създадохме примерно приложение за „скелет“, състоящо се от една форма (основна форма на приложението) и модул за данни. Модулите за данни на Delphi предоставят удобен организационен инструмент, който се използва за изолиране на частите на приложението ви, които обработват свързаността с база данни и бизнес правилата.

Най- OnCreate събитието на модула за данни е мястото, където поставяте кода за динамично изграждане на ConnectionString и свързване с базата данни.

процедура TDM.DataModuleCreate (Подател: TObject); започвамако DBConnect тогава
ShowMessage („Свързан с базата данни!“)
още
ShowMessage ('НЕ е свързан с базата данни!'); край;

Забележка: Името на модула за данни е "DM". Името на компонента TADOConnection е "AdoConn".

Най- DBConnect функция върши действителната работа по свързването към базата данни, ето кода:

функция TDM.DBConnect: булева; Var
conStr: низ; ServerName, DBName: низ; започвамServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Доставчик = sqloledb;' + 'Източник на данни =' + име на сървър + ';' + 'Начален каталог =' + DBName + ';' + 'User ID = myUser; Парола = myPasword "; Резултат: = невярно; AdoConn. Близо; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = Грешно;ако (НЕ AdoConn. свързан) тогаваопитвам
AdoConn. Отворете; Резултат: = True; с изключениеНа Д: Изключение правязапочвамMessageDlg („При свързване към. базата данни. Грешка: '+ # 13 # 10 + д. Съобщение, mtError, [mbOk], 0);акоНЕ TDatabasePromptForm. Изпълнение (ServerName, DBName)
тогава
Резултат: = невярно. ощезапочвам
WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName); // припомнете тази функция
Резултат: = DBConnect; край; край; край; край; //DBConnect

Функцията DBConnect се свързва с базата данни на MS SQL Server - ConnectionString се конструира с помощта на локалната connStr променлива.

Името на сървъра на базата данни се съхранява в Име на сървъра променлива, името на базата данни се съхранява в име_на_БД променлива. Функцията започва с четене на тези две стойности от системния регистър (използвайки обичай ReadRegistry () процедура). След като ConnectionString се сглоби, ние просто се обаждаме тогава AdoConn. отворено метод. Ако това повикване се върне „вярно“, успешно сме се свързали с базата данни.

Забележка: Тъй като изрично предаваме информация за вход през ConnectionString, модулът от данни е създаден преди основната форма, можете безопасно да извикате методите от модула за данни в OnCreate на MainForm събитие.LoginPrompt свойството е зададено на false, за да се предотврати излишен диалогов прозорец за вход.

„Забавлението“ започва, ако се случи изключение. Въпреки че може да има много причини за отказ на метода Open, нека приемем, че името на сървъра или името на базата данни е лошо.
В такъв случай ще дадем шанс на потребителя да посочи правилните параметри чрез показване на персонализиран диалогов формуляр.
Примерното приложение също съдържа един допълнителен формуляр (DatabasePromptForm), който позволява на потребителя да посочи сървъра и името на базата данни за компонента Connection. Тази проста форма предоставя само две полета за редактиране, ако искате да предоставите по-удобен за потребителя интерфейс, бихте могли добавете два ComboBoxes и попълнете тези, като изброите наличните SQL сървъри и извличате бази от данни на SQL Server.

Формата DatabasePrompt предоставя персонализиран клас метод с име Execute, който приема два променливи (var) параметъра: ServerName и DBName.

С „новите“ данни, предоставени от потребител (име на сървър и база данни), ние просто извикваме отново функцията DBConnect () (рекурсивно). Разбира се, информацията първо се съхранява в Регистъра (използвайки друг персонализиран метод: WriteRegistry).

Уверете се, че DataModule е първата "форма" създадена!

Ако опитате да създадете този прост проект самостоятелно, при стартиране на приложението може да срещнете изключения за нарушаване на достъпа.
По подразбиране първата форма, добавена към приложението, става MainForm (първата създадена). Когато добавите модул за данни към приложението, модулът за данни се добавя към списъка с „автоматично създаване на формуляри“ като формата, която се създава след основната форма.
Сега, ако опитате да извикате някое от свойствата или методите на модула за данни в събитието OnCreate на MainForm, ще получите изключение за нарушение на достъпа - тъй като модулът за данни все още не е създаден.
За да разрешите този проблем, трябва ръчно да промените създадения ред на модула за данни - и да го настроите да бъде първата форма, която се създава от приложението (или с помощта на диалоговия прозорец Project-Properties или чрез редактиране на Източник на проекти).

Тъй като модулът за данни е създаден преди основната форма, можете безопасно да извикате методите от модула за данни в събитието OnCreate на MainForm.

instagram story viewer