Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема_2_2_FoxУправлен_записями.doc
Скачиваний:
4
Добавлен:
05.05.2019
Размер:
92.67 Кб
Скачать

6. Изменение данных

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

• REPLACE [<границы>] [WHILE <условие>] [FOR <условие>] <поле1> WITH <выражение> [,<поле2> WITH <выражение> ...] [ADDITIVE] [NOOPTIMIZE]

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

Для иллюстрации применения этой команды создадим еще один файл базы данных по учету месячной выработки (зарплаты без вычетов) всех членов бригады номер 1. Назовем его BRIG1.DBF. Файл будет иметь два поля: TAB - табельный номер и VIR - выработка-зарплата.

Командой CREATE brig установим стуктуру файла (рис. 8.1).

Папе Type Uldth Dec

TAB Muneric 3 О UIB Muneric 7 О

Рис 8.1

Пример. Предположим, что бригаде 1 (файл BRIG1.DBF) выделена премия в размере 20% зарплаты, а бригадиру (табельный номер 98) - еще 500000 руб. Премия не начисляется тем рабочим, которые в данном месяце отработали менее одного дня (выработка менее 10000 руб.). С учетом сказанного в файле необходимо увеличить значения всех полей VIR в 1.2 раза, если VIR> 10000, а в записи с ТАВ=98 прибавить еще 100000.

USE brigl

REPLACE vir WITH vir*1.2 FOR vir>10000

REPLACE vir WITH vir+100000 FOR tab=98

Начальное содержимое базы данных представлено на рис.8.2, а новое - на рис.8.3.

Команда REPLACE эквивалентна знаку равенства в операции присвоения для переменных. Буквально фраза <поле> WITH <выражение> соответствует присвоению <поле>=<выражение>.

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

REPLACE vir WITH vir*1.2,;

vir WITH IIF(tab=98,vir+100000,vir) FOR vir>10000

Здесь сначала начисляется премия в 20%. Затем, если ТАВ=98, поле VIR замещается на VIR+100000 и остаетс^ без изменений в противном случае. Анализ и замещение данных производятся с помощью функции IIFQ (см. гл. 16). При этом также ускоряется и процесс обработки данных.

Или еще короче:

REPLACE vir WITH;

IIF(tab=98,vir*l.2+100000,vir*l.2) FOR vir>10000 ИЛИ

REPLACE vir WITH 1.2*vir+IIF(tab=98,100000,0);

FOR vir>10000

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

• BLANK [<границы>] [FIELDS <поля>]

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

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

9