Вы находитесь на странице: 1из 7

Практическая работа № 4

Тема: Введение в базы данных Delphi.


Цель: Познакомиться с разработкой Баз Данных и изучением компонентов, обеспечивающих
эту работу.
Оборудование: персональный компьютер с установленной операционной системой Windows, а
также программой Delphi 7 .

I. Правила ТБ
II. Теоретические сведения.

Базы Данных - достаточно большая и серьезная область программирования. Ни одно


предприятие, фирма или организация сегодня не обходятся без программ, обеспечивающих
работу с базами данных. база Данных - это механизм ввода, хранения и выборки информации
по различным параметрам.
В старых языках программирования и СУБД (систем управления базами данных) под
термином База Данных понимал файл, в котором данные хранятся в табличном представлении.
Такими СУБД, например, есть dBase, Clipper, FoxPro и т.п.
Сейчас под понятием База Данных понимают, как правило, папку, в которой может
храниться большое количество таблиц. Причем эти таблицы обычно связаны друг с другом, и
случайное удаление одной таблицы может привести к разрушению всей БД.
Базы Данных могут быть трех разных типов: Локальные БД. Это программы, которые
используют механизм работы с БД, которые находятся на этом же компьютере и не
используются другими компьютерами.
Сетевые БД. По своей сути, они похожи на локальные. Сама База данных может лежать
на общесетевой диске или папке. При этом разные компьютеры в организации работают с этой
общей базой данных, то есть все сотрудники организации имеют доступ к этой БД, вносят в нее
данные, делают выборку и т.п.
Клиент - Серверные программы. Это самая «продвинутая» модель работы с БД, и
обычно используется в крупных предприятиях, в которых нужно обрабатывать большое
количество данных. Суть этой модели в следующем. На главном компьютере (сервере)
сохраняется общая База Данных. Кроме того, на нем запущена специальная программа -
серверная СУБД, которая получает запросы от пользователей (клиентов), обрабатывает их и
возвращает результат. Такая модель БД резко снижает нагрузку на сеть и увеличивает
надежность хранения данных.
Ведь в случае сетевой БД каждый клиент загружает свою копию общей БД, меняет ее и
затем прописывает изменения в общую БД. А в это же время другой клиент может прописывать
свои изменения в эту же БД. Если программист не очень хорошо разработал доступ к БД и
индексацию, то эту Базу Данных очень легко разрушить. В клиент - серверной модели это
исключено. Серверная СУБД обрабатывает запросы по очереди, и возвращает к каждому
клиенту свой результат. Причем клиенту возвращается не вся таблица, а именно то, что он
спрашивал, то есть в зависимости от запроса клиента сервером была сформирована выборка из
базы данных, и будет передана клиенту.
Сначала среду Delphi ни была ориентирована на работу с базами данных, однако
реализация механизмов для работы с БД настолько разнообразна, что делает Delphi одним из
самых мощных и удобных сред разработки приложений БД. Среди этих механизмов можно
назвать BDE, ODBC, ADO и множество других. Более того, сторонние разработчики также
разрабатывают механизмы для доступа к БД, так что Delphi на сегодняшний день может
работать почти со всеми существующими форматами БД. На сегодняшний день в Delphi нет
сколько-нибудь серьезных конкурентов для разработки программного обеспечения,
использующего базы данных.
Поле. Это столбец таблицы, общий для всех записей. Например, поле «Фамилия».
Запись. Строка таблицы, описывает некий объект. Например, какой то автор, у которого в
поле «Фамилия» записано "Иванов", а в других полях - другая информация, относящаяся к
этому автору.
Таблица. Набор записей в Базе Данных.
База Данных. Одна или несколько таблиц, связанных друг с другом.
Ключевым называется поле, которое позволяет однозначно идентифицировать запись.
Индекс. Это способ фильтрации данных.
BDE ( Borland Database Engine) - механизм доступа к базам данных, разработанный
самой корпорацией Borland. Сейчас этот механизм считается устаревшим, однако он
обеспечивает наиболее простой доступ к базам данных различных форматов, и начинать
знакомство с БД удобнее именно с него.

III. Индивидуальное задание

Создайте новое приложение.


Мы продемонстрируем работу с БД и использование навигационных методов на
демонстрационной таблицы, поставляемого вместе с Delphi.
Назовите форму fMain ( свойство Name), присвойте ей стиль bsDialog (свойство BorderStyle), и
позицию по центру рабочего стола. В свойстве Caption напишите "БД Навигатор".
Далее, установите на форму панель GroupBox (Standard), в свойстве Caption которого
укажите "Навигация". На эту панель установите 4 кнопки, на которых укажите "Начало", "<<
Назад", "Вперед >>" и "Конец". Это будут кнопки навигации - перемещение по таблице.

