Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_Rab_BD / LAB2 / METOD2_2.doc
Скачиваний:
17
Добавлен:
20.04.2015
Размер:
477.7 Кб
Скачать

Лабораторная работа № 2. Проектирование приложений для работы с бд.

Введение:

Одной из самых существенных возможностей пакета Delphi является разработка приложений для работы с БД. Здесь под приложением мы будем понимать экранную форму, созданную для удобной работы с информацией, хранящейся в таблицах БД. Следует отметить, что именно объем возможностей по работе с БД определяет версию пакета Delphi. Приложения являются мощным и гибким средством представления информации. Их можно считать масками, через которые пользователь рассматривает поля записи. Маска скрывает от пользователя ненужные ему в данный момент поля. Вы можете создать приложения, в которых поля размещены по всему полю экрана в удобном порядке. В приложении можно интегрировать и другие элементы (надписи, кнопки, опции, флажки, списки и т. д.)

При создании и модификации приложений можно удалять, перемещать, добавлять области вместе с расположенными в них компонентами.

Некоторые страницы палитры компонент:

Standart – страница стандартных компонент:

Frames – панель с возможностями наследования;

Main menu - главное меню;

Popup Menu - выпадающее локальное меню;

Label - метка, выводящая неизменяемый текст;

Edit - строка ввода;

Memo - редактор текста;

Button - кнопка;

Check Box - выключатель;

Radio Button - переключатель;

List Box - список значений с вертикальной линейкой скроллинга;

Combo Box - комбинированная строка ввода;

Scroll Bar - линейка скроллинга;

Group Box - панель с заголовком для размещения компонент;

Radio Group - панель с заголовком для размещения переключателей;

Panel - панель для размещения компонент;

ActionList – обеспечивает диспетчеризацию событий компонентов.

Additional – дополнительная страница стандартных компонент:

BitBtn - кнопка с графическим изображением;

Speed Button - кнопка с условным стандартным изображением;

Mask Edit - строка ввода информации в соответствии с маской;

String Grid - форма таблицы для размещения символьной информации;

Draw Grid - форма таблицы для размещения элементов структуры;

Image - контейнер для графического изображения (собственно изображения, пиктограммы или метафайла);

Shape - геометрическая фигура (прямоугольник, квадрат, прямоугольник или квадрат с закругленными углами, эллипс, круг);

Bevel - трехмерное обрамление;

Scroll Box - прокручиваемая область с линейками скроллинга;

CheckListBox – является комбинацией свойств списка ListBox и индикаторов CheckBox;

Splitter – используется для создания в приложении панелей с измененияемыми пользователем размерами;

StaticText – подобен компоненту Label, но обеспечивает дополнительные возможности по заданию стиля бордюра;

ControlBar – для размещения компонентов инструментальной панели;

ApplicationEvents – перехватывает события на уровне приложения;

ValueListEditor – специальная сетка для редактирования строковых списков;

LabeledEdit – комбинация однострочного редактора и метки;

ColorBox – специальный вариант ComboBox для выбора одного из системных цветов;

Chart – диаграмма;

ActionManager – менеджер действий;

ActionMainMenuBar – полоса меню, опции которого создаются с помощью actionManager;

ActionToolBar – полоса для размещения пиктографических кнопок, создаваемых с помощью ActionManager;

XPColorMap – стандартная цветовая схема для объектов на основе TAction;

StandartColorMap - подобно XPColorMap;

TwilightColorMap – подобно XPColorMap;

CustomizeDig – диалог настройки интерфейса работающей программы пользователем.

Data Access – страница компонент доступа:

Data Source - компонента связи отображаемых элементов формы базы данных с элементами, обеспечивающими доступ к физическому размещению данных.

Другие компоненты с данной страницы будут опущены из рассмотрения в связи с тем, что они не относятся к работе с базами данных.

BDE страница компонент доступа к базе данных:

Table - компонента, обеспечивающая доступ ко всем данным в физическом расположении данных, находящихся в таблице БД;

Query - компонента, обеспечивающая доступ к определенному, с помощью SQL-запроса, физическому расположению данных в таблицах БД;

Stored Proc - компонента, обеспечивающая доступ к физическому расположению данных в таблицах БД SQL-сервера; доступ обеспечивается с помощью сохранения на SQL-сервере БД процедуры;

Database - компонента, обеспечивающая связь с конкретной БД при подключении к базе;

Session - компонента, обеспечивающая управление при работе с базой данных в условиях одновременного доступа к данным различными способами;

Bath Move - компонента для копирования, добавления, удаления и обновления таблиц и данных в базе данных;

