Операция соединения отношений 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Операция соединения отношений



Общая операция соединения (называемая также соединением по условию) требует наличия двух операндов - соединяемых отношений и третьего операнда - простого условия. Пусть соединяются отношения A и B. Как и в случае операции ограничения, условие соединения comp имеет вид либо (a comp-op b), либо (a comp-op const), где a и b - имена атрибутов отношений A и B, const - литерально заданная константа, а comp-op - допустимая в данном контексте операция сравнения.

Тогда по определению результатом операции сравнения является отношение, получаемое путем выполнения операции ограничения по условию comp прямого произведения отношений A и B.

Если внимательно осмыслить это определение, то станет ясно, что в общем случае применение условия соединения существенно уменьшит мощность результата промежуточного прямого произведения отношений-операндов только в том случае, когда условие соединения имеет вид (a comp-op b), где a и b - имена атрибутов разных отношений-операндов. Поэтому на практике обычно считают реальными операциями соединения именно те операции, которые основываются на условии соединения приведенного вида.

Хотя операция соединение в нашей интерпретации не является примитивной (поскольку она определяется с использованием прямого произведения и проекции), в силу особой практической важности она включается в базовый набор операций реляционной алгебры. Заметим также, что в практических реализациях соединение обычно не выполняется именно как ограничение прямого произведения. Имеются более эффективные алгоритмы, гарантирующие получение такого же результата.

Имеется важный частный случай соединения - эквисоединение и простое, но важное расширение операции эквисоединения - естественное соединение. Операция соединения называется операцией эквисоединения, если условие соединения имеет вид (a = b), где a и b - атрибуты разных операндов соединения. Этот случай важен потому, что (a) он часто встречается на практике, и (b) для него существуют эффективные алгоритмы реализации.

Операция естественного соединения применяется к паре отношений A и B, обладающих (возможно составным) общим атрибутом c (т.е. атрибутом с одним и тем же именем и определенным на одном и том же домене). Пусть ab обозначает объединение заголовков отношений A и B. Тогда естественное соединение A и B - это спроектированный на ab результат эквисоединения A и B по A/c и BBC. Если вспомнить введенное нами в конце предыдущей главы определение внешнего ключа отношения, то должно стать понятно, что основной смысл операции естественного соединения - возможность восстановления сложной сущности, декомпозированной по причине требования первой нормальной формы. Операция естественного соединения не включается прямо в состав набора операций реляционной алгебры, но она имеет очень важное практическое значение.

Операция деления отношений

Эта операция наименее очевидна из всех операций реляционной алгебры и поэтому нуждается в более подробном объяснении. Пусть заданы два отношения - A с заголовком {a1, a2,..., an, b1, b2,..., bm} и B с заголовком {b1, b2,..., bm}. Будем считать, что атрибут bi отношения A и атрибут bi отношения B не только обладают одним и тем же именем, но и определены на одном и том же домене. Назовем множество атрибутов {aj} составным атрибутом a, а множество атрибутов {bj} - составным атрибутом b. После этого будем говорить о реляционном делении бинарного отношения A(a,b) на унарное отношение B(b).

Результатом деления A на B является унарное отношение C(a), состоящее из кортежей v таких, что в отношении A имеются кортежи <v, w> такие, что множество значений {w} включает множество значений атрибута b в отношении B.

Предположим, что в базе данных сотрудников поддерживаются два отношения: СОТРУДНИКИ (ИМЯ, ОТД_НОМЕР) и ИМЕНА (ИМЯ), причем унарное отношение ИМЕНА содержит все имена, которыми обладают сотрудники организации. Тогда после выполнения операции реляционного деления отношения СОТРУДНИКИ на отношение ИМЕНА будет получено унарное отношение, содержащее номера отделов, сотрудники которых обладают всеми возможными в этой организации именами.

 

Контрольные вопросы.

1. Перечислите теоретико-множественные реляционные операции.

2. Перечислите специальные реляционные операции.

3. Как выполняется операция прямого произведения отношений.

4. Как выполняются операции ограничения отношения и операция проекции отношения?

 


 

Лекция № 6

 

Основные компоненты, входящие в состав приложений VFP

Приложение на VFP состоит из следующих компонентов:

- все описание приложения храниться в специальном файле проекта (расширение PJX)

 

 

 

 

В VFP принципиально изменена система организации данных. Теперь она приблизилась к теоретическим основам реляционной модели и позволяет более естественно выполнять операции реляционной алгебры.

