Основные методы компоненты 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;