Update SQL - компонента, которая с помощью соответствующего SQL-запроса позволяет обновлять, вставлять или удалять данные БД.

Data Controls – страница компонент управления данными:

DBGrid - табличная форма представления данных для просмотра и редактирования;

DBNavigator - навигатор по записям;

DBText - компонента для отображения полей без возможности их изменения;

DBEdit - компонента для отображения полей с возможностью их изменения;

DBMemo - компонента, позволяющая просматривать и редактировать многострочный текст;

DBImage - компонента для просмотра и редактирования изображений;

DBListBox - компонента для выбора значения поля из списка заранее определенного набора допустимых значений;

DBComboBox - компонента для редактирования значения поля и выбора его из выпадающего списка заранее определенного набора допустимых значений;

DBCheckBox - выключатель для значений логического типа;

DBRadioGroup - компонента выбора альтернативных вариантов из заранее определенного набора допустимых значений;

DBLookupListBox - компонента для выбора значения поля из списка значений в определенном поле БД;

DBLookupComboBox - компонента для выбора значения поля из выпадающего списка значений в определенном поле БД.

Описание компонент управления доступом к БД:

Информация, хранящаяся в БД, может использоваться либо как справочная, либо для получения тех или иных обобщающих выводов на ее основе. И то и другое требует наличия доступа к данным, чтобы уже затем соответствующим образом представлять и обрабатывать информацию. Delphi позволяет весьма легко подключаться к БД, просто организовывать удобный вывод информации и ее обработку.

В любом приложении для работы с БД присутствуют компоненты, которые связывают его с информацией, хранящейся в БД. При этом обеспечивается взаимосвязь между средствами физического хранения данных и отображаемыми компонентами, которые выводят их на экран. Все компоненты, которые используются в приложении для организации доступа к БД, размещаются на страницах Data Access (Доступ к данным) и BDE палитры компонент и являются неотображаемыми.

Схема организации доступа к локальным БД в Delphi.

Как видно из схемы доступ организован с помощью двух уровней: набора данных, формируемого на основании непосредственного доступа к физическому хранилищу данных (класс TTable и TQuery), и представления источника данных для отображаемых компонент (класс TDataSource).

Непосредственно обмен информацией с физическим хранилищем данных для элементов происходит через BDE (Borland DataBase Engine - технология доступа к данным, разработанная фирмой Borland).

Для обеспечения работы с БД в Delphi введен ряд классов.

Общее управление сеансом связи приложения и БД определяет класс TSession. Delphi автоматически создает по умолчанию объект класса TSession с именем Session. Фактически при работе приложения с БД Delphi автоматически создает контейнер Session типа TSessionList, который содержит множество объектов класса TSession.

Класс TSession включает в себя список компонент класса TDatabase, каждая из которых обеспечивает связь приложения с конкретной БД. Таким образом, класс TSession является контейнером компонент класса TDatabase. Сами компоненты класса TDatabase представляют собой контейнеры компонент, выбираемых из палитры компонент и обеспечивающих конкретные стороны связи приложения с БД (например, компоненты класса TTable, TQuery, TDataSource и т.д.).

Компоненты всех указанных выше классов создаются автоматически при запуске приложения и обычно автоматически меняют свои характеристики в процессе работы приложения. Чаще всего параметры этих компонент используются для определения состояния процесса работы с БД. Приложение может использовать глобальные параметры Sessions, содержащий указатель на компоненту класса TSessionList, и Session, содержащий указатель на текущую компоненту класса TSession, обеспечивающую связь приложения с БД.

Класс TSession:

Класс TSession является потомком класса TComponent и предназначен для общего управления связи прикладной программы и БД, определяя сеанс работы с БД. (Класс TComponent является родоначальником всех компонент, используемых в приложении, включая и само приложение (TApplication), и форму (TForm), и меню, и элементы управления. В связи с этим в данном классе отражены характеристики, общие для всех компонент программы.)

Указатель на текущую компоненту класса TSession помещается в глобальную переменную Session. При выполнении приложения компоненту класса TSession нельзя непосредственно создать, уничтожить или обновить. Существуют следующие варианты использования компоненты Session:

  • стандартный - когда БД находится на том же компьютере, на котором находится и приложение;

  • сетевой - когда в приложении доступ к БД, находящимся на других компьютерах, осуществляется по локальной вычислительной сети;

  • с несколькими процессами - когда в приложении возникает несколько процессов обработки данных, относящихся к одной БД, которые могут препятствовать выполнению друг друга.

Класс TSessionList:

