Практическое занятие № 20
Тема: "Создание файл-серверной информационной системы"
Цель работы: получить практические навыки по подключению графического интерфейса к СУБД, размещенных на файловых серверах
Ход работы
Пусть Ваш компьютер является файловым сервером. Для корректной работы нам необходимо:
Указания: в командной строке (Пуск - Программы - Стандартные - Командная строка) выполните команду
ipconfig /all
В результате на єкране отобразиться сетевое имя компьютера и его IP адрес. Запишите или запомните эту информацию для использования в дальнейшем
Создайте на компьютере общую сетевую папку.
Указания: Создайте новую папку с произвольным именем для хранения БД. В контекстном меню папки выберите команду "Общий доступ" - "Расширенная настройка общего доступа". В появившемся окне щелнитк на кнопке "Расширенная настройка". В новом окне включите флажок "Открыть общий доступ к этой папке". В поле "Имя общего ресурса" введите имя сетевой папки, например "baza$". С помощью кнопки "Разрешения" в следующем окне включите полній доступ к сетевой папке.
Для проверки доступа к папке запустите программу "Мой компьютер", в верхнем поле окна введите команду:
\\имяКомпьютера\baza$ или \\IPАдресКомпьютера\baza$
и нажмите Enter.
Пусть имеется БД с двумя таблицами grups, students, связанными по полю id_grup (скачать). Создайте приложение, которое подключается к БД.
На форме отобразите данные из двух связанных таблиц как показано на рисунке.

Указания: разместите на форме компонент ADOConnection и задайте свойства: LoginPrompt = false (отключаем окно регистрации пользователя), ConnectionString в окне щелкните на кнопке Build. В новом окне на закладке "Поставщий данных" выберите драйвер БД Microsoft Jet, на следующем шаге на закладке "Подключение" в поле введите сетевой путь к БД в формате "\\имяКомпьютера\baza$\base.mdb" или "\\IPАдресКомпьютера\baza$\base.mdb" На закладке "Все" в параметре "Jet OLEDB: DataBase Password" укажите пароль к БД (rpo). После задания всех параметров на закладке "Подключение" щелкните на кнопке "Проверить подключение" и убедитесь, что связь с БД устанавливается.
Для подключения первой таблицы нанесите на форму компонент ADOTable (ADO) и задайте свойства: Connection = ADOConnaction1, TableName = groups. Нанесите на форму компонент DataSource (DataAccess) и задайте свойство DataSet = ADOTable1. Нанесите на форму компонент DataGrid (DataControls) и задайте свойство DataSource = DataSource1. Нанесите на форму компонент DBNavigator (Data Controls) и задайте свойство DataSource = DataSource1. Двойным щелчков на ADOTable добавьте поля таблицы. Поле id_grup сделайте невидимым, остальные поля переименуйте.
Для подключения второй таблицы нанесите на форму компонент ADOTable (ADO) и задайте свойства: Connection = ADOConnaction1, TableName = students. Нанесите на форму компонент DataSource (DataAccess) и задайте свойство DataSet = ADOTable2. Нанесите на форму компонент DataGrid (DataControls) и задайте свойство DataSource = DataSource2. Нанесите на форму компонент DBNavigator (Data Controls) и задайте свойство DataSource = DataSource2. Двойным щелчков на ADOTable добавьте поля таблицы. Поля inn и id_grup сделайте невидимыми, остальные поля переименуйте.
Для связывания таблиц на форме выделите компонент подчиненной таблицы ADOTable2 и задайте свойства: MasterSource = ссылка на главную таблицу (DataSource1), MasterFields = поля, по которым связаны таблицы (выберите в окне поля id_grup и щелкните на кнопке Add).
В событии OnCreate формы введите код:
procedure TForm1.FormCreate(Sender: TObject);
//подключаем таблицы
ADOTAble1.Active:=true;
ADOTable2.Active:=true;
end;
В событии OnDestroy формы введите код отключения программы от БД:
procedure TForm1.FormDestroy(Sender: TObject);
begin
ADOConnection1.Connected:=false;
end;
Внесем в приложения изменения. Путь к БД будет считываться из INI файла. Если путь неверный, то с помощью диалога будет запрашиваться новое расположение БД и сохраняться в INI файл для следующих запусков.
Указания: для выбора пути к БД разместите на форме компонент OpenDialog и задайте свойство Filter = Базы данных|*.mdb
Для работы с INI файлами вверху кода формы подключите модуль INIFiles
В событии OnCreate формы перед командами подключения таблиц нужно добавить следующий код:
//вспомагательные переменные
var ini:TINIFile; baza:string;
begin
//создаем переменную и связываем с файлом settings.ini
ini:=TINIFile.Create(ExtractFilePath(Application.ExeName)+'settings.ini');
//считываем из INI файла путь к БД
baza:=ini.ReadString('baza','path','');
//если считанный файл БД не существует
if not FileExists(baza) then
//выдаем диалог открытия файла БД
//если файл выбран
if OpenDialog1.Execute then
//запоминаем имя выбранного файла
baza:=OpenDialog1.filename
//если файл БД не указан
else
//закрываем приложение
ExitProcess(0);
//пытаемся подключиться к БД
try
//отключаемся от БД
ADOConnection1.Connected:=false;
//заменяем свойство ConnectionString
//для этого скопируйте текст из этого свойства в текст программы
//удалите весь текст после параметра OLEDB:Database Password=rpo
//замените путь к файлу БД на значение переменной baza
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+baza+';Persist Security Info=False;Jet OLEDB:Database Password=rpo';
//подключаемся к БД
ADOConnection1.Connected:=true;
//сохранеям путь к БД в INI файл для следующих запусков
ini.WriteString('baza','path',baza);
//если подключение не удалось
except
//выдаем сообщение об ошибке
Application.MessageBox('Подключение к БД не возможно','Ошибка подключения',mb_ok+mb_iconstop);
//закрываем приложение
ExitProcess(0);
end;
//удаляем переменную из памяти
ini.Free;
Замечание: В приведенном коде используется новая конструкция try...except...end. Данная конструкция позволяет вместо стандартных системных сообщений об ошибках выдавать на экран собственные сообщения ( в нашем случае сообщения об ошибке подключения к БД).
Для работы этой конструкции надо в среде Delphi 7 выполнить команду "Tools - Debugger Options", на закладке "Language Exception" снимите флажок "Stop On Delphi Exception". Обратите внимание, что оставлять данную настройку выключенной не рекомендуется, потому что после этого Delphi не будет выдавать сообщений об ошибках при неверной работе программ.
Если вы работаете в среде Delphi 2007, то нужно выполнить команду "Tools - Options". В левой части нового окна выберите узел "Debugger Options - CodeGear Debuggers - Languages Exception" и снимите флажок "Notify on language exception" .
Обратите внимание, что после указания имени файла в диалоге главное окно программы может открываться на заднем плане. Для решения данной проблемы в событии OnCreate формы в самый конец кода добавьте команду:
//переместить окно на передний план
SetForegroundWindow(handle);
Попробуйте переименовать файл БД и убедитесь, что при запуске программы с помощью диалога запрашивается новый путь к БД.