70100

Режимы наборов данных

Лабораторная работа

Информатика, кибернетика и программирование

Наборы данных могут находиться в различных режимах. Текущий режим набора данных определяется свойством State типа TDataSetState. Оно доступно для чтения во время выполнения приложения и может быть использовано только для текущего режима.

Русский

2014-10-15

332.5 KB

0 чел.

Лабораторная работа №2

Режимы наборов данных.

Наборы данных могут находиться в различных режимах. Текущий режим набора данных определяется свойством State типа TDataSetState. Оно доступно для чтения во время выполнения приложения и может быть использовано только для текущего режима. Для перевода набора данных в требуемый режим используются специальные методы. Они могут вызываться явно (указанием имени метода) или косвенно (путем управления соответствующими визуальными компонентами, например, навигатором DBNavigator или сеткой DBGrid).

Набор данных может находиться в одном из перечисляемых ниже режимов:

  •  dsInactive - неактивность; набор данных закрыт и доступ к его данным невозможен. В этот режим набор данных переходит после своего закрытия, когда свойству Active установлено значение False.
  •  dsBrowse - осуществляется навигация по записям набора данных и просмотр данных. В этот режим набор данных переходит следующим образом:
  •  из режима dsInactive — при установке свойству Active значения True;
  •  из режима dsEdit — при вызове метода post или cancel;
  •  из режима dsInsert — при вызове метода Post или Cancel.
  •  dsEdit - редактирование текущей записи. В этот режим набор данных переходит ИЗ режима dsBrowse при вызове метода Edit.
  •  dsInsert - вставка новой записи. В этот режим набор данных переходит из режима dsBrowse при вызове методов Insert, InsertRecord, Append или AppendRecord.
  •  dsSetKey - поиск записи, удовлетворяющей заданному критерию. В этот режим набор данных переходит из режима dsBrowse  при вызове методов SetKey, SetRangeXXX, FindKey, GotoKey, FindNearest или GotoNearest. Возможен только для компонента Tаble, т.к. для компонента Query отбор записей осуществляется средствами языка SQL.
  •  dsCalcFields - расчет вычисляемых полей. Используется обработчик события OnCalcFields.
  •  dsFilter - фильтрация записей. В этот режим набор данных автоматически переходит из режима dsBrowse каждый раз, когда выполняется обработчик события onFiiterRecord. В режиме блокируются все попытки изменения записей. После завершения работы обработчика события OnFilterRecord набор данных автоматически переводится в режим dsBrowse.

Откройте приложение базы данных, созданное в лабораторной роботе №1.  В нем откройте окно модуля данных DataModule1. Выделите компонент GradeSrc, на закладке Events в обработчике события onStateChange данного компонента впишите следующий программный код:

procedure TDataModule1.GradeSrcStateChange(Sender: TObject);

begin

 case GradeSrc.State of

       dsInactive:Form1.Label1.Caption:='Набор данных закрыт';

       dsBrowse: Form1.Label1.Caption:='Просмотр набора данных';

       dsEdit: Form1.Label1.Caption:='Редактирование набора данных';

       dsInsert: Form1.Label1.Caption:='Вставка записи в набор данных';

   else  Form1.Label1.Caption:='Режим набора данных неопределен';

 end;

end;

В приведенной процедуре определяется режим набора данных, связанного с источником данных  GradeSrc, и информация об этом режиме выводится в надписи Label1. При этом используется свойство State источника данных. Для вывода этой информации необходимо на главной форме приложения Form1 поместить компонент Label, который находится на закладке Standart палитры компонентов.

Затем нам необходимо поместить на форму компонент DBNavigator, расположенный на вкладке DataControls палитры компонентов. В свойстве компонента DataSource указываем источник данных DataModule1.GradeSrc, которым будет управлять наш компонент. Теперь мы можем управлять оценками студента при помощи удобного компонента. Внешний вид формы после наших изменений, показан на рис.1

Рис.1. Главная форма приложения с кампонентом DBNavigator.

Фильтрация записей

Фильтрация - это задание ограничений для записей, отбираемых в набор данных. Напомним, что набор данных представляет собой записи, выбранные из одной или нескольких таблиц. Состав записей в наборе данных в данный момент времени зависит от установленных ограничений, в том числе и от фильтров. Система Delphi дает возможность осуществлять фильтрации записей:

  •  по выражению;
  •  по диапазону.

