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;


 

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

44535. Старая идеология новой семьи: демографический национализм России и Украины 262.55 KB
  В средствах массовой информации в политических и академических дискуссиях даже в документах женского движения подчеркивается возрастание социальной значимости традиционных женских ролей жены и матери возвращение мужчине экономической ответственности за обеспечение семьи важная роль традиционно крепкой украинской семьи в процессах консолидации и возрождения нации значение женской репродуктивной функции для усиления позиций украинского этноса. Идеализация традиционной семьи предполагает дистанцирование от коммунистического опыта...
44536. Их нравы: американская семья в зеркале советской пропаганды холодной войны 142.76 KB
  Брат –дегенерат†–так портретируется “светская американская семья†в одном из выпусков советского сатирического журнала “Крокодил†за 1949 год илл. Основными источниками стали журналы “Крокоди놓Работница†и “Семья и школа†а также пропагандистские брошюры о семье относящиеся в целом к периоду “холодной войны†т. В результате заморский гость приходит к выводу что “ему не повезло что он нарвался на двух опытных агентов советской пропаганды†Крокодил 1947 № 29 8. Главным мотивом...
44537. Право матери солдата: инстинкт заботы или гражданский долг? 202.84 KB
  В связи с этим общественные объединения “солдатских матерей†представляют интересный объект для социологического анализа так как их деятельность затрагивает одновременно интересы семьи роли матери и становления принципов правового государства и развития гражданского общества в России. Социологические основания деятельности организаций “солдатских матерей†как в рамках гендерной теории так и теории военногражданских отношений и стали предметом научной рефлексии в представленной статье. Эмпирическим материалом в данной статье...
44538. «СЫН ЗА ОТЦА НЕ ОТВЕЧАЕТ?»: комплекс безотцовщины в советской литературе 176.26 KB
  Проблема отцовства и безотцовщины явно тяготеет к сакральным отношениям Бога–Отца и Бога–Сына. Отец–учитель В 1920––е годы префигуративный конфликт явившись основой сюжетных коллизий многих произведений нередко носил трагический характер смертельного противоборства отца и сына. Наконец третье: гибель сына заставляет атамана в одно мгновение забыть о борьбе за ту идею которая и привела его к убийству заставляет понять отца что его существование в этом мире уже бессмысленно: Медленно словно боясь разбудить вверх лицом повернул...
44539. ПРОСТРАНСТВО (БЕЗ) СЕМЬИ 378.18 KB
  Модель семейных отношений сформированная на основе определенного опыта “материнство†переносилась на отношения и опыт сформированные в условиях длительной или постоянной изоляции “сиротствоâ€. Ведь каждый знак как способ построения социальных отношений как средство человеческого взаимодействия продолжает одновременно существовать в качестве посредника между выражением этих отношений и его восприятием становясь тем самым частью знаково оформленного “Яâ€. И структурный анализ “репертуара речевых формâ€...
44540. ТАКИЕ СПОРТИВНЫЕ ДЕВЧонКИ – КАК МАЛЬЧИКИ!: о воспитании детей в постсоветской России 233.84 KB
  Не избежали перемен и отношения к женщинам и мужчинам как членам этого изменяющегося общества – в данном случае перемены сопровождалось обширной дискуссией о необходимости развивать новые отношения между полами в постсоветском обществе о новом понимании мужских и женских ролей и соответственно о воспитании нового поколения также как о перевоспитании нынешнего. Во время проведения исследования мною были собраны и проанализированы более 300 публикаций касающихся женщин их роли в обществе в политической жизни в сфере труда в...
44541. УРОКИ ВОСПИТАНИЯ ВАНИ СМИТА (дети в российско-американских браках) 200.05 KB
  Во время Олимпийских игр они болеют за команды России и не упускают случая посмотреть телепередачи оттуда даже за счет местных программ. Кроме того из-за экономических трудностей в России многие русские женщины особенно матери маленьких детей порой ищут лучшего будущего в браке с иностранцами. Большая их часть находится сейчас в США меньшая – в России. Сегодня в Штатах многие отцы хотят присутствовать при рождении своих детей что кажется многим людям из России странным и едва ли не варварским обычаем.
44542. УТОМЛЕННЫЕ СОЛНЦЕМ, УНЕСЕННЫЕ ВЕТРОМ: суррогатное материнство в двух культурах 264 KB
  Этимология подтверждает эти отношения не хуже психоанализа: английское “mmmy†очевидно происходит от “mm†но русское няня которое кажется ни на что не похожим симметрично дядьке. РОДСТВО КРОВНОЕ И МОЛОЧНОЕ Романтизация Mmmy и няни в американской и русской культурах накладывалась на экономическую и сексуальную эксплуатацию обычную для обществ столь стратифицированных в сословных расовых и гендерных измерениях. Американская Mmmy чаще всего соединяла обе эти роли. Хотя в литературе и фильмах Mmmy чаще всего изображалась полной...
44543. ЧЕМ МУЖИКА КОРМИТЬ, ЛУЧШЕ РЕБЕНКА ВОСПИТЫВАТЬ ОДНОЙ: социальный портрет материнских семей 214.49 KB
  Основными факторами формирования неполных семей как известно являются разводы не компенсируемые последующим вступлением в брак или раздельное по разным обстоятельствам проживание супругов; овдовения из-за преждевременной смерти одного из родителей ребенка детей внебрачные рождения при условии одиночества родителя. С другой стороны некоторые одинокие матери впоследствии выходят замуж но в актах записи гражданского состояния статус их детей не меняется за исключением фактов усыновления удочерения и они продолжают считаться...