Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание БД в Paradox.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
421 Кб
Скачать
☆
      1. Форма Список матчей

Активизируйте форму Список матчей. Поместите на нее компонент DBGrid и выполните аналогичные действия п.4.5.1 для таблицы Match.

По таблице можно перемещаться программно, без использования компоненты DBNavigator. Для этого внесем изменения в этот компонент, становим свойства, которые позволят использовать для навигации по таблице Match только четыре кнопки First, Prior, Next, Last (см. таблицу 12). Установите эти свойства в соответствии с рисунком 12.

Рис.12

Добавьте на форму компоненты Button (Изменить, Добавить, Удалить, Подтвердить, Отменить), Label для вывода состояния записи (Просмотр, Удаление, Редактирование, Вставка) и CheckBox для включения или выключения режима редактирования, как показано на рисунке 13. А так же разместите на форме компоненты меток и рядом с ними соответствующие компоненты для редактирования полей.

Рисунок 13

При заполнении полей Команда – хозяин, Команда – гость таблицы Список матчей, целесообразно значения этих полей выбирать из списка. Если для поля задана таблица выбора, то в него можно ввести только значение, содержащееся в таблице выбора. Это гарантирует, что в поле не будет введено недопустимое значение. Для этого воспользуемся компонентом DBLookupComboBox, с помощью которого можно выбирать нужную информацию из таблицы Team.

Выполните действия, приведенные в таблице 16.

Таблица 16

Выделенная компонента

Окно инспектора объектов

Имя свойства

Действие

Label1

Properties

Caption

Дата матча

DBEdit1 со страницы Data Control

Properties

DataSource

DataModule1.DS_Match

DataField

Dat_M

Label2

Properties

Caption

Команда - хозяин

DBLookupComboBox1

Properties

DataSource

DataModule1.Ds_Match

DataField

HOST_M

ListSource

DataModule1.DS_Team

KeyField

ID_T

ListField

NAME_T

Label3

Properties

Caption

Команда - гость

DBLookupComboBox2

Properties

DataSource

DataModule1.DS_Match

DataField

GUEST_M

ListSource

DataModule1.DS_Team

KeyField

ID_T

ListField

NAME_T

Для того чтобы программа, которую мы будем писать, легко читалась, введем обозначения созданных кнопок и меток. Для этого необходимо изменить свойство Name у соответствующих компонентов (см. таблицу 17).

Таблица 17

Компонента

Условное обозначение

Свойство Name

TButton

Изменить

BtnEdit

TButton

Добавить

BtnInsert

TButton

Удалить

BtnDelete

TButton

Подтвердить

BtnChangeOK

TButton

Отменить

BtnChangeCancel

TButton

Закрыть

BtnClose

TLabel

Состояние записи

LblChangeKind

TDBEdit

Дата матча

DbeDat

TDBLookupComboBox

Команда - хозяин

DBLHost

TDBLookupComboBox

Команда - гость

DBLGuest

TDBGrid

Таблица

DBGridMatch

TCheckBox

Режим редактирования

cbCanEdit

В окне редактора форм перейдите в форму UnitMatch.

1. В разделе Use должны быть включены следующие стандартные модули:

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

DB, DBTables, Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls, Mask;

2. А в разделе описания переменных перед implementation должна быть запись:

var

FormSpisok: TFormSpisok;

3. После записи {$R *.dfm} вставим две вспомогательные процедуры:

procedure TFormMatch.StateChange(Sender: TObject);

begin

btnEdit.Enabled:=false;

btnInsert.Enabled:=false;

btnDelete.Enabled:=false;

btnChangeOK.Enabled:=true;

btnChangeCancel.Enabled:=true;

end;

procedure TFormMatch.StateBrowse(Sender: TObject);

begin

cbCanEditClick(Sender);

btnChangeCancel.Enabled:=false;

btnChangeOK.Enabled:=False;

end;

4. Перед разделом private { Private declarations }в раздел описания Type вставим две строки:

procedure StateChange(Sender: TObject);

procedure StateBrowse(Sender: TObject);

5. Для каждой кнопки напишите соответствующую процедуру.

BtnEdit – Изменить – OnClick

DataModule1.DS_Match.Dataset.Edit;

lblChangeKind.Font.Color:=clTeal;

lblChangeKind.Caption:='РЕДАКТИРОВАНИЕ ЗАПИСИ';

StateChange(Sender);

if DbeDat.CanFocus then DbeDat.SetFocus;

BtnInsert – Добавить – OnClick

Var Nomer : Integer;

. . .

// Подтверждение в режим вставки

If MessageDlg('Добавить запись?',

mtConfirmation, [mbYes, mbNo], 0) <> mrYes then Exit;

DataModule1.DS_Match.Dataset.Last;

Nomer:=DataModule1.DS_Match.Dataset.FieldByName('ID_M').AsInteger;

DataModule1.DS_Match.Dataset.Append;

// Номер матча формируется автоматически, путем увеличения номера в последней записи

DataModule1.DS_Match.Dataset.FieldByName('ID_M').AsInteger:=Nomer+1;

lblChangeKind.Font.Color:=clGreen;

lblChangeKind.Caption:='ВСТАВКА ЗАПИСИ';

StateChange(Sender);

if DbeDat.CanFocus then DbeDat.SetFocus;

BtnDelete – Удалить – OnClick

// Запрос на подтверждение перехода в режим просмотра удаляемой записи

If MessageDlg('Удалить запись?',

mtConfirmation, [mbYes, mbNo], 0) <> mrYes then Exit;

lblChangeKind.Font.Color:=clRed;

lblChangeKind.Caption:='УДАЛЕНИЕ ЗАПИСИ';

StateChange(Sender);

if btnChangeCancel.CanFocus then btnChangeCancel.SetFocus;

BtnChangeOK – Подтвердить – OnClick

// Утверждение изменений в текущей записи (редактируемой или новой)

// или удаления текущей записи (просматриваемой)

If DataModule1.TableMatch.State in [dsEdit, dsInsert]

then

begin

// Проверка заполнения полей

If dbeDat.Text='' then

begin

Beep;

MessageDlg('Не задана дата матча', mtError, [mbOK], 0);

if DbeDat.CanFocus then DbeDat.SetFocus;

Abort;

end;

If DBLHost.Text='' then

begin

Beep;

MessageDlg('Не задана команда - хозяин', mtError, [mbOK], 0);

if DBLHost.CanFocus then DBLHost.SetFocus;

Abort;

end;

If DBLGuest.Text='' then

begin

Beep;

MessageDlg('Не задана команда - гость', mtError, [mbOK], 0);

if DBLGuest.CanFocus then DBLGuest.SetFocus;

Abort;

end;

DataModule1.TableMatch.Post

end

else if lblChangeKind.Caption='УДАЛЕНИЕ ЗАПИСИ'

then DataModule1.TableMatch.Delete;

StateBrowse(Sender);

BtnChangeCancel – Отменить – OnClick

// Если набор данных находился в режиме просмотра (при удалении записи),

// то никаких действий метод Cancel не выполняет

DataModule1.TableMatch.Cancel

StateBrowse(Sender);

BtnClose – Закрыть – OnClick

Close;

cbCanEdit – OnClick

var bm1: TBookmark;

. . .

// Запоминание положения текущей записи

bm1:=DataModule1.Ds_Match.Dataset.GetBookmark;

// Отключение отображения изменений данных в визуальных компонентах

DataModule1.Ds_Match.Dataset.DisableControls;

If not cbCanEdit.Checked then begin

DataModule1.TableMatch.Active:=false;

DataModule1.TableMatch.ReadOnly:=true;

DataModule1.TableMatch.Active:=true;

// Блокировка элементов, связанных с переходом

// в режиме изменения записей

btnEdit.Enabled:=false;

btnInsert.Enabled:=false;

btnDelete.Enabled:=false;

btnChangeCancel.Enabled:=false;

btnChangeOK.Enabled:=false;

lblChangeKind.Font.Color:=clBlue;

lblChangeKind.Caption:='ПРОСМОТР ЗАПИСИ';

DBEDat.Enabled:=false;

DBLHost.Enabled:=false;

DBLGuest.Enabled:=false;

end

else begin

DataModule1.TableMatch.Active:=false;

DataModule1.TableMatch.ReadOnly:=false;

DataModule1.TableMatch.Active:=true;

// Разблокирование элементов, связанных с переходом

// в режиме изменения записей

btnEdit.Enabled:=true;

btnInsert.Enabled:=true;

btnChangeCancel.Enabled:=true;

btnChangeOK.Enabled:=true;

DBEDat.Enabled:=true;

DBLHost.Enabled:=true;

DBLGuest.Enabled:=true;

// Если набор данных пуст, то удаление записей запрещено

If DataModule1.Ds_Match.Dataset.RecordCount>0

then btnDelete.Enabled:=true

else btnDelete.Enabled:=false;

end;

// Возврат в текущую запись

If DataModule1.Ds_Match.Dataset.BookmarkValid(bm1)

then DataModule1.Ds_Match.Dataset.GotoBookmark(bm1);

If DataModule1.Ds_Match.Dataset.BookmarkValid(bm1)

then DataModule1.Ds_Match.Dataset.FreeBookmark(bm1);

// Включение отображения изменений данных в визуальных компонентах

DataModule1.Ds_Match.Dataset.EnableControls;

FormMatch – OnCreate

// Первоначально изменение записей запрещено

cbCanEdit.Checked:=false;

// Запрет автоматического перехода в режим редактирования

DataModule1.DS_Match.AutoEdit:=false;

DBGridMatch.Columns[0].ReadOnly:=True;

FormMatch – OnShow

// Исходное состояние управляющих элементов

StateBrowse(Sender);