| ИНТЕРФЕЙС  ДОСТУПА 
  К  ДАННЫМ  НА  C++ (КЛАСС 
  FCT) | ||
| 
 |  | 
 | 
|  |  | |
| ИНТЕРФЕЙС  НА  C++ | ||
| Переменные класса Fct CrossSize – размер кросса в байтах. MaxDimQty – максимально возможное количество
  измерений, вычисляемое по формуле (CrossSize * 8) –
  1. MaxHrcQty – максимальное количество уровней на
  одном измерении. MaxFncQty – максимальное количество функций (на
  всех пересечениях). Переменные CrossSize,
  MaxDimQty, MaxHrcQty и MaxFncQty задаются при создании новой базы и хранятся в
  файле *.sz. DimsQty – количество измерений данного факта
  (диапазона фактов). сross – указатель
  на байтовый массив. Биты этого массива (кроме нулевого) обозначают
  присутствие измерения в факте (диапазоне). Нулевой бит содержит признак
  витрины. Пример 1: 1001 0011 0010 0000 – битовая маска
  четырехмерного (DimsQty = 4) факта, принадлежащего
  витрине. У базы, содержащей данный факт, CrossSize
  = 2, MaxDimQty = 15. front – признак витрины. higher – номер элемента старшего уровня
  иерархии, являющегося родительским по отношению к данному факту (для
  одномерных фактов). dm – указатель на целочисленный массив,
  перечисляющий номера измерений факта. Например, для случая из Примера 1,   dm[0] = 2, dm[1] = 5, dm[2] = 6, dm[3] = 9 
  (нумерация измерений, начинается с нуля). lv – указатель на целочисленный массив,
  содержащий номера уровней иерархии на указанных измерениях. element – указатель на целочисленный массив,
  содержащий номера элементов на на
  указанных измерениях. fn – указатель на двумерный байтовый
  массив, содержащий значения функций. fns – указатель на целочисленный массив,
  содержащий размеры функций. fncqty – количество функций, заданный
  на данном факте. Функции класса Fct Ini() – конструктор объекта класса,  то есть факта или диапазона фактов.
  Инициализирует переменные CrossSize, MaxDimQty, MaxHrcQty и MaxFncQty и выделяет память под битовую маску. SearchElement(<№ измерения>, <№ уровня>,
  <№ родительского элемента>, <фильтр для функции fn[0]>,
  <длина фильтра>) – находит в базе элемент по заданным параметрам.
  Возвращает номер найденного элемента. Как правило, эта функция применяется
  для поиска уникального факта; в противном случае находит первый попавшийся
  факт, удовлетворяющий условиям. Если
  «№ родительского элемента» = -2, функция ищет элемент, не обращая внимания на
  этот параметр. SearchFact(<признак витрины>) – находит в
  базе факт. Применение этой функции предполагает предварительное задание
  переменных класса: DimsQty, element[.],
  dm[.], lv[.], то есть
  описания искомого факта. Если element[i] = -1, это
  значит, что значение элемента на i-м измерении неизвестно. Функция возвращает
  логическую переменную (найден / не найден) и
  формирует переменные класса: набор element[.] и
  битовую маску *cross для найденного элемента. Примечание: на примере SearchFact видно, что работа с некоторыми функциями класса предполагает как предварительное задание значений переменных класса, так и использование таких переменных, сформированных в результате выполнения функции. AddFact(checkelements, autonumerate, fctsz) – добавляет в базу новый факт. Входные
  параметры: checkelements – признак проверки существования соответствующих одномерных; autonumerate – признак автонумерации;
  используется в случае добавления одномерного факта. Если autonumerate
  = false, предварительно включается функция CheckRepeats(), проверяющая, нет ли на данном измерении и
  уровне иерархии факта с таким номером. Если такой факт уже есть, добавление
  не производится. При добавлении многомерных функция CheckRepeats() запускается в любом случае. fctsz – размер добавляемого факта в байтах. На
  данный момент для вызова функции требуется знание этой величины. Кроме
  того, применение функции AddFact предполагает
  предварительное задание переменных класса: DimsQty,
  front, dm[.], lv[.], element[.] (при autonumerate = true задаем element[0] = -1), higher, fncqty, fn[.], fns[.] (как правило, для многомерных
  fncqty = 0; тогда fn, fns не задаем). AddFact возвращает сообщение об ошибке, если факт не был
  добавлен. Самое распространенное сообщение – «Такой факт уже есть!». Если
  факт был добавлен, возвращается пустая строка. DelFact() – удаляет
  факт. Необходимо предварительно задать переменные, описывающие удаляемый
  факт: DimsQty, front, dm[.], lv[.], element[.] . Возвращает “true”. CheckRepeats() – проверяет
  наличие в базе факта с заданными параметрами: DimsQty,
  dm[.], lv[.], element[.] и front. Возвращает true (такой факт
  есть) или false (такого нет). Crossing(<имя витрины>) – создает в базе множество-витрину в виде
  пересечения заранее описанных множеств. Требуется предварительно добавить в
  файл витрин описание пересекаемых множеств и описание множества-результата
  (витрины). Формирует DimsQty, cross,
  element[.], dm[.] и lv[.] множества-результата. Функция возвращает сообщение
  об ошибке или пустую строку, если нет ошибки. Вырожденный
  случай – пересечение одного множества с самим собой. В этом случае заданное
  множество дублируется в базе с признаком витрины. < Описать подробнее > Superior(el, nizm, lvbeg, lvend, md) – находит родительский элемент для заданного. На
  входе:  el – номер заданного элемента, nizm – номер
  измерения, lvbeg – уровень иерархии, которому принадлежит заданный
  элемент, lvend – уровень иерархии, на котором ищем родительский
  элемент; при md = 0 функция возвращает адрес найденного элемента, при md = 1 – возвращает № найденного элемента.  F0(nizm, nlv, nel) – находит значение функции f[0] элемента с
  номером nel,
  принадлежащего измерению nizm и уровню
  иерархии nlv. Если такой
  элемент найден, возвращает true, в противном случае – false. Для
  доступа к результату можно напрямую обратиться к сформированной переменной класса,
  то есть к f[0], а можно использовать функции класса AsFloat()
  или AsInt(), возвращающие дробное или целое
  значения результата. Функции класса AsFloat() или AsInt() используются в том случае, если f[0] хранит
  числовое значение в символьном виде. Кроме того, возможно задание номера
  искомой функции:  AsFloat(nf) или AsInt(nf), где nf – номер функции. Extract(nizm, lvl, fltr, len, defr) – создает
  новую базу с данными, отфильтрованными из текущей базы по критерию:  nizm – номер измерения, lvl – номер уровня, fltr – указатель на фильтр, накладываемый на f[0], len – длина этого фильтра в байтах, defr – признак дефрагментации базы-источника, проводимой
  перед выгрузкой. Перед
  запуском функции необходимо задать имя новой базы (переменная класса ResFileName). Функция
  выгружает в новую базу все элементы, соответствующие критерию, а также все
  факты, в которых присутствует хотя бы один из отфильтрованных элементов.
  Например, в случае «клиентской» базы данных, с помощью этой функции можно
  создать отдельную базу данных по клиентам с фамилией Иванов: все персональные
  данные этих клиентов и все данные по операциям этих клиентов. Возвращаемое
  значение – количество найденных по фильтру элементов. DefragBase() – дефрагментация базы данных. Не
  предполагает задания переменных на входе или получения их на выходе. При
  регулярном использовании ускоряет работу с базой и сжимает файлы базы. Скачать исходный код класса
  (на языке C++)
  можно здесь: Информация на этой странице постоянно обновляется, так как по мере
  внедрения стандарта в коммерческое ПО выявляются недостатки
  и класс постоянно дорабатывается. Последнее обновление – 13.11.2020. Наличие открытого исходного кода подразумевает возможность его
  совершенствования и дополнения всеми желающими! Присылайте свои варианты для
  обсуждения и вопросы на oleg314@mail.ru ! | ||
| 
 |  | 
 |