В принципе в приложении может быть одновременно несколько сеансов работы с БД, правда, в любой момент времени только один из них может быть текущим - это тот сеанс, который обеспечивает в данный момент работу с БД. Класс TSessionList предназначен для создания списка всех имеющихся в приложении сеансов с указанием, какой из них является текущим. Этот класс является непосредственным потомком класса Object.

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

Класс TDatabase:

Класс TDatabase предназначен для организации связи и взаимодействия с отдельной БД при работе в рамках сеанса связи приложения и БД.

Класс TDatabase является потомком класса TComponent. Создавать компоненты Database в приложении требуется в случаях:

  • создания постоянных соединений с БД;

  • организации подключения пользователя к SQL-серверу БД;

  • управления транзакциями (запросами к БД и получением его результата);

  • создания псевдонимов BDE в приложении.

В примерах не будет использоваться компонента Database в силу следующих обстоятельств. При работе с локальными БД не требуется подключения к SQL-серверу и управления транзакциями. Мы не используем локальные псевдонимы, хотя это может оказаться удобно.

Для создания локального псевдонима БД в приложении нужно активизировать компоненту Database. В результате появится окно редактора локальных псевдонимов.

Классы TTable и TQuery:

Классы TTable и TQuery предназначены для формирования набора данных непосредственно из таблиц, в которых они хранятся. Основным отличием TTable от TQuery является следующее: TTable позволяет получить набор данных на основе только одной таблицы, а TQuery - на основе запроса к БД, т.е. позволяет получить набор данных, основанный на нескольких таблицах. Кроме того, TQuery позволяет организовать взаимосвязь таблиц, необходимую, в частности, для создания отчета с подотчетом. Классы TTable и TQuery являются потомками классов TDataSet, TDBDataSet и TBDEDataSet и наследуют все их характеристики.

Использование специальной компоненты палитры компонент Table является одним из основных способов организации связи с таблицей БД. Если необходимо использовать несколько таблиц БД, то следует включить в проект такое же количество компонент Table.

а) Класс TTable.

Характеристики компоненты Table определяются ее классом TTable.

У класса TTable отметим следующие основные свойства, которые он добавляет к наследуемым.

Exclusive - свойство логического типа (по умолчанию имеет значение False). Значение True определяет монопольный режим открытия таблицы пользователем. В этом случае никто больше не сможет работать с таблицей, кроме этого пользователя. Значение False позволяет работать с таблицей нескольким пользователям. Перед заданием значения этому свойству требуется установить у свойства Active значение False. Правда, затем для того , чтобы была возможность использовать информацию из БД, свойству Active следует задать значение True.

ReadOnly - свойство логического типа (по умолчанию имеет значение False), определяет возможность изменения данных в таблице. Значение True задает режим “Только для чтения”, при этом также, как и для свойства Exclusive, свойство Active должно иметь значение False. Значение True позволяет вносить изменения в таблицу.

TableName - свойство типа TFileName, задающее имя файла, в котором храниться таблица с данными.

TableType - свойство типа TTableType, определяет формат используемой компонентой таблицы:

type

TTableType = (ttDefault, ttParadox, ttDBase, ttASCII);

где ttDefault (используется по умолчанию) - формат определяется по расширению файла, в котором находится таблица; ttParadox - формат Paradox; ttDBase - формат DBase; ttASCII - формат ASCII.

Класс TTable содержит также свойства, предназначенные для определения характеристик индекса соответствующей таблицы.

б) Классы TIndexDef и TIndexDefs.

Для задания характеристик индексов в Delphi имеется два класса: TIndexDef и TIndexDefs. Первый определяет характеристики одного индекса, второй задает таблицу индексов. Оба этих класса являются вспомогательными и определяют всю структуру индексов таблицы.

Класс TIndexDef, задающий конкретный индекс, является потомком класса TObject и к наследуемым от него свойствам добавляет ряд своих.

Класс TIndexDefs, определяющий таблицу индексов, также является потомком класса TObject.

в) Классы TCheckConstraint и TСheckcostraints.

Двумя другими вспомогательными классами, используемыми в классе TTable, являются классы TCheckConstraint и TCheckconstraints. Первый из них задает ограничение на поле записи, второй содержит таблицу всех ограничений.

Класс TCheckConstraint является потомком класса TCollectionItem.

Класс TCheckConstraints является потомком класса TCollection.

Класс TDataSource:

Класс TDataSource задает источник данных на основании набора данных, предоставляемых объектами классов TTable и TQuery. Этот источник используется при выводе информации с помощью отображаемых компонент. В большинстве обстоятельств единственное, что вам придется сделать с объектом TDataSource, - установить его свойство DataSet в соответствующий объект TTable и TQuery.

