2.3.5. Параметры выборки¶
2.3.5.1. Имена параметров¶
2.3.5.1.1. Служебные префиксы¶
Для доступа к параметрам используются следующие префиксы:
- super$, - параметры мастера;
- old$, - предыдущее значение. Используется только для чтения и не может использоваться для установки значений;
- filter$, - параметры фильтрации выборки.
При обращении к параметрам допускается также использование комбинаций префиксов со следующими ограничениями:
- префикс super$ может использоваться несколько раз, но должен всегда находиться перед именем параметра и другими префиксами;
- префикс old$ может использоваться только один раз, должен находиться перед именем параметра и префиксом filter$, если таковой имеется;
- префикс filter$ может встречаться только один раз и указываться непосредственно перед именем параметра.
<pascal>
id1 := GetVar('id'); //получение значения параметра 'id' текущей выборки
id2 := GetVar('super$id'); //получение значения параметра 'id' мастер-выборки
id3 := GetVar('super$super$id'); //получение значения параметра 'id' мастер-выборки мастер-выборки
flt1 := GetVar('filter$flt'); //получение значения параметра фильтрации 'flt' текущей выборки
flt2 := GetVar('super$filter$flt'); //получение значения параметра фильтрации 'flt' мастер-выборки
flt2OldValue := GetVar('super$old$filter$flt'); //получение предыдущего значения параметра фильтрации 'flt' мастер-выборки
</pascal>
Служебные префиксы используются только для получения доступа к уже существующим параметрам и не могут использоваться при создании новых параметров. При необходимости создать внутренний параметр в мастере выборки используйте свойство ‘Master’.
<pascal>
Selection.Master.AddVar('param1', 'value', ftString); //Правильно
Selection.AddVar('super$param1', 'value', ftString); //Неправильно
</pascal>
2.3.5.2. Типы параметров¶
| TFieldType | Описание | Примечание, допустимые значения |
|---|---|---|
| ftUnknown | неизвестный / не определённый тип | Используется для добавления параметров, тип которых будет определён по значению |
| ftString | символ или строка | |
| ftSmallInt | 16-битное целое число | -32767..32768 |
| ftInteger | в Global эквивалентен типу ftFloat | |
| ftWord | 16-битное беззнаковое целое число | 0..65535 |
| ftBoolean | false, true; 0, 1; при установке значения, отличного от перечисленных, будет установлено true | |
| ftFloat | число с плавающей точкой | |
| ftCurrency | денежный тип | |
| ftBCD | ||
| ftDate | дата | |
| ftTime | время | |
| ftDateTime | дата и время | |
| ftBytes | ||
| ftVarBytes | ||
| ftAutoInc | ||
| ftBlob | ||
| ftMemo | ||
| ftGraphic | ||
| ftFmtMemo | ||
| ftParadoxOle | ||
| ftDBaseOle | ||
| ftTypedBinary | ||
| ftCursor | ||
| ftFixedChar | ||
| ftWideString | ||
| ftLargeInt | ||
| ftADT | ||
| ftArray | ||
| ftReference | ||
| ftDataSet | ||
| ftOraBlob | ||
| ftOraClob | ||
| ftVariant | Данные, не привязанные к определённому типу данных | |
| ftInterface | ||
| ftIDispatch | ||
| ftGuid | ||
| ftTimeStamp | ||
| ftFMTBcd |
Для возможности осуществления корректного сравнения значений параметров, непосредственно сами значения (Value: Variant) приводятся к типу соответствующему типу данных параметра.
Таблица соответствия типов:
| TFieldType | TVarType |
|---|---|
| ftUnknown | varEmpty |
| ftString | varString |
| ftSmallint | varInteger |
| ftInteger | varInteger |
| ftWord | varInteger |
| ftBoolean | varBoolean |
| ftFloat | varDouble |
| ftCurrency | varCurrency |
| ftBCD | varCurrency |
| ftDate | varDate |
| ftTime | varDate |
| ftDateTime | varDate |
| ftBytes | varEmpty |
| ftVarBytes | varEmpty |
| ftAutoInc | varInteger |
| ftBlob | varEmpty |
| ftMemo | varString |
| ftGraphic | varEmpty |
| ftFmtMemo | varEmpty |
| ftParadoxOle | varEmpty |
| ftDBaseOle | varEmpty |
| ftTypedBinary | varEmpty |
| ftCursor | varEmpty |
| ftFixedChar | varString |
| ftWideString | varOleStr |
| ftLargeint | varEmpty |
| ftADT | varEmpty |
| ftArray | varEmpty |
| ftReference | varEmpty |
| ftDataSet | varEmpty |
| ftOraBlob | varEmpty |
| ftOraClob | varEmpty |
| ftVariant | varVariant |
| ftInterface | varUnknown |
| ftIDispatch | varDispatch |
| ftGuid | varString |
| ftTimeStamp | varEmpty |
| ftFMTBcd | varEmpty |
Если типу данных соответствует тип значения varEmpty, то значение будет присвоено “как есть”, без приведения его к varEmpty. В случае если значение не может быть представлено в соответствующем с типом данных виде будет сгенерировано исключение.
В случаях когда тип данных параметра указан как ftUnknown, он будет определён после того как параметру присвоят значение, отличное от null, unassigned и varEmpty, в соответствии со следующей таблицей:
| TVarType | TFieldType |
|---|---|
| varSmallint | ftSmallInt |
| varShortInt | ftSmallInt |
| varByte | ftSmallInt |
| varWord | ftInteger |
| varInteger | ftInteger |
| varCurrency | ftBCD |
| varLongWord | ftFloat |
| varSingle | ftFloat |
| varDouble | ftFloat |
| varDate | ftDateTime |
| varBoolean | ftBoolean |
| varString | ftString |
| varOleStr | ftString |
| varInt64 | ftLargeInt |
| varSQLTimeStamp | ftTimeStamp |
| varFMTBcd | ftFMTBcd |
| Все остальные | ftUnknown |
После добавления, или загрузки внутренние параметры будут существовать на протяжении всей жизни экземпляра объекта выборки, и уничтожатся только при его разрушении. Закрытие или обновление (Refresh) выборки не приведёт к уничтожению уже добавленных параметров, вне зависимости от того являются они стойкими или нет. В текущей реализации также отсутствует возможность удаления параметров, а это значит что однажды добавленные стойкие параметры всегда будут в ней присутствовать. Для удаления таких параметров можно использовать возможность их повторного добавления с указанием того что они являются не стойкими. После этого они больше не будут сохраняться при закрытии и восстанавливаться при открытии выборки.
2.3.5.3. Стойкость параметров¶
Параметры выборки могут быть “стойкие” (persistent) или “не стойкие” (по умолчанию). Если параметр является стойким, то при закрытии выборки он сохранит свое значение и восстановит его при новом открытии этой выборки, после вызовов OnLoadMeta, OnFilterInit, до вызова BeforeOpen. При закрытии датасета и новом открытии настройки заново не загружаются. У процедуры создания параметров выборки TbtkScriptSelectionObject.AddVar есть параметр APersistence, который указывает, является ли параметр стойким, а также задаёт место, где будет храниться значение параметра.
procedure TbtkScriptSelectionObject.AddVar(
AName: String;
AValue: Variant;
AType: Variant;
APersistence: TbtkPersistentType default ptNone);
Параметр APersistence имеет тип TbtkPersistentType. Описание принимаемых им значений:
- ptNone — параметр не является “стойким” и будет удален при закрытии выборки. Является значением по умолчанию.
- ptRegistry — параметр является “стойким”, после закрытия выборки его значение будет сохранено в реестре приложения, а при открытии выборки — восстановлено оттуда.
Пример:
<pascal>
AddVar('PersistVar', 'DefaultValue', ftString, ptRegistry);
<pascal>
2.3.5.4. Алгоритм поиска параметров¶
При обращении к параметрам через паскаль операции используется следующий алгоритм поиска параметра:
имя параметра начинается с префикса ‘super$’
отбрасываем префикс, ищем параметр в мастере
имя параметра начинается с префикса ‘filter$’
отбрасываем префикс, ищем в параметрах фильтрации
если параметр не найден
ищем параметр в мастере
ищем в атрибутах выборки
если параметр не найден
ищем в параметрах фильтрации
ищем во внутренних параметрах
если параметр не найден
ищем параметр в мастере
2.3.5.5. Методы паскаль операций¶
2.3.5.5.1. VarExists¶
Для проверки существования параметров используется функция VarExists.
procedure VarExists(AName: string);
2.3.5.5.2. SelfVarExists¶
2.3.5.5.3. AddVar¶
Для добавления внутренних параметров выборки используется метод AddVar.
procedure AddVar(
AName: string;
AValue: Variant;
ADataType: TFieldType;
APersistent: TbtkPersistentType);
- ADataType - тип добавляемого параметра;
- APersistent - флаг стойкости параметра.
Но при добавлении новых внутренних параметров следует избегать использования зарезервированных префиксов в названиях и не использовать в качестве названия пустую строку.
<pascal>
Selection.AddVar('var1', 'Value', ftString, ptRegistry); //добавление строкового стойкого параметра в текущую выборку
AddVar('id', 123, ftInteger, ptNone); //добавление не стойкого целочисленного параметра в текущую выборку
CustomSel.AddVar('anyVar', null, ftUnknown); //добавление не стойкого параметра типа ftUnknown в выборку "CustomSel"
<pascal>
<pascal>
Selection.AddVar('Var1', 'Value', ftFloat); //задаваемое значение ('Value') невозможно представить в указанном типе (ftFloat)
AddVar('', 123, ftInteger); //не указано имя параметра
CustomSel.AddVar('super$anyVar', null, ftUnknown); //в имени параметра используется зарезервированный префикс 'super$'
<pascal>
2.3.5.5.4. SetVar¶
Метод SetVar используется для установки значений:
- внутренним параметрам;
- параметрам фильтрации;
- полям выборки.
2.3.5.5.5. GetVar¶
2.3.5.5.6. GetSelfVar¶
2.3.5.5.7. SetVarDesc¶
2.3.5.5.8. GetVarDesc¶
2.3.5.6. Служебные параметры¶
Раздел находится в разработке.
Пока описаны не все параметры.
| Параметр | Доступ | Описание | Значение по умолчанию |
|---|---|---|---|
| Caption | Чтение и запись | Основная часть заголовка фрейма | DisplayName |
| CaptionExt | Чтение и запись | Расширение заголовка фрейма | ‘’ |