Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв БД 2013-03-15.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
12.65 Mб
Скачать

2.4.9. Редактирование таблиц в диалоговом режиме (Browse, Edit)

При выдаче команд Append, Insert, Edit, Change, Browse и наличии открытой таблицы FoxPro развертывает для пользователя окно редактиро­вания. Стандартное окно редактирования имеет две формы.

Для первых четырех команд оно будет выглядеть одинаково - все поля таблицы данных располагаются вертикально (строковая форма). Назовем форму такого окна Edit-окном.

Другую форму предъявления данных осуществляет команда Browse (Browse-окно). Здесь все поля каждой записи располагаются горизон­таль­но - колонками (табличная форма).

Пометка записей к удалению выполняется клавишами ^T*. Приз­на­ком пометки является появление специального значка (черного прямоугольника) в самой левой колонке записи. Это же действие может быть реализовано с помо­щью мыши, для чего ее маркер должен быть установлен в самую левую ко­лон­ку и нажата кнопка мыши.

Дополнение таблицы новой записью осуществляется клавишами ^Y.

Можно установить режим копирования в новую запись всех (On) полей из текущей записи командой Set Carry On/Off.

Можно установить и выборочное копирование только указанных <полей> командой Set Carry То <поля>.

Перемещение внутри таблицы осуществляется с помощью кла­виш перемещения курсора или мыши.

Кроме того, могут использоваться следующие клавиши:

Home/End - переход к началу/концу поля;

Tab/Shift+Tab - переход к следующему/предыдущему полю;

PgUp/PgDn - переход назад/вперед на один экран;

Enter - переход к следующему полю;

Ctrl+Home, Ctrl+PgUp, Ctrl+PgDn или двойное нажатие кнопки мыши - вход в мемо-поле;

Ctrl+W/End - выход с сохранением измененных данных;

Esc - выход без сохранения изменения в текущем поле.

Команда Browse имеет вид:

Browse [Fields <список полей>] [For <Вырl1>] [Freeze <поле>]

[Key <Выр1> [, <Выр2>]] [Last] [ [Ledit] | [Redit ]]

[Lock <ВырN1>] [Lpartition] [Noappend] [Noclear]

[Nodelete] [Noedit | Nomodify] [Nolink] [Nomenu]

[Nowait] [Partition <ВырN2>] [Preference <Вырc1>]

[Rest] [Save] [Timeout <ВырN3>]

[Title <Вырc2>] [Valid [f:] <Вырl2 > [Error <Вырc3>]]

[When <Вырl3>] [Width <ВырN4>]

[[Window <имя окна1>] [In [Window] <имя окна2> | In Screen]]

Управление доступом к полям таблицы

Fields <список полей> содержит список имен через запятую отобра­жае­мых полей. После имени поля могут дополнительно указываться пара­мет­ры описания поля:

:R - только чтение;

:<ширина колонки> - размер поля;

:V = <ВырL1> [:F] [:E = <ВырC1>] - контроль данных. Если <ВырL1> ложно, то выводится значение <ВырC1>. Если указан “:F”, то контроль и при чтении, иначе ‑ контроль только после корректировки значения поля;

:P = <ВырC2> - шаблон для выводимого или вводимого зна­че­ния: “L” (логические значения), “N” (буква и цифра), “X” (любой символ), “9” (цифра и точка), “#” (цифра, пробел и точка), “$” (высвечивает денеж­ный знак, установленный по команде Set Currency), “*” (высвечивает сим­волы звездочки перед числовыми значениями), “.” (определяет позицию десятичной точки), “,” (разделяет цифры слева от десятичной точки).

В начале строки с шаблоном после символа “@” можно указать коды функций, которые действуют в целом на все значение поля: B (вырав­ни­ва­ет числа по левой границе), I (центрирует текст внутри поля), J (выравнивает текст по правой границе поля), L (выводит незначащие нули вместо пробелов для чисел), M <список> (определяет список возможных значений, который представляет собой набор элементов, разделенных за­пя­тыми), R (вывод в шаблоне литеральных символов, не являющихся частью данных и не запоминающихся), S <n> (ограничивает ширину вы­вода <n> символами, где <n> - положительное число), T (удаляет ко­неч­ные пробелы), Z (подавляет незначащие нули пробелами), $ (выс­ве­чи­вает денежный знак, установленный по команде Set Currency).

:B = <Выр1>, <Выр2> [:F] - контроль на диапазон допустимых значений (от <Выр1> до <Выр2>);

:H = <ВырC3> - заголовок поля;

:W = <ВырL2> - контроль входа в поле (если <ВырL2> ложно, то курсор не останавливается в поле).

В списке полей могут быть вычисляемые поля вида:

<имя вычисляемого поля > = <Выр>.

Отбор данных

For <ВырL1> - в окне Browse высвечиваются только те записи, кото­рые удовлетворяют условию.

