Добавлен: 28.11.2018

Просмотров: 2427

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

16

Примеры

USE kadr 
DISPLAY ALL TO FILE kadr 

выдача

 

всех

 

записей

 

в

 

файл

 

KADR. 

ТХТ

 

DISPLAY fam WHILE tab#'890'- 

выдача

 

полей

 FAM 

всех

 

записей

 

до

 

тех

 

пор

пока

 

не

 

встретится

 

за

-

пись

 

с

 

ТАВ

='890’ 

 
GO 

   - 

переход

 

к

 

четвертой

 

записи

 

DISPLAY REST FOR pol=’

Ж

’ .AND.sem='

Б

выдача

 

всех

 

записей

 

файла

начиная

 

с

 

четвертой

,  

для

 

всех

 

женщин

,  

состоящих

 

а

 

браке

 

GO TOP 

переход

 

в

 

начало

 

файла

 

SET MEMOWIDTH 

ТО

 40 

-

 

установление

 

ширины

 

вывода

 

мемо

-

поля

 

в

 40 

символов

 

DISPLAY fam, per OFF 

вывод

 

иэ

 

текущей

  (

первой

записи

 

поля

 FAM 

и

 

мемо

-

поля

 

PER. 

Номер

 

записи

 

не

 

выводится

 

 

Команда

 

с

 

похожими

 

функциями

 LIST 

не

 

делает

 

периоди

-

ческих

 

остановок

 

при

 

выдаче

 

данных

и

 

по

 

умолчанию

 

область

 

ее

 

действия

 

не

 

текущая

 

запись

а

 

весь

 

файл

Ввиду

 

этого

 

ко

-

манда

 

более

 

пригодна

 

для

 

выдачи

 

данных

 

на

 

принтер

/

файл

.  

 

Удаление

 

данных

 

 

В

 FoxPro 

имеется

 

несколько

 

команд

 

удаления

 

данных

ERASE <

файл

 

удаление

 

любого

 

не

 

открытого

 

в

 

данный

 

момент

 

файла

Расширение

 

имени

 

обязательно

Совершенно

 

аналогичные

 

функции

 

выполняет

 

команда

 DELETE FILE 

<

файл

>. 

ZAP - 

удаление

 

всех

 

записей

 

в

 

активном

 

файле

 

базы

 

дан

-

ных

 

с

 

сохранением

 

его

 

структуры

DELETE [<

границы

>] [WHILE <

условие

>] [FOR <

условие

>] 

-

пометка

 

к

 

удалению

 

записей

 

в

 

указанных

 

границах

 

и

/

или

 

от

-

вечающих

 

указанным

 

условиям

. DELETE 

без

 

параметров

 

по

-

мечает

 

только

 

одну

 

текущую

 

запись

PACK [MEMO][DBF] - 

физическое

 

удаление

 

помеченных

 

ранее

 

записей

 

и

 

сжатие

 

файла

После

 

выполнения

 

команды

 

ука

-

затель

 

записей

 

устанавливается

 

в

 

начало

 

базы

Если

 

имеются

 

открытые

 

индексы

они

 

перестраиваются

По

 

умолчанию

 

упа

-

ковывается

 

как

 

файл

 

данных

 (DBF), 

так

 

и

 

файл

 

мемо

-

полей

 

(FPT). 

Если

 

указан

 

параметр

 MEMO, 

то

 

упаковывается

 

только

 

FPT-

файл

если

 DBF - 

то

 

только

 DBF-

файл


background image

 

17

RECALL [<

границы

>] [WHILE <

условие

>] [FOR <

условие

>] 

 

снятие

 

пометок

 

к

 

удалению

. RECALL 

без

 

параметров

 

действует

 

только

 

на

 

текущую

 

запись

Удаление

 

записей

 

в

 

базе

 

данных

 

выполняется

 

в

 

два

 

эта

-

па

сначала

 

пометка

 

записей

 

на

 

удаление

 (

она

 

возможна

 

и

 

в

 

ок

-

нах

 

редактирования

 

нажатием

 

клавиш

 Ctrl-T) 

командой

 DELETE, 

а

 

затем

 

их

 

физическое

 

уничтожение

 

командой

 PACK. 

Если

 

упа

-

ковка

 

файла

 

еще

 

не

 

произведена

можно

 

спасти

 

нужные

 

записи

 

командой

 RECALL. 

Команду

 PACK 

имеет

 

смысл

 

применять

 

не

 

только

 

для

 

удаления

 

записей

но

 

и

 

для

 

сжатия

 

мемо

-

полей

 (PACK MEMO). 

Дело

 

в

 

том

что

 

даже

 

при

 

видимом

 

уменьшении

 

размера

 

мемо

-

поля

  (

например

в

 

результате

 

редактирования

уменьшается

 

только

 

доступная

 

пользователю

 

часть

но

 

размер

 

самого

 FPT-

файла

 

никогда

 

не

 

сокращается

Таким

 

образом

при

 

интенсив

-

ном

 

обновлении

 

данных

 

с

 

участием

 

мемо

-

полей

 

вполне

 

возмож

-

но

 

недопустимое

 «

разбухание

» 

файла

 

примечаний

 

Примеры

USE kadr 
?RECNO(),RECCOUNT() - 

выдача

 

номера

 

текущей

 

записи

 

и

 

общего

 

их

 

числа

 

1 7 

GO 5                — 

переход

 

к

 

пятой

 

записи

 

SKIP 

–3 

  — 

возврат

 

ко

 

второй

 

записи

 

DELETE NEXT 3 

 

пометка

 

к

 

удалению

 

Записей

 2,3,4 

RECALL RECORD 4 

снятие

 

пометки

 

о

 

Записи

 4 

PACK 

  - 

сжатие

 

файла

 

с

 

Возвратом

 

в

 

начало

 

?RECNO(),RECCOUNT() 

1 5 - 

осталось

 5 

записей

 

 

Для

 

иллюстрации

 

работы

 FoxPro 

применена

 

команда

вы

-

дающая

 

на

 

экран

 

перечисленные

 

в

 

ней

 

выражения

Более

 

под

-

робно

 

команда

 

будет

 

рассмотрена

 

позже

Команда

 

сжатия

 PACK 

в

 

базе

 

реальных

 

размеров

 

выпол

-

няется

 

медленно

и

 

поэтому

 

лучше

 

ее

 

делать

 

один

 

раз

 

в

 

день

 

или

 

даже

 

раз

 

в

 

несколько

 

дней

Чтобы

 

помеченные

 

к

 

удалению

 

записи

 

до

 

их

 

уничтожения

 

не

 

участвовали

 

далее

 

в

 

обработке

 

данных

можно

 

использовать

 

команду

 

SET DELETED ON 

При

 

этом

 

такие

 

записи

 

делаются

 

как

 

бы

 

невидимыми

 

для

 

FoxPro 

и

 

пользователя

за

 

исключением

 

случаев

 

прямого

 

на

 

них

 

указания

Например

команда

 GO 20 

установит

 

указатель

 

запи

-

сей

 

на

 

двадцатую

 

запись

 

независимо

 

от

 

того

была

 

или

 

нет

 

она

 

помечена

По

 

умолчанию

 

принято

 

значение

 OFF. 

 


background image

 

18

Изменение

 

данных

 

 

В

 FoxPro 

имеется

 

возможность

 

не

 

только

 

вручную

 

редак

-

тировать

 

данные

но

 

и

 

изменять

 

их

 

путем

 

присвоений

 

или

 

вы

-

числений

REPLACE [<

границы

>] [WHILE <

условие

>] [FOR <

усло

-

вие

>] <

поле

1> WITH <

выражение

> [,<

поле

2> WITH <

вы

-

ражение

> ...] 

[ADDITIVE][NOOPTIMIZE] 

Эта

 

команда

 

осуществляет

 

множественное

 

изменение

 

по

-

лей

 

базы

 

данных

 

в

 

соответствии

 

с

 

заданными

 

выражениями

в

 

установленных

 

границах

 

и

 

при

 

заданных

 

условиях

Если

 

отсут

-

ствует

 

параметр

  <

границы

или

  <

условия

>, 

изменена

 

будет

 

только

 

текущая

 

запись

Параметр

 ADDITIVE 

действует

 

для

 

ме

-

мо

-

полей

 

и

 

означает

что

 

заданное

 <

выражение

будет

 

дописы

-

ваться

 

в

 

конец

 

поля

Если

 

этот

 

параметр

 

опущен

то

 

старое

 

зна

-

чение

 

мемо

-

поля

 

будет

 

замещено

 <

выражением

>. 

Для

 

иллюстрации

 

применения

 

этой

 

команды

 

создадим

 

еще

 

один

 

файл

 

базы

 

данных

 

по

 

учету

 

месячной

 

выработки

 (

зар

-

платы

 

без

 

вычетов

всех

 

членов

 

бригады

 

номер

 1. 

Назовем

 

его

 

BRIG1.DBF. 

Файл

 

будет

 

иметь

 

два

 

поля

: TAB - 

табельный

 

номер

 

и

 VIR - 

выработка

-

зарплата

Командой

 CREATE brig 

установим

 

структуру

 

файла

 (

рис

.1.7). 

 

Name

 

Type

 

Uldth

 

Dec

 

TAB 
VIR 

NAMERIC 
NAMERIC 



Рис

 1.7 

 

Пример

. 

Предположим

что

 

бригаде

 1 (

файл

 BRIG1.DBF) 

выделена

 

премия

 

в

 

размере

 20% 

зарплаты

а

 

бригадиру

  (

та

-

бельный

 

номер

 98) - 

еще

 500000 

руб

Премия

 

не

 

начисляется

 

тем

 

рабочим

которые

 

в

 

данном

 

месяце

 

отработали

 

менее

 

одно

-

го

 

дня

  (

выработка

 

менее

 10000 

руб

.). 

С

 

учетом

 

сказанного

 

в

 

файле

 

необходимо

 

увеличить

 

значения

 

всех

 

полей

 VIR 

в

 1.2 

раза

если

 VIR> 10000, 

а

 

в

 

записи

 

с

 

ТАВ

=98 

прибавить

 

еще

 

100000. 

 USE brig1

 

REPLACE vir WITH vir*1.2    FOR vir>10000 
REPLACE vir WITH vir+100000 FOR tab=98

 

Начальное

 

содержимое

 

базы

 

данных

 

представлено

 

на

 

рис

.1.8, 

а

 

новое

 - 

на

 

рис

.1.9. 


background image

 

19

 

 TAB 

VIR  

  TAB 

VIR 

1
2
3
4

98 

13 
68 

250000

14000

400

201000




98

6

13
68

400000
168000

4000

241200

Рис

. 1.8   

   

 

   

Рис

. 1.9 

 

Команда

 REPLACE 

эквивалентна

 

знаку

 

равенства

 

в

 

опе

-

рации

 

присвоения

 

для

 

переменных

Буквально

 

фраза

  <

поле

WITH <

выражение

соответствует

 

присвоению

 

<

по

-

ле

>=<

выражение

>. 

Очистку

 

полей

 

базы

 

данных

 

выполняет

 

команда

 

BLANK [<

границы

>] [FIELDS <

поля

>] 

[WHILE <

условие

>] [FOR <

условие

>] [NOOPTIMIZE 

 

Если

 

отсутствуют

  <

границы

или

  <

условия

>, 

очищена

 

бу

-

дет

 

только

 

текущая

 

запись

. BLANK 

без

 

параметра

 FIELDS 

очи

-

щает

 

все

 

поля

 

базы

 

Локализация

 

и

 

поиск

 

данных

 

         Фильтрация

 

данных

 

 

Хотя

 

в

 

команде

 BROWSE, 

например

имеется

 

возмож

-

ность

 

осуществить

 

отбор

 

записей

 

из

 

базы

 

с

 

помощью

 

опций

 

FOR 

и

 KEY, 

в

 

других

 

командах

 

это

 

может

 

оказаться

 

невозмож

-

ным

 

или

 

неудобным

В

 

силу

 

этого

 

в

 FoxPro 

предусмотрена

 

спе

-

циальная

 

команда

 

вида

 

SET FILTER TO [<

условие

>], 

которая

 

позволяет

 

установить

 FOR-

условие

 

для

 

всех

 

без

 

исклю

-

чения

 

команд

 

обработки

 

данных

Здесь

 <

условие

указывает

 

на

 

то

какие

 

именно

 

записи

 

могут

 

быть

 

доступны

 

для

 

обработки

Например

команда

 

SET FILTER TO fam='

И

B' 

сделает

 

доступными

 

для

 

обработки

 

только

 

записи

в

 

которых

 

фамилия

 

сотрудника

 

начинается

 

с

 

букв

  «

ИВ

». 

Команда

 SET 

FILTER 

действует

 

исключительно

 

на

 

ту

 

базу

которая

 

открыта

 

и

 

активна

 

в

 

данный

 

момент

.  

Выяснить

 

выражение

 

фильтра

 

для

 

текущей

 

или

 

указанной

 

рабочей

 

области

 

можно

 

с

 

помощью

 

функции

 

FILTER([<

область

>]) 


background image

 

20

В

 FoxPro 

имеются

 

разнообразные

 

команды

 

поиска

 

запи

-

сей

которые

 

реализуют

 

как

 

последовательный

так

 

и

 

ускорен

-

ный

 

алгоритмы

При

 

последовательном

 

поиске

 

выполняется

 

сплошной

 

перебор

 

записей

 

файла

 

базы

 

данных

 

до

 

установки

 

указателя

 

записей

 

на

 

искомую

 

запись

 

Начальный

 

поиск

 

данных

  

 

Следующая

 

команда

 

осуществляет

 

последовательный

 

поиск

 

одной

 

самой

 

первой

 

записи

 

в

 

базе

 

данных

удовлетво

-

ряющей

 

заданному

 FOR-

условию

среди

 

записей

находящихся

 

в

 

заданных

 

границах

и

 

до

 

тех

 

пор

пока

 

соблюдается

 WHILE-

условие

 (

если

 

есть

). 

 LOCATE [<

границы

>] FOR <

условие

> [WHILE <

условие

>] 

В

 

случае

если

 

границы

 

и

 WHILE-

условие

 

отсутствуют

по

-

иск

 

ведется

 

во

 

всем

 

файле

начиная

 

с

 

первой

 

записи

При

 

ус

-

пешном

 

поиске

 

указатель

 

записей

 

устанавливается

 

на

 

найден

-

ную

 

запись

функция

 RECNO() 

равна

 

номеру

 

этой

 

записи

а

 

функция

 FOUND(), 

оценивающая

 

результат

 

поиска

возвращает

 

значение

  «

Истина

» (.

Т

.). 

При

 

неудачном

 

поиске

 

функция

 

RECNO() 

равна

 

числу

 

записей

 

в

 

базе

 

плюс

 1, FOUND()=.F., 

а

 

функция

 

достижения

 

конца

 

файла

 EOF() 

возвращает

 .

Т

 

Продолжение

 

поиска

 

 

Команда

которая

 

продолжает

 

поиск

 

записей

начатый

 

ра

-

нее

 

командой

 LOCATE, 

приведена

 

ниже

 CONTINUE, 

которая

 

эквивалентна

 

команде

 LOCATE REST FOR <

условие

[WHILE <

условие

>]. 

Если

 

командой

 LOCATE 

или

 CONTINUE 

не

 

было

 

найдено

 

нужных

 

записей

указатель

 

записей

 

устанавлива

-

ется

 

на

 

нижнюю

 

границу

 

поиска

  (

если

 

она

 

введена

 

в

 

команде

или

 

на

 

конец

 

файла

 (EOF()=.T.). 

Результатом

 

применения

 

команд

 (

если

 SET TALK ON) 

яв

-

ляются

 

сообщения

 

о

 

номере

 

каждой

 

найденной

 

записи

 

или

/

и

 

достижении

 

границы

 

поиска

Пример

В

 

файле

 KADR (

его

 

содержимое

 

представлено

 

при

 

описании

 

команды

 BROWSE) 

необходимо

 

найти

 

все

 

записи

 

о

 

женщинах

т

.

е

те

 

записи

в

 

которых

 POL=’

Ж

’. 

Вводимые

 

ко

-

манды

 

и

 

реакции

 

системы

 

изображены

 

ниже

  (

найдены

 

записи

 

с

 

номерами

 3 

и

 5).