Добавлен: 28.11.2018

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

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

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
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).