Основная единица хранения данных — это таблица, в столбцах и строках которой содержатся данные, как это и было раньше в dbf-файле. Таблица сохранила расширение файла dbf и имеет прямую совместимость со “старыми” dbf-файлами. Таблицы объединяются в базу данных (БД), в которой можно описать все связи, устанавливаемые между полями отдельных таблиц, правила проверки, определяющие реакцию системы на вносимые изменения, добавление или удаление данных и правила проверки целостности данных в БД. Файлы баз данных имеют расширение dbc и при открытии автоматически поддерживают все перечисленные установки для входящих в нее таблиц. При необходимости мы можем создать и таблицы, не входящие в БД, — свободные таблицы.

VFP5 обеспечивает поддержку значений NULL и выполнение операций с этими данными в соответствии со стандартом ANSI. Это облегчает задачу представления неизвестных данных и взаимодействие с базами данных SQL, которые могут содержать такие типы значений.

Для таблиц, входящих в БД, могут быть созданы следующие типы индексов, первые два из которых в FoxPro появились впервые:

• Первичный (Primary) — обеспечивает наличие только уникальных данных в поле, по которому построен. В таблице может быть только один первичный индекс.

• Кандидат (Candidate) — аналогичен первичному, но позволяет иметь несколько индексов этого типа для одной таблицы независимо от того, включена она в БД или нет.

• Регулярный (Regular) — обычный тип индекса, поддерживаемый в предыдущих версиях.

• Уникальный (Uniq) — при наличии одинаковых значении в поле, при активизации этого индекса обеспечивается вывод только уникальных значений. Этот тип индекса включен для поддержки совместимости.

 

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

• допускаются длинные имена таблиц;

• каждому полю и таблице можно давать комментарии;

• позволяется задавать длинные имена полей;

• для полей помимо идентификаторов появились заголовки, которые могут использоваться как в окне Browse, так и в качестве заголовков для колонок в объекте Grid;

• введены значения по умолчанию для полей;

• добавлены два новых типа индексов: первичный и кандидат;

• предусмотрены правила проверки для полей и записей при изменении и вводе новых данных;

• имеются триггеры для поддержания целостности данных;

• поддерживаются постоянные связи между таблицами, размещенными в БД;

• имеются процедуры БД для описания сложных условий правил проверки;

• появились соединения с внешними источниками данных;

• поддерживаются локальные и внешние просмотры.

 

Все объекты хранятся в таблицах(за исключением файлов PRG и TXT)

 

Контейнерный файл БД (DBC) – содержит информацию о всех остальных таблицах входящих в БД. (Словарь БД) А также о различных ограничениях, значениях по умолчанию, триггерах,

Индексах, связях между таблицами, и тд.

 

Интерфейс управляемый событиями.

 

Основные элементы языка программирования Visual FoxPro.

- типы данных;

- переменные и массивы;

-рабочие области;

-операторы поиска и перемещения по записям;

-операторы циклов;

-управляющие операторы;

 

Аналогично многим языкам высокого уровня язык Visual Foxpro работает с переменными некоторого фиксированного набора типов. Т.К. основная цель языка VSFP - обработка данных из таблиц то, соответственно, и типы переменных совпадают с возможными типами полей в таблицах VFP. Имена полей могут содержать до 254 символов, но не должны содержать пробелы, не могут начинаться с цифры и включать специальные символы кроме символов подчеркивания.

Поля могут быть следующих типов:

ТИП ОБОЗНАЧЕНИЕ ДЛИНА В БАЙТАХ
Character C 1-254
Character(binary) C 1-254
Memo M Не ограничена
Memo(binary) M Не ограничена
Numeric N 1-20 цифр, 0-19 дробных деся-тичных знаков (хранятся значения от -0.99E19 до 0.99E20) Целые числа храняться в этом же формате.
Float F 20 цифр, 0-19 дробных десятичных знаков (хранятся значения от -0.99E19 до 0.99E20)
Double B 8 (фиксированная длина, допускаются значения от -4.9Е-324 до 1.8Е308)
Integer I 4 (фиксированная длина, допускаются значения от -2 147 483 647 до 2 147 483 647)
Currensy Y 8 (фиксированная длина, допускаются значения от -9.2Е14 до 9.2Е14)
Date D 8 (фиксированная длина, допускаются значения от 01.01.100 до 31.12.9999)
DateTime T 8 (фиксированная длина, допускаются значения от 01.01.100 до 31.12.9999 плюс время от 00.00.00 до 23.59.59)
Logical L 1 (фиксированная длина)
General G Не ограничена

 

Переменные в VSFP не являюся жестко типизованными - тип переменной определяется последним присвоенным значением.

Переменные создаются либо описанием операторами Public, Private, либо оператором присваивания.

В VSFP разрешается работа с одномерными и двумерными массивами переменных. Для этого они должны быть описаны специальной командой:

DECLARE/DIMENSION <переменная> (<вырN1>[,<N2>])

[,<переменная> (<вырN1>[,<N2>])]

Нумерация элементов массива начинается с 1.

Сразу после описания все элементы массива получают тип LOGICAL и значение.F.

Тип каждого отдельного элемента определяется результатом последней операции присваивания.

Разрешается повторное описание существующего массива без потери имеющихся данных.

При обращении к элементам массива разрешено использовать круглые или квадратные скобки.

 

VSFP Может одновременно работать с большим количеством таблиц. Каждая таблица открывается в так называемой рабочей области, открывая новую таблицу Вы либо выбираете определенную рабочую область командой SELECT, либо таблица будет открыта в текущей рабочей области. Всего VSFP имеет 32767 рабочих областей. При запуске по умолчанию активизируется рабочая область 1. Таблица в текущей области открывается командой:

USE <имя таблицы>.

Открытие таблицы в конкретной области:

USE <имя таблицы> IN <номер рабочей области>.

Открытие таблицы в свободной области с наименьшим номером:

USE <имя таблицы> IN 0.

Открытой таблице VSFP назначает псевдоним (Alias) - имя длиной до 10 символов, служащее для ссылок на эту таблицу:

USE <имя таблицы> IN 0 ALIAS <псевдоним>.

 

Дополнение:

Над переменными и полями таблиц могут выполняться следующие операции:

Математические (перечислены в порядке приоритетов):

** или ^ - возведение в степень;

* - умножение, / - деление;

+ - сложение, - -вычитание;

 

Логические (в порядке приоритетов):

NOT - НЕ(другая форма -!);

AND - логическое И;

OR - логическое ИЛИ;

Знаки логических операций (кроме!) окаймляются точками или пробелами.

Отношения:

< - меньше, > - больше, = - равно, # - не равно,

<= - не больше, >= - не меньше.

Знаки отношения применимы как к числовым выражениям, так и к датам и символьным выражениям.

Если сравниваются символьные строки разной длины, сравнение выполняется по длине второго выражения; Остаток левого операнда, превышающий длину правого операнда, игнорируется. Существуют операции отношения только для символьных выражений:

$ -сравнение символьных строк. Операция A$B даст значение.T. если A идентично B,

либо A входит в B, и.F. в противном случае.

== - сравнение на полное тождество символных строк и по длине, и по содержанию, включая пробелы.

Сцепления:

+ - соединение двух или более строк в одну;

- то же, но пробелы в конце первой стороки помещаются в конец итоговой строки;

Оператор присваивания

<перем>=<выраж>

STORE <выраж> TO <список перем>

 

Структура команды -

команды ориентированные на обработку файлов БД, в самом общем виде имеют следующий синтаксис:

НАЗВАНИЕ [<границы>] [<список выражений>]

[FOR <условие>] [ WHILE <условие>]

где НАЗВАНИЕ - имя команды;

 

<границы> - диапазон действия команды

ALL

REST

NEXT N

RECORD N

FOR <условие> - выполнение команды только для записей, отвечающих <условию>

 

WHILE <условие> - выполнение команды до тех пор, пока не перестанет выполняться условие;

FOR и WHILE могут присутствовать в команде одновременно. В этом случае WHILE условие имеет преимущество перед FOR условием.

Порядок следования элементов команды - произвольный. По умолчанию, если отсутствуют <границы> и <условия >, команда выполняется только над текущей записью или над всей таблицей в целом.

 

Рассмотрим команды перемещения указателя текущей записи в таблице. (знакомые по практическим занятиям;) Запись на которой находиться указатель, является текущей, и только к ней возможен непосредственный доступ. Команды перемещения по записям:

GO TOP [IN <ВырN/ВырС>] - переход к первой записи таблицы;[в указанной области];

GO BOTTOM [IN <ВырN/ВырС>] - переход к последней записи;

GO <ВырN> [IN <ВырN/ВырС>] - переход к записи с номером <ВырN>;

SKIP <ВырN> [IN <ВырN/ВырС>] - переход к записи, отстоящей от текущей на <ВырN> записей; В данной команде <ВырN> может быть отрицательным, что означает движение указтеля назад;

