При редактировании таблицы Фильмы пользователю нужно учитывать, что невозможно удалить данные о фильме, если его количество на складе больше 0.
При выборе пункта меню «Счёт» или соответствующей вкладки главной формы пользователь может работать со счетами клиентов. При появлении окна «Новое..» -> «Счёт» пользователь должен ввести штрих код фильма и выбрать фамилию клиента, остальные поля заполняются автоматически (поля - стоимость и дата и возврат). Дата выставляется текущая, а поле стоимость изначально берется из таблицы MOVIE а потом высчитывается с учетом скидок клиенту, возврату автоматически присваивается “N”.
Когда клиент возвращает фильм, то следует поставить в этом поле “Y” в ручную или через сканер. При этом количество фильмов в базе увеличивается на 1.
На вкладке Счета также есть кнопки «Режим master detail» и «Cведенная таблица». При нажатии на кнопку «Сведенная таблица». Появляется окно с этой таблицей, которая является аналогом таблицы «Счета». Такая таблица может только отображать данные, редактировать их невозможно. Удобство её заключено в том, что листаться она будет заметно быстрее. Листание полного экрана таблицы состоящей из тысячи записей происходит в доли секунды, в то время как таблица «Счета» листается с заметными задержками.
Кнопкой «Режим master detail» можно вызвать окно, где пользователь может одновременно просматривать и редактировать данные о клиенте и его счетах.
Выбрав меню «Поиск» можно задействовать поиск по таблицам. Поиск по строковому полю позволяет искать по части слова и показывает все формы этого слова.
Последняя вкладка «SQL» (Рис. 5) позволяет продвинутым пользователям выполнять различные действия с базой данных, такие как поиск, выборка данный и т.д. Менеджеру будет удобнее просматривать отчёты используя привычный Excel. Для удобства менеджера в Excel есть отчёты по заказам за период, отчёт по персоналу, поиск лучшего клиента месяца и т.д. При этом не требуется устанавливать на машину клиентское приложение.
Список литературы
1. Фаронов В.В. Delphi 5. Руководство программиста. Нолидж. 2001.
2. Фаронов ВВ. Delphi 2005 Разработка приложений для баз данных и интернета. — СПб: Питер, 2006.
3. Хансен Г., Хансен Д. Базы данных. Разработка и управление. — М., Бином. 2000.
Unit2:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, IBCustomDataSet, Grids, DBGrids, StdCtrls, ExtCtrls, DBCtrls,
ComCtrls, IBTable, XPMan, Menus, IBQuery;
type
TForm2 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Button1: TButton;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
DBNavigator1: TDBNavigator;
DBGrid2: TDBGrid;
DataSource2: TDataSource;
Button2: TButton;
DBNavigator2: TDBNavigator;
DBGrid3: TDBGrid;
Panel1: TPanel;
DataSource3: TDataSource;
Button3: TButton;
TabSheet4: TTabSheet;
XPManifest1: TXPManifest;
Button4: TButton;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N3: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
About1: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
DBGrid4: TDBGrid;
Edit1: TEdit;
IBQuery1: TIBQuery;
DataSource4: TDataSource;
procedure Button4Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit3, Unit1, Unit4, Unit5, Unit6;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Show;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
try
DataSource1.DataSet.Delete;
except
ShowMessage('Нельзя удалить данные о клиенте если в таблице База есть связанные записи!');
end;
end;
procedure TForm2.Button3Click(Sender: TObject);
begin
Form4.Show;
end;
procedure TForm2.N3Click(Sender: TObject);
begin
Form2.Close;
end;
procedure TForm2.N4Click(Sender: TObject);
begin
Form5.Show;
Form5.Button1.Enabled:=true;
Form5.Panel2.Visible:=false;
Form5.Button3.Enabled:=false;
Form5.Button4.Enabled:=false;
end;
procedure TForm2.N6Click(Sender: TObject);
begin
Form6.Show;
end;
procedure TForm2.N12Click(Sender: TObject);
begin
Form5.Show;
Form5.Button1.Enabled:=false;
DataSource1.DataSet.Cancel;
DataSource1.DataSet.First;
Form5.Panel2.Visible:=true;
Form5.Button3.Enabled:=true;
Form5.Button4.Enabled:=true;
end;
procedure TForm2.Button4Click(Sender: TObject);
begin
if Edit1.Text <>'' then
begin
IbQuery1.SQL.Text:=Edit1.Text;
Form2.DataSource4.DataSet.Active:=true;
end
else ShowMessage('Пустой запрос!');
end;
end.
Unit4:
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, Grids, DBGrids, IBCustomDataSet;
type
TForm4 = class(TForm)
IBDataSet1: TIBDataSet;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
DataSource1: TDataSource;
DataSource2: TDataSource;
CheckBox1: TCheckBox;
procedure CheckBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
uses Unit2, Unit3;
{$R *.dfm}
procedure TForm4.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.State = cbchecked then
begin
DataModule3.IBDataSet1.Active:=False;
Form4.IBDataSet1.SelectSQL.SetText('SELECT * FROM DEAL WHERE CL_ID =:ID_C');
Form4.IBDataSet1.Open;
DataModule3.IBDataSet1.Open;
end else
begin
Form4.IBDataSet1.Close;
DataModule3.IBDataSet1.Close;
Form4.IBDataSet1.SelectSQL.SetText('SELECT * FROM DEAL');
Form4.IBDataSet1.Active:=True;
DataModule3.IBDataSet1.Active:=True;
end;
end;
end.
Unit5:
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, DBCtrls, Mask, DB, IBCustomDataSet;
type
TForm5 = class(TForm)
DBEdit1: TDBEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
DBMemo1: TDBMemo;
DataSource1: TDataSource;
Panel2: TPanel;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure Button6Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
uses Unit2, Unit4, Unit1, Unit3;
{$R *.dfm}
procedure TForm5.Button1Click(Sender: TObject);
var name,p:string;
begin
name:=DbEdit1.Text;
p:= DbMemo1.Text;
try
DataSource1.DataSet.FieldByName('FIO').AsString:=name;
DataSource1.DataSet.FieldByName('PASPORT').AsString:=p;
DataSource1.DataSet.Post;
DataSource1.DataSet.Append;
except
ShowMessage('Поле ФИО обязательно для заполнения');
end;
end;
procedure TForm5.Button2Click(Sender: TObject);
begin
DbEdit1.Clear;
DbMemo1.Clear;
end;
procedure TForm5.Button3Click(Sender: TObject);
begin
try
Form2.DataSource1.DataSet.Delete;
except
ShowMessage('Нельзя удалить данные о клиенте если в таблице База есть связанные записи!');
end;
end;
procedure TForm5.FormShow(Sender: TObject);
begin
DataSource1.DataSet.Append;
end;
procedure TForm5.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DataSource1.DataSet.Cancel;
end;
procedure TForm5.Button4Click(Sender: TObject);
begin
Form2.DataSource1.DataSet.Post;
end;
procedure TForm5.Button5Click(Sender: TObject);
begin
Form2.DataSource1.DataSet.Prior;
end;
procedure TForm5.Button6Click(Sender: TObject);
begin
Form2.DataSource1.DataSet.Next;
end;
end.
Unit6:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBCtrls, StdCtrls, IBCustomDataSet, IBQuery, Mask;
type
TForm6 = class(TForm)
DBLookupComboBox1: TDBLookupComboBox;
DataSource1: TDataSource;
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
IBQuery1: TIBQuery;
DataSource2: TDataSource;
DBEdit1: TDBEdit;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form6: TForm6;
s:string;
implementation
uses Unit3;
{$R *.dfm}
procedure TForm6.FormShow(Sender: TObject);
begin
DataSource1.DataSet.Append;
end;
procedure TForm6.Button1Click(Sender: TObject);
var s: string;
begin
Form6.IBQuery1.Active:=false;
s:='select MONEY from movie where movie.id = '+ Edit1.Text;
Form6.IBQuery1.SQL.text:=s;
Form6.IBQuery1.Active:=true;
Form6.DBEdit1.DataField:='MONEY';
DataSource1.DataSet.FieldByName('DEN').AsString:=Form6.DBEdit1.Text;
DataSource1.DataSet.FieldByName('ID_M').AsString:=Edit1.Text;
DataSource1.DataSet.Post;
DataSource1.DataSet.Append;
end;
procedure TForm6.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DataSource1.DataSet.Cancel;
end;
end.
Unit7:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm7 = class(TForm)
ComboBox1: TComboBox;
Button1: TButton;
Edit1: TEdit;
ComboBox2: TComboBox;
procedure ComboBox2Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form7: TForm7;
tb,k:string;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm7.ComboBox1Change(Sender: TObject);
begin
if Combobox1.Items.Strings[Combobox1.ItemIndex]='Фильмы' then
begin
tb:='MOVIE';
Combobox2.Items.Clear;
Combobox2.Items.Add('ID');
Combobox2.Items.Add('NAME_FILM');
Combobox2.Items.Add('DIRECTOR');
Combobox2.Items.Add('KOL');
Combobox2.Items.Add('MONEY');
Combobox2.Items.Add('GANR');
Combobox2.Items.Add('DESCRIPTION');
end else
begin
tb:='CLIENT';
Combobox2.Items.Clear;
Combobox2.Items.Add('ID_C');
Combobox2.Items.Add('FIO');
Combobox2.Items.Add('PASPORT');
end;
if Combobox1.Items.Strings[Combobox1.ItemIndex]='Счета' then
begin
tb:='DEAL';
Combobox2.Items.Clear;
Combobox2.Items.Add('ID_D'); Combobox2.Items.Add('ID_M');
Combobox2.Items.Add('CL_ID'); Combobox2.Items.Add('DEN');
Combobox2.Items.Add('D_D');
end;
end;
procedure TForm7.Button1Click(Sender: TObject);
var
zapros: string;
begin
if (k = 'ID_C') or (k = 'ID') or (k = 'ID_D') or(k='KOL') or (k='MONEY') or(k='ID_M') or (k='CL_ID')
then
zapros:='SELECT * from '+tb+' where '+k+'='+Edit1.Text
else
zapros:='SELECT * from '+tb+' where '+k+' LIKE '+'''%'+Edit1.Text+'%''';
Form2.IBQuery1.SQL.Text:=zapros;
Form2.DataSource4.DataSet.Active:=true;
Form7.Close;
Form2.PageControl1.ActivePage:= Form2.PageControl1.Pages[4];
Form2.FocusControl(Form2.PageControl1);
end;
procedure TForm7.ComboBox2Change(Sender: TObject);
begin
k:=Combobox2.Items.Strings[Combobox2.ItemIndex];
end;
end.
Скрипты:
DOMAINS:
CREATE DOMAIN D_GANR AS
VARCHAR(10) CHARACTER SET NONE
NOT NULL
CHECK (VALUE IN ('comedy', 'action', 'melodramm', 'fantasy', 'horror'))
COLLATE NONE
Tables:
CLIENT:
/******************************************************************************/
/**** Tables ****/
/******************************************************************************/