Класс TDataSource является потомком класса TComponent. Из всех имеющихся у TDataSource свойств отметим только следующее свойство в силу выше перечисленных обстоятельств:

DataSet - свойство типа TDataSet, содержащее указатель на компоненту Table или Query, которые обеспечивают связь с соответствующими таблицами БД и определяют набор данных в одном и том же элементе, переключаясь между различными компонентами Table и Query.

Так как компоненты организации доступа к БД являются неотображаемыми и выполняют довольно специфические функции по передачи информации, их целесообразно помещать в специальные модули DataModule вместо того, чтобы включать в формы, в которых будут отображены данные.

TDataModule является прямым потомком TComponent.

Набор данных (классы TDataSet, TBDEDataSet, TDBDataSet):

Набор данных в Delphi представляет собой совокупность записей с добавленным к ним курсором. Курсор в БД - это указатель на текущую активную, т.е. обрабатываемую запись в наборе БД.

В Delphi имеется несколько абстрактных классов, которые определяют характеристики наборов данных.

Схема абстрактных классов в Delphi.

Абстрактные классы никогда непосредственно не используются в приложении. Свойства, методы и события, определенные в них, наследуются и используются компонентами, которые применяются при организации доступа к БД.

а) Класс TDataSet:

Класс TDataSet является потомком класса TComponent. Он определяет большинство основных характеристик для компонент, отображающих данные из БД.

Класс TDataSet содержит абстракции, необходимые для непосредственных манипуляций таблицей. Практически все свойства этого класса используются только на стадии выполнения приложения. Отметим здесь только одно свойство, которое будет нам необходимо:

Active - свойство логического типа (по умолчанию имеет значение False), определяет доступ к данным, т.е. возможность работать с информацией из БД в приложении. Значение True открывает набор данных, при этом свойство State принимает значение dsBrowse, в противном случае данные из приложения не доступны, а свойство State имеет значение dsInactive.

Этот класс включает в себя ряд следующих свойств:

  • свойства, которые используются при работе с компонентами классов TTable и TQuery;

  • свойства, которые требуются при отборе необходимых записей с помощью фильтра;

  • свойства, которые помогают определить местонахождения курсора в наборе записей;

  • свойства, которые определяют поля и индексы, входящих в этот набор данных;

  • свойства, используемые при работе с записями.

Методы объекта TDataSet позволяют открыть таблицу и перемещаться по ней.

б) Класс TBDEDataSet.

Класс TBDEDataSet задает у своих потомков возможность работы с BDE и в основном включает в себя свойства, определенные в классе TDataSet:

  • свойства, используемые при непосредственной работе с BDE;

  • свойства, предназначенные для работы с размещаемыми в промежуточном буфере записями.

в) Класс TDBDataSet.

Класс TDBDataSet добавляет к набору данных характеристики, обеспечивающие возможность работы с БД.

Отметим здесь такое свойство как:

DatabaseName - свойство типа TFileName, задает необходимую БД с помощью псевдонима БД, определенного в BDE, или пути к файлам.

Описание компонент для отображения данных из БД:

Чтобы вывести данные из БД на экран, используются специальные отображающие компоненты, расположенные в палитре компонент на странице Date Controls (Работа с данными). Все они имеют аналогичные по внешнему виду обычные компоненты представления данных, которые находятся на страницах Standart (Стандартная) и Additional (Дополнительная) в палитре компонент. Их принципиальное отличие заключается в возможности работать с данными, хранящимися в БД. Все отображающие компоненты, которые могут работать с БД, имеют свойство DataSource, которое определяет набор обрабатываемых данных.

Практически все компоненты предназначены для обработки данных из одного поля БД. Эти компоненты имеют общее свойство DataField, которое и определяет обрабатываемое поле в наборе данных. При этом каждая из компонент предоставляет удобные средства работы с полями определенных типов. Отображать значения из каждого поля отдельно целесообразно при создании подсказок, при вводе данных и для контроля вводимой информации. Однако в этом случае сложно организовать просмотр соответствующих значений в других записях таблицы, что часто полезно при вводе информации. В противоположность этому компонента DBGrid позволяет отображать значения в нескольких полях, при этом может отображаться одновременно несколько записей.

Табличное отображение данных из БД (DBGrid):

Компонента DBGrid класса TDBGrid является аналогом компоненты StringGrid (таблица строк, предназначенная для хранения и отображения не только строк, но и различных объектов) и позволяет отобразить данные из БД в виде, похожем на электронную таблицу. Строки и столбцы этой таблицы соответствуют строкам и столбцам в наборе данных, который определяется компонентой Table или Query. Класс TDBGrid является потомком класса TCustomDBGrid, который, в свою очередь, является потомком класса TCustomGrid (включает в себя характеристики, общие для любых таблиц, которые можно построить на его основе; большинство из них определяет внешний вид таблицы).

