Russian Belarusian English German Japanese Ukrainian

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

CuBook05

Наборы данных могут находиться в различных режимах. Текущий режим набора данных определяется свойством state типа TDataSetstate. Оно доступно для чтения при выполнении приложения и может быть использовано только для текущего режима. Для перевода набора данных в требуемый режим используются специальные методы. Они могут вызываться явно (указанием имени метода) или косвенно (путем управления соответствующими визуальными компонентами, например, навигатором DBNavigator или сеткой DBGrid).
 
Набор данных может находиться в одном из перечисленных режимов:
  • dsInactive (неактивен) - набор данных закрыт и доступ к его данным невозможен. В этот режим набор данных переходит после своего закрытия, когда свойству Active установлено значение false;
  • dsBrowse (навигация по записям набора данных и просмотр данных) - в этот режим набор данных переходит так:
    • из режима dsinactive при установке свойству Active значения true;
    • из режима dsEdit при вызове метода Post или Cancel;
    • из режима ds Insert при вызове метода Post или Cancel.
  • dsEdit (редактирование текущей записи) - в этот режим набор данных переходит из режима dsBrowse при вызове метода Edit;
  • dsInsert (вставка новой записи) - в этот режим набор данных переходит из режима dsBrowse при вызове методов Insert, InsertRecord, Append или AppendRecord;
  • dssetKey (поиск записи, удовлетворяющей заданному критерию) - в этот режим набор данных переходит из режима dsBrowse при вызове методов SetKey, SetRangeXXX, FindKey, GotoKey, FindNearest или GotoNearest. Возможен только для компонента типа TTable, т.к. для компонента типа TQuery отбор записей осуществляется средствами языка SQL;
  • dsCaicFieids (расчет вычисляемых полей) - используется обработчик события OnCalcFields;
  • dsFiiter (фильтрация записей) - в этот режим набор данных автоматически переходит из режима dsBrowse каждый раз, когда выполняется обработчик события onFilterRecord. В режиме блокируются все попытки изменения записей. После завершения работы обработчика события onFilterRecord набор данных автоматически переводится в режим dsBrowse;
  • dsNewVaiue (обращение к свойству NewValue компонента поля);
  • dsOldValue (обращение К свойству OldValue компонента поля);
  • dsCurvalue (обращение к свойству curvalue компонента поля);
  • dsBiockRead (запрет изменения элементов управления и генерации событий при вызове метода Next);
  • dsinternaicaic (указание на необходимость вычислять значения полей, свойство FieldKind которых имеет значение fklnternaicalc);
  • dsOpening (открытие набора данных).
Иногда при описании операций, выполняемых с записями набора данных, под режимом редактирования подразумевается не только режим dsEdit изменения полей текущей записи, но и режим dsInsert вставки новой записи. Тем самым режим редактирования понимается в широком смысле слова как режим модификации набора данных. Набор данных использует режимы dsNewValue, dsOldValue, dsCurValue, dsBiockRead и dsinternaicaic для собственных нужд, обычно программист не анализирует их.
 
При выполнении программы можно определить режим набора данных с помощью одноименного свойства state типа TDataSetstate самого набора данных и связанного с ним источника данных DataSource. При изменении режима набора данных для источника данных DataSource генерируется событие OnStateChange типа TNotifyEvent.
 
Рассмотрим пример:
void __fastcall TForm1::DataSource1StateChange(TObject *Sender)
{
switch (Table1->State) {
case dslnactive: {
Label1->Caption = "Набор данных закрыт";
break; }
case dsBrowse: {
Label1->Caption = "Просмотр набора данных";
break; }
case dsEdit: {
Label1->Caption = "Редактирование набора данных";
break; }
case dsinsert: {
Label1->Caption = "Вставка записи в набор данных";
break; }
default: Label1->Caption = "Режим не определен";
}
В приведенной процедуре определяется режим набора данных, связанного с источником данных DataSource1, и информация об этом режиме выводится в надписи Label1. При этом используется свойство state набора данных (Table1), а не источника данных. Код, выполняющий анализ режима, помещен в обработчик события OnStateChange компонента DataSource1.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий