Функции по работе с базами данных

Предыдущая страницаВ началоСледующая страница

Обращение к столбцу базы данных

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

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

имя_БД.имя_столбца

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

Возвращение количества записей в базе данных

При необходимости можно вернуть количество записей в БД с помощью выражения имя_БД.# в Редакторе переменных.

Список функций

В T-FLEX CAD доступны следующие функции по работе с базами данных:

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

orec()

ofrec(,)

oval(,)

ofind(,)

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

odbf(,,)

omdb(,,,)

Функции для работы с диапазонами ячеек в базах данных

odb_sum()

odb_mid()

odb_max()

odb_min()

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

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(аргумент_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(номер_записи, столбец_базы_данных, смещение)   -   Получить значение столбца из записи с указанным номером, где

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

столбец_базы_данных - обращение к столбцу,

смещение (необязательный параметр) - смещение номера столбца, из которого будет отбираться значение. Смещение прибавляется к номеру столбца, задаваемого вторым параметром. Смещение может задаваться переменной, может принимать как положительные, так и отрицательные значения. Если значение смещения равно 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(столбец_базы_данных, условие)   -   Возвращает значение из указанного столбца базы данных для записи, удовлетворяющей условию. Если такой записи не существует, то функция выдаёт сообщение об ошибке Неверный номер записи.

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

Примеры:

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

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

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

dbf(arg1, arg2, arg3)  -   Осуществить отбор данных из внешних баз данных формата dBASE, где

arg1 - имя базы данных. Может быть задано текстовой константой, переменной или выражением.

arg2 - имя столбца, из которого надо произвести отбор. Может быть задано текстовой константой, переменной или выражением.

arg3 - условие отбора. При задании условия можно использовать текстовые константы, переменные и выражения.

Например:

dbf("DBF_NAME", "COL1", "COL2 == 30")

Это означает: отобрать значение из базы данных DBF_NAME из столбца COL1 при условии, что значение столбца COL2 равно 30.

Примеры:

dbf($NAME, "COL1", "COL2 <= {GRM_VAR}")

dbf($NAME, "COL1", "TEXT = \"GRM_TEXT\"")

dbf("<*>DBF_NAME", "COL1","COL2 > 30")

В последнем примере перед именем БД может стоять последовательность символов <*>. Она означает, что БД с именем DBF_NAME будет искаться в той же директории, что и чертеж. То есть, при изменении пути вам не надо будет в редакторе переменных изменять имя БД во всех вызовах функции dbf().

Рекомендуется при создании чертежей, связанных с внешними БД, задавать имя БД с использованием последовательности символов "<*>". Это упростит вам работу с этими чертежами в дальнейшем.

Условие отбора при вызове функции dbf() является логическим выражением, соответствующим понятию фильтра в классической реляционной базе данных. Синтаксис условия (фильтра) соответствует требованиям dBASE. Его составными частями могут быть имена столбцов базы данных, константы, логические и арифметические операции, функции dBASE. Кроме этого, в фильтрах могут использоваться переменные системы T-FLEX CAD, а также логические операции редактора переменных. При использовании в фильтре переменных, они заключаются в фигурные скобки.

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

dbfwin( , , ) имеет параметры аналогичные параметрам функции dbf( , , ). Эта функция используется для правильного чтения русскоязычных текстов (выполняет перекодирование текста в формат Windows).

Ввиду более медленного процесса получения информации из внешней базы данных использовать функцию dbf( ) следует только в тех случаях, где невозможно использование базы данных по ссылке на основе форматов "*.xls" и "*.txt".

mdb(arg1, arg2, arg3, arg4, arg5)   -   Осуществить отбор данных из внешних баз данных формата MDB, где

arg1 - имя базы данных. Может быть задано текстовой константой, переменной или выражением.

arg2 - имя таблицы в базе данных. Может быть задано текстовой константой, переменной или выражением.

arg3 - имя столбца, из которого надо произвести отбор. Может быть задано текстовой константой, переменной или выражением.

arg4 - условие отбора. При задании условия можно использовать текстовые константы, переменные и выражения.

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

Например:

mdb ( "C:\\Example\\T-FLEX_USER.mdb", "USER", "ФИО", "Код={kod}" )

или

mdb ( "T-FLEX_USER.mdb", "USER", "ФИО", "Код={kod}", "Не найдено").

Это означает: отобрать значение из таблицы USER базы данных T-FLEX_USER из столбца ФИО при условии, что значение столбца Код равно значению переменной kod (в нашем случае 15). Во втором варианте добавляется пятый параметр возвращающий значение «Не найдено» в случае, если в столбце Код нет значения 15. Если файл базы данных лежит в одной папке с файлом T-FLEX, то полный путь к файлу указывать не нужно.

Следует отметить, что четвёртый операнд функции, задающий условие отбора записей, может быть записан в форме SQL запроса и должен соответствовать предложению «WHERE» команды «SELECT». Если при написании условия используются текстовые переменные, то выражение будет выглядеть следующим образом:
mdb ("С:\\T-FLEX_USER.mdb", "USER", "ФИО", "Должность=\"{$Dol}\"").

Ввиду более медленного процесса получения информации из внешней базы данных использовать функцию mdb( ) следует только в тех случаях, где невозможно использование базы данных по ссылке на основе форматов "*.xls"и "*.txt".

Функции для работы с диапазонами ячеек в базах данных

Функции для работы с диапазонами ячеек следует применять в случае, когда при работе с базами данных требуется функциональность, аналогичная функциональности работы электронных таблиц, например в Excel.

db_sum(интервал)   -   Вычислить значение суммы ячеек в интервале.

db_mid(интервал)   -   Вычислить среднее значение ячеек в интервале.

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

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

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

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

functionsdatabase1

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

functionsdatabase2

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

functionsdatabase3