а) Классы TColumn, TColumnTitle и TDBGridColumns.

Прежде чем рассматривать таблицу DBGrid, рассмотрим 3 вспомогательных класса, используемых в данной таблице: класс TColumn, задающий конкретный столбец таблицы; класс TColumnTitle, задающий характеристики заголовка столбца, и класс TDBGridColumns, определяющий всю совокупность столбцов таблицы.

Класс TColumn является потомком класса TCollectionItem (является потомком класса TPersistent и к наследуемым характеристикам добавляет ряд характеристик, связанных с возможностью размещения элемента в коллекции) и вводит следующие дополнительные свойства (отметим только 3 из них):

FieldName - свойство типа string, содержит имя поля в связанном с таблицей наборе данных, значения которого будут отображаться в столбце;

PickList - свойство типа TStrings, которое определяет строки, отображаемые в выпадающем списке в ячейке;

Title - сложное свойство типа TColumnTitle, которое определяет характеристики заголовка столбца.

Класс TColumnTitle является потомком класса TPersistent (является потомком класса TObject и предком всех классов, объекты которых могут быть помещены в память и взяты из памяти) и предназначен для задания характеристик заголовка столбца. Объект такого класса создается автоматически вместе с соответствующим столбцом. В классе определяется ряд свойств: Alignment - выравнивание заголовка столбца; Color - цвет фона заголовка; Font - шрифт, которым отображается заголовок столбца. Эти свойства аналогичны свойствам самого столбца, но относятся лишь к заголовку. Свойство Caption типа string задает текст заголовка столбца.

Класс TDBGridColumns является потомком класса TCollection (является потомком класса TPersistent, поэтому обладает механизмом извлечения своих компонент из потока и размещения их в потоке; сама коллекция является совокупностью однотипных элементов семейства класса TCollectionItem) и предназначен для формирования списка столбцов таблицы.

Выше перечисленных компонент в палитре компонент не имеется, но можно и посмотреть, и отредактировать свойства столбцов и их заголовков с помощью редактора набора столбцов. Чтобы вызвать данное окно, необходимо активизировать мышью компоненту класса TDBGrid либо ее свойство Columns. Оно включает в себя список названий всех вводимых столбцов в таблице с их порядковыми номерами и набор кнопок для его формирования. Пустой список соответствует отображению в столбцах таблицы всех полей из набора данных. Каждый столбец представляет собой компоненту класса TColumn, а редактор набора колонок фактически дает возможность легко и удобно настроить его свойства. Назначение кнопок для корректировки списка названий всех вводимых столбцов следующее: Add - добавление нового столбца последним по порядку в списке с соответствующим номером и названием (TColumn); Delete - удаление столбца, соответствующего выбранному названию из списка (порядковые номера автоматически перестраиваются); Move Up - перемещение выделенного названия столбца в списке на одну позицию вверх; Move Down - перемещение выделенного названия столбца в списке на одну позицию вниз; Add All Fields - добавление всех полей из набора данных, который определен в свойстве DataSource, для отображения их значений в одноименных столбцах; Delete All Columns - удаление всех столбцов из списка.

Все свойства объектов класса TColumn определяются в инспекторе объектов, причем доступ к ним на стадии проектирования имеется только из редактора списка названий столбцов.

б) Класс TDBGrid.

Класс TDBGrid является потомком класса TCustomDBGrid, который, в свою очередь, является потомком класса TCustomGrid. Сам класс TDBGrid не вводит не каких новых характеристик, он лишь объявляет общедоступными или опубликованными ряд наследуемых свойств. Все характерные особенности таблиц для отображения данных отражены в классе TCustomGrid.

Перемещение по записям БД (DBNavigator):

Компонента DBNavigator класса TDBNavigator представляет собой аналог стандартной компоненты Panel с размещенными на не кнопками. Эта компонента предназначена для перемещения по записям в наборе данных, а также для редактирования записей целиком. Это единственная из отображаемых компонент, которая сама непосредственно не выводит данные, поэтому использовать ее, как правило, имеет смысл совместно с другими компонентами, которые отображают данные.

Все возможности данной компоненты реализуются с помощью набора данных. Если какое-либо из действий при текущем состоянии работы с записями невозможно, соответствующая кнопка становится недоступной.

Команды, которые определяют эти кнопки, представляют собой методы набора данных, определенные в классе TDataSet.