Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР_РиЭУБД.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
4.09 Mб
Скачать

Лабораторная работа №10 Сортировка записей

Цель работы:

- научиться осуществлять сортировку в приложениях, использующих технологию ADO;

Теоретическая часть

Повторите теоретический материал, загрузив из папки файлы ADOTable.pps, ADODataSet.pps

Практическая часть

Ход работы

  1. Создайте в своей папке на жестком диске Student папку с названием «ЛР_10».

  2. Скопируйте созданную в предыдущих лабораторных работах заполненную базу Books.dbf.

  3. Разместите на форме компоненты ADOConnection, ADOTable, DataSource, DBGrid, а также 2 комплекта компонентов Panel (вкладка Standard).

  4. На компоненте Panel1 разместите компонент RadioGroup и компонент Button1.

  5. Поверх компонента Panel2 разместите 2 компонента ListBox, 2 компонента Label, 3 компонента SpeedButton (вкладка Additional) и один компонент Button2.

  6. Между компонентами Panel1 и Panel2 расположите компонент Splitter.

  7. Установите свойства компонентов согласно Таблице 10.1.

Таблица 10.1. Свойства компонентов приложения «Сортировка записей»

Компонент

Свойство

Значение

Form1

Caption

Сортировка записей в приложениях с технологией ADO

Color

По своему усмотрению

BorderStyle

bsSingle

BorderIcons

biMinimize

False

biMaximize

False

ADOConnection1

ConnectionString

Установите связь с каталогом (папкой) таблиц баз данных Books

LoginPrompt

False

DataSource1

DataSet

ADOTable1

ADOTable1

Connection

ADOConnection1

TableName

Books

Active

False

DBGrid1

DataSource

DataSource1

Panel1

Caption

Panel2

Caption

Button1

Caption

Сортировать

Button2

Caption

Очистка

SpeedButton1

Glyph

Загрузите изображение стрелки, направленной вправо в формате .bmp

SpeedButton2

Glyph

Загрузите изображение стрелки, направленной вверх в формате .bmp

SpeedButton3

Glyph

Загрузите изображение стрелки, направленной вниз в формате .bmp

Label1

Caption

Список полей

Label2

Caption

Список полей сортировки

ListBox1

Items

Издательство

Книга

Автор

Тираж

Обложка

Магазин

Цена

RadioGroup1

Caption

Направление сортировки

Items

По возрастанию

По убыванию

Примерный вид проектируемой формы приложения приведен на Рис.10.1.

  1. Для работы приложения опишите в разделе Private две переменные – Vid и Str:

private

Vid,Str:string;

{ Private declarations }

  1. Напишите обработчик события OnClick для компонента RadioGroup1:

procedure TForm1.RadioGroup1Click(Sender: TObject);

begin

If RadioGroup1.ItemIndex=1 then Vid:='DESC,' else Vid:='ASC,';

end;

  1. Выделите компонент DBGrid и запишите для него обработчик события OnTitleClick (этот обработчик позволит осуществлять сортировку записей при щелчке на заголовке столбца сетки DBGrid1):

procedure TForm1.DBGrid1TitleClick(Column: TColumn);

begin

ADOTable1.IndexFieldNames:=Column.Field.FieldName+' '+Vid;

end;

  1. Опишите обработчик события при создании формы OnCreate:

procedure TForm1.FormCreate(Sender: TObject);

begin

ADOTable1.Open;

Vid:='ASC,';

Str:='';

DBGrid1.Columns[0].Title.caption:='Издательство';

DBGrid1.Columns[1].Title.caption:='Книга';

DBGrid1.Columns[2].Title.caption:='Автор';

DBGrid1.Columns[3].Title.caption:='Тираж';

DBGrid1.Columns[4].Title.caption:='Обложка';

DBGrid1.Columns[5].Title.caption:='Магазин';

DBGrid1.Columns[6].Title.caption:='Цена';

end;

  1. Опишите обработчик события OnClick при щелчке на кнопке Сортировать:

