Как только вы закончили Решение для базы данных Delphiпоследний шаг - успешно развернуть его на компьютере пользователя.
ConnectionString на лету
Если вы использовали компоненты dbGo (ADO),ConnectionString собственность TADOConnection указывает информацию о соединении для хранилища данных.
Очевидно, что при создании приложений базы данных, которые должны запускаться на разных компьютерах, соединение с источником данных не должно быть жестко запрограммировано в исполняемом файле. Другими словами, база данных может находиться в любом месте на компьютере пользователя (или на каком-либо другом компьютер в сети) - строка соединения, используемая в объекте TADOConnection, должна быть создана в время выполнения. Одним из предлагаемых мест для хранения параметров строки подключения является Реестр Windows (или вы можете решить использовать «обычный» INI файлы).
В общем, чтобы создать строку подключения во время выполнения, вы должны
а) разместить полный путь к базе данных в реестре; и
б) каждый раз, когда вы запускаете ваше приложение, читайте информацию из Реестра, «создайте» ConnectionString и «откройте» ADOConnection.
База данных... Connect!
Чтобы помочь вам понять процесс, мы создали пример «скелетного» приложения, состоящего из одной формы (основной формы приложения) и модуля данных. Модули данных Delphi предоставляют удобный организационный инструмент, который используется для изоляции частей вашего приложения, которые обрабатывают подключение к базе данных и бизнес-правила.
OnCreate Событие модуля данных - это место, где вы размещаете код для динамического построения ConnectionString и подключения к базе данных.
процедура TDM.DataModuleCreate (Отправитель: TObject); начатьесли БДСВЯЗЬ тогда ShowMessage ('Подключен к базе данных!') еще ShowMessage («НЕ подключен к базе данных!»); конец;
Заметка: Название модуля данных - «DM». Имя компонента TADOConnection - "AdoConn".
БДСВЯЗЬ Функция выполняет фактическую работу по подключению к базе данных, вот код:
FUNCTDM.DBConnect: булево; вар conStr: строка; Имя_сервера, имя_БД: строка; начатьServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Provider = sqloledb;' + 'Data Source =' + ServerName + ';' + 'Initial Catalog =' + DBName + ';' + 'Id пользователя = myUser; Пароль = myPasword '; Результат: = ложь; AdoConn. Близко; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = False;если (НЕ AdoConn. Связано) тогдапытаться AdoConn. Открыто; Результат: = True; Кромена E: исключение делатьначатьMessageDlg ('Произошла ошибка при подключении к. база данных. Ошибка: '+ # 13 # 10 + е. Сообщение, mtError, [mbOk], 0);еслиНЕ TDatabasePromptForm. Выполнить (имя_сервера, имя_БД) тогда Результат: = ложь. ещеначать WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName); // вызвать эту функцию Результат: = DBConnect; конец; конец; конец; конец; //DBConnect
Функция DBConnect подключается к базе данных MS SQL Server - ConnectionString создается с использованием локальной connStr переменная.
Имя сервера базы данных хранится в Имя сервера переменная, имя базы данных хранится в DBName переменная. Функция начинается с чтения этих двух значений из реестра (используя ReadRegistry () процедура). Как только ConnectionString собрана, мы просто вызываем AdoConn. открыто метод. Если этот вызов возвращает «true», мы успешно подключились к базе данных.
Примечание. Поскольку мы явно передаем информацию для входа в систему через ConnectionString, модуль данных Созданный до главной формы, вы можете безопасно вызывать методы из модуля данных в OnCreate MainForm событие.LoginPrompt свойство установлено в false, чтобы предотвратить ненужный диалог входа в систему.
«Веселье» начинается, если возникает исключение. Хотя может быть много причин сбоя метода Open, давайте предположим, что имя сервера или имя базы данных неверно.
Если это так, мы дадим пользователю возможность указать правильные параметры, отображая пользовательскую диалоговую форму.
Пример приложения также содержит одну дополнительную форму (DatabasePromptForm), которая позволяет пользователю указать сервер и имя базы данных для компонента Connection. Эта простая форма предоставляет только два поля редактирования, если вы хотите предоставить более удобный интерфейс, вы можете добавьте два поля со списком и заполните их, перечислив доступные серверы SQL и получив базы данных на сервере SQL.
Форма DatabasePrompt предоставляет пользовательский метод класса named Выполнить, который принимает два переменных (var) параметра: ServerName и DBName.
С «новыми» данными, предоставленными пользователем (имя сервера и базы данных), мы просто вызываем функцию DBConnect () снова (рекурсивно). Конечно, информация сначала сохраняется в Реестре (с использованием другого пользовательского метода: WriteRegistry).
Убедитесь, что DataModule - первая созданная форма!
Если вы попытаетесь создать этот простой проект самостоятельно, вы можете столкнуться с исключениями Access Violation при запуске приложения.
По умолчанию первая форма, добавленная в приложение, становится MainForm (первой созданной). Когда вы добавляете модуль данных в приложение, модуль данных добавляется в список «форм автоматического создания» как форма, которая создается после основной формы.
Теперь, если вы попытаетесь вызвать какие-либо свойства или методы модуля данных в событии OnCreate MainForm, вы получите исключение нарушения прав доступа - поскольку модуль данных еще не создан.
Чтобы решить эту проблему, вам нужно вручную изменить созданный порядок модуля данных - и установить его первая форма, которая создается приложением (либо с помощью диалогового окна Project-Properties, либо путем редактирования Исходный файл проекта).
Поскольку модуль данных создается перед главной формой, вы можете безопасно вызывать методы из модуля данных в событии OnCreate MainForm.