- •Задания и методические указания к выполнению лабораторных работ
- •Содержание
- •Лабораторная работа №1 Создание приложения по технологии bde на основе заимствованных таблиц
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №2 Разработка приложений с использованием технологии bde на основе создания собственных таблиц
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №3 Использование мастера конструирования форм
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №4 Отбор записей в таблице базы данных
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №5 Динамически создаваемые псевдонимы
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №6 Создание запросов с использованием компонента tQuery
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №7 Работа с одной таблицей. Создание подключения к базе данных
- •Лабораторная работа №8 Связь таблиц
- •Лабораторная работа №9 Метод GetTableNames
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №10 Сортировка записей
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №11 Компонент tadoQuery и его свойства
- •Теоретическая часть
- •Практическая часть
- •1. Свойство sql
- •2. Свойство Parameters
- •Лабораторная работа №12 Фильтрация записей
- •Теоретическая часть
- •Практическая часть
- •Задание для самостоятельного выполнения
- •Лабораторная работа №13 Создание отчетов
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №14 Управление транзакциями в sql Server
- •Лабораторная работа №15 Использование доменов и хранимых процедур
- •Список рекомендуемой литературы
Лабораторная работа №10 Сортировка записей
Цель работы:
- научиться осуществлять сортировку в приложениях, использующих технологию ADO;
Теоретическая часть
Повторите теоретический материал, загрузив из папки файлы ADOTable.pps, ADODataSet.pps
Практическая часть
Ход работы
Создайте в своей папке на жестком диске Student папку с названием «ЛР_10».
Скопируйте созданную в предыдущих лабораторных работах заполненную базу Books.dbf.
Разместите на форме компоненты ADOConnection, ADOTable, DataSource, DBGrid, а также 2 комплекта компонентов Panel (вкладка Standard).
На компоненте Panel1 разместите компонент RadioGroup и компонент Button1.
Поверх компонента Panel2 разместите 2 компонента ListBox, 2 компонента Label, 3 компонента SpeedButton (вкладка Additional) и один компонент Button2.
Между компонентами Panel1 и Panel2 расположите компонент Splitter.
Установите свойства компонентов согласно Таблице 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.
Для работы приложения опишите в разделе Private две переменные – Vid и Str:
private
Vid,Str:string;
{ Private declarations }
Напишите обработчик события OnClick для компонента RadioGroup1:
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
If RadioGroup1.ItemIndex=1 then Vid:='DESC,' else Vid:='ASC,';
end;
Выделите компонент DBGrid и запишите для него обработчик события OnTitleClick (этот обработчик позволит осуществлять сортировку записей при щелчке на заголовке столбца сетки DBGrid1):
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
ADOTable1.IndexFieldNames:=Column.Field.FieldName+' '+Vid;
end;
Опишите обработчик события при создании формы 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;
Опишите обработчик события 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 ‘).
Запишите обработчик события OnClick, происходящего при нажатии на кнопку «Очистка»:
procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox2.Clear;
end;
Для отправки выбранных полей в список полей сортировки напишите обработчик события 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;
Для перемещения записей в списке полей сортировки вверх или вниз напишите обработчик соответствующих событий 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;
Напишите обработчик события OnDestroy, происходящего при закрытии формы:
procedure TForm1.FormDestroy(Sender: TObject);
begin
ADOConnection1.Close;
end;
Сохраните проект в своей папке.
Запустите проект на выполнение. При появлении сообщения об ошибке нажмите ОК и выберите команду Run → Program Reset (Ctrl+F2).
Выйдите из среды Delphi 7, и, запустив exe-файл, проверьте работоспособность приложения.
Вид работающего приложения приведен на Рис.10.2.
