Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Delphi (Колосов).pdf
Скачиваний:
77
Добавлен:
11.05.2015
Размер:
2.57 Mб
Скачать

29. РАБОТА С БАЗАМИ ДАННЫХ

Среда визуального программирования Delphi изначально предназначалась для работы с базами данных (БД) в отличие от ее предшественника – VisualBasic. Фирма Borland разработала свой процессор баз данных – BDE (Borland Database Engine), который позволял создавать программы, работающие практически со всеми типами баз данных. В настоящее время Delphi остается самым простым, надежным и перспективным средством создания программ для работы с базами данных. Delphi стала надстройкой над процессорами баз данных, созданными другими фирмами, в частности MS Jet 4.0 и MS ADO. Это существенно повышает привлекательность среды Delphi даже в сравнении с C–Builder или Visual–C++.

29.1. Основные определения

База данных – это набор взаимосвязанных таблиц, которые могут храниться в отдельных файлах (Dbase, Paradox и т.д.) или в одном файле

(Access).

Таблица – набор полей (столбцов), количество которых почти постоянно, и записей (строк), количество которых меняется в процессе работы.

Рассмотрим пример базы данных, содержащей две таблицы. Одна таблица будет представлять список сотрудников – TSPIS, а вторая – список должностей – TDOL:

Таблица TSPIS

ID

FIO

CODEDOL

 

STAG

DATEB

OKLAD

01

Иванов

2

 

10

11.02.1970

300000

02

Сидоренко

1

 

5

21.11.1981

200000

 

 

В этой таблице 6 полей: ID – номер сотрудника; FIO – фамилия, имя и отчество; CODEDOL – код должности; STAG – стаж работы; DATEB – дата рождения; OKLAD – оклад сотрудника.

 

Таблица TDOL

CODE

NAMEDOL

1

Инженер

2

Техник

….…..

Втаблице TDOL всего 2 поля: CODE – код должности, NAMEDOL – наименование должности. Эти две таблицы будут в дальнейшем связаны по полю CODEDOL таблицы TSPIS и полю CODE таблицы TDOL, это позволяет существенно экономить память, занимаемую таблицами, так как код должности занимает в основной таблице гораздо меньше места, чем наименование должности. Обычно эти связываемые таблицы называют справочниками.

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

140

последовательных номеров, а для их идентификации используется значение ключа.

Индексные поля определяют порядок сортировки строк таблицы. Индекс может залаваться одним полем, несколькими полями или выражением от значений полей. Индексы позволяют значительно ускорить поиск информации в таблице по значению индексного поля за счет предварительной сортировки записей и использования бинарного поиска. Например, если таблица содержит 1000 записей, то для поиска нужной строки в среднем надо произвести 500 сравнений. Бинарный поиск уменьшает число сравнений до 10, так как 1000 ~ 210. Индексы приводят к появлению дополнительных таблиц в базе данных.

Домен – это диапазон или набор значений какого–либо поля.

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

Курсор – специальный объект, в котором хранятся текущий набор строк таблицы и информация о закладках (BookMark). Все операции с таблицами осуществляются только через курсор. Он позволяет ускорить работу с таблицами, т.к. его буфер хранит не одну, а 100–1000 строк таблицы, что позволяет существенно реже обращаться к файлам таблиц. Курсор может находиться как на стороне сервера, так и на стороне клиента.

Клиент – приложение, которое задает вопросы. Сервер – приложение, которое отвечает на вопросы.

Запрос – оператор на языке SQL (Structured Query Language).

Транзакция – система взаимосвязанных действий по изменению базы данных. Она должна быть выполнена до конца или отменена полностью, т.е. должна быть предусмотрена возможность отката назад. Транзакция требует наличия дополнительной памяти для хранения временных изменений в базе данных.

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

141

29.2. Взаимодействие приложения на Delphi с базами данных

 

 

 

 

 

Delphi IDE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение

 

 

 

 

 

 

 

 

 

 

 

 

 

Database

 

 

 

 

 

 

 

 

 

 

ODBC - Socket

 

 

BDE

 

 

Desktop

 

 

 

 

 

Borland DataBase

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Engine

 

 

Database

ODBC - драйвер

 

 

 

 

 

 

 

 

 

 

 

 

Explorer

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Access

 

FoxPro

 

SQL Link

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Удаленные базы данных:

Interbase

Oracle

Sybase

MS SQL Server

DB 2

Informic

Локальные базы данных:

Paradox

Dbase

ASCII

Local Interbase

Access

Рис.29.1 Схема взаимодействия приложения с базами данных через BDE

Здесь:

IDE – интегрированная среда разработки Delphi,

Database Desktop – программа прямой работы с базой данных (создание, просмотр, корректировка),

Database Explorer – программа настройки параметров базы данных и BDE,

ODBC – использование технологии Open Data Base Connectivity для доступа к некоторым локальным базам данных,

