Обращение к столбцу базы данных
Перед описанием функций по работе с базами данных необходимо пояснить, как можно обратиться к конкретному столбцу базы данных.
Синтаксис обращения к полю БД следующий:
имя_БД.имя_столбца
Например, запись base.column_1 означает, что нужно обратиться к полю column_1 в базе данных base.
Возвращение количества записей в базе данных
При необходимости можно вернуть количество записей в БД с помощью выражения имя_БД.# в Редакторе переменных.
Список функций
В T-FLEX CAD доступны следующие функции по работе с базами данных:
•Функции отбора значений из внутренних баз данных
•Функции отбора значений из внешних баз данных
•Функции для работы с диапазонами ячеек в базах данных
Функции отбора значений из внутренних баз данных
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.Заданием имени столбца БД. На картинке ниже вычисляются сумма и среднее значение по столбцу.
2.Заданием имени столбца и начального номера строки. На картинке ниже вычисляется сумма и среднее значение для столбца «aa» начиная со второй строки.
3.Заданием начальной и конечной строки. На картинке ниже вычисляется сумма и среднее значение с 1-й по 4-ю строку.