Функции отбора значений из внутренних баз данных

В начало

 

Перед описанием функций отбора значений из внутренних баз данных необходимо пояснить, как можно обратиться к конкретному полю базы данных.

 

Синтаксис обращения к полю БД следующий:

<имя базы>.<имя поля>

Например:

base.field_1

Запись base.field_1 означает, что нужно обратиться к полю field_1 в базе данных base.

 

Имеется несколько функций отбора значений из внутренней БД (базы данных по ссылке):

rec - получить номер записи, удовлетворяющей заданному условию;

frec - получить номер записи, значение в заданной колонке которой наиболее точно соответствует указанному в вызове данной функции;

val - получить значение поля из записи с указанным номером;

find - получить значение поля из записи, удовлетворяющей заданному условию.

 

Синтаксис функций

 

Функция rec()

rec ( условие ),

где условие - выражение, принимающее значение истина или ложь. Выражение может содержать в качестве операндов обращения к полям базы данных.

Например:

rec ( BASE.F1 > 10 && BASE.F2 < 5 )

Такой вызов функции означает: поиск номера записи во внутренней базе данных BASE, удовлетворяющей следующим условиям: значение поля F1 в этой записи должно быть больше 10 и (&&) значение поля F2 меньше 5. Поиск начинается с первой записи. Если запись не удовлетворяет указанному условию, то берется следующая запись. Если в базе данных нет записи, удовлетворяющей данному условию, то функция возвращает 0, в противном случае - номер найденной записи. Синтаксис условия полностью соответствует синтаксису арифметического выражения. Вместо операции "&&" можно использовать знак ",". Поэтому вызов функции может быть написан иначе:

rec ( BASE.F1 > 10, BASE.F2 < 5 )

При такой записи функция работает быстрее потому, что если первое условие ложно, то вычисление второго условия не производится. Рекомендуется также при обращении к базе данных в первом условии использовать поле, значение которого для различных записей различно.

Например, рассмотрим базу данных BASE с полями F1 и F2:

F1

F2

1

6

2

6

3

6

4

6

5

6

 

Обращение к функции:

rec (BASE.F1 > 4, BASE.F2 == 6)

будет работать быстрее, чем следующее:

rec (BASE.F2 == 6, BASE.F1 > 4)

 

Функция frec()

frec(аргумент_1, аргумент_2, аргумент_3, аргумент_4),

где аргумент_1 – колонка в базе данных по которой осуществляется поиск (обязательно вещественного или целого типа);

аргумент_2 – искомое значение;

аргумент_3 – критерий поиска. Возможные значения:

0 – находится ближайшее значение;

-1 – находится ближайшее меньшее значение;

1 – находится ближайшее большее значение.

аргумент_4 – параметр, являющийся признаком упорядоченности данных в колонке, по которой производится поиск. Возможные значения:

0 - значения расположены неупорядоченно и поиск осуществляется по всем записям базы;

1 – колонка упорядочена, по возрастанию или по убыванию. Как только разница между искомым значением и значением в текущей колонке базы больше, чем в предыдущей, поиск прекращается.

Параметры аргумент_3 и аргумент_4 являются необязательными. Если они не указаны, то используются значения по умолчанию.

аргумент_3 = 0 (искать ближайшее значение);

аргумент_4 = 0 (колонка неупорядоченная).

Например, frec(BASE.F1, 2.5, 1, 1)

Этот вызов означает: получить номер записи, для которой поле F1 содержит ближайшее большее значение по сравнению с 2.5 (значения в колонке F1 упорядочены). Для нашего примера функция вернёт значение 3.

Если в базе данных нет записи, удовлетворяющей условию поиска, то функция возвращает значение 0. Например, frec(BASE.F1, 0.5, -1, 1).

 

Функция val()

val ( номер_записи, поле_базы_данных, смещение), где

номер_записи - любое арифметическое выражение, значением которого является целое число,

поле_базы_данных - обращение к полю,

смещение (необязательный параметр) - номер столбца, из которого будет отбираться значение. Номер отсчитывается от поля, задаваемого вторым параметром. Смещение может задаваться переменной, может принимать как положительные, так и отрицательные значения. Если значение смещения равно 0, то функция возвращает поле, задаваемое вторым параметром. То же самое будет происходить, если третий параметр не использовать.

 

Примеры:

val ( 4, BASE.F2 )

Этот вызов означает: отобрать значение из строки номер 4 из поля F2 базы данных BASE.

 

val ( 4, BASE.F2, 3)

Этот вызов означает: отобрать значение из строки номер 4 из поля, третьего вправо относительно поля F2 базы данных BASE.

 

val (n, BASE.F2 )

val (n<1?error("номер записи < 1"):n,BASE.F2)

Если в базе данных нет записи с указанным номером, то функция выдает сообщение об ошибке "Неверный номер записи".

Ошибочные обращения к функции val можно проконтролировать, не вызывая ее. Для этого в редакторе переменных необходимо написать строку:

n<1||n>BASE.#? error("неверный номер n"):val(n,BASE.F2),

где BASE.# - специальное обозначение количества записей в базе BASE.

 

Функция find()

find ( поле_базы_данных, условие )

Данная функция - это объединение функций val() и rec().

Функция возвращает значение указанного поля "поле_базы_данных" из записи, удовлетворяющей условию "условие". Если такой записи не существует, то функция выдает сообщение об ошибке "Неверный номер записи".

Примеры:

find (BASE.A, BASE.F1 > 4)

find (BASE.A, BASE.F2 == 6 && BASE.F1 > 4)

 

Рассмотрим связь переменных с внутренней БД на примере чертежа PROBA.

var_44

Напомним, чертеж имеет четыре переменные: три вещественные A, B, C и одну текстовую переменную $D.

Создайте с помощью команды IDatabase внутреннюю базу данных PROBA с полями AA, BB, CC, которые являются вещественными полями, и текстовым полем DD.

i12

После этого в редакторе переменных для переменной C создайте список значений, совпадающих со значениями поля CC базы данных, а для остальных переменных введите следующие выражения:

i13

После выхода на экране отобразится:

var_54

Таким образом вы задали связь переменных чертежа с внутренней БД. То есть при изменении значения переменной C, значения остальных переменных выбираются из БД. В результате вы получаете различные модификации чертежа.

i14

var_56

 

Функция db_sum()

db_sum ( интервал) – вычисляет значение суммы ячеек в интервале

 

Функция db_mid()

db_mid ( интервал) – вычисляет среднее значение ячеек в интервале

 

Функция db_max()

db_max ( интервал) – вычисляет максимальное значение ячейки в интервале

 

Функция db_min()

db_min ( интервал) – вычисляет минимальное значение ячейки в интервале

 

Интервал может задаваться следующим образом:

1.Заданием имени колонки БД. На картинке ниже вычисляются сумма и среднее значение по колонке

clip5990

2.Заданием имени колонки и начального номера строки. На картинке ниже вычисляется сумма и среднее значение для колонки "aa" начиная со второй строки

clip5991

3.Заданием начальной и конечной строки. На картинке ниже вычисляется сумма и среднее значение с 1-й по 4-ю строку.

clip5992

 

Смотри: Функции работы с переменными