SQL Link – драйверы связи с удаленными клиент–серверными базами данных.

Как видно из рис.29.1, центральное место во взаимодействии приложения

с базой данных занимает BDE. Это хорошо и одновременно плохо: при установке разработанной программы у заказчика придется одновременно установить и настроить на его компьютере BDE, а это около 15 Мбайт дополнительной памяти и возможные трудности с автоматической настройкой

BDE.

Разработанный фирмой Borland процессор баз данных BDE в последнее время перестал обновляться. Небольшие фирмы не могут сравниться по возможностям с такими гигантами, как Microsoft. Поэтому в новых разработках небольшие фирмы все больше стали использовать готовые решения от крупных

142

фирм. Так, в Delphi появилась страничка компонентов доступа к базам данных

ADO (ActiveX Data Object).

Delphi IDE Приложение

ADO

ActiveX Data Object

OLE DB

ODBC База данных

Рис.29.2. Схема взаимодействия с базами данных с использованием ADO

Здесь центральное место во взаимодействии с базами данных занимает OLE DB (Object Linking and Embedding Data Base). Однако это программное обеспечение входит как составная часть операционной системы Windows и не требует дополнительной установки. Вместе с Windows поставляются программы связи с различными типами баз данных. Эти программы называются провайдерами. Например, для базы данных Access поставляется программа–провайдер MS Jet 4.0 OLE DB. Использование компонентов ADO позволяет полностью отказаться от BDE.

29.3. Компоненты взаимодействия с базами данных

Компоненты доступа

Компоненты управления

 

 

TTable

TDataSource

TDBGrid

 

 

 

 

TDBEdit

БД

BDE

 

 

TDBImage

 

 

TDBLookupListBox

 

 

 

 

 

 

TQuery

TDataSource

TDBText

 

 

TDBMemo

 

 

 

 

TDBRichEdit

 

 

 

 

……..

 

 

 

 

 

TStoreProc TDataSource

Рис.29.3. Схема взаимодействия компонент с использованием BDE Здесь приведены следующие компоненты:

TTable – доступа к таблице базы данных,

TQuery – запроса к базе данных,

143

TStoreProc – хранимой процедуры с запросом к базе данных,

TDataSource – связи компонентов доступа с компонентами управления и отображения данных,

TDBGrid – отображения данных в виде таблицы.

Компонент управления и отображения данных достаточно много, поэтому

на схеме показаны только некоторые из них.

Во время проектирования невизуальные компоненты, в частности компоненты доступа к данным, помещенные на форму, представляются маленькими значками. Но из–за большого количества таких невизуальных компонентов утрачивается наглядность формы. Компоненты доступа к данным обычно располагаются в специальном модуле данных – TDataModule. Создать такой модуль можно, пройдя путь: File New Data Module.

Как следует из рис.29.3, для отображения какой–нибудь таблицы базы данных на форму следует поместить как минимум три компонента, например, Table1, DataSource1 и DBGrid1. В свойстве TableName компонента Table1

нужно указать имя таблицы базы данных, в свойстве DataSet компонента DataSource1 – источник данных Table1, а в свойстве DataSource компонента DBGrid1 – источник отображаемых данных DataSource1.

 

 

Компоненты доступа

Компоненты управления

 

 

 

 

БД

TADOTable

TDataSource

TDBGrid

 

 

 

 

 

 

 

…….

OLE DB

 

 

 

 

…….

 

 

TADOQuery

TDataSource

 

 

 

 

 

 

 

 

 

 

TADOConnection

TADOStoreProc TDataSource

Рис.29.4. Схема взаимодействия компонент с использованием ADO

На рис.29.4 приведены аналогичные компоненты по сравнению с предыдущим рисунком, только со странички ADO. В их тип входит сочетание букв – ADO. Следует отметить, что в свойствах компонента TADOConnection не следует явно указывать нахождение базы данных в свойстве ConnectionString и задавать программу–провайдер в свойстве Provider. Лучше создать специальный текстовый файл связи с базой данных с расширением *.URL. Затем с помощью программы MS Explorer, которая воспринимает файлы с расширением URL как файлы связи с базой данных, можно настроить этот файл на конкретную базу данных, выбрать программу–провайдер и задать ее параметры. Это позволяет легко переносить базы данных на любой диск без перетрансляции разработанного приложения.

144

Иерархия классов доступа к базам данных

Все классы доступа к базам данных являются наследниками класса

TComponent:

 

TComponent

// Компонент

 

TSession

// Сессия

 

TDataSource

// Источник данных

 

TCustomConnection

// Базовый класс для соединения с БД

 

 

TDataBase

// База данных

 

 

TADOConnection

// ADO соединение с БД

 

 

 

TDataSet

// Класс навигации по таблицам БД

 

 

TBDEDataSet

// Набор данных, связанных с BDE

 

 

 

 

 

