Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
20.06.2014
Размер:
66.79 Кб
Скачать

Информационное обеспечение систем управления

Лабораторная работа №5

Форма для управления таблицами, связанными отношением один-ко-многим.

Студенты: Янковский Д.В.

Вихристюк А.С.

Преподаватель: Григорченко Н.А.

2010

Лабораторная работа №5

Форма для управления таблицами, связанными отношением один-ко-многим.

Цель: Изучение приемов построения интерфейса пользователя для работы со связанными таблицами на примере таблиц заказов и детализации. Изучение приемов создания полей выбора и вычисляемых полей наборов данных. Изучение свойств и способов применения компонента DBNavigator.

Выполнение работы.

  1. Структура таблиц:

    1. Таблица “Zakazi” (Заказы)

Поле “Code_Zak_S” является индексным

    1. Таблица “Zakazchik” (Заказчик)

Поле “Name_Zak” является индексным

    1. Таблица “Det_Zak” (Детализация заказов)

Поля “Num_Zak” и “Code_Zak” являются индексным

    1. Таблица “Tovary” (Товыры)

Поле “Nazv_Izd” является индексным

Форма с заказами.

Исходные тексты программных модулей.

unit fz;

interface

uses

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

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

Buttons;

type

TFZak = class(TForm)

DBGrid1: TDBGrid;

DBGrid2: TDBGrid;

TZakZ: TTable;

TZakDZ: TTable;

DSZakZ: TDataSource;

DSZakDZ: TDataSource;

TZakZNum_Zak: TSmallintField;

TZakZDate_Zak: TDateField;

TZakZCode_Zak_S: TSmallintField;

TTovZ: TTable;

DSTovZ: TDataSource;

TZakNZ: TTable;

DSZakNZ: TDataSource;

TZakZNameZak: TStringField;

DBNavigator2: TDBNavigator;

BBClose: TBitBtn;

TZakDZFirst_key: TAutoIncField;

TZakDZNum_zak: TSmallintField;

TZakDZCode_Izd: TSmallintField;

TZakDZKol_zak: TSmallintField;

TZakDZField: TStringField;

TZakDZSumZ: TCurrencyField;

QZak: TQuery;

TZakDZPrice: TCurrencyField;

TZakZSum: TCurrencyField;

Label1: TLabel;

Label2: TLabel;

Query1: TQuery;

Button1: TButton;

procedure FormActivate(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure TZakDZCalcFields(DataSet: TDataSet);

procedure TZakZCalcFields(DataSet: TDataSet);

procedure DBGrid2Enter(Sender: TObject);

procedure DBGrid1Enter(Sender: TObject);

procedure TZakZAfterInsert(DataSet: TDataSet);

procedure TZakZBeforeDelete(DataSet: TDataSet);

procedure TZakZBeforePost(DataSet: TDataSet);

procedure TZakDZBeforePost(DataSet: TDataSet);

procedure TZakDZBeforeDelete(DataSet: TDataSet);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FZak: TFZak;

implementation

uses fr;

{$R *.dfm}

procedure TFZak.FormActivate(Sender: TObject);

begin

TZakNZ.Active:=True;

TZakZ.Active:=true;

TTovZ.Active:=true;

TZakDZ.Active:=true;

TZakZ.IndexName := 'Code_Zakaz';

TZakDZ.IndexName := 'Ind_num';

TTovZ.IndexName := 'Nazv_Ind';

end;

procedure TFZak.FormClose(Sender: TObject; var Action: TCloseAction);

begin

TZakNZ.Active:=False;

TZakZ.Active:=False;

TTovZ.Active:=False;

TZakDZ.Active:=False;

end;

procedure TFZak.TZakDZCalcFields(DataSet: TDataSet);

begin

TZakNZ.Active:=True;

TZakZ.Active:=true;

TTovZ.Active:=true;

TZakDZ.Active:=true;

TZakDZ.FieldByName('SumZ').AsCurrency:=TZakDZ.FieldByName('Price').AsCurrency*TZakDZ.FieldByName('Kol_zak').AsInteger;

end;

procedure TFZak.TZakZCalcFields(DataSet: TDataSet);

begin

QZak.SQL.Clear;

QZak.SQL.Add('SELECT Num_Zak, SUM(tovary.price*Det_Zak.Kol_zak) as Sumz');

QZak.SQL.Add('FROM Tovary, Det_Zak, Zakazi');

QZak.SQL.Add('WHERE Tovary.Code_Izd=Det_Zak.Code_Izd and Zakazi.Num_Zak=Det_Zak.Num_zak GROUP BY Num_Zak');

QZak.Active:= true;

QZak.Locate('Num_Zak',TZakZ.FieldByName('Num_Zak').AsInteger,[]);

TZakZ.FieldByName('Sum').AsVariant := QZak.FieldByName('Sumz').AsVariant;

QZak.SQL.Clear;

QZak.Close;

end;

procedure TFZak.DBGrid2Enter(Sender: TObject);

begin

DBNavigator2.DataSource:=DSZakDZ;

end;

procedure TFZak.DBGrid1Enter(Sender: TObject);

begin

DBNavigator2.DataSource:=DSZakZ;

end;

procedure TFZak.TZakZAfterInsert(DataSet: TDataSet);

var max:integer;

begin

Query1.SQL.Add('SELECT MAX(Num_Zak) FROM Zakazi');

Query1.Active := true;

max := Query1.FieldByName('MAX OF Num_Zak').AsVariant;

TZakZ.FieldByName('Num_Zak').AsVariant := max + 1;

Query1.SQL.Clear;

Query1.Close;

end;

procedure TFZak.TZakZBeforeDelete(DataSet: TDataSet);

var

k: integer;

begin

if TZakDZ.Locate('Num_Zak', TZakDZ.FieldByName('Num_Zak').AsInteger, []) then

Begin

ShowMessage('У данного заказчика имеются заказы!'+#13+'Продолжение невозможно...');

abort;

End

else

begin

if MessageDlg('Вы действительно хотите удалить эту запись?' , mtInformation, mbOKCancel, 1) = 1 then Begin

TZakZ.Delete;

abort;

End

else

abort;

end;

end;

procedure TFZak.TZakZBeforePost(DataSet: TDataSet);

begin

if MessageDlg('Вы действительно хотите изменить эту запись?', mtInformation, mbOKCancel, 1)<>1 then

begin

TZakZ.Cancel;

TZakZ.Last;

TZakZ.Next;

abort;

end;

end;

procedure TFZak.TZakDZBeforePost(DataSet: TDataSet);

begin

if MessageDlg('Вы действительно хотите изменить эту запись?', mtInformation, mbOKCancel, 1)<>1 then

begin

TZakDZ.Cancel;

TZakDZ.Last;

TZakDZ.Next;

abort;

end;

end;

procedure TFZak.TZakDZBeforeDelete(DataSet: TDataSet);

begin

if MessageDlg('Вы действительно хотите удалить данную запись?', mtInformation, mbOKCancel, 1)= 1 then

TZakDZ.Delete

else

abort;

end;

procedure TFZak.Button1Click(Sender: TObject);

begin

ShowMessage('Under construction');

end;

end.

Соседние файлы в папке Лабораторные работы №1-6 - КИ МГОУ