procedure TForm1.Button1Click(Sender: TObject);

var i:byte;

a:string;

begin

If (ListBox2.Items.Count=0)

//если список полей сортировки пуст, то выводим соответствующее сообщение

then messageDlg('Список полей сортировки пуст!',mtInformation,[mbOK],0)

else

begin

for i:=0 to ListBox2.Items.Count-1 do

begin

if Listbox2.Items[i]='Издательство' then a:='IZDATEL '

else

if Listbox2.Items[i]='Книга' then a:='KNIGA '

else

if Listbox2.Items[i]='Автор' then a:='AVTOR '

else

if Listbox2.Items[i]='Тираж' then a:='TIRAG '

else

if Listbox2.Items[i]='Обложка' then a:='OBLOGKA '

else

if Listbox2.Items[i]='Магазин' then a:='MAGAZIN '

else a:='STOIMOST ';

Str:=Str+a+Vid; //Формируем строку Str из списка полей сортировки

end;

Str[Length(Str)]:=' ';

ADOTable1.Sort:=Str; //Формируем свойство Sort компонента ADOTable1

Str:=''; //Очищаем строку

end;

end;

Обратите внимание! При присвоении переменной a какого-либо значения, оно записывается с пробелом в конце (a:=’MAGAZIN).

  1. Запишите обработчик события OnClick, происходящего при нажатии на кнопку «Очистка»:

procedure TForm1.Button2Click(Sender: TObject);

begin

ListBox2.Clear;

end;

  1. Для отправки выбранных полей в список полей сортировки напишите обработчик события OnClick на кнопке SpeedButton:

procedure TForm1.SpeedButton1Click(Sender: TObject);

var i,j:byte;

x:boolean;

begin

x:=false;

for i:=ListBox1.Items.Count-1 downto 0 do

if listBox1.Selected[i] then

begin

if listbox2.Items.Count=0 then

listbox2.Items.Insert(listBox2.Items.Count,ListBox1.Items[i])

else

begin

for j:=ListBox2.Items.Count-1 downto 0 do

if listBox2.Items[j]=ListBox1.Items[i] then

begin

x:=true;

break;

end;

if (not x) then

ListBox2.Items.Insert(ListBox2.Items.Count,ListBox1.Items[i]);

end;

end;

end;

  1. Для перемещения записей в списке полей сортировки вверх или вниз напишите обработчик соответствующих событий OnClick для компонентов SpeedButton1 и SpeedButton2:

//-----------------Нажатие на кнопку "Вверх"-----------------------

procedure TForm1.SpeedButton2Click(Sender: TObject);

var i:byte;

begin

if ListBox2.Items.Count=0 then Exit

else

begin

For i:=ListBox2.Items.Count-1 downto 0 do

if (ListBox2.Selected[i]) and (i>0) then

begin

ListBox2.Items.Insert(i-1,ListBox2.Items[i]);

ListBox2.Items.Delete(i+1);

end;

end;

end;

//-----------------Нажатие на кнопку "Вниз"-----------------------

procedure TForm1.SpeedButton3Click(Sender: TObject);

var i:byte;

begin

if ListBox2.Items.Count=0 then Exit

else

begin

For i:=ListBox2.Items.Count-1 downto 0 do

if (ListBox2.Selected[i]) and (i<ListBox2.Items.Count-1) then

begin

ListBox2.Items.Insert(i+2,ListBox2.Items[i]);

ListBox2.Items.Delete(i);

end;

end;

end;

  1. Напишите обработчик события OnDestroy, происходящего при закрытии формы:

procedure TForm1.FormDestroy(Sender: TObject);

begin

ADOConnection1.Close;

end;

  1. Сохраните проект в своей папке.

  2. Запустите проект на выполнение. При появлении сообщения об ошибке нажмите ОК и выберите команду RunProgram Reset (Ctrl+F2).

  3. Выйдите из среды Delphi 7, и, запустив exe-файл, проверьте работоспособность приложения.

Вид работающего приложения приведен на Рис.10.2.