По умолчанию фильтрация записей не ведется, и набор данных Table содержит все записи связанной с ним таблицы БД, а в набор данных Query включаются все записи, удовлетворяющие SQL-запросу, содержащемуся в свойстве sql. Фильтрация похожа на SQL-запросы, но является менее мощным средством. По сравнению с SQL-запросами фильтрация менее эффективна, т. к. ограничивает количество записей, видимых в наборе.

Фильтрация по выражению.

При использовании фильтрации по выражению набор данных ограничивается записями, удовлетворяющими выражению фильтра, задающему условия отбора записей.

Достоинством фильтрации по выражению является то, что она применима к любым полям, в том числе к неиндексированным. В связи с тем, что в процессе отбора просматриваются все записи таблицы, фильтрация по выражению эффективна при небольшом количестве записей.

Для задания выражения фильтра используется свойство Filter типа string. Фильтр представляет собой конструкцию, в состав которой могут входить следующие элементы:

  •  имена полей таблиц;
  •  литералы;
  •  операции сравнения;
  •  арифметические операции;
  •  логические операции;
  •  круглые и квадратные скобки.

Если имя поля содержит пробелы, то его заключают в квадратные скобки, в противном случае квадратные скобки необязательны.

Литерал представляет собой значение, заданное явно, например, число, строка или символ. Отметим, что имена переменных в выражении фильтра использовать нельзя. Если в фильтр требуется включить значение переменной или свойства какого-либо компонента, то это значение должно быть преобразовано в строковый тип.

Операции сравнения представляют собой обычные для языка Pascal отношения <, >, =, <=, >= и <>. Арифметическими являются операции +, -, * и / (сложения, вычитания, умножения и деления, соответственно). В качестве логических операций можно использовать and, or и not (логическое умножение, сложение и отрицание, соответственно). Круглые скобки применяются для изменения порядка выполнения арифметических и логических операций.

В качестве примеров задания условий фильтрации приведем следующие выражения:

Salary <= 2000

Post ='Лаборант' OR Post = 'Инженер'

Первое выражение обеспечивает отбор всех записей, для которых значение поля оклада (salary) не превышает 2000. Второе выражение обеспечивает отбор записей, поле должности (post) которых содержит значение лаборант или инженер.

Если выражение фильтра не позволяет сформировать сложный критерий фильтрации,  то  в дополнение  к  нему  можно  использовать  обработчик  события OnFilterRecord.

Для активизации и деактивизации фильтра применяется свойство Filter типа Boolean. По умолчанию это свойство имеет значение False, и фильтрация выключена. При установке свойству Filtered значения True фильтрация включается, и в набор данных отбираются записи, которые удовлетворяют фильтру, записанному в свойстве Filter. Если выражение фильтра не задано (по умолчанию), то в набор данных попадают все записи.

Параметры фильтрации задаются с помощью свойства FilterOptions типа TFiiterOptions. Это свойство принадлежит к множественному типу и может принимать комбинации двух значений:

  •  foCaseInsensitive — регистр букв не учитывается, т. е. при задании фильтра Post = 'Водитель' слова Водитель, ВОДИТЕЛЬ или водитель будут восприняты как одинаковые. Значение foCaseInsensitive рекомендуется отключать, чтобы различать слова, написанные в различных регистрах.
  •  foNoPartialcompare — выполняется проверка на полное соответствие содержимого поля и значения, заданного для поиска. Обычно применяется для строк символов. Если известны только первые символы (или символ) строки, то нужно указать их в выражении фильтра, заменив остальные символы на звездочки * и выключив значение foNoPartialcompare. Например, при выключенном значении foNoPartialcompare для фильтра Post = 'В*' будут отобраны записи, у которых в поле Post содержатся значения Водитель, вод., Вод-ль или Врач.

По умолчанию все параметры фильтра выключены, и свойство FilterOptions имеет значение [ ].

Рассмотрим в качестве примера обработчики событий формы, используемой для фильтрации записей набора данных по выражению. Вид формы приведен на рис.2.