Rest используется совместно с фразой For команды Browse для предот­вра­щения установки указателя записи в начало файла таблицы.

Key <Выр1> [, <Выр2>] ‑ ограничивает количество высвечиваемых записей диапазоном значений индексов главного индексного файла (от <Выр1> до <Выр2>).

Разделение окна

Lock <expN1> ‑ задает число полей, размещаемых в различных частях окна Вrowse.

Partition <ВырN2> ‑ разделяет окно Browse на левую и правую части: <ВырN2> определяет позицию границы.

Ledit | Redit ‑ при выводе окна Browse левая или правая части выводятся в форме Edit‑окна.

Lpartition ‑ устанавливает курсор на первое поле в левой части или в пра­вом окне, если LPartition не включено.

Nolink ‑ разрывает связи между частями.

Контроль и ограничения редактирования записей

Valid <ВырL2> [Error <ВырC3>] ‑ вычисляется при выборе записи.

Значение Valid вычисляется после изменения записи при переходе на другую запись. Если опция Valid возвращает значение логической истины (.T.), то можно осуществлять переход на другую запись. Если опция Valid возвращает логическую ложь, то курсор остается в текущем поле текущей записи, и появляется системное сообщение “Invalid Input“. Ис­поль­зуя опцию Error <ВырC3>, можно вывести и собственное сооб­ще­ние об ошибке. Если опция Valid возвращает 0, то курсор остается в текущем поле текущей записи, но сообщение об ошибке не выдается.

Если после ключевого слова Valid поставить “:F”, то опция Valid бу­дет выполняться и перед переходом на каждую следующую запись.

When <ВырL3> ‑ позволяет либо запрещает выбор записи. Если опция When возвращает ложь или 0, то выбранная запись становится доступной только для чтения.

Noappend, Noedit, Nodelete ‑ предотвращает включение, корректировку и уда­ление записей соответственно.

Freeze <поле> - позволяет вносить изменения только в одно <поле>.

Конфигурирование Browse-окна

Last - открывает окно Browse в той же конфигурации, что сохранена в фай­ле Foxuser.

Preference <ВырC1> - сохраняет атрибуты и опции окна Browse в исходном файле для их дальнейшего использования.

Noclear - после выхода из окна Browse сохраняет его образ на экране.

Nomenu - запрещает доступ к вертикальному меню Browse и его опциям.

Timeout <ВырN3> - задает время (в секундах) ожидания ввода.

Title <ВырC2> - задает заголовок, который появляется вверху окна Browse.

Window <имя окна> [In Window <имя окна2>] - открывает окно Browse в другом окне. Окно, в котором будет открыто окно Browse, сначала дол­жно быть определено в команде Define Window. Опция Window акти­визирует окно и помещает в него окно Browse. Если используется опция In Window <имя окна2>, то окно Browse открывается в порож­даю­щем окне независимо.

Nowait - после открытия окна Browse продолжает выполнение программы.

Save - после выхода из окна Browse сохраняет его и любые другие открытые временные окна.

Width <ВырN4> - ограничивает количество отображаемых символов для всех полей. Опция не изменяет размер полей в самой базе данных.

Команда Edit имеет аналогичные параметры.

Пример. Настройка окна редактирования происходит таким обра­зом, чтобы оно имело собственные заголовки колонок Fam, Dtr, Pol, Det, Sem, Szar, заголовок окна - КАДРЫ, указания на возможные действия в окне (Ctrl+T, Ctrl+Y, Ctrl+W), ограничение на верхнюю границу средней зарплаты в 50000 и вы­чис­ля­емые поля Pom (Помощь), Pen (пенсия).

Use Kadr && открытие таблицы 'kadr'

Set Date German && установка формата даты

Browse Title '^T - удалить, ^Y - вставить КАДРЫ ^W-выход' Fields;

Fam :H='Фамилия':12,;

Dtr :H='Родился' :V=Between(Dtr,Date( )-365*100,Date( )-365*18); :E='Возраст от 18 до 100 лет',;

Pol :H='Пол' :V=Inlist(upper(Pol),'М','Ж');

:E='Допустимые значения - М (Муж) или Ж (Жен'),;

Det :H='Детей' :V=Between(Det,0,15) :E='Число детей от 0 до 15',;

Sem :H='Сем.пол.' :V=Inlist(upper(Sem),'Б','Х','Р',’В’);

:E='Вводить Б(в Браке), Х(Холост) ,Р(Разведен),В(вдовец)',;

Szar :H='Ср.зар.' :V=Between(Szar,0,50000) :E='Зарплата <=50000',;

Pom=Iif(Szar>1600,0,Min(Det*Szar*0.7,900)) H='Помощь' :P='###.##',;

Pen=Iif(Gomonth(Dtr,12*Iif(upper(Pol)=’М’,60,55))<=Date(),'Пенсионер',''); :H='Пенсия'