Ниже установите еще один GroupBox, в свойстве Caption которого напишите


"Закладка". В таблице можно установить закладку на любой записи, а затем перескочить на нее
с любого места. В этой панели мы будем добавлять закладки удалять ее и перескакивать на нее.

Еще ниже поместите обычную панель (Panel), и удалите из нее текст. Установите на нее
компонент Label, в свойстве Caption которого укажите "Позиция:". Теперь нужно, чтобы эта
надпись всегда была посередине. Поэтому свойство AutoSize переведите в False,а свойство
Alignment - в taCenter. растяните Label, чтобы она занимала почти всю ширину панели. Здесь
вместе с надписью "Позиция:" будет выходить номер записи в таблице.
Теперь перейдите на вкладку Data Controls. Здесь содержатся компоненты отображения
данных из БД. найдите DBGrid поместите ее на форму ниже панели. Сетка DBGrid
предназначена для отображения и редактирования данных из таблицы БД. сразу свойства
ReadOnly ( только для чтения) присвойте True, чтобы пользователь не мог испортить
демонстрационную таблицу своим редактированием данных.
Чтобы получить доступ к БД, нужно еще кое-что. на вкладке BDE есть компонент Table,
который обеспечивает доступ к таблице средствами механизма BDE. Компоненты не
визуальный, поэтому можете бросить его на любое место, например, поверх сетки. Теперь в
свойства DatabaseName выберите демонстрационную базу данных DBDEMOS, поставляемой
вместе с Delphi.У свойства TableName необходимо указать саму таблицу, в которой мы хотим
получить доступ. Выберите там biolife.db.
Мы уже выбрали базу данных, то есть набор таблиц, и выбрали таблицу. Однако, чтобы
вывести в сетку данные из таблицы, нужно компонент управления данными таблицы. Найдите
на вкладке DataAccess компонент DataSource. Этот компонент обеспечивает связь базы данных
из таблицы Table1 с навигационными компонентами, такими, как DBGrid. Бросьте его рядом с
Table1. В свойстве DataSet компонента нужно указать, с какой же именно таблицей мы хотим
работать. В данном примере у нас одна таблица, но может быть и несколько. Выберите там
Table1.
Теперь выделите сетку DBGrid. Ей нужно указать, какой компонент будет управлять
этой сетью. В свойстве DataSource укажите наш DataSource1. Все, теперь мы сделали все
приготовления. Единственное, что осталось сделать - открыть файл с таблицей. выделите
компонент Table1, и в свойства Active укажите True. Этим самым мы заставим таблицу
открыться.
Внимание! Работа с базой данных отличается от работы с файлами другого типа. Когда
ваша программа работает, например, с текстовым файлом, она открывает этот файл, считывает
его содержимое в оперативную память ПК и закрывает его. Пользователь работает уже не с
файлом, а с его содержанием в оперативной памяти. Когда он дает команду сохранить
результаты работы, программа снова открывает файл и перезаписывает в него данные из
оперативной памяти.
С базами данных все иначе. Как только вы открыли таблицу - указали True в компонента
Table1 в свойстве Active, или программно дали команду:

Table1.Active = True;

или

Table1.Open;

то тем самым вы открыли файл. Файл будет открыт в течение всего сеанса, и все
изменения данных будут немедленно сохраняться в нем! Приведенные выше команды открытия
таблицы идентичны, вы можете пользоваться любым из этих способов.
Если вы все сделали правильно, то должны получить что-то вроде этого:
Навигация

Для перемещения по записям таблицы существуют следующие методы:


First - переход на первую запись.
Last - переход на последнюю запись.
Next - переход на следующую запись.
Prior - переход на предыдущую запись.
Создадим обработчики нажатия на кнопки в панели "Навигация". В обработчике кнопки
"Начало" напишем
Table1.First;
В обработчике кнопки "Назад" напишем
Table1.Prior;
В обработчике кнопки "Вперед" напишем
Table1.Next;
В обработчике кнопки "Конец" напишем
Table1.Last;
Сохраните проект, откомпилируйте и посмотрите, как он работает. Указатель позиции
должен перемещаться, когда пользователь нажимает на кнопки. Кроме того, перемещаться
можно будет с помощью самой сетки DBGrid.

Типы данных