TDBDataSet

// Редактирование и навигация по БД

 

 

 

 

 

 

 

 

 

 

 

TTable

// Таблица

 

 

 

 

 

 

TQuery

// Запрос

 

 

 

 

 

 

TStoredProc

// Хранимая процедура

 

 

 

 

 

TCustomADODataSet

// Базовый класс связи с БД через ADO

 

 

 

 

 

 

 

TADODataSet

// Редактирование и навигация по ADO БД

 

 

 

 

 

TADOTable

// ADO таблица

 

 

 

 

 

TADOQuery

// ADO запрос

 

 

 

 

 

TADOStoredProc

// ADO хранимая процедура

 

 

 

 

 

 

TField

// Базовый класс поля таблицы

 

 

 

TStringField

// Строковое поле (до 256 символов)

 

 

TNumericField

// Базовый класс числового поля

 

 

 

 

 

TIntegerField

// Базовый класс целочисленного поля

 

 

 

 

 

 

TTSmallIntField// Малое целое поле (от -32768 до 32767)

 

 

 

 

 

 

TWordField

// Целое число без знака (от 0 до 65535)

 

 

 

 

 

 

TautoIncField

// Автоинкрементное поле (4 байта)

 

 

 

 

 

 

 

 

 

 

 

TLargeIntField

// Целое длинное поле (8 байт)

 

 

 

 

 

 

TFloatField

// Поле вещественных чисел (8 байт)

 

 

 

 

 

 

TCurrencyField

// Поле денежных величин (8 байт)

 

 

 

 

 

 

 

 

 

 

 

TBCDField

// Двоично-десятичное поле (8 байт)

 

 

 

 

 

 

 

TBooleanField

// Логическое поле

 

 

 

 

TDateTimeField

// Базовый класс даты и времени

 

 

 

 

 

 

 

 

TDateField

// Поле даты

 

 

 

 

 

TTimeField

// Поле времени

 

 

 

 

 

 

 

TBinaryField

// Базовый класс бинарных данных

 

 

 

 

 

TBytesField

// Массив байт (16 байт)

 

 

 

 

 

 

 

 

 

 

 

TVarBytesField // Поле произвольного массива байт (<65535)

 

 

 

 

 

 

 

 

TBlobField

// Поле массива байт неопределенной длины

 

 

 

 

 

 

 

TMemoField

// Поле текста неопределенной длины

 

 

 

 

 

TGraphicField

// Поле картинки неопределенной длины

 

 

 

 

 

Следует отметить, что при всем многообразии типов полей следует по возможности использовать для столбцов строковой тип – TStringField. Это

145

облегчает программирование и упрощает работу с таблицами в среде MS Access.

Класс TField

Для каждого столбца набора данных автоматически создается потомок класса TField с типом поля столбца. С помощью редактора полей можно создать вычисляемые поля. Рассмотрим некоторые свойства полей:

Property AsBoolean:Boolean; – cодержимое поля воспринимается как логическое значение,

Property AsDateTime:TDateTime; – содержимое поля воспринимается как поле даты и времени,

Property AsFloat:Double; – содержимое поля воспринимается как вещественное значение,

Property AsInteger:LongInt; – содержимое поля воспринимается как целое число,

Property AsString:String; – содержимое поля воспринимается как строка,

Property EditMask:String; – шаблон маски ввода. Шаблон состоит из 3 секций, разделенных «;». Первая секция – тело маски, вторая секция – символ управления, если это –«0», то можно вводить только цифры иначе – любые символы, третья секция – символ, определяющий пробел для маски. Например, маска для ввода номера телефона может иметь вид

Table1.FieldByName(’TEL’).EditMask:=’000-00-00;0;_’;

Property ValidChars:Set of Char; – Множество допустимых символов для ввода. Например, для ввода только русских букв можно определить это свойство следующим образом:

Table1.FieldByName(’FIO’).ValidChars:=[’А’..’я’,’Ё’,’ё’];

Класс TADOTable

Этот класс определяет ADO таблицу. Рассмотрим некоторые из основных свойств и методов этого класса:

Property Connection: TADOConnection; – определяет соединение с БД,

Property TableName: WideString; – определяет имя таблицы,

Property Active: Boolean; – определяет состояние таблицы: открыта она или нет,

Property Eof: Boolean; – определяет конец таблицы,

Property MasterSource: TDataSource; – определяет главную таблицу для связываемой таблицы,

Property MasterFields: String; – определяет поля связи в главной таблице,

Procedure Append; – переводит таблицу в режим редактирования и добавляет в конец таблицы пустую строку,

Procedure First; – устанавливает указатель таблицы на первую запись,

Procedure Last; – устанавливает указатель таблицы на последнюю запись,

Procedure Next; – переход к следующей записи таблицы,

Procedure Prior; – переход к предыдущей записи таблицы,

146