Компоненты
Все компоненты QuickReport расположены на закладке QReport палитры компонент Delphi. Здесь краткий тур что это такое и как они помогут вам.
Figure 1 - TQuickRep and band components
TQuickRep. Это наиболее важный компонент, это контейнер для всех других печатных компонент. Выглядит как лист бумаги, на котором вы будете печатать. Его свойство Page позволяет установить размеры бумаги, в то же время свойство Dataset определяет источник данных для отчета.
TQuickReport немного похож на TDataModule – это специальный тип формы, которая никогда не показывается пользователю программы. Если вы, то вы можете использовать TQuickReport на псевдо-форме вместо компонента TQuickRep– никакой разницы в их методах, свойствах и событиях. Но желательно разместить компонент TQuickRep на форме: это наиболее подходящее решение. Например, размещение TQuickRep на форме позволяет вам использовать обработчик OnCreate если вы пожелаете добавить некоторые объекты в отчет программным путем.
3. Анализ предметной области
Военные части округа расквартированы по различным местам дислокации, причем в одном месте могут располагаться несколько частей. Каждая воинская часть состоит из рот, роты из взводов, взводы из отделений, в свою очередь воинские части объединяются в дивизии, корпуса или бригады, а те в армии.
Военный округ представлен офицерским составом (генералы, полковники, подполковники, майоры, капитаны, лейтенанты) и рядовым и сержантским составом (старшины, сержанты, прапорщики, ефрейторы, рядовые).
Каждая из перечисленных категорий военнослужащих может иметь характеристики, присущие только этой категории: для генералов это может быть дата окончания академии, дата присвоения генеральского звания и т.д. Каждое из подразделений имеет командира, причем военнослужащие офицерского состава могут командовать любым из вышеперечисленных подразделений, а военнослужащие рядового и сержантского состава только взводом и отделением.
Все военнослужащие имеют одну или несколько воинских специальностей.
Каждой воинской части придана боевая и транспортная техника: БМП, тягачи, автотранспорт и пр. и вооружение: карабины, автоматическое оружие, артиллерия, ракетное вооружение и т.д.
Каждая из перечисленных категорий боевой техники и вооружения также имеет специфические, присущие только ей атрибуты и по каждой категории может быть несколько видов техники и вооружения. Инфраструктура военной части представлена набором сооружений (сооружение ©1, сооружение ©2 . . .), некоторые из которых предназначены для дислокации подразделений части.
4. Схема данных
5. Скрипт
/*
Created11.12.2006
Modified19.12.2006
Project
Model
Company
Author
Version
DatabaseMS SQL 2000
*/
Drop trigger [tu_Chast]
go
Drop trigger [tu_Rota]
go
Drop trigger [tu_Vzvod]
go
Drop trigger [tu_Obedinenie]
go
Drop trigger [tu_armia]
go
Drop trigger [tu_Podrazdelenie]
go
Drop trigger [td_Chast]
go
Drop trigger [td_Rota]
go
Drop trigger [td_Vzvod]
go
Drop trigger [td_Obedinenie]
go
Drop trigger [td_armia]
go
Drop trigger [td_Podrazdelenie]
go
Drop table [Voorugenie]
go
Drop table [Podrazdelenie]
go
Drop table [Tehnika]
go
Drop table [Soorugenia]
go
Drop table [armia]
go
Drop table [sostav]
go
Drop table [Obedinenie]
go
Drop table [Otdelenie]
go
Drop table [Vzvod]
go
Drop table [Rota]
go
Drop table [Chast]
go
Create table [Chast]
(
[Nazvanie_chasti] Char(10) NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
[tip_i_nomer_obedinenia] Char(10) NOT NULL,
[nazvanie_armii] Char(10) NOT NULL,
[Mesto] Char(10) NOT NULL,
Constraint [pk_Chast] Primary Key ([Nomer_podrazdelenia],[tip_i_nomer_obedinenia],[nazvanie_armii],[Mesto])
)
go
Create table [Rota]
(
[Nazv_roti] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
[tip_i_nomer_obedinenia] Char(10) NOT NULL,
[nazvanie_armii] Char(10) NOT NULL,
[Mesto] Char(10) NOT NULL,
Constraint [pk_Rota] Primary Key ([Nazv_roti],[Nomer_podrazdelenia],[tip_i_nomer_obedinenia],[nazvanie_armii],[Mesto])
)
go
Create table [Vzvod]
(
[Nazv_vzvoda] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
[nazvanie_armii] Char(10) NOT NULL,
[tip_i_nomer_obedinenia] Char(10) NOT NULL,
[Nazv_roti] Char(10) NOT NULL,
[Mesto] Char(10) NOT NULL,
Constraint [pk_Vzvod] Primary Key ([Nazv_vzvoda],[Nomer_podrazdelenia],[nazvanie_armii],[tip_i_nomer_obedinenia],[Nazv_roti],[Mesto])
)
go
Create table [Otdelenie]
(
[Nazv_otdel] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
[nazvanie_armii] Char(10) NOT NULL,
[tip_i_nomer_obedinenia] Char(10) NOT NULL,
[Nazv_roti] Char(10) NOT NULL,
[Nazv_vzvoda] Char(10) NOT NULL,
[Mesto] Char(10) NOT NULL,
Constraint [pk_Otdelenie] Primary Key ([Nazv_otdel],[Nomer_podrazdelenia],[nazvanie_armii],[tip_i_nomer_obedinenia],[Nazv_roti],[Nazv_vzvoda],[Mesto])
)
go
Create table [Obedinenie]
(
[tip_i_nomer_obedinenia] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
[nazvanie_armii] Char(10) NOT NULL,
Constraint [pk_Obedinenie] Primary Key ([tip_i_nomer_obedinenia],[Nomer_podrazdelenia],[nazvanie_armii])
)
go
Create table [sostav]
(
[Kod_slugashego] Char(10) NOT NULL,
[FIO] Char(30) NOT NULL,
[Zvanie] Char(30) NOT NULL,
[Special] Char(30) NOT NULL,
[Tip_sostava] Char(10) NOT NULL,
[Podchinaetca] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
Constraint [pk_sostav] Primary Key ([Kod_slugashego],[FIO],[Zvanie],[Nomer_podrazdelenia])
)
go
Create table [armia]
(
[nazvanie_armii] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
Constraint [pk_armia] Primary Key ([nazvanie_armii],[Nomer_podrazdelenia])
)
go
Create table [Soorugenia]
(
[Nomer_coorugenia] Char(10) NOT NULL,
[Nomer_disloc_obedinenia] Char(10) NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
Constraint [pk_Soorugenia] Primary Key ([Nomer_coorugenia],[Nomer_disloc_obedinenia],[Nomer_podrazdelenia])
)
go
Create table [Tehnika]
(
[Tip_tehniki] Char(10) NOT NULL,
[Kol_vo_tehniki] Integer NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
Constraint [pk_Tehnika] Primary Key ([Tip_tehniki],[Kol_vo_tehniki],[Nomer_podrazdelenia])
)
go
Create table [Podrazdelenie]
(
[Nomer_podrazdelenia] Char(10) NOT NULL,
Constraint [pk_Podrazdelenie] Primary Key ([Nomer_podrazdelenia]))
go
Create table [Voorugenie]
(
[Tip_voorug] Char(10) NOT NULL,
[Kol_vo_voorug] Integer NOT NULL,
[Nomer_podrazdelenia] Char(10) NOT NULL,
Constraint [pk_Voorugenie] Primary Key ([Tip_voorug],[Kol_vo_voorug],[Nomer_podrazdelenia]))
go
Set quoted_identifier on
go
/* Update trigger "tu_Chast" for table "Chast" */
Create trigger [tu_Chast]
on [Chast] for update as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child "Rota" when parent "Chast" updated */
if update([Nomer_podrazdelenia]) or
update([tip_i_nomer_obedinenia]) or
update([nazvanie_armii]) or
update([Mesto])
begin
if exists (select 1 from [Rota] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia] and
t.[tip_i_nomer_obedinenia] = d.[tip_i_nomer_obedinenia] and
t.[nazvanie_armii] = d.[nazvanie_armii] and
t.[Mesto] = d.[Mesto])
begin
raiserror 50001 'Children still exist in table ''Rota''. Cannot update parent table ''Chast''.'
rollback transaction
return
end
end
end
go
/* Update trigger "tu_Rota" for table "Rota" */
Create trigger [tu_Rota]
on [Rota] for update as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child "Vzvod" when parent "Rota" updated */
if update([Nazv_roti]) or
update([Nomer_podrazdelenia]) or
update([tip_i_nomer_obedinenia]) or
update([nazvanie_armii]) or
update([Mesto])
begin
if exists (select 1 from [Vzvod] t, deleted d
where t.[Nazv_roti] = d.[Nazv_roti] and
t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia] and
t.[tip_i_nomer_obedinenia] = d.[tip_i_nomer_obedinenia] and
t.[nazvanie_armii] = d.[nazvanie_armii] and
t.[Mesto] = d.[Mesto])
begin
raiserror 50001 'Children still exist in table ''Vzvod''. Cannot update parent table ''Rota''.'
rollback transaction
return
end
end
end
go
/* Update trigger "tu_Vzvod" for table "Vzvod" */
Create trigger [tu_Vzvod]
on [Vzvod] for update as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child "Otdelenie" when parent "Vzvod" updated */
if update([Nazv_vzvoda]) or
update([Nomer_podrazdelenia]) or
update([nazvanie_armii]) or
update([tip_i_nomer_obedinenia]) or
update([Nazv_roti]) or
update([Mesto])
begin
if exists (select 1 from [Otdelenie] t, deleted d
where t.[Nazv_vzvoda] = d.[Nazv_vzvoda] and
t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia] and
t.[nazvanie_armii] = d.[nazvanie_armii] and
t.[tip_i_nomer_obedinenia] = d.[tip_i_nomer_obedinenia] and
t.[Nazv_roti] = d.[Nazv_roti] and
t.[Mesto] = d.[Mesto])
begin
raiserror 50001 'Children still exist in table ''Otdelenie''. Cannot update parent table ''Vzvod''.'
rollback transaction
return
end
end
end
go
/* Update trigger "tu_Obedinenie" for table "Obedinenie" */
Create trigger [tu_Obedinenie]
on [Obedinenie] for update as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child "Chast" when parent "Obedinenie" updated */
if update([tip_i_nomer_obedinenia]) or
update([Nomer_podrazdelenia]) or
update([nazvanie_armii])
begin
if exists (select 1 from [Chast] t, deleted d
where t.[tip_i_nomer_obedinenia] = d.[tip_i_nomer_obedinenia] and
t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia] and
t.[nazvanie_armii] = d.[nazvanie_armii])
begin
raiserror 50001 'Children still exist in table ''Chast''. Cannot update parent table ''Obedinenie''.'
rollback transaction
return
end
end
end
go
/* Update trigger "tu_armia" for table "armia" */
Create trigger [tu_armia]
on [armia] for update as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child "Obedinenie" when parent "armia" updated */
if update([nazvanie_armii]) or
update([Nomer_podrazdelenia])
begin
if exists (select 1 from [Obedinenie] t, deleted d
where t.[nazvanie_armii] = d.[nazvanie_armii] and
t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
begin
raiserror 50001 'Children still exist in table ''Obedinenie''. Cannot update parent table ''armia''.'
rollback transaction
return
end
end
end
go
/* Update trigger "tu_Podrazdelenie" for table "Podrazdelenie" */
Create trigger [tu_Podrazdelenie]
on [Podrazdelenie] for update as
begin
declare @numrows int
select @numrows = @@rowcount
if @numrows = 0
return
/* Restrict child "armia" when parent "Podrazdelenie" updated */
if update([Nomer_podrazdelenia])
begin
if exists (select 1 from [armia] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
begin
raiserror 50001 'Children still exist in table ''armia''. Cannot update parent table ''Podrazdelenie''.'
rollback transaction
return
end
end
/* Restrict child "sostav" when parent "Podrazdelenie" updated */
if update([Nomer_podrazdelenia])
begin
if exists (select 1 from [sostav] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
begin
raiserror 50001 'Children still exist in table ''sostav''. Cannot update parent table ''Podrazdelenie''.'
rollback transaction
return
end
end
/* Restrict child "Tehnika" when parent "Podrazdelenie" updated */
if update([Nomer_podrazdelenia])
begin
if exists (select 1 from [Tehnika] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
begin
raiserror 50001 'Children still exist in table ''Tehnika''. Cannot update parent table ''Podrazdelenie''.'
rollback transaction
return
end
end
/* Restrict child "Voorugenie" when parent "Podrazdelenie" updated */
if update([Nomer_podrazdelenia])
begin
if exists (select 1 from [Voorugenie] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
begin
raiserror 50001 'Children still exist in table ''Voorugenie''. Cannot update parent table ''Podrazdelenie''.'
rollback transaction
return
end
end
/* Restrict child "Soorugenia" when parent "Podrazdelenie" updated */
if update([Nomer_podrazdelenia])
begin
if exists (select 1 from [Soorugenia] t, deleted d
where t.[Nomer_podrazdelenia] = d.[Nomer_podrazdelenia])
begin
raiserror 50001 'Children still exist in table ''Soorugenia''. Cannot update parent table ''Podrazdelenie''.'