Листая таблицу, вы видели такие данные, как MEMO и GRAPHIC, а сами данные не
отражались. Дело в том, что таблицы имеют различные типы данных. Бывают числовые типы,
строчные, типа "Дата". Обычно, в строчный тип ввода текста длиной не более 255 символов.
Если же вам нужно поместить в таблицу длиннее текст, например, аннотацию к книге, то можно
воспользоваться типом MEMO. При этом создается новый файл, в котором сохраняется сам
текст, а в таблице указана ссылка на этот текст. Длина текста в MEMO ограничено. Для
отображения MEMO потребуется специальный компонент.
Поле GRAPHIC сохраняет изображения - картинки, фотографии. Для их отображения
также требуется специальный компонент.
Улучшим наш пример, создав форму, в которой, как в карточке, мы сможем видеть все
данные текущей записи. Однако для начала познакомимся с DataModule. Это модуль, который
не имеет формы. Его очень удобно использовать в многооконный проектах, где окна работают с
общими данными. Для нас общие данные - это компоненты Table и DataSource.
Прежде всего, закройте таблицу, указав False в ее свойства Active.
Выберите File-> New -> Data Module. У вас появится новое окошко, но это не форма.
Измените имя этого окна на fDM, чтобы не нужно было писать долгого обращения к
компонентам. Теперь вернитесь на главную форму и выделите компоненты Table1 и
DataSource. Выберите Edit -> Cut ( вырезать). Затем перейдите в окно fDM, и выберите Edit ->
Paste ( вставить). Если у вас эти компоненты были в нижней части формы, то они могут
оказаться вне зоны видимости окна fDM. Это не страшно - перейдите окно, или увеличьте его
5
размеры, чтобы видеть компоненты, а затем перетащите их в верхнюю часть окна. После чего
можно уменьшить размеры fDM. Сохраните окно в модуле DM.pas.
Далее переходим на главную форму. Эта форма должна видеть окно fDM, чтобы работать
с компонентами, установленными в нем, поэтому выберите команду File -> Use -> Unit и там
выберите DM.
Теперь выделите сетку. В ее свойства DataSource нужно выбрать наш DataSource,
который выглядит уже как fDM.DataSource1. Теперь откройте таблицу, указав True в ее
свойства Active. Как видите, данные по-прежнему отображаются, хотя компоненты доступа
хранятся в другом модуле.
Теперь мы готовы к тому, чтобы создать новое окно для просмотра данных. Создайте
новую форму, назовите ее fViewer, и сохраните в модуле Viewer. Не забудьте выбрать команду
Use -> Unit и там - DM, ведь новая форма также будет работать с компонентами Table1 и
DataSource. В свойстве Caption напишите "Карточка".

Теперь перейдите на вкладку DataControls. Найдите там компонент DBEdit. от обычного


Edit он отличается тем, что поддерживает связь с базой данных. Бросьте на форму, один под
другим, 6 таких компонентов. ниже бросьте DBMemo, а справа от DBEdit - DBImage. У вас
должна получится форма примерно такого вида:
Слева от компонентов доступа к данным установите соответствующее количество Label,
и пропишите объяснения к полям, как на картинке выше.

Выделите все компоненты доступа (только все DBEdit, DBMemo и


DBImage). свойство ReadOnly в них установите в True, чтобы пользователь не испортил
данные демонстрационной таблицы. Далее, в свойстве DataSource выделенных компонентов
нужно выбрать наш fDM.DataSource1. Теперь придется с каждым компонентом работать
отдельно. выделите верхний DBEdit, и в свойства DataField ( поле) выберите " Species No ". все
компоненты DBEdit, сверху - вниз, должны быть привязаны к следующим полям:

Species No
Category
Common_Name
Species Name
Length (cm)
Length_In

Компонент DBMemo должен быть привязан к полю Notes, а компонент DBImage -


поле Graphic. Кстати, в DBMemo установите вертикальную полосу прокрутки, чтобы можно
было листать слишком большие примечания.

Собственно, карта готова. Осталось только вызвать ее с главной формы. Если вы еще не
выполнили для главной формы команду File -> Use Unit, и не выбрали там модуль Viewer, то
сделайте это сейчас. Затем выделите сетку и создайте для нее событие onDblClick, где
пропишите вызов окна - карточки:

fViewer.ShowModal;
Теперь пользователь, щелкнув дважды какой либо записи, вызовет карточку, где будут
отражены данные этой записи. Однако перед компиляцией проекта необходимо несколько
исправить. Мы запрограммировали наши 4 кнопки перемещения, когда еще компонент Table1
был на главной форме. Однако теперь он в окне DM, поэтому добавьте fDM перед обращением
к таблице во всех 4 кнопках, как в примере:

fDM.Table1.First;

Сохраните проект, скомпилируйте, чтобы увидеть, как он работает.

IV. Контрольные вопросы.

1. Что такое локальные БД?


2. Что значит клиент - серверные программы?
3. Какое поле называется ключевым?
4. Как установить кнопки навигации?
5. Какие методы существуют для перемещения по записям таблицы?
6. Все компоненты DBEdit, сверху - вниз, должны быть привязаны к полям?

V. Оформление отчета.
VI. Защита работы.

Вам также может понравиться