Rabotnik1. Enabled:=true;
DenSredstva1. Enabled:=true;
Documenty1. Enabled:=false;
Detali1. Enabled:=true;
end;
procedure TOsnForma. Detali1Click (Sender: TObject);
begin
OsnTable. Active:=false;
OsnTable. TableName:='Детали, инструменты';
Tag:=4;
Redakt;
OsnTable. Active:=true;
OsnForma. Caption:='Детали, инструменты';
Komandirovka1. Enabled:=true;
Rabotnik1. Enabled:=true;
DenSredstva1. Enabled:=true;
Documenty1. Enabled:=true;
Detali1. Enabled:=false;
end;
procedure TOsnForma. Komandirovka1Click (Sender: TObject);
begin
OsnTable. Active:=false;
OsnTable. TableName:='Командировка';
Tag:=5;
Redakt;
OsnTable. Active:=true;
OsnForma. Caption:='Командировка';
Komandirovka1. Enabled:=false;
Rabotnik1. Enabled:=true;
DenSredstva1. Enabled:=true;
Documenty1. Enabled:=true;
Detali1. Enabled:=true;
end;
Создание приложений, позволяющих редактировать, сортировать, находить необходимые данные
Редактирование осуществляется следующими процедурами программы
procedure TOsnForma. Redaktioravt1Click (Sender: TObject);
begin
Redakt;
RedForm. ShowModal;
end;
procedure TOsnForma. Redakt;
begin
case Tag of
1: with RedForm do begin
Label1. Caption:='Номер документа';
Label2. Caption:='ФИО';
Label3. Caption:='Должность';
Label4. Caption:='Телефон';
Label5. Caption:='Название отдела';
Label6. Caption:='Специализация';
Label7. Visible:=false;
DBEdit1. DataField:='№ документа';
DBEdit2. DataField:='ФИО';
DBEdit3. DataField:='Должность';
DBEdit4. DataField:='Телефон';
DBEdit5. DataField:='Название отдела';
DBEdit6. DataField:='Специализация';
DBEdit7. DataField:='';
DBEdit7. Visible:=false;
DBEdit6. Visible:=true;
Label6. Visible:=true;
end;
2: with RedForm do begin
Label1. Caption:='Номер запроса';
Label2. Caption:='Суточные';
Label3. Caption:='Оплата проезда';
Label4. Caption:='Оплата труда';
Label5. Caption:='Количество человек';
Label6. Caption:='Итого';
Label7. Visible:=false;
DBEdit1. DataField:='№ запроса';
DBEdit2. DataField:='Суточные';
DBEdit3. DataField:='Оплата проезда';
DBEdit4. DataField:='Оплата труда';
DBEdit5. DataField:='Количество человек';
DBEdit6. DataField:='Итого';
DBEdit7. DataField:='';
DBEdit7. Visible:=false;
DBEdit6. Visible:=true;
Label6. Visible:=true;
end;
3: with RedForm do begin
Label1. Caption:='Номер запроса';
Label2. Caption:='Номер документа';
Label3. Caption:='Название';
Label4. Caption:='Дата подписания';
Label5. Caption:='Кем подписан';
Label6. Visible:=false;
Label7. Visible:=false;
DBEdit1. DataField:='№ запроса';
DBEdit2. DataField:='№ документа';
DBEdit3. DataField:='Название';
DBEdit4. DataField:='Дата подписания';
DBEdit5. DataField:='Кем подписан';
DBEdit6. DataField:='';
DBEdit6. Visible:=false;
DBEdit7. DataField:='';
DBEdit7. Visible:=false;
end;
4: with RedForm do begin
Label1. Caption:='Номер запроса';
Label2. Caption:='Название';
Label3. Caption:='Количество';
Label4. Caption:='Стоимость каждой';
Label5. Caption:='Итого';
Label6. Visible:=false;
Label7. Visible:=false;
DBEdit1. DataField:='№ запроса';
DBEdit2. DataField:='Название';
DBEdit3. DataField:='Количество';
DBEdit4. DataField:='Стоимость каждой';
DBEdit5. DataField:='Итого';
DBEdit6. DataField:='';
DBEdit6. Visible:=false;
DBEdit7. DataField:='';
DBEdit7. Visible:=false;
end;
5: with RedForm do begin
Label1. Caption:='Номер запроса';
Label2. Caption:='Цель';
Label3. Caption:='Дата отбытия';
Label4. Caption:='Дата прибытия';
Label5. Caption:='Место назначения';
Label6. Caption:='Виды выполняемых работ';
Label7. Caption:='ФИО работника';
DBEdit1. DataField:='№ запроса';
DBEdit2. DataField:='Цель';
DBEdit3. DataField:='Дата прибытие';
DBEdit4. DataField:='Дата отбытия';
DBEdit5. DataField:='Место назначения';
DBEdit6. DataField:='Виды выполняемых работ';
DBEdit7. DataField:='ФИО работника';
DBEdit6. Visible:=true;
Label6. Visible:=true;
DBEdit7. Visible:=true;
Label7. Visible:=true;
end;
end;
end;
procedure TOsnForma. Ydalit1Click (Sender: TObject);
begin
if (MessageDlg('Вы уверены?', mtConfirmation, mbOkCancel, 0)=mrOk) then
OsnTable. Delete;
end;
procedure TOsnForma. Dobavit1Click (Sender: TObject);
begin
OsnTable. Insert;
Redakt;
RedForm. ShowModal;
if (OsnTable. Modified) then
OsnTable. Post;
end;
Для поиска записей в наборе данных в компоненте TTable применяется следующий метод: function FindKey([список значений]): Boolean – ищет запись, точно удовлетворяющую условиям в списке значений; существует дублирующий его метод GoToKey;
Поиск осуществляется только по индексным полям. Состав полей, используемых для идентификации нужной записи при поиске в НД, определяется текущим индексом. Следовательно, в качестве текущего нужно установить индекс, построенный по полям, по значениям которых и планируется осуществить поиск.
При поиске на точное соответствие предпринимается попытка отыскать запись, у которой индексные поля соответствуют значениям, указанным в списке значений. Если такая запись найдена, данный метод возвращает True и указатель текущей записи в НД устанавливается на эту запись. Если запись не найдена, курсор не перемещается.
procedure TPoiskForm.OKClick (Sender: TObject);
begin
OsnForma. OsnTable. IndexName:= 'N'+IntToStr (PoiskBox. ItemIndex);
OsnForma. OsnTable. FindKey([PoiskEdit. Text]);
Close;
end;
Одной из наиболее часто выполняемых задач является задача сортировки данных таблицы по одному из полей (или по нескольким полям). Рассмотрим приёмы сортировки таблицы на примере набора данных Table. Сортировка набора данных Table выполняется автоматически по текущему индексному полю. Если переопределить индекс произойдет автоматическая сортировка данных по новому индексу. Если необходимо организовать сортировку данных по нескольким полям одновременно, надо создать индекс, включающий эти поля.
procedure TOsnForma.N0Click (Sender: TObject);
begin
OsnTable. IndexName:=TMenuItem(Sender).Name;
end;
Запросы – существенная часть управления базами данных. Для выполнения запросов к БД в Delphi используется компонент TQuery. Основные отличия компонента данных TQuery, возвращающего наборы данных, от выполняющего сходные функции компонента TTable следующие:
· набор данных, возвращаемый TQuery, может быть составлен из записей нескольких таблиц;
· в общем случае набор данных, возвращаемый TQuery, даже если источником этого набора служит одна таблица БД, предполагает обращение к подмножеству записей и столбцов, в то время как TTable ориентирован на работу со всеми записями и полями.
Результирующий набор данных компонента TQuery формируется путем выполнения запроса к БД на языке SQL. Самые большие реляционные базы данных, такие, как Oracle, Informix, Sybase, так же выполняют запросы, используя SQL.
Писать и исполнять SQL‑запросы в приложениях Delphi можно различными способами. Один метод – запись текста SQL‑команды в свойство SQL компонента TQuery. В этом случае во время работы приложения Delphi выполнит указанный запрос. Если при этом соединить компонент TQuery через TDataSoource с компонентом доступа к данным, результаты запроса будут показаны в компоненте просмотра данных, связанным с TQuery.
Другой способ задания SQL‑команд – включение их в паскалевские модули (в блоки исполняемого Pascal‑кода), которые Delphi создает для вашего проекта.
procedure TOsnForma.SQL1Click (Sender: TObject);
begin
PoiskForm. PoiskBox. Clear;
PoiskForm. PoiskBox. Items. Add (OsnTable. Fields. Fields[1].DisplayName);
PoiskForm. PoiskBox. Items. Add (OsnTable. Fields. Fields[2].DisplayName);
PoiskForm. PoiskBox. Items. Add (OsnTable. Fields. Fields[5].DisplayName);
PoiskForm. PoiskBox. ItemIndex:=0;
PoiskForm. ShowModal;
with OsnUnit. OsnForma. Query do begin
Active:=false;
SQL. Clear;
SQL. Add ('Select *');
SQL. Add ('From Работник');
SQL. Add ('Where '+PoiskForm. PoiskBox. Text+' Like «'+PoiskForm. PoiskEdit. Text+'''');
Active:=true;
end;
SQLForm. ShowModal;
end;
VIII. Создание отчетов по базе данных
Для создания отчетов создается новая форма, на ней размещается компонент TquickRep.
procedure TOsnForma.N7Click (Sender: TObject);
begin
OtchetForm. QuickRep1. PreviewModal;
end;
3. Технологическая часть
3.1 Руководство пользователя
При запуске программы открывается основное окно программы и выводится таблица «Командировка», в которой содержится наиболее общая информация, связанная с предметной областью (рис. 1).
Рис. 1
Главное меню содержит следующие пункты: «Файл», «Таблица», «Редактирование», «Поиск», «Сортировать по…» (рис. 2)
Рис. 2
Пункт меню «Файл» позволяет осуществить выход из программы и вывести отчет (рис. 3).
Рис. 3
При выборе подменю отчет выведется информация о каждом работнике (рис. 4). На каждой странице – информация об одном человеке.
Рис. 4
Для работы с записями используется панель задач (рис. 5)
Рис. 5
Пункт основного меню «Таблица» позволяет осуществлять переключение между таблицами БД (рис. 6)
Рис. 6
Выбрав любой подпункт можно получить доступ к таблице соответствующим названием. При этом тот подпункт, который совпадает с открытой на данный момент таблицей делается неактивным.
Редактирование записей в таблице может осуществляться двумя способами
· используя встроенный навигатор (рис. 7)
Рис. 7
Перечисление назначения кнопок навигатора слева направо:
1. указатель на начало всех записей
2. указатель на одну запись назад
3. указатель на одну запись вперед
4. вставить новую запись
5. удалить указанную запись
6. редактировать указанную запись
7. сохранить отредактированную запись
8. выйти из режима редактирования
9. обновить данные
· при помощи пункта меню «Редактирование» (рис. 8)
Рис. 8
При выборе подпункта «Добавить» выведется следующее диалоговое окно (рис. 9)
Рис. 9
При вводе данные будут отображаться в соответствующих полях таблицы (рис. 10)
Рис. 10
Для редактирования какой-либо записи следует установить на неё указатель и выбрать Редактирование – Редактировать. После чего выведется диалоговое окно, поля которого будут содержать значения этой записи (рис. 11).