Смекни!
smekni.com

Создание базы данных для организации (стр. 5 из 6)

При редактировании таблицы Фильмы пользователю нужно учитывать, что невозможно удалить данные о фильме, если его количество на складе больше 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 ****/

/******************************************************************************/