
- •Содержание
- •Введение
- •1 Формализация задачи
- •1.1 Словесное описание предметной области
- •1.2 Описание иерархии функций
- •1.3 Выбор субд
- •2 Проектирование и создание бд
- •2.1 Информационная модель предметной области
- •2.1.2 Перекрестная проверка модели данных и модели функций
- •2.1.3 Документирование er – диаграммы
- •2.2 Логическая модель бд
- •2.2.2 Схема базы данных приведённая к третьей нормальной форме.
- •2.2.3 Графическое представление связей между таблицами
- •2.3 Физическая модель бд
- •2.3.1 Техническое описание таблиц
- •2.3.2 Тексты sql-скриптов для создания объектов бд
- •3 Описание приложения
- •3.1 Описание технологии обработки данных
- •3.2 Описание программ
- •Заключение
- •Список использованной литературы
- •Приложение а (обязательное) Исходные тексты программ
- •Приложение б (справочное) Экранные формы
Список использованной литературы
Волкова, Т.В. Проектирование и создание БД / Т.В. Волкова. М–во образования и науки РФ, Гос. образоват. учреждение высш. проф. образования "ОГУ". – Оренбург: ГОУ ОГУ. – 2006. – 140 с.
Кириллов В.В. Структурированный язык запросов (SQL). – СПб.: ИТМО, 2005. – 80 с.
Бойко В.В., Савинков В.М. Проектирование баз данных информационных систем. – М.: Финансы и статистика, 2000. – 351 с.
А. Ковязин, С.Востриков. Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/Firebird/Yaffil. Изд. КУДИЦ-Образ, Санкт-Питербург. 2005. – 496 с.
Delphi 7. Основы программирования. Решение типовых задач. Самоучитель: Л. М. Климова — Москва, КУДИЦ-Образ, 2006 г.- 480 с.
Приложение а (обязательное) Исходные тексты программ
Файл главной формы – Меню программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, DB, IBDatabase, IBCustomDataSet, IBTable, jpeg, ExtCtrls,
StdCtrls;
type
TForm1 = class(TForm)
mm1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
ibtrnsctn1: TIBTransaction;
ibdtbs1: TIBDatabase;
DataSource1: TDataSource;
IBTable1: TIBTable;
IBTable2: TIBTable;
IBTable3: TIBTable;
IBTable4: TIBTable;
IBTable5: TIBTable;
IBTable6: TIBTable;
IBTable7: TIBTable;
DataSource2: TDataSource;
DataSource3: TDataSource;
DataSource4: TDataSource;
DataSource5: TDataSource;
DataSource6: TDataSource;
DataSource7: TDataSource;
DataSource8: TDataSource;
ibtbl1: TIBTable;
ds1: TDataSource;
Image1: TImage;
edt1: TEdit;
btn1: TButton;
lbl1: TLabel;
N9: TMenuItem;
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure Image1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit3, Unit4, Unit5;
{$R *.dfm}
procedure TForm1.N5Click(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm1.N6Click(Sender: TObject);
begin
Form3.Show;
Form3.PageControl1.ActivePageIndex:=0 ;
end;
procedure TForm1.N7Click(Sender: TObject);
begin
Form3.Show;
Form3.PageControl1.ActivePageIndex:=1 ;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
Form3.Show;
Form3.PageControl1.ActivePageIndex:=2 ;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
form4.show;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
try
ibdtbs1.DatabaseName:=edt1.Text;
ibdtbs1.Connected:=True;
IBTable1.Active:=True;
IBTable2.Active:=True;
IBTable3.Active:=True;
IBTable4.Active:=True;
ibtbl1.Active:=True;
except
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
edt1.Text:=ibdtbs1.DatabaseName;
end;
procedure TForm1.N9Click(Sender: TObject);
begin
form5.show;
end;
procedure TForm1.Image1Click(Sender: TObject);
begin
end;
end.
Файл демонстрации таблиц, в частности форм 1:М
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids, DBGrids, DBCtrls, DB, IBDatabase,
IBCustomDataSet, IBTable, ComCtrls, IBQuery, Mask, jpeg;
type
TForm3 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
DBNavigator1: TDBNavigator;
DBGrid1: TDBGrid;
RadioGroup1: TRadioGroup;
TabSheet2: TTabSheet;
DBGrid2: TDBGrid;
dblkcbbKOD_PP: TDBLookupComboBox;
dblkcbbKOD_KLU: TDBLookupComboBox;
dblkcbbKOD_KLU1: TDBLookupComboBox;
RadioGroup2: TRadioGroup;
TabSheet4: TTabSheet;
IBQuery1: TIBQuery;
DBGrid4: TDBGrid;
DataSource1: TDataSource;
Button1: TButton;
Button2: TButton;
dblkcbbKOD_PROV: TDBLookupComboBox;
btn1: TButton;
edt1: TEdit;
edt2: TEdit;
edt3: TEdit;
edt4: TEdit;
lbl1: TLabel;
lbl2: TLabel;
lbl3: TLabel;
lbl4: TLabel;
lbl5: TLabel;
ibqry1: TIBQuery;
ds1: TDataSource;
btn2: TButton;
btn3: TButton;
btn4: TButton;
lbl6: TLabel;
lbl7: TLabel;
lbl8: TLabel;
edt5: TEdit;
lbl9: TLabel;
edt6: TEdit;
lbl10: TLabel;
edt7: TEdit;
lbl11: TLabel;
edt8: TEdit;
lbl12: TLabel;
edt9: TEdit;
lbl13: TLabel;
lbl14: TLabel;
edt10: TEdit;
edt11: TEdit;
lbl15: TLabel;
edt12: TEdit;
dbgrd1: TDBGrid;
img1: TImage;
img2: TImage;
procedure RadioGroup1Click(Sender: TObject);
procedure RadioGroup2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure pusk1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure dblkcbbKOD_PROVClick(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure DBGrid4CellClick(Column: TColumn);
procedure dblkcbbKOD_PPClick(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
procedure DBGrid2CellClick(Column: TColumn);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses
Unit1, Unit2, Unit4, DateUtils;
{$R *.dfm}
function stoim(date:TDateTime):Real;
var st,st26,st20:Real;t,hour:Word;
begin
Form3.ibqry1.SQL.Clear;
Form3.ibqry1.SQL.add('select "STOIM","LGSTOIM_20_2","LGSTOIM_2_6" from "PRESKUR" where "DAT"=(SELECT MAX("DAT") FROM "PRESKUR" where "KOD_PROV"=:kod and "DAT"<:dat)');
Form3.ibqry1.ParamByName('kod').AsInteger:=Form3.dblkcbbKOD_PP.KeyValue;
Form3.ibqry1.ParamByName('dat').AsDate:=date;
Form3.ibqry1.Open;
st:=Form3.ibqry1.FieldByName('STOIM').AsFloat;
st26:=Form3.ibqry1.FieldByName('LGSTOIM_2_6').AsFloat;
st20:=Form3.ibqry1.FieldByName('LGSTOIM_20_2').AsFloat;
DecodeDateTime(date,t,t,t,hour,t,t,t);
case hour of
0..1:stoim:=st20;
2..5:stoim:=st26;
6..19:stoim:=st;
20..23:stoim:=st20;
end;
end;
function rasch(date1,date2:TDateTime):Real;
var date:TDateTime;st:real; y,mo,d,h,m,t:Word;
begin
st:=0;
DecodeDateTime(date2,y,mo,d,h,m,t,t);
st:=st+stoim(date2)*m;
date2:=EncodeDateTime(y,mo,d,h,0,t,t);
DecodeDateTime(date1,y,mo,d,h,m,t,t);
if m>0 then
begin
st:=st+stoim(date1)*(60-m);
date1:=EncodeDateTime(y,mo,d,h,0,t,t);
date1:= date1+ 1 / 24;
end;
date:=date1+1 / 1442;
while (date<=date2) do
begin
st:=st+stoim(date)*60;
date:= date+ 1 / 24;
end;
rasch:=st;
end;
procedure TForm3.RadioGroup1Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex Of
0: begin
DBGrid1.Visible:=True;
dbgrd1.Visible:=False;
DBNavigator1.DataSource:=Form1.DataSource2;
end;
1:begin
DBGrid1.Visible:=False;
dbgrd1.Visible:=True;
DBNavigator1.DataSource:=Form1.DataSource3;
end;
end;
end;
procedure TForm3.RadioGroup2Click(Sender: TObject);
begin
case RadioGroup2.ItemIndex of
0: begin
dblkcbbKOD_KLU.Enabled:=True;
lbl7.Enabled:=True;
dblkcbbKOD_KLU1.Enabled:=False;
lbl8.Enabled:=False;
dblkcbbKOD_KLU.KeyValue:=1;
end;
1:begin
dblkcbbKOD_KLU.Enabled:=False;
lbl7.Enabled:=False;
dblkcbbKOD_KLU1.Enabled:=True;
lbl8.Enabled:=True;
dblkcbbKOD_KLU1.KeyValue:=1;
end;
end;
ibqry1.sql.Clear;
if RadioGroup2.ItemIndex=0 then
begin
ibqry1.SQL.Add('select SEANC.MAC_ADR AS "MAC-адрес",SEANC.IP_ADR AS "IP-адрес",SEANC.DATA AS "Дата начала",SEANC.DATA_KON AS "Дата конца",');
ibqry1.SQL.Add('SEANC.VR_NACH AS "Время начала",SEANC.VR_KON AS "Время конца",');
ibqry1.SQL.Add('SEANC.STOIM AS "Стоимость",SEANC.KOD AS "Код записи" from SEANC where "KOD_PP"=:prov and "KOD_KLF"=:fiz');
end
else
begin
ibqry1.SQL.Add('select SEANC.MAC_ADR AS "MAC-адрес",SEANC.IP_ADR AS "IP-адрес",SEANC.DATA AS "Дата начала",SEANC.DATA_KON AS "Дата конца",');
ibqry1.SQL.Add('SEANC.VR_NACH AS "Время начала",SEANC.VR_KON AS "Время конца",');
ibqry1.SQL.Add('SEANC.STOIM AS "Стоимость",SEANC.KOD AS "Код записи" from SEANC where "KOD_PP"=:prov and "KOD_KLU"=:ur');
end;
ibqry1.ParamByName('prov').Value:=dblkcbbKOD_PP.KeyValue;
if RadioGroup2.ItemIndex=0 then
ibqry1.ParamByName('fiz').Value:=dblkcbbKOD_KLU.KeyValue
else
ibqry1.ParamByName('ur').Value:=dblkcbbKOD_KLU1.KeyValue;
ibqry1.Open;
edt5.Text:='';
edt6.Text:='';
edt7.Text:='';
edt10.Text:='';
edt8.Text:='';
edt9.Text:='';
edt11.Text:='';
edt12.Text:='';
end;
procedure TForm3.Button1Click(Sender: TObject);
begin
try
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('insert into "PRESKUR"("DAT","KOD_PROV","LGSTOIM_2_6","LGSTOIM_20_2","STOIM") values(:dat,:prov,:l26,:l20,:st)');
IBQuery1.ParamByName('dat').AsDate:=StrToDate(edt1.Text);
IBQuery1.ParamByName('prov').AsInteger:=dblkcbbKOD_PROV.KeyValue;
IBQuery1.ParamByName('l26').AsFloat:=StrToFloat(edt2.Text);
IBQuery1.ParamByName('l20').AsFloat:=StrToFloat(edt3.Text);
IBQuery1.ParamByName('st').AsFloat:=StrToFloat(edt4.Text);
IBQuery1.ExecSQL;
Finally
End;
IBQuery1.sql.Clear;
IBQuery1.SQL.Add('select PRESKUR.DAT AS "Дата",LGSTOIM_2_6 AS "Цена с 2 до 6",LGSTOIM_20_2 AS "Цена с 20 до 2",STOIM AS "Цена с 6 до 20" from PRESKUR where "KOD_PROV"=:h');
IBQuery1.ParamByName('h').Value:=dblkcbbKOD_PROV.KeyValue;
IBQuery1.Open;
edt1.Text:='';
edt2.Text:='';
edt3.Text:='';
edt4.Text:='';
end;
procedure TForm3.pusk1Click(Sender: TObject);
begin
IBQuery1.sql.Clear;
IBQuery1.SQL.Add('commit');
IBQuery1.Open;
end;
procedure TForm3.Button3Click(Sender: TObject);
begin
Form1.IBTable3.Cancel;
IBQuery1.Close;
IBQuery1.Open;
end;
procedure TForm3.dblkcbbKOD_PROVClick(Sender: TObject);
begin
IBQuery1.sql.Clear;
IBQuery1.SQL.Add('select PRESKUR.DAT AS "Дата",LGSTOIM_2_6 AS "Цена с 2 до 6",LGSTOIM_20_2 AS "Цена с 20 до 2",STOIM AS "Цена с 6 до 20" from PRESKUR where "KOD_PROV"=:h');
IBQuery1.ParamByName('h').Value:=dblkcbbKOD_PROV.KeyValue;
IBQuery1.Open;
edt1.Text:=IBQuery1.Fieldbyname('Дата').Asstring;
edt2.Text:=IBQuery1.Fieldbyname('Цена с 2 до 6').Asstring;
edt3.Text:=IBQuery1.Fieldbyname('Цена с 20 до 2').Asstring;
edt4.Text:=IBQuery1.Fieldbyname('Цена с 6 до 20').Asstring;
end;
procedure TForm3.btn1Click(Sender: TObject);
begin
try
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('update PRESKUR set LGSTOIM_2_6=:l26,LGSTOIM_20_2=:l20,STOIM=:st where KOD_PROV=:kod and DAT=:dat');
IBQuery1.ParamByName('dat').AsDate:=StrToDate(edt1.Text);
IBQuery1.ParamByName('kod').AsInteger:=dblkcbbKOD_PROV.KeyValue;
IBQuery1.ParamByName('l26').AsFloat:=StrToFloat(edt2.Text);
IBQuery1.ParamByName('l20').AsFloat:=StrToFloat(edt3.Text);
IBQuery1.ParamByName('st').AsFloat:=StrToFloat(edt4.Text);
IBQuery1.ExecSQL;
Finally
End;
IBQuery1.sql.Clear;
IBQuery1.SQL.Add('select PRESKUR.DAT AS "Дата",LGSTOIM_2_6 AS "Цена с 2 до 6",LGSTOIM_20_2 AS "Цена с 20 до 2",STOIM AS "Цена с 6 до 20" from PRESKUR where "KOD_PROV"=:h');
IBQuery1.ParamByName('h').Value:=dblkcbbKOD_PROV.KeyValue;
IBQuery1.Open;
edt1.Text:='';
edt2.Text:='';
edt3.Text:='';
edt4.Text:='';
end;
procedure TForm3.Button2Click(Sender: TObject);
begin
try
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('delete from PRESKUR where KOD_PROV=:kod and DAT=:dat;');
IBQuery1.ParamByName('kod').AsInteger:=dblkcbbKOD_PROV.KeyValue;
IBQuery1.ParamByName('dat').AsDate:=StrToDate(edt1.Text);
IBQuery1.ExecSQL;
Finally
End;
IBQuery1.sql.Clear;
IBQuery1.SQL.Add('select PRESKUR.DAT AS "Дата",LGSTOIM_2_6 AS "Цена с 2 до 6",LGSTOIM_20_2 AS "Цена с 20 до 2",STOIM AS "Цена с 6 до 20" from PRESKUR where "KOD_PROV"=:h');
IBQuery1.ParamByName('h').Value:=dblkcbbKOD_PROV.KeyValue;
IBQuery1.Open;
edt1.Text:='';
edt2.Text:='';
edt3.Text:='';
edt4.Text:='';
end;
procedure TForm3.DBGrid4CellClick(Column: TColumn);
begin
edt1.Text:=IBQuery1.Fieldbyname('Дата').Asstring;
edt2.Text:=IBQuery1.Fieldbyname('Цена с 2 до 6').Asstring;
edt3.Text:=IBQuery1.Fieldbyname('Цена с 20 до 2').Asstring;
edt4.Text:=IBQuery1.Fieldbyname('Цена с 6 до 20').Asstring;
end;
procedure TForm3.dblkcbbKOD_PPClick(Sender: TObject);
begin
ibqry1.sql.Clear;
if RadioGroup2.ItemIndex=0 then
begin
ibqry1.SQL.Add('select SEANC.MAC_ADR AS "MAC-адрес",SEANC.IP_ADR AS "IP-адрес",SEANC.DATA AS "Дата начала",SEANC.DATA_KON AS "Дата конца",');
ibqry1.SQL.Add('SEANC.VR_NACH AS "Время начала",SEANC.VR_KON AS "Время конца",');
ibqry1.SQL.Add('SEANC.STOIM AS "Стоимость",SEANC.KOD AS "Код записи" from SEANC where "KOD_PP"=:prov and "KOD_KLF"=:fiz');
end
else
begin
ibqry1.SQL.Add('select SEANC.MAC_ADR AS "MAC-адрес",SEANC.IP_ADR AS "IP-адрес",SEANC.DATA AS "Дата начала",SEANC.DATA_KON AS "Дата конца",');
ibqry1.SQL.Add('SEANC.VR_NACH AS "Время начала",SEANC.VR_KON AS "Время конца",');
ibqry1.SQL.Add('SEANC.STOIM AS "Стоимость",SEANC.KOD AS "Код записи" from SEANC where "KOD_PP"=:prov and "KOD_KLU"=:ur');
end;
ibqry1.ParamByName('prov').Value:=dblkcbbKOD_PP.KeyValue;
if RadioGroup2.ItemIndex=0 then
ibqry1.ParamByName('fiz').Value:=dblkcbbKOD_KLU.KeyValue
else
ibqry1.ParamByName('ur').Value:=dblkcbbKOD_KLU1.KeyValue;
ibqry1.Open;
edt5.Text:='';
edt6.Text:='';
edt7.Text:='';
edt10.Text:='';
edt8.Text:='';
edt9.Text:='';
edt11.Text:='';
edt12.Text:='';
end;
procedure TForm3.btn2Click(Sender: TObject);
var s:string;j:Double;
begin
Try
j:=rasch(StrToDateTime(edt7.Text+edt8.Text),StrToDateTime(edt10.Text+edt9.Text));
edt12.Text:=FloatToStr(j);
ibqry1.SQL.Clear;
ibqry1.SQL.Add('insert into "SEANC"("KOD","MAC_ADR","IP_ADR","DATA","DATA_KON","VR_NACH","VR_KON","STOIM","KOD_KLF","KOD_KLU","KOD_PP") values(GEN_ID(SEANCE,1),:mac,:ip,:dat,:datkon,:nach,:con,:st,:kodf,:kodu,:kpp)');
ibqry1.ParamByName('mac').AsString:=edt5.Text;
ibqry1.ParamByName('dat').AsDate:=StrToDate(edt7.Text);
ibqry1.ParamByName('ip').AsString:=edt6.Text;
ibqry1.ParamByName('datkon').AsString:=edt10.Text;
ibqry1.ParamByName('nach').AsString:=edt8.Text;
ibqry1.ParamByName('con').AsString:=edt9.Text;
ibqry1.ParamByName('st').AsFloat:=StrToFloat(edt12.Text);
if RadioGroup2.ItemIndex=0 then
ibqry1.ParamByName('kodf').AsInteger:=dblkcbbKOD_KLU.KeyValue
else
ibqry1.ParamByName('kodu').AsInteger:=dblkcbbKOD_KLU1.KeyValue;
ibqry1.ParamByName('kpp').AsInteger:=dblkcbbKOD_PP.KeyValue;
ibqry1.ExecSQL;
Finally
End;
ibqry1.sql.Clear;
if RadioGroup2.ItemIndex=0 then
begin
ibqry1.SQL.Add('select SEANC.MAC_ADR AS "MAC-адрес",SEANC.IP_ADR AS "IP-адрес",SEANC.DATA AS "Дата начала",SEANC.DATA_KON AS "Дата конца",SEANC.VR_NACH AS "Время начала",SEANC.VR_KON AS "Время конца",SEANC.STOIM AS "Стоимость",');
ibqry1.SQL.Add('SEANC.KOD AS "Код записи" from SEANC where "KOD_PP"=:prov and "KOD_KLF"=:fiz');
end
else
begin
ibqry1.SQL.Add('select SEANC.MAC_ADR AS "MAC-адрес",SEANC.IP_ADR AS "IP-адрес",SEANC.DATA AS "Дата начала",SEANC.DATA_KON AS "Дата конца",SEANC.VR_NACH AS "Время начала",SEANC.VR_KON AS "Время конца",SEANC.STOIM AS "Стоимость",');
ibqry1.SQL.Add('SEANC.KOD AS "Код записи" from SEANC where "KOD_PP"=:prov and "KOD_KLU"=:ur');
end;
ibqry1.ParamByName('prov').Value:=dblkcbbKOD_PP.KeyValue;
if RadioGroup2.ItemIndex=0 then
ibqry1.ParamByName('fiz').Value:=dblkcbbKOD_KLU.KeyValue
else
ibqry1.ParamByName('ur').Value:=dblkcbbKOD_KLU1.KeyValue;
ibqry1.Open;
edt5.Text:='';
edt6.Text:='';
edt7.Text:='';
edt10.Text:='';
edt8.Text:='';
edt9.Text:='';
edt11.Text:='';
edt12.Text:='';
end;
procedure TForm3.btn3Click(Sender: TObject);
begin
try
ibqry1.Close;
ibqry1.SQL.Clear;
ibqry1.SQL.Add('delete from "SEANC" where "KOD"=:kod');
ibqry1.ParamByName('kod').AsInteger:=StrToInt(edt11.Text);
ibqry1.ExecSQL;
Finally
End;
ibqry1.sql.Clear;
if RadioGroup2.ItemIndex=0 then
begin
ibqry1.SQL.Add('select SEANC.MAC_ADR AS "MAC-адрес",SEANC.IP_ADR AS "IP-адрес",SEANC.DATA AS "Дата начала",SEANC.DATA_KON AS "Дата конца",SEANC.VR_NACH AS "Время начала",SEANC.VR_KON AS "Время конца",SEANC.STOIM AS "Стоимость",');
ibqry1.SQL.Add('SEANC.KOD AS "Код записи" from SEANC where "KOD_PP"=:prov and "KOD_KLF"=:fiz');
end
else
begin
ibqry1.SQL.Add('select SEANC.MAC_ADR AS "MAC-адрес",SEANC.IP_ADR AS "IP-адрес",SEANC.DATA AS "Дата начала",SEANC.DATA_KON AS "Дата конца",SEANC.VR_NACH AS "Время начала",SEANC.VR_KON AS "Время конца",SEANC.STOIM AS "Стоимость",');
ibqry1.SQL.Add('SEANC.KOD AS "Код записи" from SEANC where "KOD_PP"=:prov and "KOD_KLU"=:ur');
end;
ibqry1.ParamByName('prov').Value:=dblkcbbKOD_PP.KeyValue;
if RadioGroup2.ItemIndex=0 then
ibqry1.ParamByName('fiz').Value:=dblkcbbKOD_KLU.KeyValue
else
ibqry1.ParamByName('ur').Value:=dblkcbbKOD_KLU1.KeyValue;
ibqry1.Open;
edt5.Text:='';
edt6.Text:='';
edt7.Text:='';
edt10.Text:='';
edt8.Text:='';
edt9.Text:='';
edt11.Text:='';
edt12.Text:='';
end;
procedure TForm3.btn4Click(Sender: TObject);
var j:Double;
begin
try
j:=rasch(StrToDateTime(edt7.Text+edt8.Text),StrToDateTime(edt10.Text+edt9.Text));
edt12.Text:=FloatToStr(j);
ibqry1.Close;
ibqry1.SQL.Clear;
ibqry1.SQL.Add('update "SEANC" set "MAC_ADR"=:mac,"IP_ADR"=:ip,"DATA"=:dat,"DATA_KON"=:datkon,"VR_NACH"=:nach,"VR_KON"=:con,"STOIM"=:stoi,"KOD_KLF"=:kodf,"KOD_KLU"=:kodu,"KOD_PP"=:kpp where "KOD"=:kod');
ibqry1.ParamByName('mac').AsString:=edt5.Text;
ibqry1.ParamByName('dat').AsDate:=StrToDate(edt7.Text);
ibqry1.ParamByName('ip').AsString:=edt6.Text;
ibqry1.ParamByName('datkon').AsString:=edt10.Text;
ibqry1.ParamByName('nach').AsString:=edt8.Text;
ibqry1.ParamByName('con').AsString:=edt9.Text;
ibqry1.ParamByName('stoi').AsFloat:=StrToFloat(edt12.Text);
if RadioGroup2.ItemIndex=0 then
ibqry1.ParamByName('kodf').AsInteger:=dblkcbbKOD_KLU.KeyValue
else
ibqry1.ParamByName('kodu').AsInteger:=dblkcbbKOD_KLU1.KeyValue;
ibqry1.ParamByName('kpp').AsInteger:=dblkcbbKOD_PP.KeyValue;
ibqry1.ParamByName('kod').AsInteger:=StrToInt(edt11.Text);
ibqry1.ExecSQL;
Finally
End;
ibqry1.sql.Clear;
if RadioGroup2.ItemIndex=0 then
begin
ibqry1.SQL.Add('select SEANC.MAC_ADR AS "MAC-адрес",SEANC.IP_ADR AS "IP-адрес",SEANC.DATA AS "Дата начала",SEANC.DATA_KON AS "Дата конца",SEANC.VR_NACH AS "Время начала",');
ibqry1.SQL.Add('SEANC.VR_KON AS "Время конца",SEANC.STOIM AS "Стоимость",SEANC.KOD AS "Код записи" from SEANC where "KOD_PP"=:prov and "KOD_KLF"=:fiz');
end
else
begin
ibqry1.SQL.Add('select SEANC.MAC_ADR AS "MAC-адрес",SEANC.IP_ADR AS "IP-адрес",SEANC.DATA AS "Дата начала",SEANC.DATA_KON AS "Дата конца",SEANC.VR_NACH AS "Время начала",');
ibqry1.SQL.Add('SEANC.VR_KON AS "Время конца",SEANC.STOIM AS "Стоимость",SEANC.KOD AS "Код записи" from SEANC where "KOD_PP"=:prov and "KOD_KLU"=:ur');
end;
ibqry1.ParamByName('prov').Value:=dblkcbbKOD_PP.KeyValue;
if RadioGroup2.ItemIndex=0 then
ibqry1.ParamByName('fiz').Value:=dblkcbbKOD_KLU.KeyValue
else
ibqry1.ParamByName('ur').Value:=dblkcbbKOD_KLU1.KeyValue;
ibqry1.Open;
edt5.Text:='';
edt6.Text:='';
edt7.Text:='';
edt10.Text:='';
edt8.Text:='';
edt9.Text:='';
edt11.Text:='';
edt12.Text:='';
end;
procedure TForm3.DBGrid2CellClick(Column: TColumn);
begin
edt5.Text:=ibqry1.Fieldbyname('MAC-адрес').Asstring;
edt6.Text:=ibqry1.Fieldbyname('IP-адрес').Asstring;
edt7.Text:=ibqry1.Fieldbyname('Дата начала').Asstring;
edt10.Text:=ibqry1.Fieldbyname('Дата конца').Asstring;
edt8.Text:=ibqry1.Fieldbyname('Время начала').Asstring;
edt9.Text:=ibqry1.Fieldbyname('Время конца').Asstring;
edt11.Text:=ibqry1.Fieldbyname('Код записи').Asstring;
edt12.Text:=ibqry1.Fieldbyname('Стоимость').Asstring;
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
end;
end.
Файл формы запросов
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, IBCustomDataSet, IBQuery, StdCtrls, ExtCtrls, DBCtrls,
Grids, DBGrids;
type
TForm4 = class(TForm)
btn1: TButton;
lbl1: TLabel;
ibqry1: TIBQuery;
ds1: TDataSource;
lbl2: TLabel;
lbl3: TLabel;
lbl4: TLabel;
lbl5: TLabel;
lbl6: TLabel;
btn2: TButton;
btn3: TButton;
cbb1: TComboBox;
dblkcbbKOD_PP1: TDBLookupComboBox;
dblkcbbKOD_KLF: TDBLookupComboBox;
rg1: TRadioGroup;
dblkcbbKOD_KLU: TDBLookupComboBox;
dbgrd3: TDBGrid;
lbl7: TLabel;
lbl8: TLabel;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure rg1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
uses
Unit1, DateUtils;
{$R *.dfm}
procedure TForm4.btn1Click(Sender: TObject);
begin
ibqry1.SQL.Clear;
ibqry1.SQL.Add('select count(*) as "kolvo" from "SEANC" where "DATA" between :dat1 and :dat2 and "KOD_PP"=:kpp');
ibqry1.ParamByName('kpp').Value:=dblkcbbKOD_PP1.KeyValue;
case cbb1.ItemIndex of
0:ibqry1.ParamByName('dat1').AsDate:=StrToDate('1.1.2013');
1:ibqry1.ParamByName('dat1').AsDate:=StrToDate('1.2.2013');
2:ibqry1.ParamByName('dat1').AsDate:=StrToDate('1.3.2013');
3:ibqry1.ParamByName('dat1').AsDate:=StrToDate('1.4.2013');
4:ibqry1.ParamByName('dat1').AsDate:=StrToDate('1.5.2013');
5:ibqry1.ParamByName('dat1').AsDate:=StrToDate('1.6.2013');
6:ibqry1.ParamByName('dat1').AsDate:=StrToDate('1.7.2013');
7:ibqry1.ParamByName('dat1').AsDate:=StrToDate('1.8.2013');
8:ibqry1.ParamByName('dat1').AsDate:=StrToDate('1.9.2013');
9:ibqry1.ParamByName('dat1').AsDate:=StrToDate('1.10.2013');
10:ibqry1.ParamByName('dat1').AsDate:=StrToDate('1.11.2013');
11:ibqry1.ParamByName('dat1').AsDate:=StrToDate('1.12.2013');
end;
ibqry1.ParamByName('dat2').AsDate:=StrToDate(IntToStr(DaysInMonth(ibqry1.ParamByName('dat1').AsDate))+'.'+IntToStr(MonthOf(ibqry1.ParamByName('dat1').AsDate))+'.2013');
ibqry1.Open;
end;
procedure TForm4.btn2Click(Sender: TObject);
begin
ibqry1.SQL.Clear;
ibqry1.SQL.Add('select "DATA" from "SEANC" where "KOD_PP"=:kpp GROUP BY "DATA" having count(*)>=all(select count(*) from "SEANC" where "KOD_PP"=:kpp group by "DATA")');
ibqry1.ParamByName('kpp').AsInteger:=dblkcbbKOD_PP1.KeyValue; //where "KOD_PP"=:kpp
ibqry1.Open;
end;
procedure TForm4.btn3Click(Sender: TObject);
begin
ibqry1.SQL.Clear;
if rg1.ItemIndex=0 then
begin
ibqry1.SQL.Add('select KF."FAM" AS "Фамилия", KF."NAME" AS "Имя",KF."OTCH" AS "Отчество",S."STOIM" AS "Стоимость",S."DATA" AS "Дата начала",S."DATA_KON" AS "Дата конца",S."VR_NACH" AS "Время начала",S."VR_KON" AS "Время конца"');
ibqry1.SQL.Add('FROM "SEANC" S,"KLFIZ" KF WHERE S."KOD_KLF"=KF."KOD" AND KF."KOD"=:fiz AND S."KOD_PP"=:kpp');
ibqry1.ParamByName('fiz').AsInteger:=dblkcbbKOD_KLF.KeyValue;
end
else
begin
ibqry1.SQL.Add('SELECT KU."NAZVANIYE" AS "Название",S."STOIM" AS "Стоимость",S."DATA" AS "Дата начала",S."DATA_KON" AS "Дата конца",S."VR_NACH" AS "Время начала",S."VR_KON" AS "Время конца"');
ibqry1.SQL.Add('FROM "SEANC" S,"KLUR" KU WHERE S."KOD_KLU"=KU."KOD" AND KU."KOD"=:ur AND S."KOD_PP"=:kpp');
ibqry1.ParamByName('ur').AsInteger:=dblkcbbKOD_KLU.KeyValue;
end;
ibqry1.ParamByName('kpp').AsInteger:=dblkcbbKOD_PP1.KeyValue;
ibqry1.Open;
end;
procedure TForm4.rg1Click(Sender: TObject);
begin
if rg1.ItemIndex=0 then
begin
dblkcbbKOD_KLF.Enabled:=True;
dblkcbbKOD_KLU.Enabled:=False;
end
else
begin
dblkcbbKOD_KLF.Enabled:=False;
dblkcbbKOD_KLU.Enabled:=True;
end;
end;
procedure TForm4.FormCreate(Sender: TObject);
begin
end;
end.
Файл формы формирования квитанции
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, DB, IBCustomDataSet, IBQuery,
Grids, DBGrids;
type
TForm5 = class(TForm)
dbgrd1: TDBGrid;
ds1: TDataSource;
ibqry1: TIBQuery;
dblkcbbKOD_KLF: TDBLookupComboBox;
rg1: TRadioGroup;
dblkcbbKOD_KLU: TDBLookupComboBox;
cbb1: TComboBox;
btn1: TButton;
lbl8: TLabel;
dblkcbbKOD_PP1: TDBLookupComboBox;
lbl1: TLabel;
lbl2: TLabel;
ibqry2: TIBQuery;
lbl3: TLabel;
lbl4: TLabel;
procedure rg1Click(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
uses
Unit1, DateUtils;
{$R *.dfm}
procedure TForm5.rg1Click(Sender: TObject);
begin
if rg1.ItemIndex=0 then
begin
dblkcbbKOD_KLF.Enabled:=True;
dblkcbbKOD_KLU.Enabled:=False;
end
else
begin
dblkcbbKOD_KLF.Enabled:=False;
dblkcbbKOD_KLU.Enabled:=True;
end;
end;
procedure TForm5.btn1Click(Sender: TObject);
var date1,date2:TDate;q:Double;
begin
ibqry1.SQL.Clear;
ibqry2.SQL.Clear;
if cbb1.ItemIndex<>-1 then
begin
case cbb1.ItemIndex of
0:date1:=StrToDate('1.1.2013');
1:date1:=StrToDate('1.2.2013');
2:date1:=StrToDate('1.3.2013');
3:date1:=StrToDate('1.4.2013');
4:date1:=StrToDate('1.5.2013');
5:date1:=StrToDate('1.6.2013');
6:date1:=StrToDate('1.7.2013');
7:date1:=StrToDate('1.8.2013');
8:date1:=StrToDate('1.9.2013');
9:date1:=StrToDate('1.10.2013');
10:date1:=StrToDate('1.11.2013');
11:date1:=StrToDate('1.12.2013');
end;
date2:=StrToDate(IntToStr(DaysInMonth(date1))+'.'+IntToStr(MonthOf(date1))+'.2013');
if rg1.ItemIndex=0 then
begin
ibqry1.SQL.Add('select KF."FAM" AS "Фамилия", KF."NAME" AS "Имя",KF."OTCH" AS "Отчество",S."STOIM" AS "Стоимость",S."DATA" AS "Дата начала",S."DATA_KON" AS "Дата конца",S."VR_NACH" AS "Время начала",S."VR_KON" AS "Время конца"');
ibqry1.SQL.Add('FROM "SEANC" S,"KLFIZ" KF WHERE S."KOD_KLF"=KF."KOD" AND KF."KOD"=:fiz AND S."KOD_PP"=:kpp and S."DATA">=:dat1 and S."DATA_KON"<=:dat2');
ibqry2.SQL.Add('select sum ("STOIM") from "SEANC" where "KOD_KLF"=:fiz and "DATA">=:dat1 and "DATA_KON"<=:dat2');
ibqry1.ParamByName('fiz').AsInteger:=dblkcbbKOD_KLF.KeyValue;
ibqry2.ParamByName('fiz').AsInteger:=dblkcbbKOD_KLF.KeyValue;
end
else
begin
ibqry1.SQL.Add('SELECT KU."NAZVANIYE" AS "Название",S."STOIM" AS "Стоимость",S."DATA" AS "Дата начала",S."DATA_KON" AS "Дата конца",S."VR_NACH" AS "Время начала",S."VR_KON" AS "Время конца"');
ibqry1.SQL.Add('FROM "SEANC" S,"KLUR" KU WHERE S."KOD_KLU"=KU."KOD" AND KU."KOD"=:ur AND S."KOD_PP"=:kpp and S."DATA">=:dat1 and S."DATA_KON"<=:dat2');
ibqry1.ParamByName('ur').AsInteger:=dblkcbbKOD_KLU.KeyValue;
ibqry2.SQL.add('select sum ("STOIM") from "SEANC" where "KOD_KLU"=:ur and "DATA">=:dat1 and "DATA_KON"<=:dat2');
ibqry2.ParamByName('ur').AsInteger:=dblkcbbKOD_KLU.KeyValue;
end;
ibqry1.ParamByName('kpp').AsInteger:=dblkcbbKOD_PP1.KeyValue;
ibqry1.ParamByName('dat1').AsDate:=date1;
ibqry1.ParamByName('dat2').AsDate:=date2;
ibqry2.ParamByName('dat1').AsDate:=date1;
ibqry2.ParamByName('dat2').AsDate:=date2;
ibqry1.Open;
ibqry2.Open;
lbl3.Caption:='Итого: '+ibqry2.fieldByName('SUM').AsString;
end
else
ShowMessage('Выберите месяц');
end;
procedure TForm5.FormCreate(Sender: TObject);
begin
end;
end.