SKIP - без параметра аналогично SKIP 1;

Для контроля положения указателя и наличия записей в таблице предусмотрены функции:

RECNO([ <ВырN/ВырС>]) - возвращает номер текущей записи;

RECCOUNT([ <ВырN/ВырС>]) - Возвращает общее число записей в таблице,включая записи, помеченные к удалению;

EOF([ <ВырN/ВырС>]) - Возвращает.T. если достигнут конец таблицы, если нет возвращает.F.

 

ВOF([ <ВырN/ВырС>]) - Возвращает.T. если достигнуто начало таблицы, если нет возвращает.F.

 

Поиск данных в таблицах

 

Команда LOCATE осуществляет последовательный поиск одной самой первой записи в таблице, удовлетворяющей заданному FOR - условию, среди записей, находящихся в заданных границах, и до тех пор, пока соблюдается WHILE - условие(если есть);

 

LOCATE [FOR <условие>] [<границы>] [ WHILE <условие>]

Если границы и while - условие отсутствуют, поиск ведется во всей таблице, начиная с первой записи; Если запись найдена функция FOUND() - оценивающая результат поиска, возвращает.T.

указатель записей устанавливается на эту запись. При неудачном поиске FOUND()=. F. EOF() =.T.;

Продолжение поиска начатого командой LOCATE возможно с использованием команды:

CONTINUE

Пример использования команды LOCATE

 

Из таблицы заказов выбираются заказчики находящиеся в Москве и подсчитывается их число.

 

USE customer && Open Customer table

SET TALK OFF

 

STORE 0 TO gnCount

LOCATE FOR ALLTRIM(UPPER(customer.city)) = 'Москва'

DO WHILE FOUND()

gnCount = gnCount + 1

? company

CONTINUE

ENDDO

 

? 'Всего заказчиков в Москве: '+ LTRIM(STR(gnCount))

 

SEEK <выражение>

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

 

SEEK eExpression

[ORDER nIndexNumber | IDXIndexFileName

| [TAG] TagName [OF CDXFileName]

[ASCENDING | DESCENDING]]

[IN nWorkArea | cTableAlias]

 

Циклы:

 

DO WHILE <условие>

<команды>

[exit]

[loop]

EndDO

 

<команды > выполняютя когда <условие> истинно.

[EXIT] -Прерывает выполнение цикла(управление передается оператору следующему за enddo, endfor, endscan)

[LOOP] -переход к началу цикла(на проверку условия)

 

Пример DO WHILE... ENDDO

 

В примере суммируется количество товаров на складе цена которых превышает 20 рублей

 

USE products && Opens Products table

SET TALK OFF

gnStockTot = 0

 

DO WHILE.T. && Begins loop

IF EOF()

EXIT

ENDIF

IF unit_price < 20

SKIP

LOOP

ENDIF

gnStockTot = gnStockTot + in_stock

SKIP

ENDDO && Ends loop

 

CLEAR

? 'Всего товаров стоимостью больше 20 руб.:'

?? gnStockTot

 

Цикл FOR

FOR <перем>=<вырN1> TO <вырN2> [STEP <вырN3>]

<команды>

[exit]

[loop]

EndFOR

<Перем> - используется в качестве управляющего параметра цикла для которого N1 является начальным значением, N2- конечным, а N3 шагом изменения переменной. По умолчанию шаг изменения параметра цикла =1.

 

[EXIT] -Прерывает выполнение цикла(управление передается оператору следующему за enddo, endfor, endscan)

[LOOP] -переход к началу цикла(на проверку условия)

 

Пример FOR... ENDFOR

 

 

* Пример 1

CLEAR

FOR gnCount = 1 TO 10

? gnCount

ENDFOR

 

* Пример 2

SET TALK OFF

CLOSE DATABASES

OPEN DATABASE (HOME() + 'samples\data\testdata')

USE customer && Opens Customer table

STORE 2 TO gnI && Initial value

STORE 10 TO gnJ && Final value

STORE 2 TO K && Step value

FOR gnCount = gnI TO gnJ STEP K

GOTO gnCount && Move record pointer

DISPLAY company && Display company name

ENDFOR

 

Цикл SCAN

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

SCAN [<границы>] [FOR <условие>] [ WHILE <условие>]

<команды>

[exit]

[loop]

ENDSCAN

[EXIT] -Прерывает выполнение цикла(управление передается оператору следующему за enddo, endfor, endscan)

