Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка БД-A5.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
2.48 Mб
Скачать

Основные методы компоненты tTable

Класс TDataSet – базовый класс всех компонентов наборов данных, представляющих данные в виде строк и столбцов. Этот класс содержит методы, свойства и события, используемые при работе с базами данных. Многие из этих свойств и событий реализуются в наследниках этого класса, таких как TQuery, TTable. Следующий обширный набор методов и свойства класса TDataSet обеспечивает все, что нужно для доступа к любой конкретной записи внутри таблицы:

procedure First - перемещает курсор к первой записи таблице;

procedure Last; - перемещает курсор к последней записи в таблице;

procedure Next; - перемещает курсор к следующей записи в таблице;

procedure Prior; - перемещает курсор к предыдущей записи в таблице;

property BOF: Boolean read FBOF; - указывает, находится ли курсор таблицы на первой записи;

property EOF: Boolean read FEOF; - указывает, находится ли курсор таблицы на последней записи.

Для того чтобы найти некоторую величину в таблице, можно использовать процедуры SetKey (поиск записи по первичному ключу, либо по вторичному индексу) и  GoToKey (если ключ найден, то текущий указатель перемещается на него и функция выдает TRUE). Обе эти процедуры предполагают, что поле по которому Вы ищете индексировано.

Метод FieldByName обеспечивает доступ к полю по его имени:

function FieldByName (const FieldName: String): TField;

Этот метод возвращает объект поля TField (базовый класс всех объектов полей наборов данных), заданный параметром метода FieldName. Далее можно использовать свойства и методы объекта поля, например, такие как изменение значений полей; отображение вводимых значений полей различных типов; ограничения вводимых значений полей и т.д. если поля с заданным именем не обнаружено, генерируется исключение.

Следующие методы позволяют изменять данные, связанные с TTable:

procedure Append; - добавляет новую пустую запись в конец набора данных;

procedure AppendRecord; - добавляет в набор данных новую запись, заполняет ее и пересылает в базу данных;

procedure Insert; - вставляет новую пустую запись в набор данных;

procedure Cancel; - отменяет результаты редактирования;

procedure Delete; - удаляет активную запись и позиционирует курсор на следующую запись;

procedure Edit; - переводит набор данных в режим редактирования;

procedure Post; - пересылает отредактированную запись в базу данных.

Все эти методы – часть TDataSet, они унаследованы и используются TTable и TQuery. Когда необходимо изменить данные, сначала нужно перевести DataSet в режим редактирования. Большинство визуальных компонент делают это автоматически, однако если изменять TTable программно, то придется использовать вышеупомянутые методы. Имеется типичная последовательность, которая используется при изменении поля текущей записи:

Table1.Edit;

Table1.FieldByName(‘FIORab’).AsString:=’Иванов’;

Table1.Post;

Первая строка переводит таблицу в режим редактирования. Следующая строка присваивает значение ‘Иванов’ полю ‘FIORab’. И данные записываются на диск, когда вызывается Post. При использовании такого подхода всегда работают с записями. Сам факт перемещения к следующей записи автоматически сохраняет данные на диск. Например, следующий код будет иметь тот же самый эффект, что и показанный выше, плюс к этому будет перемещать на следующую запись:

Table1.Edit;

Table1.FieldByName(‘FIORab’).AsString:=’Иванов’;

Table1.Next;

Вызовы методов First, Next, Prior и Last всегда выполняют метод Post, если находились в режиме редактирования. Если таблицу перевели в режим редактирования и изменили данные в одном или более полей, то можно всегда вернуть запись в исходное состояние вызовом метода Cancel.

Задание 12. Создание формы для пункта меню «Уволить рабочего»:

1. Выберите опцию «File» - «New» - «Form». Переименуйте полученную форму: в  Object Inspector для свойства Caption введите строку «Уволить рабочего».

2. Сохраним эту форму: «File» - «Save as» - Имя файла: Unit2.

3. Чтобы при нажатии на пункт «Уволить рабочего» запускалась вторая форма, опишите следующую процедуру:

procedure TForm1.N3Click(Sender: TObject); begin Form2.Show; end; 

4. Если сейчас запустить проектный файл Project1.exe, то на экране появляется сообщение (рис.12).

Рис. 12. Информационное сообщение.

5. Нажмите на кнопку «Yes». Запустите Project1.exe еще раз.

6. Перейдите на форму Form2 «Уволить рабочего». Для этого выберите пункт меню «View» - «Forms», дважды щелкните на Form2 или нажмите комбинацию клавиш «Shift+F12».

7. Переместите на форму «Уволить рабочего» две кнопки Button (закладка Standard ), поле ввода Edit (закладка Standard) и текстовое поле Label (закрыть Standard).

8. Переименуйте кнопки в «Уволить» и «Отмена». Для обработки события нажатия на кнопку «Отмена» впишите в модуль следующую процедуру:

procedure TForm2.Button2Click(Sender: TObject); begin Edit1.Clear; //очищает поле ввода Edit1 Form2.Hide; //закрывает форму end;

9. Очистите свойство Text для компоненты Edit1.

10. Для компонеты Label1: в  Object Inspector для свойства Caption установите значение «Введите табельный номер рабочего, которого хотите уволить». Измените размеры формы и компонент, разместите их в удобном для работы виде (рис.13).

Рис. 13. Форма для обработки операции увольнения сотрудника.

11. Для обработки события нажатия на кнопку «Уволить» в модуле запишите следующую процедуру:

procedure TForm2.Button1Click(Sender: TObject); begin if Edit1.Text=''

then showmessage('Введите номер увольняемого рабочего') еlse

begin with form2.Table1 do begin first; while not EOF do begin if fieldbyname('NomRab').AsString=Edit1.Text then form2.Table1.Delete; next; end; end; showmessage('Рабочий уволен'); Edit1.Clear; end;

end;

Данная процедура выполняет удаление выбранного Вами рабочего из Базы данных, после внесения соответствующего табельного номера в поле Text элемента Edit1. Удаление производиться  нажатием кнопки «Уволить». В конце операции выводиться подтверждение: «Рабочий уволен». Если номер рабочего не был внесен, а кнопка «Уволить» была нажата, то выйдет сообщение «Введите номер увольняемого рабочего».

Задание 13. Создание формы для пункта меню «Нанять рабочего».

Рис. 14. Форма для приема на работу.

1. Аналогично предыдущему заданию создайте новую форму. Разместите на форме две кнопки (закладка Standard – компонента Button), шесть полей ввода (закладка Standard - компонента Edit), семь текстовых полей (закладка Standard - компонента Label), список выпадающих строк (закладка Standard - компонента ComboBox) (рис. 14).

2. Для того чтобы из главной формы при нажатии на пункт меню «Нанять рабочего» запускалась третья форма, впишите следующую процедуру:

procedure TForm1.N4Click(Sender: TObject);

begin

Form3.Show;

Form3.ComboBox1.items.Clear;

Form1.Table2.Open;

with Form1.Table2 do

begin

first;

while not eof do

begin

Form3.ComboBox1.items.add(FieldByName('NomBrig').AsString);

next;

end;

end;

end;

3. Если сейчас запустить проектный файл Project1.exe, то снова выйдет сообщение (рис. 12). Нажмите на кнопку «Yes». Запустите Project1.exe еще раз.

4. Для обработки события нажатия на кнопку «Отмена» нужно записать соответствующую процедуру:

procedure TForm3.Button2Click(Sender: TObject); begin Edit1.Clear; Edit2.Clear; Edit3.Clear; Edit4.Clear; Edit5.Clear; Edit6.Clear; Form3.Hide; end;

9. Для обработки события нажатия на кнопку «Нанять» необходимо ввести соответствующую процедуру:

procedure TForm3.Button1Click(Sender: TObject); var flag:boolean; begin with form2.Table1 do

begin flag:=false; First; while not EOF do

begin if FieldByName('NomRab').AsString=Edit1.Text then flag:=true; next; end; if flag=true

then ShowMessage('Этот табельный номер уже используется')

else if (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='') or

(Edit4.Text='') or (Edit5.Text='') or (Edit6.Text='') or

(ComboBox1.Text='')

then showmessage('Вы ввели не всю информацию')

else

begin AppendRecord([(Edit1.Text),(Edit2.Text),(Edit3.Text),

(Edit4.Text),(Edit5.Text),(Edit6.Text),ComboBox1.Text]);

ShowMessage('Рабочий нанят'); end;

end;

end;

Данная процедура выполняет запись параметров этой формы в таблицу Рабочие. Записывается при нажатии кнопки «Нанять». Если рабочий с таким табельным номер уже существует, то выводится сообщение «Этот табельный номер уже используется». Если хотя бы что-то не заполнено, то выводится сообщение «Вы ввели не всю информацию».

 

Задание 14. Необходимо подсчитать количество рабочих в какой-то конкретной бригаде. Для этого необходимы два поля ввода Edit и одна кнопка Button. Номер бригады вносится в первое поле ввода, а результат отображается во втором поле ввода при нажатии на кнопку. Если же номер бригады не был внесен, то выйдет сообщение «Внесите номер бригады!». Тогда процедура будет выглядеть таким образом:

procedure TForm1.Button1Click(Sender: TObject); var s:integer; begin if Edit1.text='' then ShowMessage('Внесите номер бригады!')

else

begin s:=0; with Table1 do begin First; While not EOF do begin if FieldByName('NomBrig').AsString=Edit1.Text then s:=s+1; Next; end; end; Edit2.Caption:=IntToStr(s); end;

