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;


 

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

28375. Авторские и смежные права, срок их действия 14.7 KB
  Авторские и смежные права срок их действия. Личные неимущественные права право авторства право на имя и право на защиту репутации автора охраняются бессрочно. Имущественные права ограничены сроком жизни автора и 70 годами после его смерти. Однако если автор в течение этого периода раскроет свою личность или его личность не будет далее оставлять сомнений то применяется общий срок действия авторского права в течение жизни и 70 лет после смерти; б авторское право на произведение созданное в соавторстве действует в течение всей жизни и...
28376. Защита авторских и смежных прав 14.34 KB
  Защита авторских и смежных прав. Защита авторских и смежных прав – это совокупность мер целью которых является восстановление и признание этих прав в случае их нарушения. В зависимости от отрасли права обеспечивающей защиту авторских и смежных прав выделяют следующие способы защиты. Гражданскоправовой способ защиты – возмещение имущественного ущерба автору или иному правообладателю.
28377. Понятие и субъекты патентного права 14.75 KB
  Понятие и субъекты патентного права. Патентное право в объективном смысле совокупность норм регулирующих имущественные и личные неимущественные отношения возникающие в связи с признанием авторства и охраной изобретений полезных моделей и промышленных образцов установлением режима их использования материальным и моральным стимулированием и защитой права их авторов и патентообладателей. Субъектами патентного права являются авторы изобретений полезных моделей и промышленных образцов патентообладатели а также другие лица не авторы...
28378. Объекты патентного права: понятие, признаки 14.67 KB
  Объектами патентного права являются изобретения полезные модели и промышленные образцы. Органом осуществляющим акт признания новшества в качестве изобретения является федеральный орган исполнительной власти по интеллектуальной собственности Федеральная служба по интеллектуальной собственности патентам и товарным знакам Роспатент. В качестве изобретения согласно ст. Уровень техники служащий критерием новизны изобретения включает любые сведения ставшие общедоступными в мире до даты приоритета изобретения.
28379. Оформление права на изобретение, полезную модель, промышленный образец 15.02 KB
  Оформление права на изобретение полезную модель промышленный образец. Права на изобретение полезную модель и промышленный образец охраняет закон и подтверждает патент на изобретение и промышленный образец и свидетельство на полезную модель патент. Документы которые должны быть в заявке: на изобретение: заявление о выдаче патента указываются автор лицо на имя которого испрашивается патент их местонахождение; полное описание изобретения; формула изобретения выражающая его сущность; чертежи и иные необходимые материалы; документ...
28380. Право автора и патентообладателей, их защита 13.61 KB
  Право автора и патентообладателей их защита. патентообладателей. Защита прав авторов и патентообладателей осуществляется как в судебном так и в адм. Административный порядок защиты прав авторов и патентообладателей предполагает их обращение в специальное подразделение федерального органа по интеллектуальной собственности.
28381. Понятие и виды товарного знака и знака обслуживания, срок их действия 14.33 KB
  В качестве товарных знаков могут быть зарегистрированы словесные изобразительные объемные и другие обозначения или их комбинации. В качестве словесных товарных знаков могут регистрироваться существующие слова Camel– верблюд сочетания слов Веселый молочник искусственные слова CocaCola сочетания букв аббревиатуры – ВАЗ BMW ицифр газета 777. В качестве изобразительных товарных знаков выступают разнообразные рисунки и символы фирма Pringles использует в качестве товарного знака изображение усатого мексиканца компания...
28382. Оформление и использование права на товарный знак 14.49 KB
  Товарный знак подлежит обязательной регистрации в патентном ведомстве. Заявка должна содержать: заявление о регистрации товарного знака; заявляемое обозначение; перечень товаров в отношении которых испрашивается регистрация товарного знака и которые сгруппированы по классам Международной классификации товаров и услуг для регистрации знаков; описание заявленного обозначения; документ подтверждающий уплату пошлины; устав коллективного знака если заявка подается на его регистрацию. При регистрации товарного знака производятся две экспертизы ...
28383. Гражданско-правовая защита прав владельцев товарных знаков и знаков обслуживания 15.01 KB
  Каждое лиц вступающее в гражданскоправовые отношения может защищать свои нарушенные или оспариваемые права охраняемые законом интересы. Поскольку права на объекты интеллектуальной собственности являются гражданскими правами вопрос о применении мер защиты решает владелец этих прав а не какойлибо государственный орган: гражданские права есть частные права. Выбирая юрисдикционную форму защиты лицо чьи права нарушены или оспариваются прибегает к помощи правоохранительных органов. Административноправовая защита может быть осуществлена...