[LOOP] -переход к началу цикла(на проверку условия)

Контрольные вопросы.

1. Перечислите основные компоненты входящие в состав проекта Visual Foxpro.

2. Какие типы данных могут использоваться в таблицах Visual Foxpro?

3. Какой оператор используется для описания массивов?

4. Перечислите операторы организации циклов.

 

Лекция 7

Команды управления ходом выполнения программы:

 

If

Выполняет группу команд в зависимости от условия

 

 

IF lExpression [THEN]

Commands

[ELSE

Commands]

ENDIF

 

Параметры

 

lExpression - логическое выражение. Если lExpression истинно (.T.), любые команды следующие за IF или THEN и предшествующие ELSE или ENDIF выполняются.

 

· Если lExpression ложно (.F.) и ELSE присутствует, выполняются команды следующиее за ELSE и предшествующие ENDIF.

Оператор do case

Выполняет первый набор команд для которого логическое выражение указанное в предложении CASE является истинным.

 

 

Синтаксис

 

DO CASE

CASE lExpression1

Commands

[CASE lExpression2

Commands

...

CASE lExpressionN

Commands]

[OTHERWISE

Commands]

ENDCASE

 

Аргументы

 

CASE lExpression1 Commands...Когда обнаруживается первое истинное (.T.) CASE-выпражение, выполняется следующий за ним набор команд. Команды выполняются до следующего оператора CASE или ENDCASE.

 

Исполняется только один набор команд, даже если в других CASE – логическое выражение будет истинным.

OTHERWISE Commands Если все из CASE выражений примут значение ложно (.F.), то будут выполнены команды указанные после OTHERWISE.

 

Пример

DO CASE... ENDCASE

 

 

STORE CMONTH(DATE()) TO month && Название месяца для текущей даты

 

DO CASE && Begins loop

 

CASE INLIST(month,'January','February','March')

STORE 'Отчет за первый квартал' TO rpt_title

 

CASE INLIST(month,'April','May','June')

STORE ' Отчет за второй квартал ' TO rpt_title

 

CASE INLIST(month,'July','August','September')

STORE ' Отчет за третий квартал ' TO rpt_title

 

OTHERWISE

STORE ' Отчет за четвертый квартал ' TO rpt_title

 

ENDCASE && Ends loop

WAIT WINDOW rpt_title NOWAIT

 

 

Команды удаления данных

ERASE (DELETE FILE)

Удаляет файл(файлы) с диска

 

Синтаксис

 

ERASE FileName |? [RECYCLE]

 

 

FileName Указывает файл который будет удален. Необходимо указание полного пути к файлу если он расположен не в текущем каталоге.

 

FileName – может содержать символы обобщения такие как * и?.

Если в качестве имени файла указать ‘?’ будет выведен диалог для выбора удаляемого файла.

 

RECYCLE Удаляемый файл помещается в Windows 95 Recycle Bin (может быть восстановлен).

 

ZAP

Удаляет все записи из таблицы,.оставляет только ее структуру.

 

Синтаксис

 

ZAP

[IN nWorkArea | cTableAlias]

 

 

IN nWorkArea указывает номер рабочей области.

 

IN cTableAlias указывает алиас таблицы.

 

Если не указаны nWorkArea или cTableAlias, удаляются все записи из таблицы в текущей рабочей области.

 

После выполнения ZAP записи не могут быть восстановлены.

 

DELETE

Помечает записи как удаленные.

 

Синтаксис

 

DELETE

[Scope] [FOR lExpression1] [WHILE lExpression2]

[IN nWorkArea | cTableAlias]

[NOOPTIMIZE]

 

 

Scope Указывает диапазон записей помечаемых к удалению. Могут использоваться: ALL, NEXT N, RECORD N, и REST.

 

 

Если аргументы не указаны –помечается текущая запись.

 

 

PACK

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

 

Синтаксис

 

PACK [MEMO] [DBF]

Выполнение команды PACK требует монопольного доступа к таблице.

Если у таблицы имеются открытые индексы – при выполнении команды они будут перестроены.

 

RECALL

Снимает пометку удаления с записей помеченных к удалению в текущей таблице.

 

Синтаксис

 

RECALL

[Scope] [FOR lExpression1] [WHILE lExpression2]

[NOOPTIMIZE]

 

Аргументы

 

Scope Указывает диапазон восстанавливаемых записей. Могут использоваться: ALL, NEXT N, RECORD N, и REST.

 

Если аргументы не указаны –снимается пометка с текущая запись.