Управление фильтрацией набора данных выполняется с помощью двух кнопок и поля редактирования. Поместите на форму компонент Edit и задайте ему имя edtFilter и два компонента Button – первый с именем btnFilter, второй - btnAllRecord. При нажатии кнопки btnFilter с заголовком «Фильтровать» фильтр активизируется путем присваивания значения True свойству Filtered набора данных. Редактор edtFilter предназначен для задания выражения фильтра. При активизации фильтра происходит отбор записей, которые удовлетворяют заданному в выражении условию. При нажатии кнопки btnAllRecord с заголовком «Все записи» фильтр отключается, при этом показываются все записи.

Рис.2. Фильтрация записей.

Ниже приведены три обработчика событий модуля формы Form1 нашего приложения.

procedure TfrmMain.FormCreate(Sender: TObject);

begin

    DataModule1.tblGrade.FilterOptions:=[foCaseInsensitive];

  DataModule1.tblGrade.Filtered:=false;

end;

procedure TfrmMain.btnFilterClick(Sender: TObject);

begin

 DataModule1.tblGrade.Filtered:=true;

 DataModule1.tblGrade.Filter:=edtFilter.Text;

end;

procedure TfrmMain.btnAllRecordClick(Sender: TObject);

begin

  DataModule1.tblGrade.Filtered:=false;

end;

Включение и выключение фильтра осуществляется через свойство Filtered. Фильтрация выполняется без учета регистра букв.

В приведенном примере пользователь должен самостоятельно набирать выражение фильтра. Это предоставляет пользователю достаточно широкие возможности управления фильтрацией, но требует от него знания правил построения выражений.

Часто удобно предоставить пользователю список готовых выражений (шаблонов) для выбора. При этом пользователь получает также возможность редактировать выбранное выражение и корректировать весь список. Такой режим реализуется, например, с помощью компонентов ComboBox и Memo.

Если набор условий фильтрации ограничен и не изменяется, то пользователь может управлять отбором записей с помощью таких компонентов, как независимые (CheckBox) и зависимые (RadioButton) переключатели.

Рассмотрим в качестве примера обработчики событий формы приложения, в которой пользователю предоставлена возможность управлять фильтрацией по двум полям либо совсем отключать фильтрацию.

Условие фильтрации по полю Datapostup задана в виде двойного неравенства на этапе разработки приложения и при выполнении приложения не может быть изменено пользователем. Пользователь может задавать в этом неравенстве минимальное и максимальное значения даты. Фильтрация записей присходит при нажатии кнопки Фильтровать. В обработчике события нажатия этой кнопки на основании выбранного для фильтрации поля и введенных пользователем значений происходит автоматическое формирование выражения фильтра.

Под таблицей Студенты расположим компонент TGroupBox, расположенный на вкладке Standart палитры компонентов, на него поместим три компонента RadioButton, которые назовем соответственно rbGroup – по номеру групы,  rbData – по дате, rbNoFilter – отсутствие фильтра.

Напротив компонента с именем rbGroup расположим компонент Edite с именем edtGroup, напротив копонента rbData расположим два компонента DateTimePicker, который находится на вкладке Win32 палитры компонентов. Здесь же разместим кнопку с именем btnFilter2. Внешний вид получившейся формы отображен на рис. 3.

Рис.3. Управление фильтрацией по фыражению

Ниже приведены обработчики событий модуля формы frmMain приложения.

procedure TfrmMain.FormCreate(Sender: TObject);

begin

 DataModule1.tblStudents.Filter:=' ';

 DataModule1.tblStudents.FilterOptions:=[foCaseInsensitive];

 DataModule1.tblStudents.Filtered:=true;

end;

//обработчик нажатия кнопки «Фильтровать»

procedure TfrmMain.btnFilter2Click(Sender: TObject);

begin

with  DataModule1.tblStudents do

 begin

    //фильтрация по номеру группы

    if frmMain.rbGroup.Checked then

    Filter:='Group='+frmMain.edtGroup.Text;

    //фильтрация по диапазону даты поступления

    if frmMain.rbData.Checked then

     Filter:='Datapostup>'+''''+DateToStr(frmMain.DateTimePicker1.Date)+''''

             +'and Datapostup<'+''''+DateToStr(frmMain.DateTimePicker2.Date)+'''';

    //Отсутствие фильтрации

    if frmMain.rbNoFilter.Checked then

    Filter:='';

 end

