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;


 

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

40174. ГЕНЕРАТОРЫ 102 KB
  По форме выходного напряжения классифицируются: генераторы гармонических колебаний и генераторы негармонических колебаний импульсные или релаксацоинные. Ku=U2 U1=Kuωejφkω где Kuω=U2ω U1ω модуль коэффициента усиления на частоте ω; φkω=ψ2ωψ1ω сдвиг фаз между выходным и входным напряжениями Ku на частоте ω; Bu=U1 U2=Buωejφbω где Buω=U1ω U2ω модуль коэффициента передачи на частоте ω; φbω=ψ1ωψ2ω сдвиг фаз между выходным и входным напряжениями четырёхполюсника Bu на частоте ω. Если на входе...
40175. ИСТОЧНИКИ ВТОРИЧНОГО ЭЛЕКТРОПИТАНИЯ 269 KB
  Классификация: 1 устройства согласования уровня напряжения служат для преобразования постоянного или переменного напряжения одного уровня в напряжение другого уровня. 2 устройства согласования стабильности напряжения: сглаживающие фильтры служат для стабилизации мгновенного значения пульсирующего напряжения тока и стабилизаторы служат для стабилизации среднего значения выходного тока напряжения или мощности. 3 устройства согласования частоты: выпрямители преобразователи напряжения переменного тока в напряжение содержащее...
40176. Портфельное инвестирование 24.5 KB
  Если у вас куплены акции двух и более разных компаний из разных отраслей то такое инвестирование можно назвать портфельным. Чтобы достичь успеха в портфельном инвестировании необходимо грамотно подбирать бумаги компаний. Если инвестор нацелен на получение максимальной прибыли то и риски будут весьма велики в такой портфель войдет большинство примерно 8090 процентов акции молодых динамично развивающихся компаний с большими перспективами роста. Когда вы нацелены на хорошую прибыль но не готовы принять на себя большие риски тогда...
40177. Финансовые риски, связанные с вложениями определение, классификация 32 KB
  Финансовые риски связанные с вложениями определение классификация. Финансовые риски связаны с вероятностью потерь финансовых ресурсов т. Под финансовыми рисками понимается вероятность возникновения непредвиденных финансовых потерь снижения прибыли доходов потери капитала и т. Финансовые риски подразделяются на три вида: 1.
40178. Дивидендная политика корпорации 22.5 KB
  Дивидендная политика корпорации Дивидендная политика политика акционерного общества в области распределения прибыли компании то есть распределения дивидендов между держателями акций. Дивидендная политика формируется советом директоров. Термин дивидендная политика в принципе связан с распределением прибыли в акционерных обществах. В связи с этим в финансовом менеджменте используется более широкая трактовка термина дивидендная политика под которой понимают механизм формирования доли прибыли выплачиваемой собственнику в соответствии с...
40179. Анализ и планирование в системе управления финансами предприятия 33 KB
  Анализ и планирование в системе управления финансами предприятия. это вопервых определение будущего предприятия и его структурных подразделений вовторых проектирование желаемых результатов деятельности предприятия и втретьих выбор методов и средств ресурсов и определение последовательности действий в достижении желаемых результатов. Последовательность планирования обычно такова: определение целей; моделирование будущего состояния предприятия; определение способов его достижения; декомпозиция заданных желаемых результатов...
40180. Сущность и назначение финансового анализа в организации. Оценка финансового состояния 26 KB
  Сущность и назначение финансового анализа в организации. Оценка финансового состояния Неотъемлемой частью финансовой работы на предприятии являются финансовый анализ и оценка финансового состояния предприятия. Основной целью финансового анализа является установление и определение финансового положения предприятия. Задачами анализа выступают: выявление произошедших за период изменений значений финансовых показателей; определение наиболее вероятных тенденций изменения финансового состояния предприятий; определение факторов влияющих на...
40181. Финансовое планирование на предприятии 35.5 KB
  Финансовое планирование на предприятии Финансовое планирование выбор целей по реальности их достижения с имеющимися финансовыми ресурсами в зависимости от внешних условий и согласование будущих финансовых потоков выражается в составлении и контроле за выполнением планов формирования доходов и расходов учитывающих текущее финансовое состояние выраженные в денежном эквиваленте цели и средства их достижения. В рыночной экономике финансовое планирование собственной деятельности может осуществляться отдельным индивидом семьёй организацией...
40182. Принципы и методы финансового планирования 24 KB
  Принципы и методы финансового планирования Методы: Автоматический. Принципы: Процесс планирования должен осуществляться при использовании таких принципов как: гибкостьпостоянная адаптация к изменениям среды функционирования предприятия для чего необходима корректировка плана при различных изменениях внешней и внутренней среды непрерывность коммуникативность участие адекватность комплексность многовариантность итеративностьнеоднократная увязка уже составленных разделов планаитерации что обусловливает творческий...