RECALL – может восстановить записи в таблице если для нее не выполнялись команды ZAP или PACK

 

Команды изменения данных

REPLACE

Изменяет значения в полях таблицы.

Синтаксис

 

REPLACE FieldName1 WITH eExpression1 [ADDITIVE]

[, FieldName2 WITH eExpression2 [ADDITIVE]]...

[Scope] [FOR lExpression1] [WHILE lExpression2]

[IN nWorkArea | cTableAlias]

[NOOPTIMIZE]

 

Аргументы

 

FieldName1 WITH eExpression1 [, FieldName2 WITH eExpression2... ] Указывает что данные в FieldName1 заменяются значением Expression1; данные в FieldName2 заменяются значением eExpression2; и т.д.

 

В случае если значение выражения превышает разрядность числового(numeric) поля, REPLACE выполняет следующие шаги:

 

1. REPLACE округляет значение выражения до количества десятичных знаков в поле таблицы.

2. Если значение не размещается, REPLACE сохраняет значение используя представление вида мммЕ пп.

3. Если значение не размещается, REPLACE заменяет содержимое поля звездочками.

 

Scope Указывает диапазон изменяемых записей. Могут использоваться: ALL, NEXT N, RECORD N, и REST.

 

По умолчанию REPLACE изменяет текущую запись (NEXT 1).

 

IN nWorkArea Указывает номер рабочей области в которой будут модифицированы записи.

IN cTableAlias Указывает алиас таблицы в которой будут модифицированы записи.

Если nWorkArea и cTableAlias не указаны, обновляются записи в текущей рабочей области.

 

Функции VFP

Количество функции VFP очень велико, перечислим лишь некоторые из них.

Математические

ABS(num) – Возвращает абсолютное значение аргумента(модуль)

ACOS(num) Возвращает значение arccos(num)

ASIN(num) Возвращает значение arcsin(num)

ATAN(num) Возвращает значение arctg(num)

ATN2(num1, num2) Возвращает значение arctg(num1/num2); num2 мб =0

BETWEEN(num1, num2, num3)

CEILING(num1) - округляет число до большего целого.

COS(num1)

DTOR(num1) преобразует угол из градусов в радианы

EXP(num1)

FLOOR(num1) - возвращает целое число, меньшее или равное num1.

INT(num1)

LOG(num1) Возвращает значение натурального логарифма

LOG10(num1) Возвращает значение десятичного логарифма

MAX()

MIN()

MOD(nDividend, nDivisor) Делит одно числовое на другое и возвращает остаток.

nDividend Определяет делимое. nDivisor Определяет делитель.

PI() – значение 3.14159

RAND() Возвращает случайное число между 0 и 1

ROUND(nExpression, nDecimalPlaces) Округляет выражение до указанного количества десятичных знаков.

RTOD() преобразует угол из радиан в градусов

SIGN()

SIN()

SQRT()

TAN()

 

Строковые

ALLTRIM(ВырС) Удаляет пробелы вначале и в конце символьного выражения

ASC(ВырС) Возвращает код первого символа из символьного выражения

AT(ВырС1, ВырС2 [, ВырN])

Возвращает позицию(отсчет позиций слева-направо) первого вхождения одного символьного выражения (ВырС1) в другое символьное выражение(ВырС2); ВырN-номер вхождения;

AT_C() тоже что и AT() но для двухбайтовых символов.

ATC() тоже что и AT() но не различает строчные и заглавные буквы.

ATCC() – ATC() – для двухбайтовых символов.

ATLINE(ВырС1, ВырС2) возвращает номер строки из ВырС2, в которой встретилось выражение ВырС1

ATCLINE()тоже, что ATLINE но не различает строчные и заглавные буквы.

BETWEEN(ВырС1, ВырС2, ВырС3)

CHR(ВырN) – возвращает символ заданный кодом ВырN

CHRTRAN()

CPCONVERT() - Преобразует символьные выражения в другую кодовую таблицу

CPCONVERT(nCurrentCodePage, nNewCodePage, cExpression)

INLIST (eExpression1, eExpression2 [, eExpression3...])

Определяет, соответствует ли выражение одному из выражений в множестве.

Возвращает логическое или NULL значение.

eExpression1 Определяет выражение для поиска.

 

eExpression2 [, eExpression3...] Определяет множество выражений, среди которых производиться поиск. (не более 24 выражений)

Все выражения должны иметь одинаковый тип данных.

ISALPHA()

