Базы данных в Delphi
Банки данных как современная форма информационных систем, создание реляционной базы данных из взаимосвязанных таблиц. Разработка приложений для просмотра и редактирования разных таблиц в Delphi. Основные компоненты, предназначенные для создания отчетов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | практическая работа |
Язык | русский |
Дата добавления | 11.11.2010 |
Размер файла | 33,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Базы данных в Delphi
Оглавление
Глава I. Базы данных в Delphi
1.1 Введение в базы данных
1.2 Таблицы баз данных
1.3 Таблицы формата dBase и Paradox
1.4 Практическая работа
1.5 Самостоятельная работа
Глава II. Наборы данных
2.1 Набор данных
2.2 Практическая работа
2.3 Самостоятельная работа
2.4 Режимы наборов данных
2.5 Практическая работа
2.6 Перемещение по записям набора данных
Глава III. Поиск записей в наборе данных
3.1 Поиск записей
3.2 Поиск записей по нескольким полям
3.3 Практическая работа
Глава IV. Модификация набора данных
4.1 Редактирование записей
4.2 Добавление записей
4.3 Удаление записей
4.4 Практическая работа
Глава V. Работа со связанными таблицами
5.1 Организация связей между таблицами
5.2 Практическая работа
5.3 Самостоятельная работа
Глава VI. Работа с отчетами
6.1 Объект QuickRep
6.2 Компоненты, размещаемые в полосе
6.3 Практическая работа
Глава I. Базы данных в Delphi
1.1 Введение в базы данных
Для успешного функционирования различных организаций требуется наличие развитой информационной системы, которая реализует автоматический сбор, обработку и манипулирование данными.
Современной формой информационных систем являются банки данных, которые включают:
? вычислительную систему;
? систему управления базами данных (СУБД);
? одну или несколько баз данных (БД);
? набор прикладных программ.
БД обеспечивает хранение информации, удобный и быстрый доступ к данным. БД - это совокупность данных, организованных по определенным правилам. БД позволяет хранить и обрабатывать данные различного типа.
СУБД - это совокупность языковых и программных средств, предназначенных для создания и использования БД.
По характеру использования СУБД разделяют на персональные и многопользовательские.
Персональная СУБД обеспечивает возможность создания локальных БД (расположены на одном и том же компьютере, что и работающее с ними приложения). К персональным СУБД относятся Paradox, dBase, FoxPro, Access и другие.
Многопользовательские СУБД позволяют создавать информационные системы, функционирующие в компьютерных сетях. К ним относятся Oracle, Informix, InterBase и другие.
В зависимости от вида организации данных различают следующие модели БД:
? Иерархическую
? Сетевую
? Реляционную
? Объектно-ориентированную
В иерархической БД данные представляются в виде древовидной структуры.
В сетевой БД данные организуются в виде графа.
Реляционная БД получила название от англ. слова Relation - отношение. Данные представлены в виде таблицы.
Объектно-ориентированную БД объединяют сетевую и реляционную модели и используются для создания крупных БД с данными сложной структуры.
Прикладные программы, или приложения, служат для обработки данных, содержащихся в БД. Пользователь осуществляет управление БД и работу с ее данными именно с помощью приложений, которые еще называют приложениями БД.
Система Delphi не является СУБД, но обладает ее возможностями. Предоставляемые Delphi средства обеспечивают создание и использование различных видов БД, а также разработку приложений для работы практически с любыми БД. Delphi не имеет своего формата таблиц (языка описания данных), но использует форматы таблиц других СУБД (dBase, Paradox, InterBase).
1.2 Таблицы баз данных
Реляционная БД состоит из взаимосвязанных таблиц. Обычно таблицы, образующие БД, находятся в каталоге на жестком диске. Таблицы хранятся в файлах, поэтому их можно перемещать и копировать обычным способом.
Для одной таблицы создается несколько файлов, содержащих данные, индексы, ключи и т. п. Имя главного файла таблицы (файла, содержащего данные) - оно же является именем таблицы - задается при создании таблицы. Имена остальных файлов задаются автоматически, причем имена файлов совпадают с именем таблицы, за исключением расширений имен.
Каждая таблица БД, состоящая из строк и столбцов, предназначена для хранения информации об однотипных объектах системы. Строка таблицы называется записью, а столбец - полем. Каждое поле должно иметь уникальное имя в пределах таблицы. Поле содержит данные одного из допустимых типов, например, целого или строкового.
Основу таблицы составляет описание ее полей, каждая таблица должна иметь хотя бы одно поле. Структура таблицы включает описание полей, ключи, индексы, ограничения на значения полей, пароли.
С таблицей в целом можно выполнять следующие операции:
? создание (определение структуры);
? изменение структуры (реструктуризация);
? переименование;
? удаление.
При создании таблицы задается структура и имя таблицы.
При изменении структуры таблицы в ней могут измениться названия и характеристики полей, состав и названия ключа и индексов, ограничения. Название таблицы и ее файлов остается прежним.
При переименовании таблица получает новое имя, в результате чего новое имя также получают все ее файлы. Для этого используются соответствующие программы (утилиты), предназначенные для работы с БД, например, Database Desktop или Data Pump.
При удалении таблицы с диска удаляются все ее файлы.
Для работы с БД предназначены специальные средства Delphi, которые можно разделить на два вида:
Инструментальные средства (специальные программы и пакеты, обеспечивающие обслуживание БД вне разрабатываемых приложений).
Компоненты, предназначенные для создания приложений, осуществляющих операции с БД.
Инструментальные средства:
? Borland Database Engine (BDE) - процессор баз данных, который представляет собой набор библиотек, предназначенных для организации доступа к БД из приложений Delphi.
? Database Desktop - программа создания и редактирования таблиц и другие.
Компоненты, связанные с БД, делятся на визуальные (используются для создания интерфейсной части приложения, видны в работающих программах) и невизуальные (предназначены для организации доступа к данным, содержащимся в таблицах, не видны в работающих программах). Эти компоненты находятся на страницах Data Access, Data Controls, Midas, Decision Cube, QReport, InterBase палитры компонентов.
1.3 Таблицы формата dBase и Paradox
Delphi поддерживает два типа форматов локальных таблиц - dBase и Paradox. Каждая из этих таблиц имеет свои особенности.
Таблицы dBase. Типы полей таблиц dBase IV
Тип |
Обозначение |
Описание значения |
|
Character |
C |
Строка символов. Длина не более 255 символов. |
|
Float |
F |
Число с плавающей точкой. Диапазон -10 308…10308. Точность 15 цифр мантиссы. |
|
Number |
N |
Число в двоично-десятичном формате BCD (Binary Coded Decimal) |
|
Date |
D |
Дата |
|
Logical |
L |
Логическое значение. Допустимые значения True (истина) и False (ложь). |
|
Memo |
M |
Разрешается использование прописных букв. |
|
OLE |
O |
Строка символов. Длина не ограничена. Символы хранятся в файле с расширением dbt |
|
Binary |
B |
Данные в формате, который поддерживается технологией OLE. Данные хранятся в файле с расширением dbt |
|
Bytes |
Y |
Последовательность байтов. Длина не ограничена. Байты содержат произвольное двоичное значение, хранятся в файле с расширением dbt |
Таблицы Paradox. Типы полей таблиц Paradox 7
Тип |
Обозначение |
Описание значения |
|
Alpha |
A |
Строка символов. Длина не более 255 символов |
|
Number |
N |
Число с плавающей точкой. Диапазон - 10307…10308. Точность 15 цифр мантиссы |
|
Money |
$ |
Денежная сумма. Отличается от типа Number тем, что в значении отображается денежный знак. Обозначение денежного знака зависит от установок Windows |
|
Short |
S |
Целое число. Диапазон - 32768 … 32767 |
|
Long Integer |
I |
Целое число. Диапазон - 2 147 483 648 … 2 147 483 647 |
|
BCD |
# |
Число в двоично-десятичном формате |
|
Date |
D |
Дата. Диапазон 01.01.9999 до н.э. … 31.12.9999 |
|
Time |
T |
Время |
|
Timestamp |
@ |
Дата и время |
|
Memo |
M |
Строка символов. Длина не ограничена. Первые 240 символов хранятся в файле таблицы, остальные в файле с расширением mb |
|
Formatted Memo |
F |
Строка символов. Отличается от типа Memo тем, что строка может содержать форматированный текст |
|
Graphic |
G |
Графическое изображение. Форматы BMP, PCX, TIFF, GIF и EPS. При загрузке в поле изображение преобразуется к формату BMP. Для хранения изображения используется файл с расширением mb |
|
OLE |
O |
Данные в формате, который поддерживается технологией OLE. Данные хранятся в файле с расширением mb |
|
Logical |
L |
Логическое значение. Допустимы значения True (истина) и false (ложь). Разрешается использование прописных букв |
|
Autoincrement |
+ |
Автоинкрементное поле. При добавлении к таблице новой записи в поле автоматически заносится значение, на единицу большее, чем в последней добавленной записи. При удалении записи значение ее автоинкрементного поля больше не будет использовано. Значение автоинкрементного поля доступно для чтения и обычно используется в качестве ключевого поля |
|
Binary |
B |
Последовательность байтов. Длина не ограничена. Байты содержат произвольное двоичное значение. Первые 240 байтов хранятся в файле таблицы, остальные в файле с расширением mb |
|
Bytes |
B |
Последовательность байтов. Длина не более 255 байтов |
Таблица - Сравнительная характеристика dBase и Paradox
Особенность |
dBase |
Paradox |
|
Достоинства |
Простота использования. Совместимость с большим числом приложений. |
Большое количество типов полей (точное описание данных). Можно определить диапазон вводимых данных. 3. Поддерживается парольная защита таблиц |
|
Имя поля |
Может состоять из букв и цифр и начинаться с буквы |
||
Максимальная длина имени поля |
10 символов |
25 символов |
|
Недопустимые символы имени поля |
Специальные символы и пробел |
".", "!", "|" |
|
Расширения файлов таблиц |
.dbf |
.db |
|
Недостатки |
Нет автоматического исполь-зования парольной защиты Нет контроля целостности связей (правильность ссылок между таблицами). |
Большое количество файлов для хранения содержащихся в таблице данных. При копировании или перемещении таблицы необходимо обеспечить копирование или перемещение всех файлов, относящихся к таблице. |
1.4 Практическая работа
Создание простейшего приложения для работы с таблицами данных.
Выберите пункт главного меню Delphi Tools/Database Desktop для того, чтобы запустить программу Database Desktop, с помощью которого можно создавать таблицы, изменять их структуру и назначать им индексы.
После запуска Database Desktop выберите меню File/New/Table, чтобы начать процесс создания новой таблицы. После выбора этой команды на экране появляется окно Create Table, в котором нужно выбрать формат (тип) таблицы (например, Paradox 7). После выбора формата таблицы появляется окно определения структуры таблицы БД.
В этом окне находятся следующие поля:
? Field Name - имя поля таблицы БД;
? Type - тип поля (выбирается из списка, который открывается щелчком правой кнопкой мыши или клавишей пробел в поле Type, и отображается одним символом);
? Size - размер поля (обычно задается для типа поля Alpha);
? Key - указание ключевых полей (* - можно установить, нажав любую алфавитно-цифровую клавишу).
Каждая таблица должна иметь хотя бы одно поле.
[Insert] - вставка поля;
[Ctrl]+[Delete] - удаление поля (в окне определения и изменения структуры таблицы).
Определим поля, входящие в таблицу «Товары». Введите имя поля Tovar в столбец Field Name, в поле Type выберите тип поля Alpha и установите размер поля 20. Задайте для таблицы следующую структуру:
Field Name |
Type |
Size |
|
Tovar |
A |
20 |
|
Kod |
N |
||
DataVipusk |
D |
||
SrokGodnos |
D |
||
Kolvo |
N |
||
Cena |
$ |
Для каждого поля можно определить требование обязательного его заполнения значением. Для этого, переходя от поля к полю, включайте переключатели Required Field. Другие поля служат для наложения ограничений назначение поля:
? Minimum value - определяет минимальное значение поля;
? Maximum value - определяет максимальное значение поля;
? Default value - определяет значение поля по умолчанию;
? Picture - определяет шаблон изображения поля;
Отсутствия значения в одном из полей означает отсутствие ограничений на значение поля.
После определения структуры таблицы ее необходимо сохранить, нажав на кнопку Save as…, и в появившемся окне указать расположение таблицы на диске и задать ее имя. Сохраните созданную таблицу на диске под именем Tovar.db в папке Baza на рабочем диске.
Закройте Database Desktop. Перейдите в главное окно Delphi. Подготовим форму для нашего приложения, с помощью которого можно перемещаться по записям таблицы БД, просматривать и редактировать поля, удалять записи из таблицы и вставлять новые.
Разместите на форме компоненты Table, DataSource (п. к. DataAccess) и DBGrid, DBNavigator (п. к. DataControls), в окне инспектора объектов установите для них свойства:
Компонент |
Свойство |
Значение |
|
Table1 |
DataBaseName TableName (открыть список). Если путь к таблице указан неверно, этот список не откроется. Active (двойной щелчок или открыть список) |
C:\Baza (путь к папке, где находится таблица) Tovar.db (имя нужной таблицы) True (открываем таблицу) |
|
DataSource1 |
DataSet (открыть список) |
Table1 |
|
DBGrid1 |
DataSource (открыть список) |
DataSource1 |
|
DBNavigator1 |
DataSource |
DataSource1 |
Запустите программу и заполните созданную вами таблицу (10 записей, 11-я - пустая). Чтобы добавилась новая запись, установите курсор в последнем поле таблицы и нажмите [Tab] на клавиатуре. Закройте работающую программу и установите для компонента Table1 в свойстве Active значение False и сразу же значение True. В окне формы в компоненте DBGrid вы увидите записи.
Компонент DataSource1(источник данных) является связующим элементом между компонентами доступа к данным (Table1 - соединен с реальной таблицей БД) и визуальными компонентами отображения данных (DBGrid1 - отображает содержимое таблицы в виде сетки).
Компонент DBNavigator используется для управления набором данных.
Свойство VisibleButtons типа TButtonSet - определяет состав видимых кнопок:
- перейти к первой записи
- к предыдущей
- к следующей
- к последней
- вставить новую запись
- удалить текущую запись
- редактировать текущую запись
- сохранить изменения записи
- отменить изменения текущей записи
- обновить информацию в БД
Свойство ConfirmDelete типа Boolean - выдает на экран окно для подтверждения удаления записи (True - по умолчанию), = False - запись удаляется без подтверждения.
Свойство Flat типа Boolean - управляет внешним видом кнопок
=False - кнопки отображаются в объемном виде;
=True - плоский вид кнопок.
Свойство DataSource - связывает навигатор с набором данных.
1.5 Самостоятельная работа
Создайте таблицы, относящиеся к БД:
? Автосалон;
? Магазин «Мороженное»;
? Музыкальная картотека;
? Зоомагазин;
? Записная книжка.
Заполнить таблицы данными (10-12 записей) и сохранить в папке Baza на рабочем диске.
Глава II. Наборы данных
2.1 Набор данных
Таблицы БД располагаются на диске и являются физическими объектами. Для операций с данными, содержащимися в таблицах, используются наборы данных (НД). В терминах Delphi набор данных - это совокупность записей, взятых из одной или нескольких таблиц БД. НД является логической таблицей, с которой можно работать при выполнении приложения. Взаимодействие таблицы и НД напоминает взаимодействие физического файла и файловой переменной. В Delphi для работы с наборами данных таблиц применяются несколько компонент, но наиболее универсальным и часто используемыми являются НД Table и Query.
Компонент Table представляет собой набор данных, который в некоторый момент времени может быть связан с одной таблицей БД. Связь между таблицей и компонентом Table устанавливается через его свойство TableName, который определяет имя таблицы.
Для выполнения операций с НД используются два способа доступа к данным:
навигационный - заключается в обработке каждой отдельной записи НД. При навигационном способе доступа каждый НД имеет невидимый указатель текущей записи, который определяет запись, с которой могут выполняться такие операции, как редактирование, удаление;
реляционный - основан на обработке группы записей. При реляционном способе доступа для задания операций используются средства языка структурированных запросов - SQL (Structured Query Language).
2.2 Практическая работа
Создать приложение для просмотра и редактирования разных таблиц.
Пользователь может выбирать таблицу, данные которой выводятся в сетке DBGrid1. Выбор осуществляется в диалоге открытия файла, который вызывается при нажатии на кнопку «Открыть другую таблицу». После выбора таблицы ее имя устанавливается в качестве значения свойства TableName набора данных Table1.
При задании расположения БД программным способом НД предварительно необходимо закрыть (свойство Active = False).
Расположите на форме компоненты. В компоненте DBGrid должна отображаться таблица Tovar.db
Напишите обработчик события OnClick для кнопки «Открыть другую таблицу»:
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Filter:= 'Таблицы (*.db;*.dbf) | *.db;*.dbf | Все файлы | *.*';
If OpenDialog1.Execute then
begin
table1.Active:=false;
table1.tablename:=Opendialog1.FileName;
table1.Active:=true;
end;
end;
Напишите обработчик события OnCreate для формы:
procedure TForm1.FormCreate(Sender: TObject);
begin
DataSource1.DataSet:=Table1;
DBGrid1.DataSource:=DataSource1;
end;
Запустите программу и нажмите на кнопку «Открыть другую таблицу». В появившемся диалоговом окне зайдите в папку Baza и двойным щелчком выберите любую таблицу.
2.3 Самостоятельная работа
Для таблиц формата dBase и Paradox записи, составляющие НД, нумеруются с 1.
Чтобы определить номер текущей записи НД существует метод RecNo.
Выполните следующие задания:
1. При щелчке по записям таблицы выведите в поле Edit номер записи, по которой щелкнули мышью.
2. Осуществите переход на запись с указанным в поле Edit номером.
Число записей, составляющих НД, определяет свойство RecordCount типа Longint. Это свойство доступно для чтения при выполнении приложения.
Приведем пример, в котором производится перебор всех записей НД (Общая схема обработки всех записей НД):
var i:integer;
Table1.First; //переход к первой записи НД
for i:=1 to Table1.RecordCount do
begin
//здесь можно расположить операторы, которые обрабатывают одну запись НД
Table1.Next; //переход к следующей записи НД
end;
2.4 Режимы наборов данных
Наборы данных могут находиться в различных режимах. Текущий режим НД определяет свойство State. Оно доступно для чтения во время выполнения приложения и может быть использовано только для текущего режима. Для перевода данных в тот или иной режим применяются специальные методы.
НД может находиться в одном из следующих режимов:
? dsInactive - НД закрыт и неактивен, доступ к его данным невозможен.
? dsBrowse - режим просмотра, в котором осуществляется перемещение по записям НД и просмотр данных.
? dsEdit - редактирование текущей записи.
? dsInsert - вставка новой записи.
? dsSetKey - поиск записи, удовлетворяющей заданному критерию.
? dsCalcField - выполняется расчет вычисляемых полей.
? dsFilter - выполняется фильтрация записей.
2.5 Практическая работа
Создадим приложение, работающее с таблицами данных. Реализуем добавление, удаление, изменение и сохранение записей в таблице.
Поставьте на форму компоненты Table, DataSource, DBGrid для работы с таблицей Tovar.db. Свяжите их между собой.
Поставьте 5 кнопок Button, заголовки которых будут соответственно «Добавить», «Изменить», «Запомнить», «Удалить», «Отменить».
Опишем процедуры для каждой кнопки:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Table1.State= dsBrowse then
Table1.Insert;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Table1.State= dsBrowse then
Table1.Edit;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if Table1.State= dsBrowse then
if MessageDlg ('Удалить запись?', mtConfirmation, [mbYes, mbNo],0)=mrYes then
Table1.Delete;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if Table1.State in [dsInsert, dsEdit] then
Table1.Post;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
if Table1.State in [dsInsert, dsEdit] then
Table1.Cancel;
end;
2.6 Перемещение по записям набора данных
Перемещение по НД заключается в управлении указателем текущей записи (курсором). Этот указатель определяет запись, с которой будут выполняться какие-либо операции.
Перед перемещением указателя текущей записи НД автоматически переводится в режим просмотра.
Для перемещения указателя текущей записи используются методы:
Процедура First - установка курсора на первую запись НД;
Процедура Next - на следующую запись;
Процедура Last - на последнюю запись;
Процедура Prior - на предыдущую запись;
Функция MoveBy (n:integer): integer - перемещение на число запсией, указанных в параметре n
n>0 - перемещение вперед;
n=, =150 or Cena нижней границы AND значение < верхней границы" (вместо операций сравнения < > могут указываться и операции =).
Достоинством фильтрации по диапазону является высокая скорость обработки записей. Этот способ фильтрации применим только для индексированных полей. Индекс поля, диапазон которого задан в качестве критерия для отбора записей, должен быть установлен как текущий.
Для фильтрации записей по диапазону компонент Table имеет следующие методы:
ApplyRange - активизирует фильтр (включение фильтра);
CancelRange - деактивизирует фильтр (выключение фильтра);
SetRangeStart - устанавливает нижнюю границу диапазона;
SetRangeEnd - устанавливает верхнюю границу диапазона;
EditRangeStart - изменяет предварительно заданную нижнюю границу диапазона;
EditRangeEnd - изменяет предварительно заданную верхнюю границу диапазона;
SetRange - имеет тот же эффект, что и последовательное выполнение методов SetRangeStart, SetRangeEnd и ApplyRange. Процедура позволяет одновременно задать границы диапазона и выполнить фильтрацию.
Свойство KeyExclusive типа Boolean определяет, как учитывается заданное граничное значение при анализе записей. Если KeyExclusive = False (по умолчанию), то записи, у которых значения полей фильтрации совпадают с границами диапазона, включаются в состав НД, а если KeyExclusive = True, то такие записи в НД не попадают. Свойство KeyExclusive действует отдельно для нижней и верхней границы. Значение этого свойства должно устанавливаться после вызова методов SetRangeStart, SetRangeEnd, EditRangeStart и EditRangeEnd.
Пример:
Table1.IndexName: ='indCena'; //установка текущего индекса indCena (создан по полю Cena таблицы Tovar.db)
Table1. SetRangeStart;
Table1. KeyExclusive: = True;
Table1.FieldByName('Cena').AsFloat: =100.5;
Записи, содержащие в поле Cena значение 100,5, не входят в отфильтрованный НД (т. к. KeyExclusive = True). Фильтрация по диапазону подчиняется условию Cena >100,5. Если бы KeyExclusive = False, то условие фильтрации выглядело бы по-другому (Cena >=100,5).
Когда одна из границ диапазона не задана, то диапазон открыт, то есть нижняя граница становится равной минимально возможному, а верхняя граница - максимально возможному значению этого поля.
Глава III. Поиск записей в наборе данных
3.1 Поиск записей
Поиск записи, удовлетворяющей определенным условиям, означает переход на эту запись.
Поиск похож на фильтрацию, но в отличие от фильтрации количество записей в наборе данных не изменяется.
Для поиска записей используют функцию: Locate (const KeyField:String, const KeyValues:Variant, Options:TLocateOptions):Boolean - ищет запись с заданными значениями полей.
Указатель устанавливается на первую встреченную запись, удовлетворяющую условию поиска.
Если запись найдена, то Locate=true, если нет, то Locate=false.
В параметре KeyField указывается список полей (через ;), по которым ведется поиск;
KeyValues - указывается значение полей для поиска;
Options - задает значения, которые обычно используются для поиска строк.
Параметр Options может принимать комбинацию значений:
1. loCaseInsensitive - регистр букв не учитывается (Петров=ПеТрОв=петров= …);
2. loPartialKey - допускается частичное совпадение значений (петров=п=петр=…).
1. и 2. записываются в [].
Пример:
table1.Locate (`Kod', 123, []); - в результате выполнения оператора указатель записи установится на запись, у которой в поле Kod число123.
3.2 Поиск записей по нескольким полям
В методе Locate параметр KeyValues является массивом Variant, в котором содержится несколько значений.
Функция VarArrayOf - приводит к типу вариантного массива.
Значения функции разделяются «, » и заключаются в []; порядок значений соответствует порядку полей параметра KeyField.
Пример: table1.Locate (Tovar;Kolvo,Vararrayof([ Шоколад, 24 ]),[loCaseInsensitive, loPartialKey]);
3.3 Практическая работа
Пользователь может осуществлять поиск по полям Tovar (Название товара) и Cena (Цена товара), которые выбираются в компонентах CheckBox.
procedure TForm1.BitBtn1Click(Sender: TObject);
var keyfields:string; keyvalues:variant; options:tlocateoptions;
begin
if not(checkbox1.Checked or checkbox2.Checked) then
begin
messagedlg('не заданы условия поиска',mtinformation,[mbok],0);
exit;
end;
if checkbox1.Checked and checkbox2.Checked then
begin
keyfields:='tovar;cena';
keyvalues:=vararrayof([edit1.Text,edit2.Text]);
end
else
begin
if checkbox1.Checked then
begin
keyfields:='tovar';
keyvalues:=edit1.Text;
end;
if checkbox2.Checked then
begin
keyfields:='cena';
keyvalues:=edit2.Text;
end;
end;
options:=[locaseinsensitive,lopartialkey];
table1.Locate(keyfields,keyvalues,options);
if not table1.Locate(keyfields,keyvalues,options) then
begin
Beep;
messagedlg('Запись не найдена!',mtinformation,[mbok],0);
exit;
end;
end;
Глава IV. Модификация набора данных
Модификация НД представляет собой редактирование, добавление и удаление его записей. Модифицируемость НД зависит от различных условий. Можно разрешить или запретить изменение НД с помощью соответствующих свойств. Управлять возможностью изменения НД Table можно с помощью свойства ReadOnly типа Boolean. Если значение этого свойства = True, то изменения записей запрещаются. По умолчанию свойство ReadOnly имеет значение False, и НД можно модифицировать.
Для проверки, можно ли изменять НД, предназначено свойство CanModify типа Boolean. Если это свойство имеет значение True, то НД изменять можно, а если False, то изменения в НД запрещены.
4.1 Редактирование записей
Редактирование записей заключается в изменении значений их полей. Отредактированой может быть только текущая запись, поэтому перед действиями, связанными с редактированием, обычно выполняют операции по поиску и перемещению на требуемую запись. После того, как указатель текущей записи установлен на нужную запись и НД находится в режиме просмотра, для редактирования записи следует:
? перевести НД в режим редактирования;
? изменить значения полей записи;
? подтвердить сделанные изменения или отказаться от них, в результате чего НД снова перейдет в режим просмотра.
НД переводится в режим редактирования вызовом метода Edit, например Table1.Edit - редактирование текущей записи НД Table1.
Редактирование записей осуществляется для модифицируемого НД, поэтому перед вызовом метода Edit следует выполнять проверку на возможность редактирования записи (например, путем анализа свойства CanModify).
Пример: If Table1.CanModify then Table1.Edit;
Если редактирование осуществляется с помощью управляющих компонентов, не связанных с НД, например кнопок Button или переключателей CheckBox, программист должен самостоятельно кодировать действия по предотвращению попыток редактирования немодифицируемого НД. Вот пример осуществления такой блокировки:
procedure TForm1.Button1Click(Sender: TObject);
begin
if not Table1.CanModify then
begin
Beep;
MessageDlg ('Редактирование запрещено!', mtInformation, [mbOk], 0);
Exit;
end;
Table1.Edit;
end;
Здесь переход в режим редактирования осуществляется при нажатии кнопки Button, которая может иметь название «Редактировать» или «Edit». Перед переводом в этот режим выполняется проверка, можно ли изменять записи НД Table1, и если нет, то процедура выдает соответствующее сообщение и завершается.
Блокировка попыток пользователя изменить немодифицируемый НД должна выполняться также при добавлении и удалении записей.
При выполнении метода Edit непосредственно перед переводом НД в режим редактирования возникает событие BeforeEdit, которое можно использовать для проверки возможности перехода в этот режим. Например, при попытке пользователя редактировать запись ему может быть предложено подтвердить свои действия:
procedure TForm1.Table1BeforeEdit (DataSet: TDataSet);
begin
if MessageDlg ('Выполнить редактирование?',
mtConfirmation, [mbYes, mbNo], 0) mrYes then Abort;
end;
После выполнения метода Edit вызывается обработчик события AfterEdit. Для проверки, вносились ли изменения в запись, можно проанализировать свойство Modified типа Boolean. Если свойство имеет значение True, то было изменено значение как минимум одного поля текущей записи.
После ввода информации сделанные изменения должны быть или подтверждены, или отменены.
Метод Post сохраняет изменения записи в таблице БД (например, Table1.Post), снимает блокировку записи и переводит НД в режим просмотра (Table1.Browse).
Перед его выполнением автоматически вызывается обработчик события BeforePost, а сразу после выполнения - обработчик события AfterPost. Используя событие BeforePost, можно проверить сделанные изменения и при необходимости отменить их.
При работе с компонентом DBGrid изменения закрепляются при переходе к другой записи или нажатии клавиши [Enter], а в компоненте DBNavigator можно нажать кнопку Post Edit (Утвердить изменения).
Метод Cancel отменяет изменения, выполненные в текущей записи (например, Table1.Cancel), и возвращает НД в режим просмотра. При выполнении метода Cancel вызываются обработчики событий BeforeCancel и AfterCancel.
При работе с сеткой DBGrid изменения отменяются нажатием клавиши [Esc], а в компоненте DBNavigator - нажатием кнопки Cancel Edit (Отменить изменения).
4.2 Добавление записей
Добавлять записи можно только к модифицируемому НД. Для добавления записи нужно выполнить следующие действия:
? перевести НД в режим вставки;
? задать значения полей текущей записи;
? подтвердить сделанные изменения или отказаться от них, после чего НД снова переходит в режим просмотра.
Метод Insert переводит НД в режим вставки и добавляет к нему новую пустую запись. Новая запись вставляется перед текущей записью. При необходимости перед вызовом метода Insert необходимо выполнить перемещение текущего указателя на ту запись НД, перед которой вставляется новая запись.
Метод Append вставляет новую запись в конец НД.
Для компонента DBGrid новая запись добавляется к НД при нажатии клавиши [Insert] или при переходе на последнюю запись. Если на форме находится компонент DBNavigator, то новая запись добавляется при нажатии кнопки Insert Record (Вставить запись).
4.3 Удаление записей
Удаление текущей записи выполняет метод Delete, который работает только с модифицируемым НД. В случае успешного удаления записи текущей становится следующая запись, если же удалялась последняя запись, то курсор перемещается на предыдущую запись, которая после удаления становится последней.
При удалении записи генерируются события BeforeDelete и AfterDelete.
Если при удалении записи требуется подтверждение удаления, то можно написать следующий обработчик события OnClick для кнопки Button «Удалить запись»:
procedure TForm1.Button1Click(Sender: TObject);
begin
if MessageDlg ('Удалить запись?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
Table1.Delete;
end;
Удаление нескольких последовательно расположенных записей имеет особенность, связанную с тем, что при вызове метода Delete в цикле по перебору удаляемых записей не нужно вызывать методы, перемещающие указатель текущей записи. после удаления текущей записи указатель автоматически перемещается на соседнюю (обычно следующую) запись. Так можно удалить все записи НД:
procedure TForm1.Button1Click(Sender: TObject);
var n:longint;
begin
Table1.Last;
For n:= Table1.RecordCount downto 1 do Table1.Delete;
end;
В примере перебор записей выполняется с конца НД. После удаления текущей записи указатель снова оказывается на последней записи.
Перед удалением записи часто предварительно выполняется поиск записи, удовлетворяющей заданным условиям. Для отбора группы удаляемых записей используется фильтрация. Метод Delete позволяет удалить записи, видимые в НД. Поэтому с помощью фильтрации можно временно оставить в НД записи, которые подлежат удалению, а после удаления фильтрацию отключить.
4.4 Практическая работа
Создадим приложение для добавления, вставки, удаления записей таблицы Chitateli.db. В программе предусмотреть блокировку изменения записей.
Для блокировки редактирования НД используется компонент CheckBox1 «Редактирование НД запрещено». Если флажок компонента установлен, то в НД невозможно внести какие-либо изменения. Для компонента CheckBox1 напишите следующий обработчик события OnClick:
procedure Tform1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
begin
Table1.Active:=False;
Table1.ReadOnly:=True;
Table1.Active:=True;
end
else
begin
Table1.Active:=False;
Table1.ReadOnly:=False;
Table1.Active:=True;
end;
end;
При щелчке по кнопке Добавить запись в конец НД будет появляться дополнительное окно формы в модальном режиме для добавления новой записи. Для этого добавьте к проекту новую форму. Перейдите на первую форму. Выберите в главном меню Delphi пункт меню File, в этом пункте команду Use unit… В появившемся окне выберите Unit2. Нажмите ОК. В окне кода программы появится следующий раздел:
implementation
uses Unit2;
Перейдите на вторую форму и выполните аналогичные действия. В окне кода программы появится аналогичный раздел:
implementation
uses Unit1;
Разместите на второй форме четыре компонента DBEdit. Этот компонент представляет собой поле, в котором возможно отображение и изменение его значений.
Расположите на второй форме две кнопки BitBtn. В процессе ввода пользователь может утвердить ввод, нажав кнопку «Ввод», или отменить его, нажав кнопку «Отмена». После закрытия модальной формы ввода проверяется, какая кнопка нажата. Если «Ввод», то сделанные изменения принимаются, в противном случае - нет. Для окна формы напишите обработчик события OnCreate:
procedure TForm2.FormCreate(Sender: TObject);
begin
DBEdit1.DataSource:=Form1.DataSource1;
DBEdit1.DataField:='Fio';
DBEdit2.DataSource:=Form1.DataSource1;
DBEdit2.DataField:='DataR';
DBEdit3.DataSource:=Form1.DataSource1;
DBEdit3.DataField:='Adres';
DBEdit4.DataSource:=Form1.DataSource1;
DBEdit4.DataField:='NomerChit';
BitBtn1.ModalResult:=mrOk;
BitBtn2.ModalResult:=mrCancel;
end;
Для кнопки «Добавить запись в конец НД» напишите обработчик события OnClick:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if table1.ReadOnly=False then
begin
Table1.Append;
if Form2.ShowModal=mrOk then
Table1.Post
else
Table1.Cancel;
end
else
ShowMessage('Редактирование записей запрещено!');
end;
Для кнопки «Вставить запись» - следующую процедуру:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if table1.ReadOnly=False then
begin
Table1.Insert;
if Form2.ShowModal=mrOk then
Table1.Post
else
Table1.Cancel;
end
else
ShowMessage('Редактирование записей запрещено!');
end;
Для кнопки «Удалить запись»:
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if table1.ReadOnly=False then
begin
if Messagedlg('Удалить запись?',
mtConfirmation,[mbYes, mbNo],0)=mrYes then
Table1.delete;
end
else
ShowMessage('Редактирование записей запрещено!');
end;
После щелчка по этой кнопке на экране появляется окно, в котором происходит подтверждение или отказ от удаления текущей записи:
Глава V. Работа со связанными таблицами
5.1 Организация связей между таблицами
В частном случае БД может состоять из одной таблицы. Однако, обычно реляционная БД (позволяет обрабатывать различные типы информации совместно) состоит из взаимосвязанных таблиц. Организация связи (отношений) между таблицами называется связыванием или соединением таблиц.
Связи между таблицами обычно устанавливаются при разработке приложения. Связывать можно две или несколько таблиц. В реляционной БД, помимо связанных, могут быть и отдельные таблицы, не соединенные ни с одной другой таблицей.
Связь между таблицами определяет отношение подчиненности, при котором одна таблица является главной (родительской, или мастером), а другая - подчиненной (дочерней, или детальной). Саму связь (отношение) называют связь «главный - подчиненный», «мастер - детальный».
Для связывания таблиц используются поля связи («совпадающие поля»). Поля связи обязательно должны быть индексированными. В подчиненной таблице для связи с главной таблицей состав полей индекса должен полностью или частично совпадать с составом полей индекса главной таблицы. Значения полей связи в главной и подчиненной таблицах должны совпадать (то есть в этих таблицах должны быть одинаковые поля).
Существуют следующие виды связи:
? отношение «один-к-одному»;
? отношение «один-ко-многим»;
? отношение «много-к-одному»;
? отношение «много-ко-многим».
Отношение «один-к-одному» означает, что одной записи в главной таблице соответствует одна запись в подчиненной таблице. Такое отношение используется при разбиении таблицы с большим числом полей на несколько таблиц.
Отношение «один-ко-многим» означает, что одной записи главной таблицы в подчиненной таблице может соответствовать несколько записей, в частном случае ни одной. Этот вид отношения встречается наиболее часто. При перемещении в главной таблице текущего указателя на какую-либо запись в подчиненной таблице автоматически становятся доступными записи, значения полей которых равны значению поля связи текущей записи главной таблицы. Такой отбор записей в подчиненной таблице является своего рода фильтрацией.
Отношение «много-к-одному» отличается от отношения «один-ко-многим» только направлением. Если на отношение «один-ко-многим» посмотреть со стороны подчиненной таблицы, а не главной, то оно превращается в отношение «много-к-одному».
Отношение «много-ко-многим» имеет место, когда одной записи главной таблице может соответствовать несколько записей подчиненной таблицы и одновременно одной записи подчиненной таблицы - несколько записей главной таблицы. На практике такое отношение используется достаточно редко.
Работа со связанными таблицами имеет следующие особенности:
? При изменении (редактировании) поля связи может нарушиться связь между записями двух таблиц, поэтому при редактировании поля связи записи главной таблицы нужно соответственно изменять и значения поля связи всех подчиненных записей.
? При удалении записи главной таблицы нужно удалять и соответствующие ей записи в подчиненной таблице (каскадное удаление).
? При добавлении записи в подчиненную таблицу значение поля связи формируется автоматически по значению поля связи главной таблицы.
При разработке приложения программист должен обеспечить следующее:
? организация связи между таблицами;
? контроль (запрет) редактирования полей связи;
? организация каскадного удаления записей.
5.2 Практическая работа
Организация учета книг в библиотеке.
Создайте две таблицы в Database Desktop:
1. Таблица карточек читателей (фамилия, имя, отчество читателя (поле FIO), дата рождения (поле DataR), адрес (поле Adres), номер читательского билета (поле NomerChit)). Сохраните таблицу под именем Chitateli.db на диске С: в папке Baza.
2. Таблица выдачи книг (автор книги (Avtor), название книги (NameBook), номер читательского билета (NomerChit), дата выдачи (DataV), срок возврата книги (SrokV)). Сохраните таблицу под именем Book.db на диске С: в папке Baza.
Между таблицами нужно установить связь «мастер-детальный», при которой таблица Chitateli.db будет главной, а таблица Book.db - подчиненной. Для организации связи в качестве поля связи главной таблицы выберем поле NomerChit, которое необходимо сделать ключевым, т.е. чтобы значения в этом поле не повторялись. В подчиненной таблице Book.db полем связи будет поле NomerChit. Проиндексируйте обе таблицы по полям NomerChit (одинаковое поле в таблицах). Назовите индексные файлы indNomer.
В верхней части формы установите и свяжите между собой компоненты для работы с таблицей Chitateli.db, в нижней - компоненты для работы с таблицей Book.db. Переименуйте поля таблиц, присвоив им русские заголовки.
Для организации связи между таблицами в подчиненной таблице для компонента Table2 нужно установить следующие свойства:
? MasterSource - источник данных главной таблицы (выбор главной таблицы) - Table1;
? IndexName - текущий индекс подчиненной таблицы - indNomer;
? MasterFields - поле или поля связи индекса главной таблицы. При выборе этого свойства на экране появляется окно специального Редактора полей связи (Field Link Designer). В списке Detail Fields выбирается поле подчиненной таблицы, а в списке Master Fields - поле главной таблицы. После нажатия кнопки Add выбранные поля связываются между собой, что отображается в списке Joined Fields. Заполнение свойства MasterFields происходит после закрытия окна при нажатии кнопки OK.
После установки всех нужных для связывания таблиц свойств запустите программу и заполните первую запись таблицы Chitateli.db, затем перейдите к заполнению таблицы Book.db (несколько записей, потому что один читатель может взять несколько книг), затем снова к заполнению таблицы Book.db и так далее. В таблице Chitateli.db должно быть не меньше 5 записей. Следите за тем, чтобы у связанных записей совпадали номера читательских билетов.
Создадим главное меню программы. Для этого нужно к проекту добавить еще три формы. На второй форме создать главное меню программы согласно рисунка. На третью форму скопируйте компоненты для работы с таблицей Chitateli.db. В заголовке формы - Таблица «Читатели». На четвертую форму скопируйте компоненты для работы с таблицей Book.db. В заголовке формы - Таблица «Книги». Для каждого пункта меню напишите обработчики событий, чтобы при выборе пункта на экране появлялось окно с выбранными таблицами. Например:
procedure TForm2.N2Click(Sender: TObject);
begin
Form3.Show;
end;
Оставшиеся процедуры напишите самостоятельно.
Чтобы можно было при выборе пунктов главного меню второй формы (содержит главное меню) показывать на экране другие формы, нужно подключить модули форм ко второй форме. Это можно выполнить следующим образом. Перейти на вторую форму, выполнить команду File\Use Unit… В появившемся окне выделить имена модулей остальных форм и нажать ОК. В модуле второй формы после слова implementation (раздел реализаций) автоматически пропишется следующее: uses Unit3, Unit4, Unit1;
5.3 Самостоятельная работа
Создать БД «Музыкальная картотека» по примеру предыдущей практической работы.
Глава VI. Работа с отчетами
6.1 Объект QuickRep
Отчет - это печатный документ, содержащий данные из таблиц или текстовых файлов.
Компоненты, предназначенные для создания отчетов, находятся на странице QReport Палитры компонентов. Большинство из них визуальные и похожи на компоненты страниц Standard, Additional, Data Controls.
Главным элементом отчета является компонент-отчет QuickRep - это основа, на которой размещаются другие компоненты. Он обычно размещается на отдельной форме, предназначенной для создания отчета.. При помещении на форму компонент QuickRep имеет вид страницы формата А4, масштаб которой можно изменить (свойство Zoom типа integer (по умолчанию - 100%))
Помимо компонента QuickRep на форме размещают тот НД Table, для которого создается отчет.
Компонент QuickRep связывается с НД Table, для которого создается отчет, с помощью свойства DataSet, в котором выбирается имя НД, для которого создается отчет (например, Table1). При печати отчета в процессе выполнения приложения НД должен быть открыт. Если перед печатью отчета пользователь произвел фильтрацию или сортировку записей, то в распечатанный отчет попадут отфильтрованные или отсортированные записи НД.
Отчет состоит из отдельных полос - составных частей отчета, которые определяют содержание и вид созданного документа. Полоса - это составной элемент отчета. Каждая полоса размещается на своем месте и предназначена для отображения соответствующих компонентов отчета и вывода данных.
При построении отчета на форму помещается компонент QuickRep и связывается с НД Table с помощью свойства DataSet. Потом компоненты QRBand (полосы) в соответствующем порядке. Свойство BandType определяет тип вставляемой полосы:
? rbTitle - заголовок отчета (печатается вначале отчета под верхним колонтитулом);
? rbPageHeader - верхний колонтитул, который печатается сверху на каждой странице;
? rbDetail - данные записей НД; выводятся для каждой записи НД;
? rbPageFooter - нижний колонтитул; печатается внизу на каждой странице;
? rbSummary - итог отчета; выводится в конце отчета под всеми другими сведениями отчета, но выше нижнего колонтитула;
? rbSubDetail - данные подчиненного НД для отчета “мастер - детальный”;
? rbColumnHeader - заголовки столбцов; печатаются один раз на каждой странице над данными.
При создании в отчет нужно включать не более одной полосы каждого вида, так как при печати отчета «лишние» полосы одного и того же вида учитываться не будут.
Каждая полоса может иметь рамку, которой управляет свойство Frame.
Страница отчета тоже может иметь рамку, параметры которой задает свойство Frame компонента QuickRep. Рамку можно установить и с помощью диалогового окна изменения параметров страницы отчета (двойной щелчок по компоненту QuickRep или контекстное меню компонента QuickRep>Report Settings).
Для печати отчета предназначен метод Print, сразу после вызова которого отчет подготавливается к печати и направляется на установленный в системе принтер. Метод Print может вызываться, например, при нажатии кнопки «Печать», расположенной на форме, с которой пользователь работает. Для этой кнопки можно написать следующий обработчик события:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
QuickRep1.Print;
end;
Если компонент-отчет QuickRep связан с НД, записи которого находятся в сетке DBGrid формы, то порядок записей отчета соответствует порядку записей, видимых пользователем на форме. После фильтрации или сортировки при печати отчета учитывается новый состав и порядок следования записей.
Для предварительного просмотра отчета перед печатью служит метод Preview компонента QuickRep, вызывающий окно просмотра. В этом окне можно:
? просмотреть отчет в различных масштабах;
? сохранить отчет в файле;
? загрузить предварительно сохраненный отчет;
? направить отчет на печать.
Пример
Table1.Preview; - команда для кнопки «Предварительный просмотр».
На этапе разработки приложения также можно просмотреть отчет, выполнив команду Preview контекстного меню компонента QuickRep. Внешний вид отчета будет таким же, как при печати или в окне просмотра при выполнении приложения, за исключением отсутствия значений вычисляемых полей.
6.2 Компоненты, размещаемые в полосе
После создания полосы определенного типа в ней размещаются соответствующие компоненты, при этом необходимо использовать только компоненты страницы QReport.
Можно разместить компонент и вне полосы отчета - на компоненте QuickRep. В этом случае он будет выводится на каждой странице отчета.
Обычно используются следующие компоненты отчета:
QRLabel - позволяет разместить в отчете произвольную текстовую строку.
QRDBText - служит для вывода значения поля записи НД; обычно размещается в полосе данных.
QRExpr - применяется для вывода значений, являющихся результатом вычисления выражений, в которых могут использоватьсязначения полей записи; обычно используется для полос данных и нижних колонтитулов.
QRSysData - служит для вывода в отчете системной информации; свойство Data - выбор типа информации:
qrsColumnNo - номер текущего столбца;
qrsDate - текущая дата;
qrsDateTime - текущая дата и время;
qrsDetailCount - число записей в НД;
qrsDetailNo - номер текущей записи;
qrsPageNumber - номер текущей страницы;
qrsPageCount - общее число страниц отчета;
qrsTime - текущее время.
Свойство Text - отображает надпись, которая будет присутствовать перед компонентом QRSysData
QRImage - служит для вывода в отчете графической информации (аналогично компоненту Image); свойство Picture - загрузка рисунка.
QRShape - геометрическая фигура, размещаемая в любой полосе.
6.3 Практическая работа
Создадим отчет для таблицы Chitateli.db с возможностью предварительного просмотра перед печатью.
Расположить на форме три компонента для работы с таблицей Chitateli.db. Связать их между собою. Расположить кнопку Button «Предварительный просмотр».
Добавить к проекту еще одну форму, на которой будет располагаться отчет. Разместите на этой форме компонент QuickRep и Table (скопировать с первой формы). Для компонента QuickRep1 найдите свойство DataSet и выберите значение Table1.
На компоненте QuickRep1разместите один под другим 6 компонентов QRBand.
В свойстве BandType для каждой полосы (начиная с последней) установите значения:
? верхний колонтитул (первая полоса);
? заголовок отчета;
? заголовки столбцов;
? данные;
? итог отчета;
? нижний колонтитул (последняя полоса).
Необходимо создать отчет:
В верхнем колонтитуле расположите компонент QRSysData (свойство Data - qrsDate; свойство Text - Сегодня).
В заголовке отчета слева расместить компонент QRImage (свойство Picture> вставить картинку bookopen.bmp). Рядом - компонент QRLabel (свойство Caption - Список читателей)
В строке заголовков столбцов - компоненты QRLabel.
В строке данных - компоненты QRDBText (для каждого свойство DataSet - Table1; свойство DataField - соответствующее поле).
В строке итог отчета - компонент QRLabel (свойство Caption.- Всего записей:), а рядом - компонент QRExpr (свойство Expression; в появившемся окне нажать кнопку Function; в списке Category выбрать Statistical; в списке Available function выбрать Count; нажать на кнопку Continue и ОК).
В строке нижнего колонтитула разместить компонент QRSysData (свойство Data - qrsPageNumber; свойство Text - Номер страницы отчета).
Просмотрите отчет в окне предварительного просмотра.
Подсоедините вторую форму к первой.
Для кнопки «Предварительный просмотр» напишите обработчик события:
QuickRep1.Preview;
dsInactive
dsEdit
dsInsert
dsBrowse
dsCalcField
dsFilter
dsSetKey
Подобные документы
Изучение основных принципов разработки приложений баз данных в среде Delphi. Создание таблиц, псевдонима и вычисляемых полей базы данных. Особенности организации поиска и фильтрации. Сортировка данных в таблицах. Построение запросов. Генерация отчетов.
курсовая работа [1,3 M], добавлен 05.02.2017Понятие баз данных и принципы проектирования информационных систем. Разработка программы для отслеживания финансовой стороны работы компании в среде Delphi 7. Создание таблиц и схемы данных. Разработка клиентского приложения и процедуры добавления данных.
курсовая работа [1,4 M], добавлен 25.04.2012Создание таблиц базы данных с помощью MS Access "Страны Азии". Форма базы данных и запросы к выборкам данных. Модификация структуры таблиц, создания связей между главными таблицами, редактирование данных и проектирование форм для реальной базы данных.
контрольная работа [723,9 K], добавлен 25.11.2012Среды создания баз данных. Установка программного продукта MS Access 2000, построение реляционной базы данных, поддержка языка XML. ER-диаграмма (схема "сущность-связь"). Заполнение форм, создание таблиц. Действия для создания и редактирования списка.
курсовая работа [954,9 K], добавлен 22.12.2010Построение концептуальной модели. Создание таблиц, входящих в состав базы данных. Разработка основных запросов, отчетов о количестве учеников в данном классе и работе школы; форм для просмотра и редактирования данных в программе Microsoft Access.
курсовая работа [2,7 M], добавлен 08.05.2015Процесс создания и определение задач полнофункциональной системы управления базами данных. Разработка структуры таблиц, хранящих данные и формирование запросов. Построение форм для ввода и просмотра информации в запросах и создание необходимых отчетов.
курсовая работа [1,1 M], добавлен 11.09.2010Разработка базы данных книжного магазина в среде программирования Delphi. Создание таблиц и их заполнение. Требования к составу и параметрам технических средств. База данных как набор файлов, содержащих информацию. Этапы создания приложения в Delphi.
курсовая работа [803,6 K], добавлен 04.11.2012Изучение технологии разработки базы данных, создания таблиц, простых и составных форм для ввода, редактирования и просмотра данных, хранимых в таблицах. Проектирование информационной системы "Кафедра" средствами СУБД Access, с созданием форм отчетов.
курсовая работа [5,9 M], добавлен 12.05.2012Проектирование системы управления базой данных "Почтовые отделения" для создания единой информационной системы: создание таблиц для хранения данных, ввод данных, разработка элементов базы, предназначенных для просмотра, редактирования и вывода информации.
курсовая работа [1,4 M], добавлен 31.03.2010Компоненты реляционной базы данных Microsoft Access. Создание структуры таблиц и определение связей между ними. Проектирование форм для сводных таблиц и запросов с помощью конструктора окон. Разработка и создание автоотчетов и запросов на выборку данных.
реферат [3,3 M], добавлен 29.01.2011