Динамическое построение строки подключения к базе данных во время выполнения
Зарко Гайич имеет опыт работы с SQL и практические знания систем баз данных, таких как MS SQL Server, Firebird, Interbase и Oracle. Он также владеет XML, DHTML и JavaScript.
Когда вы закончите работу с базой данных Delphi, последним шагом будет ее успешное развертывание на компьютере пользователя.
ConnectionString на лету
Если вы использовали компоненты dbGo (ADO),ConnectionString собственность TADOСоединение указывает информацию о соединении для хранилища данных.
Очевидно, что при создании приложений баз данных, которые должны выполняться на разных машинах, подключение к источнику данных не должно быть жестко закодировано в исполняемом файле. Другими словами, база данных может находиться где угодно на компьютере пользователя (или на другом компьютере в сети) — строка подключения, используемая в объекте TADOConnection, должна быть создана во время выполнения. Одним из рекомендуемых мест для хранения параметров строки подключения является реестр Windows (или вы можете решить использовать «обычные» INI-файлы).
В общем, чтобы создать строку подключения во время выполнения, вам нужно
а) разместить Полный путь к базе данных в Реестре; а также
б) каждый раз, когда вы запускаете свое приложение, читайте информацию из реестра, «создавайте» ConnectionString и «открывайте» ADOConnection.
База данных. Соединять!
Чтобы помочь вам понять процесс, мы создали пример «каркаса» приложения, состоящего из одной формы (основной формы приложения) и модуля данных. Модули данных Delphi представляют собой удобный организационный инструмент, который используется для изоляции частей вашего приложения, отвечающих за связь с базой данных и бизнес-правила.
при создании Событие модуля данных — это место, где вы размещаете код для динамического создания ConnectionString и подключения к базе данных.
Примечание: Имя модуля данных "DM". Имя компонента TADOConnection — «AdoConn».
DBConnect функция выполняет фактическую работу по подключению к базе данных, вот код:
Функция DBConnect подключается к базе данных MS SQL Server — ConnectionString строится с использованием локального connStr переменная.
Имя сервера базы данных хранится в Имя сервера переменная, имя базы данных хранится в ИмяБД переменная. Функция начинается с чтения этих двух значений из реестра (используя пользовательский ЧитатьРеестр() процедура). Как только ConnectionString собран, мы просто вызываем then AdoConn.Open метод. Если этот вызов возвращает «true», мы успешно подключились к базе данных.
Примечание. Поскольку мы явно передаем информацию для входа через ConnectionString, поскольку модуль данных создается до основной формы, вы можете безопасно вызывать методы из модуля данных в событии OnCreate MainForm.Запрос на вход свойство имеет значение false, чтобы предотвратить ненужный диалог входа в систему.
«Веселье» начинается, если возникает исключение.Хотя может быть много причин сбоя метода Open, давайте предположим, что имя сервера или имя базы данных неверно.
Если это так, мы дадим пользователю возможность указать правильные параметры, отобразив пользовательскую диалоговую форму.
Пример приложения также содержит одну дополнительную форму (DatabasePromptForm), которая позволяет пользователю указать сервер и имя базы данных для компонента Connection. Эта простая форма предоставляет только два поля редактирования. Если вы хотите предоставить более удобный интерфейс, вы можете добавить два поля со списком и заполнить их, перечислив доступные SQL-серверы и извлекая базы данных на SQL-сервере.
Форма DatabasePrompt предоставляет пользовательский метод класса с именем Execute, который принимает два переменных параметра (var): ServerName и DBName.
С «новыми» данными, предоставленными пользователем (имя сервера и базы данных), мы просто снова вызываем функцию DBConnect() (рекурсивно). Конечно, информация сначала сохраняется в реестре (используя другой пользовательский метод: WriteRegistry).
Убедитесь, что DataModule является первой созданной «формой»!
Если вы попытаетесь создать этот простой проект самостоятельно, вы можете столкнуться с исключениями нарушения прав доступа при запуске приложения.
По умолчанию первая форма, добавленная в приложение, становится MainForm (первой созданной). Когда вы добавляете модуль данных в приложение, модуль данных добавляется в список «автоматически создаваемых форм» как форма, которая создается после основной формы.
Теперь, если вы попытаетесь вызвать любое из свойств или методов модуля данных в событии OnCreate формы MainForm, вы получите исключение нарушения прав доступа, поскольку модуль данных еще не создан.
Чтобы решить эту проблему, вам нужно вручную изменить созданный порядок модуля данных — и установить его в качестве первой формы, создаваемой приложением (либо с помощью диалогового окна Project-Properties, либо путем редактирования исходного файла Projects).
Поскольку модуль данных создается до основной формы, вы можете безопасно вызывать методы из модуля данных в событии OnCreate MainForm.