ISDIGIT()

ISLOWER()

ISUPPER()

LEFT(ВырС, ВырN) – Возвращает ВырN символов из ВырС считая слева – направо.

LEN(ВырС) Возвращает количество символов в ВырN

LIKE(ВырС1, ВырС2) Определяет есть ли в ВырС2 подстрока соответствующая образцу ВырС1.

LIKE(ВырС1, ВырС2)

В выражении ВырС1 допустимо использование любой комбинации символов обобщения

? и *.

LOWER()

LTRIM()

MAX()

MIN()

OCCURS(cSearchExpression, cExpressionSearched)

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

Аргументы

cSearchExpression Определяет выражение, которое разыскивается внутри cExpressionSearched.

Функция возвращает 0 если cSearchExpression не найдено внутри cExpressionSearched.

 

PADC(eExpression, nResultSize [, cPadCharacter]); PADL(); PADR()

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

cPadCharacter до указанной длины слева (PADL), справа (PADR), или с двух сторон(PADC).

 

RAT() Тоже, что AT(), но символы считаются справа налево.

RATLINE()

REPLICATE()

RIGHT()

RTRIM()

SPACE()

STR (nExpression [, nLength [, nDecimalPlaces]])

Преобразует числовое выражение в симвльное.

 

Синтаксис

 

STR (nExpression [, nLength [, nDecimalPlaces]])

nExpression - числовое выражение.

nLength Определяет длину возвращаемой строки.

nDecimalPlaces Определяет число десятичных знаков в результирующей строке.

 

STRCONV()

STRTRAN()

STUFF(cExpression, nStartReplacement, nCharactersReplaced, cReplacement)

Возвращает строку, полученную, путем замены указанного числа символов в cExpression, другим выражением cReplacement.

CExpression - строка в которой происходит замена.

nStartReplacement определяет позицию в cExpression, с которой начинается замена.

nCharactersReplaced Определяет количество символов, которое будет заменено. Если nCharactersReplaced - 0, строка cReplacement будет вставлена в cExpression

.CReplacement строка замены. Если cReplacement – пустая строка, то число символов, указанное nCharactersReplaced будет удалено из cExpression.

 

SUBSTR()

SYS(2007) – Возвращает значение CRC для строки аргумента

TRANSFORM()

TRIM()

TXTWIDTH()

UPPER()

 

Работа с датами

BETWEEN()

CDOW(dExpression | tExpression) Возвращает день недели из Date или DateTime выражения. (По английски)

CMONTH(dExpression | tExpression) Возвращает название месяца из Date или DateTime выражения. (По английски)

CTOD(cExpression) Преобразует символьное выражение в выражение типа Date

CTOT(cExpression) Преобразует символьное выражение в выражение типа DateTime

DATE() Возвращает текущую системную дату.

DATETIME() Возвращает текущую системную дату и время.

DAY(dExpression | tExpression) Возвращает номер дня в месяце(число от 1 до 31)

DMY(dExpression | tExpression) Возвращает символьную строку содержащую дата например, 31 May 1996.

DOW(dExpression | tExpression [, nFirstDayOfWeek]) Возвращает номер дня недели.

EMPTY(dExpression | tExpression)

FDATE(cFileName) Возвращает дату последней модификации файла.

GOMONTH(dExpression | tExpression, nNumberOfMonths)

Возвращает дату, отстоящую от указанной на заданное число месяцев.

nNumberOfMonths - число месяцев.

 

INLIST() см. выше

MAX() ------”-----

MDY(dExpression | tExpression) Возвращает символьную строку в формате месяц-день-год для указанной даты.

MIN() см. выше

MONTH(dExpression | tExpression) Возвращает номер месяца в году.(от 1 до 12)

SYS(1) - возвращает системную дату

SYS(2) возвращает текущее время в секундах

 

SYS(10) возвращает системную дату в виде символьной строки.

WEEK(dExpression | tExpression [, nFirstWeek] [, nFirstDayOfWeek]) Возвращает номер недели в году.

dExpression | tExpression выражение типа Date или DateTime.

YEAR(dExpression | tExpression) Возвращает год для указанной даты.

 

Преобразование типов

CHR(nANSICode) Возвращает символ соответствующий заданному коду

CTOD(cExpression) Преобразует символьное выражение в выражение типа date

DTOC() Преобразует выражение типа date в символьное выражение

MTON() Преобразует выражение типа Currency в выражение типа Numeric

NTOM() Преобразует выражение типа Numeric в выражение типа Currency