end;

Предусмотрите в этой процедуре проверку существования бригады с введенным номером.

Задание 15. Необходимо найти строку, содержащую информацию о конкретном рабочем. На форме можно разместить компоненты Edit и Button. В поле ввода вводится табельный номер работника, информацию о котором необходимо найти. При нажатий на кнопку указатель в таблице переместится на нужную строку. Если при нажатии на   кнопку номер рабочего не был внесен, то выйдет сообщение «Внесите информацию!». Тогда процедура обработки события нажатия на кнопку будет выглядеть таким образом:

procedure TForm1.Button2Click(Sender: TObject); begin if Edit2.text='' then ShowMessage('Внесите информацию') else begin with Table1 do begin SetKey; FieldByName('NomRab').AsString:=Edit2.Text; if not GotoKey then showmessage ('запись не найдена'); end; end; end;

SQL – запросы

Компонент TQuery, как и компонент TTable, обладает всеми свойствами компонента TDataSet. Как и в случае с компонентом TTable, компонент TDataSource управляет взаимодействием между компонентами DataControls и компонентом TQuery. Обычно приложение имеет один компонент DataSource для каждого компонента TQuery. Наиболее часто используются следующие свойства и методы компоненты TQuery:

Свойство Active - указывает, открыт (true) или закрыт (false) данный запрос.

Основное свойство компонента TQuery – SQL, который является строковым массивом, содержащим текст оператора запроса SQL. Язык SQL непроцедурный. На нем можно написать, что нужно получить в результате запроса, но нельзя написать, как это сделать, то есть нельзя описать саму процедуру выполнения запроса. В процессе проектирования приложения обычно необходимо сформировать в свойстве SQL некоторый предварительный запрос SQL, который показал бы, с какой таблицей или таблицами будет производиться работа. Но далее во время выполнения приложения свойство SQL может формироваться программно методами: Clear – очистка и Add – добавление строки.

Метод Open - открывает соединение с базой данных. Он эквивалентен присвоению свойству Active значения true. Используется, если результатом запроса является набор данных (такие запросы обычно начинаются с оператора Select).

Метод Close - закрывает набор данных. Вызов Close эквивалентен присвоению свойству Active значения false.

Рис. 15. Форма для поиска сотрудников.

Задание 16. Однотабличные запросы.

1. Создайте новую форму, на которой будет осуществляться поиск сотрудников второй бригады. На этой форме разместите компоненты DBGrid, DataSource, Query (закладка BDE палитры компонент) и установите связи между ними и базой данных. Для компонента  Query1 и в  Object Inspector установите для свойства DatabaseName алиас базы данных - Stroika. Значение свойства  DataSet для компонента DataSource установите Query1. Для компонента DBGrid свойство DataSource поставьте DataSource1.

2. Для компонента TQuery в Object Inspector установите свойство SQL: при нажатий на это свойство открывается новое окно для ввода текста SQL запроса, введите в него следующее:

select *

from Table1

where Nombrig:=2

3. Для обработки события нажатия на кнопку «Поиск» запишите в соответствующую процедуру следующие строки:

with Query1 do

begin

Close;

Open;

end;

4. Сохраните и запустите приложение. Проверьте правильно работает SQL запрос или нет.  Этот запрос должен выдавать информацию о всех сотрудниках из таблицы Table1, которые работают во второй бригаде.

Задание 17. Поиск с параметром.

1. Создайте новую форму, на которой будет осуществляться поиск сотрудников. В поле ввода во время выполнения приложения будет вводиться сумма и нужно получить информацию о сотрудниках, которые получают заработную плату ниже этой суммы (рис. 16).

Рис. 16. Форма для поиска с помощью SQL запроса.

2. Впишите в процедуру обработки события нажатия на кнопку «Поиск» следующие строки:

 if Edit1.text='' then ShowMessage('Введите сумму!') else

 with Query1 do

begin

Close;

SQl.Add ('select * from Table1 where NomRab=:SumR');

ParamByName('SumR').AsFloat:= StrToFloat(Edit1.Text);

Open;

end;

3. Запустите приложение и проверьте, как оно работает.

Задание 18. Многотабличные запросы.

  1. Получить табельные номера и фамилии тех сотрудников, которые работали на определенном объекте.

2. Получить список объектов, бригад, которые работали на этом объекте, и их бригадиров.

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

 

Список литературы

  1. Архангельский А.Я. Delphi. Справочное пособие. – М.: Бином-Пресс, 2004. – 1024с.: ил.

  1. Фаронов В.В. Программирование баз данных в Delphi 7. – СПБ.:Питер, 2005.- 459с.: ил.

  1. Сухарев М.В. Основы Delphi. Профессиональный подход. – СПб.: Наука и Техника, 2004. – 600с.: ил.

48