Ход работы.
Для создания таблицы воспользуемся утилитой DataBase DeskTop. Выбрать путь (C:/Program Files/Common Files/Borland Shared/ DataBase DeskTop/Dbd32.exe
Для создания таблицы выбрать в меню программы File-New-Table.
В данной СУБД будем использовать формат Paradox. Выберите его из списка в появившемся окне.
На экране появится окно создания базы данных. В столбце Field Name введите имя поля (не должно содержать пробелов).
В столбце Type выберите из контекстного меню (правый щелчок мыши) тип поля. Для строковых полей необходимо указать размер (столбец Size).
Создайте таблицу следующей структуры:
Имя поля
Тип поля
Описание
Nomer
Longlnteger
Key
Rayon
Alpha[20]
Район проживания
Surname
Alpha[20]
Фамилия, инициалы
DataBorn
Date
Дата рождения
Goden
Logical
После создания таблицы нажмите кнопку SaveAs. Выберите путьСоздайте папку Военкомат укажите имя файла maintable.db В появившемся окне в области Alias выбрать псевдоним базы данных Standard1.
Создание основного окна программы:
Переименуйте главное окно программы – измените свойство Caption для Form1.
Поместите на форму компонент PageControl (вкладка Win32). Установите компоненту следующее свойство:
Align (Выравнивание) – alClent (на все окно)
Щелкните правой клавишей мышки по компоненту и создайте две новые страницы New Page(TabSheet1, TabSheet2).
Переименуйте страницы соответственно – Ввод информации и Поиск информации. Для этого необходимо в раскрывающемся списке Инспектора объекта выбрать объект и изменить его свойство Caption.
Поместите на форму объект MainMenu (вкладка Standard). Щелкните по компоненту два раза и создайте пункт меню Данные, который содержит следующие подпункты: Ввод информации, Поиск данных, Копирование таблицы, Выход. Для создания разделителя в меню необходимо ввести «-» - дефис.
Поместите на форму (лист Ввод Информации) следующие компоненты:
Table (вкладка BDE);
DataSource (вкладка Data Access);
DBGrid, DBNavigator (вкладка Data Controls).
Установите компонентам следующие свойства:
Table:
DatabaseName (псевдоним базы данных) – выбираем из списка свой Alias.
TableName – выбираем имя своей таблицы.
AutoRefresh (обновление структуры таблицы) – устанавливаем значение true.
Active – устанавливаем true – подключаем таблицу.
DataSource:
DataSet (источник данных) – выбираем Table1.
DBGrid, DBNavigator:
свойству DataSource устанавливаем значение DataSource1.
Align (выравнивание): DBGrid – alClient (на все окно), DBNavigator – alBottom (внизу окна).
Двойным щелчком по компоненту Table1 вызовите редактор полей. В контекстном меню (щелчок правой клавишей по редактору), выберите пункт Добавить все поля. Если какое-нибудь поле видеть на экране не нужно, определите его свойство Visible – False. Для остальных полей в свойстве DisplayLabel напишите отображаемые заголовки столбца: Номер личного дела, Район, Ф.И.О., Дата рождения, Годен.
На данном этапе вид формы должен быть следующим:
Запустите приложение и проверьте, как оно работает. Сформируйте базу данных.
Перейдите на вкладку Поиск информации. Поместите на ней следующие компонентыи :
DBGrid (Align – Top);
Query (вкладка BDE)
DataSorce;
PageControl (добавьте 3 новых листа);
RadioGroup (вкладка Standard)
Расположите компоненты следующим образом:
Установите свойству Multiline компонент PageControl2 значение True. Переименуйте страницы: Список по начальной букве фамилии, Список призывников по году, Годные призывники по району.
Задайте свойству Caption компонента RadioGroup1 значение: Сформировать список.
Щелкните по свойству Items компонента и заполните Редактор списка строк, как показано ниже:
Установим свойству ItemIndex компонента RadioGroup значение 0, чтобы по умолчанию был выбран первый переключатель.
Получаем следующий вид:
Щелкните по вкладке Список призывников по году. Поместите на нее компоненты Label, Edit (вкладка Standard) и BitBtn (вкладка Additional).
Переименуйте и разместите компоненты следующим образом:
Для того, чтобы сделать шрифт жирным, используйте свойство Font компонента. Чтобы разместить на кнопке рисунок используйте свойство Glyph. Стандартные заготовки Delphi расположены в папке: С:\Program Files\Common Files\Borland Shared\Images. Выберите каталог Buttons файл Chek.Возможны ваши варианты.
Таким же образом оформим вкладки Годные призывники по району и Список по начальной букве фамилии.
На этом «оформительская работа» закончена. Приступим к программированию.
Создайте следующий обработчик события OnClick для компонента RadioGroup1:
procedure Tform1.RadioGroup1Click(Sender: Tobject);
var Kolp, Kolnp, I:integer;
begin
Case RadioGroup1.ItemIndex of
0 : begin {если выбран первый переключатель}
query1.SQL.Clear; {закрываем запрос}
query1.SQL.Add('Select *from MainTable'); {в кавычках следует SQL запрос}
query1.Open;
end;
1 : begin
query1.SQL.Clear;
query1.SQL.Add(‘Select *from MainTable where goden = true’);
query1.Open;
end;
2 : begin
Table1.First;
Kolp:=0;Kolnp:=0;
for I:=1 to Table1.RecordCount do
Begin
if (Table1.FieldByName(‘goden’).AsBoolean = true) then
Kolp:=Kolp + 1
else KolnP:=KolnP + 1;
Table1.Next;
end;
Messagedlg('Количество годных = '+IntToStr(KolP)+#13+
'Количество негодных = '+IntToStr(KolnP),mtInformation,[mbOk],0);
end;
3 : begin
query1.SQL.Clear;
query1.SQL.Add(‘Select *from MainTable order by surname ASC’);
query1.Open;
end;
4 : begin
query1.SQL.Clear;
query1.SQL.Add(‘Select *from MainTable order by surname DESC’);
query1.Open;
end;
5 : begin
query1.SQL.Clear;
query1.SQL.Add(‘Select *from MainTable where databorn = (Select min(databorn) from MainTable)’);
query1.Open;
end;
6 : begin
query1.SQL.Clear;
query1.SQL.Add(‘Select *from MainTable where databorn = (Select max(databorn) from MainTable)’);
query1.Open;
end;
end;
end;
Переименуйте компонент DataSorce2 в QueryDataSorce (изменяя свойство Name). Задайте его свойству DataSet значение Query1.
Свяжите компонент DBGrid2 с компонентом Query1 при помощи компонента QueryDataSorce (выберите его из списка в свойстве DataSorce компонента DBGrid2).
Для компонента Query1 выберите в свойстве DateBaseName свой Alias.
В свойстве SQL компонента напишите:
select * from maintable.db
Задайте свойству Active компонента Query1 значение True.
Двойным щелчком по компоненту Query1 вызовите редактор полей. Переименуйте поля, как это делали раньше, с компонентом Table1.
Запустите программу на выполнение и посмотрите на результат.
Для события OnClick кнопки «Составить список» вкладки «Список призывников по году» запишите обработчик:
procedure Tform1.BitBtn1Click(Sender: Tobject);
var sData,S:AnsiString;
begin
sData:=Edit1.Text;
if sData=’’ then
begin
ShowMessage(‘Год не введен!’);
exit
end;
S:=’Select *from MainTable where databorn <= ‘’01.01.’+ IntToStr(StrToInt(Edit1.Text)-18)+’’’’;
query1.SQL.Clear;
query1.SQL.Add(S);
query1.Open;
end;
Для события OnClick кнопки «Показать» вкладки «Список по начальной букве фамилии» запишите обработчик:
procedure Tform1.BitBtn3Click(Sender: Tobject);
var S,s1,s2 : AnsiString;
begin
s2:=’%’;
s1 := ‘’’’ + Edit3.Text + s2 +’’’’;
S:=’Select *from MainTable where surname Like’+s1;
query1.SQL.Clear;
query1.SQL.Add(S);
query1.Open;
end;
. Для события OnClick кнопки «Вывести количество по району» вкладки «Годные призывники по району» запишите обработчик:
procedure Tform1.BitBtn2Click(Sender: Tobject);
var KolP,I:integer;
begin
Table1.First;
KolP:=0;
for I:=1 to Table1.RecordCount do
Begin
if ((Table1.FieldByName(‘goden’).AsBoolean = true) and (Table1.FieldByName(‘rayon’).AsString = Edit2.Text)) then
KolP:=Kolp + 1;
Table1.Next;
end;
Messagedlg(‘Количество годных по району ‘+ Edit2.Text+’ = ‘+IntToStr(KolP),mtInformation,[mbOk],0);
Edit2.Text:=’’;
end;
12. Обработайте событие OnClick для пунктов меню:
Для подпункта Ввод информации:
procedure Tform1.N2Click(Sender: Tobject);
begin
Pagecontrol1.ActivePageIndex := 0;
end;
Для подпункта Поиск данных:
procedure Tform1.N3Click(Sender: Tobject);
begin
Pagecontrol1.ActivePageIndex := 1;
end;
Для подпункта Копирование таблицы:
procedure Tform1.N6Click(Sender: Tobject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(‘insert into ArhivTable select * from maintable’);
Query1.ExecSQL;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(‘select * from ArhivTable’);
Query1.Open;
ShowMessage('Архивная таблица создана!')
end;
Для подпункта Выход:
procedure Tform1.N5Click(Sender: Tobject);
begin
close
end;
В обработчике события OnCloseQuery для Form1 напишите:
procedure Tform1.FormCloseQuery(Sender: Tobject; var CanClose: Boolean);
begin
if (Messagedlg(‘Выйти из программы?’,mtConfirmation,[mbYes,mbNo],0)=mrYes) then
Canclose := true
else CanClose := false;
end;