NVL (eExpression1, eExpression2)

 

Возвращает отличное от NULL значение из двух выражений.

eExpression1, eExpression2 NVL() возвращает eExpression2, если eExpression1 содержит NULL значение. NVL() возвращает eExpression1, если eExpression1 – отличное от NULL значение. eExpression1 и eExpression2 могут быть любого типа. NVL() возвращает.NULL. если и eExpression1 и eExpression2 оба содержат NULL значение.

STR() см. выше

SYS(10) см. выше

TRANSFORM(eExpression, cFormatCodes) Возвращает символьную строку содержащую результат преобразования выражения eExpression с использованием шаблона cFormatCodes.

TTOC(tExpression [, 1 | 2]) Преобразует выражение типа DateTime в символьную строку.

TTOD(tExpression) Преобразует выражение типа DateTime в тип Date.

VAL(cExpression) Возвращает числовое значение полученное из символьного выражения.

 

 

Проверка файлов и дисков

FCHSIZE (nFileHandle, nNewFileSize)

Изменяет размер файла, открытого на низком уровне.

 

NFileHandle указатель на файл, возвращается функцией FOPEN() или FCREATE().

NNewFileSize Определяет новый размер файла в байтах.

 

FCLOSE(nFileHandle) Закрывает файл, открытый на низком уровне.

FCREATE (cFileName [, nFileAttribute])

Создает и открывает файл на низком уровне.

CFileName Определяет имя создаваемого файла.

NFileAttribute Определяет атрибуты создаваемого файла.

0 (по умолчанию) Чтение -запись

1 Только для чтения

2 Скрытый

3 только для чтения, скрытый

4 cистемный

5 только для чтения / системный

6 Системный / скрытый

7 только для чтения /скрытый/системный

 

FEOF(nFileHandle) Проверяет достигнут или нет конец файла

FFLUSH(nFileHandle) Записывает на диск файловый буфер для файла открытого на низком уровне.

FGETS(nFileHandle [,nBytes]) Возвращает строку считанную из файла

FOPEN(cFileName [, nAttribute]) Открывает файл на низком уровне

FPUTS(nFileHandle, cExpression [, nCharactersWritten]) Записывает строку символов в файл

FREAD(nFileHandle, nBytes) Считывает указанное число байт из файла

FSEEK (nFileHandle, nBytesMoved [, nRelativePosition])

Перемещает указатель в файле, открытом на низком уровне.

NFileHandle указатель файла

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

NRelativePosition относительно чего перемещается указатель файла:

0 (Значение по умолчанию) начало файла.

1 Текущее положение указателя файла

2 Конец файла

FTIME(cFileName) Возвращает время последней модификации файла.

FWRITE(nFileHandle, cExpression [, nCharactersWritten]) Записывает последовательность байт в файл открытый на низком уровне.

HEADER([nWorkArea | cTableAlias]) Возвращает число байт в заголовке указанной таблицы.

DELETED([cTableAlias | nWorkArea]) Возвращает логическое значение показывающее удалена текущая запись или нет.

FCOUNT([cTableAlias | nWorkArea]) Возвращает число полей в указанной таблице.

FIELD(nFieldNumber [, nWorkArea | cTableAlias]) Возвращает имя поля заданного номером в указанной таблице

FSIZE(cFieldName [, nWorkArea | cTableAlias] | cFileName) Возвращает размер в байтах указанного поля

LUPDATE([nWorkArea | cTableAlias]) Возвращает дату последнего обновления таблицы.

Функции времени

CTOT(cCharacterExpression) Преобразует символьное выражение в тип DateTime

DATETIME() Возвращает системные дату и время в переменную типа DateTime

HOUR(tExpression) Возвращает количество часов из переменной типа DateTime

MINUTE(tExpression) Возвращает количество минут из переменной типа DateTime

SEC(tExpression) Возвращает количество секунд из переменной типа DateTime

SECONDS() Возвращает текущее время в секундах

TIME([nExpression]) Возвращает текущее время в виде символьной строки (hh:mm:ss)

 

 

Функция анализа условий

IIF(логВыраж, Выр1, Выр2)

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

 

логВыраж Определяет логическое выражение, которое IIF() проверяет.

Выр1, Выр2, если логВыраж истинно, то возвращается Выр1. Если логВыраж ложно(.F)., то возвращается Выр2.

 



Поделиться:


Последнее изменение этой страницы: 2017-01-25; просмотров: 177; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 34.201.16.34 (0.412 с.)