end;


 

А также другие работы, которые могут Вас заинтересовать

42564. Гиперссылки в HTML-документах 36 KB
  Гиперссылки в HTMLдокументах Шаблон элемента гиперссылки имеет вид: href= Адрес ссылки текст для щелчка отсылающий по адресу ссылки Каждый документ файл в Интернете имеет адрес называемый Универсальным указателем ресурсов uniform resource loctor URL Поэтому атрибут href элемента гиперссылки А задающий адрес ссылки в общем случае имеет шаблон: href= URL или href= Протокол: Адрес ссылки Ссылки к ресурсам Интернета по протоколу HTTP Атрибут href задающий адрес ссылки в случае обращения к WEBресурсу Интернета имеет шаблон: href=...
42565. Текстовый редактор Microsoft Word 427 KB
  Харьков 2010 Цель работы: получить практические навыки работы в текстовом редакторе Microsoft Word. Порядок выполнения работы: Запустить текстовый редактор Word. Выполнить рисунок в графическом редакторе Pint и поместить его на лист редактора Word.
42566. Организация HTML-документов с помощью фреймов 48 KB
  Организация HTMLдокументов с помощью фреймов Фреймы это области которые создаются в окне браузера для одновременного просмотра нескольких документов. При создании страницы с фреймами разрабатывается несколько HTMLфайлов которые отличаются по своему назначению. Шаблон элемента FRMESET Для создания WEBстраницы с фреймами в языке HTML существует элемент FRMESET. Второй этап создания страницы с фреймами: подготовка HTMLфайлов для каждой области деления экрана с помощью элемента FRME В документе раскладки элемент FRMESET используется...
42567. Понятие социального статуса. Виды статусов 15.41 KB
  Социальный статус — это общее положение личности (группы) в обществе, связанное с определенными правами и обязанностями. Например, статус врача дает индивиду право заниматься лечебной практикой и в то же время обязывает врача исполнять свои функции и роли надлежащим образом
42569. Управление режимами энергосистем и автоматизации 101.5 KB
  Харьков 2011 ТЭС1 : Рэ1=8952 МВт Ропт1=1164 МВт ТЭС2 : Рэ2=1243 МВт Ропт2=1536 МВт ТЭС3 : Рэ3=4899 МВт Ропт3=4867 МВт – необходимо оптимизировать. Блок 31 Блок 32 Блок 33 Отключаем блок №3 ТЭС3 ТЭС1 : Рэ1=8952 МВт Ропт1=1164 МВт ТЭС2 : Рэ2=1243 МВт Ропт2=1536 МВт ТЭС3 : Рэ3=3298 МВт Ропт3=3744 МВт.
42570. Дослідження базових схем підсилюваньних каскадів на польових транзисторах 168 KB
  Среди базовых каскадов на полевых транзисторах на практике наибольше распространение получили каскады с общим истоком аналог ОЭ и истоковые повторители аналог ОК показанные в двух модификациях на рис.4 и отличающиеся способом реализации статического режима: смещение обеспечивается или за счет падения напряжения на резисторе включенном в цепь истока рис. 4 а в или за счет подачи на затвор дополнительного напряжения рис. Рис.
42571. Найти минимальную сумму элементов в строках двумерного массива 45 KB
  Тот же самый результат можно получить и в результате компьютерной проверки. В результате ручной проверки мы доказали, что программа работает правильно.
42572. Командный процессор операционной системы Windows Xp 2000 40 KB
  Харьков 2010 Результаты выполнения работы C: md p10b C: cd p10b C: p10b md Kunchenko C: p10b md Sterlik C: p10b cd Sterlik C: p10b Sterlik copy con Sterlik.txt Sterlik Dmutro p10b ^Z^Z Ctrl Z Z Скопировано файлов: 1 C: p10b Sterlik cd p10b C: p10b cd Kunchenko C: p10b Kunchenko copy con Kunchenko.txt Kunchenko leksey p10b Dir ^Z^Z Ctrl Z Z Скопировано файлов: 1 C: p10b Kunchenko cd p10b C: p10b cd Sterlik C: p10b Sterlik dir w Содержимое папки C: p10b Sterlik [.] sterlik.