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;


 

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

58748. Уроки информационной войны США против России во время вооруженного конфликта в Южной осетии 202 KB
  Главной особенностью этой войны стал тот факт что несмотря на то что сражения на поле боя велись между российскими и грузинскими войсками в ходе информационного противоборства России пришлось столкнуться со всей мощью пропагандистской машины Соединенных Штатов Америки и целого ряда других союзных им государств. На данный момент сложно говорить о том были ли конкретная дата и сценарий вторжения грузинских войск в Южную Осетию согласованы с американским руководством тем не менее данная агрессия целиком и полностью лежит в русле...
58752. Уроки истории с использованием технологии программированного и модульного обучения 44 KB
  Логика обучения носит линейный характер. Такой вариант программированного обучения в большей степени адаптирован к индивидуальным особенностям учебной деятельности ученика. Опыт использования программированного обучения у нас и за рубежом выявил много сильных его сторон.
58753. История. Краткий курс 1.31 MB
  Австралопитеки стали приспосабливаться к этим изменениям: выгнали животных из пещер и стали там жить стали использовать огонь сначала только поддерживали огонь заниматься охотой и пользоваться одеждой шили из шкур животных. Они размножились и стали расселяться. Те из них кто дошли до Китая стали называться синантропами. Многое не зная они стали поклоняться силам природы.
58754. Выбор изделия. Выполнение эскизов 27 KB
  Основной этап. Развитие абстрактного мышления творческой мысли Организационный этап Приветствие проверка отсутствующих сообщение темы занятия. Основной этап Ознакомление учащихся с правилами техники безопасности.
58756. Стив Джобс. Уроки лидерства 951.5 KB
  Мой новый знакомый представился Стивеном Джобсом председателем совета директоров pple Computer. В то время Стиву было двадцать пять; чуть позже в том же году когда pple стала открытой акционерной компанией его состояние оценивалось примерно в 250 млн долл. Стив любит удивлять людей поэтому до самой последней минуты не сообщает им важную информацию.