Просмотр и редактирование таблиц VFP
« Назад Помимо команды DISPLAY | LIST [[FIELDS] FieldList] …, таблицу можно просмотреть, употребив команду BROWSE, EDIT или CHANGE. Также эти команды позволяют изменять значения полей таблицы. Команда BROWSE [FIELDS FieldList] [FONT cFontName [, nFontSize]]
|
Символ |
Описание |
! |
Обеспечивает преобразование строчных букв в прописные |
# |
Разрешает ввод цифр, пробелов и знаков + и – |
$ |
Фиксированная позиция знака валюты (в качестве знака берется $); знак проставляется перед полем с данными |
$$ |
Плавающая позиция знака валюты, определяемая числом присутствующих в поле цифр |
, |
Задает положение разделителя в целой части числа, вид которого устанавливается SET SEPARATOR |
. |
Задает положение десятичной точки, вид которой устанавливается SET POINT |
9 |
То же, что и # |
A |
Разрешает ввод только букв алфавита |
L |
Разрешает ввод только логических констант .T. и .F. |
N |
Разрешает ввод только букв алфавита и цифр |
U |
Разрешает ввод только букв алфавита и преобразовывает их в прописные |
W |
Разрешает ввод только букв алфавита и преобразовывает их в строчные |
X |
Разрешает ввод любых символов |
Y |
Требует ввода Y или y и N или n соответственно вместо логических констант .T. и .F. |
Пример. Таблица Test.dbf имеет поля всех типов. Имена полей соответствуют именам представляемых полями типов данных.
Форматная строка '99,999.99', употребленная для поля Numeric, ограничивает диапазон вводимых чисел от –9,999.99 до 99,999.99, предусматривает также отображение разделителя в целой части числа, задает положение десятичной точки и число выводимых после нее знаков.
Форматная строка 'AAAAA', применяемая с полем Character, разрешает ввод только букв алфавита, как строчных, так и прописных. Число введенных букв не может быть более 5.
Форматная строка '!!!!!!!', использованная с полем CharacterB, разрешает ввод любых символов, однако строчные буквы алфавита будут преобразованы в прописные.
Форматирование поля Currency обеспечивает отображение знака валюты (в фиксированной позиции); ограничивает диапазон ввода данных (от –999.99 до 9999.99) и задает положение десятичной точки и точность.
Пример:
select Test
browse fields;
Numeric :p = '99,999.99', ;
Character :p = 'AAAAA', ;
CharacterB :p = '!!!!!!!', ;
Logical :p = 'Y', ;
Currency :p = '$####.##'
На рис. 15.16 приведен возможный результат выполнения приведенного кода.
Рис. 15.16. Пример форматирования данных
:B = eLowerBound, eUpperBound [:F] – ограничивает диапазон изменения вводимых данных. При его нарушении генерируется ошибка. По умолчанию данные проверяются только при изменении значения поля. Однако если для поля вдобавок использовать опцию :F, то проверка будет выполняться всякий раз, когда поле покидается.
Пример. Задаются границы для полей Numeric и Date с постоянно действующей проверкой. В качестве верхней границы поля Date берется величина, возвращаемая встроенной функцией DATE( ).
set status bar off
select test
&& Числовое поле имеет тип Numeric (9, 2)
browse fields ;
Numeric :b = 0, 50000 :f :h = 'Числовое поле', ;
Date :b = {^200-01-01}, Date( ) :f :h = Дата'
set status bar on
При нарушении границы числового поля возникнет приведенное на рис. 15.17 сообщение.
Рис. 15.17. Нарушена граница числового поля
:H = cHeadingText – задает заголовок поля взамен определенного по умолчанию.
:W = lExpression2 – задает W-проверку, выполняемую при попытке позиционироваться на поле и состоящую в вычислении lExpression2. Если lExpression2 вычисляется со значением .T., то перемещение на поле разрешается, и запрещается – в противном случае. Операндами lExpression2 могут быть и пользовательские функции.
Пример. Заданная W-проверка не позволяет перемещаться на поле InputDate таблицы Authors, когда его значение меньше {^2000-01-01}, устанавливая тем самым дату запрета редактирования поля.
if not Used('Authors') then
wait 'Нужно открыть таблицу Authors' window
return
endif
set century on
select Authors
browse fields ;
Author ;
:h = "Автор", ;
InputDate ;
h = "Дата ввода" ;
:w = CheckDate( )
function CheckDate( )
local lowerDate
lowerDate = {^2000-01-01}
if InputDate < lowerDate then
MessageBox("Редактирование дат меньших " ;
+ Transform(lowerDate) + " запрещено!")
return .F.
endif
endFunc
FONT cFontName [, nFontSize], STYLE cFontStyle – аналогичны одноименным опциям команды SET PRINTER FONT, рассмотренной в в разд. 4.1.2.2.
REST – предотвращает перемещение файла с текущей записи к первой строке окна просмотра, когда оно открывается с опцией FOR. Если текущая запись не удовлетворяет lExpression1, то файл позиционируется на ближайшей к ней записи, этому условию удовлетворяющей.
FORMAT – предписывает использование формат-файла, открытого командой SET FORMAT. Из этого файла извлекается следующая информация:
- список отображаемых полей;
- значения опций VALID, WHEN и RANGE;
- размеры полей (задаются опцией PICTURE);
- SAY-выражения (для вычисляемых полей).
Замечание. Команда SET FORMAT включена для совместимости с прежними версиями. Файл, открытый SET FORMAT, закрывается командой CLOSE FORMAT.
FREEZE FieldName – разрешает редактирование единственного поля FieldName таблицы. Все остальные поля будут доступны только для просмотра.
KEY eExpression1 [, eExpression2] – ограничивает число выводимых записей, отображая записи с ключом равным eExpression1, или, если задан параметр eExpression2, записи с ключами в диапазоне от eExpression1 до eExpression2 включительно. Просматриваемая таблица должна быть проиндексирована, тип eExpression1 и eExpression2 должен совпадать с типом контролирующего индекса.
Пример:
select Authors
set order to Author
&& Отображаем записи, в которых фамилии авторов которых
&& начинаются с букв Л, М и Н
browse last key 'Л', 'Н'
То же задает опция FOR, например:
browse last for Between(Author, 'Л', 'Н')
При ее использовании, однако, нет необходимости в качестве управляющего устанавливать индекс Author.
LAST | NOINIT – конфигурация Browse-окна автоматически, если SET RESOURCE установлен в ON, сохраняется в файле FoxUser.dbf (или ином указанном SET RESOURCE файле). Опция LAST | NOINIT обеспечивает открытие Browse-окна с той же конфигурацией, что имело последнее Browse-окно. Исключение составляет опция PREFERENCE, значение которой не восстанавливается.
При употреблении LAST | NOINIT иные Browse-опции должны быть опущены. При закрытии Browse-окна в результате нажатия Ctrl+Q изменения в настройках Browse-окна в файле ресурсов не сохраняются.
Замечания:
1. Имя текущего файла ресурсов устанавливается командой
SET RESOURCE TO [FileName]
2. Функция SYS(2005) возвращает имя используемого файла ресурсов.
3. NOINIT обеспечивает dBASE-совместимость.
LOCK nNumberOfFields – задает, если nNumberOfFields > 0, число полей, которые можно просматривать без прокрутки в левой части Browse-окна. Отрицательное значение nNumberOfFields употребляется для указания числа зафиксированных, постоянно присутствующих в окне полей. Так, если nNumberOfFields = –1, то при любых перемещениях по полям в окне будет присутствовать первое отображаемое поле.
При положительном значении nNumberOfFields Browse-окно всегда имеет две части, даже если опция PARTITION опущена.
LPARTITION – обеспечивает при открытии Browse-окна позиционирование курсора на первом поле левой части окна. По умолчанию он размещается на первом поле правой части окна.
NAME ObjectName – создает ссылку Browse-окна на объект. Это позволяет манипулировать открытым Browse-окном, используя свойства элемента управления Grid, например:
select Books
browse name oBooks nowait
&& Отображаем таблицу без линий сетки
oBooks.GridLines = 0
&& Можем изменить и иные свойства объекта oBooks;
&& их перечень см. в файле справки, тема Grid control
NOAPPEND – запрещает интерактивное добавление записей в просматриваемую таблицу путем нажатия Ctrl+Y или выбора Append Record из меню Table. Наличие NOAPPEND не препятствует добавлению записей из процедур, связанных с VALID, WHEN или ON KEY LABEL.
NOCAPTIONS – обеспечивает отображения имени поля в качестве заголовка столбца таблицы, даже если для поля указан альтернативный заголовок. Действует только при просмотре таблиц видов или баз данных.
NODELETE – не разрешает интерактивное проставление (снятие) пометки удаления записи в просматриваемой таблице путем нажатия Ctrl+ T или выбора Toggle Delete из меню Table, или в результате щелчка мышью по ячейке для пометке удаления записи.
NOEDIT | NOMODIFY – запрещает редактирование записей таблицы, но сохраняет возможность их добавления и проставления (снятия) пометки удаления.
NOLGRID – удаляет линии сетки в левой части Browse-окна.
NORGRID – удаляет линии сетки в правой части Browse-окна.
NOLINK – разъединяет части Browse-окна. По умолчанию при прокрутке одной части прокручивается и вторая. Опция NOLINK позволяет прокручивать их независимо.
NOMENU – удаляет меню Table из системного меню, предотвращая тем самым доступ к Browse-окну посредством меню.
NOOPTIMIZE – отключает рашмор-оптимизацию.
NOREFRESH – запрещает обновление Browse-окна. Если опция не задана, то Browse-окно обновляется через промежуток времени, устанавливаемый SET REFRESH. Опция полезна с файлами, имеющими статус "только для чтения"; при ее употреблении улучшается производительность.
NORMAL – открывает Browse-окно с заданными по умолчанию установками, такими, как цвет, размер, положение, заголовок, управляющие опции (GROW, FLOAT, ZOOM и др.). Если опция опущена Browse-окно открывается в пользовательском окне, Browse-окно наследует определенные для пользовательского окна установки.
PARTITION nColumnNumber – разбивает Browse-окно на левую и правую части, размещая разделительную полосу в столбце с номером nColumnNumber Browse-окна. В каждой части отображаются все поля таблицы или все поля, определенные опцией FIELDS FieldList.
Пример:
select Authors
&& Отображаем левую часть окна в режиме редактирования
&& Результат приведен на рис. 15.18
browse partition 50 Ledit
Рис. 15.18. Две части Browse-окна;
левая часть отображена в режиме редактирования
LEDIT | REDIT – обеспечивает отображение левой | правой части Browse-окна в режиме редактирования.
PREFERENCE PreferenceName – сохраняет опции и параметры Browse-окна в файле ресурсов FoxUser.dbf (или ином указанном SET RESOURCE файле) для последующего использования. В отличие от опции LAST | NOINIT, обеспечивающей воспроизведение последней конфигурации Browse-окна, опция PREFERENCE позволяет восстанавливать конфигурацию окна просмотра, ассоциированную с именем PreferenceName. При закрытии окна PreferenceName-конфигурация обновляется.
Имя PreferenceName не должно превышать 10 символов и должно быть построено по общепринятым правилам.
При необходимости можно запретить обновление PreferenceName-конфигурация, выполняемое при закрытии Browse-окна. Для этого нужно выполнить команду SET RESOURCE OFF, закрыть Browse-окно, открыть файл FoxUser.dbf как обычную таблицу, найти в режиме просмотра запись, отвечающую PreferenceName, и проставить .T. в логическом поле READONLY.
При закрытии Browse-окна в результате нажатия Ctrl+Q PreferenceName-конфигурация в файле ресурсов не сохраняется.
TIMEOUT nSeconds – задает время nSeconds в секундах, в течение которого Browse-окно ожидает ввода. Если время истекло, а очередной ввод не выполнен, то Browse-окно автоматически закроется. В командном окне опция TIMEOUT эффекта не имеет.
TITLE cTitleText – задает отличный от известного по умолчанию заголовок Browse-окна. При использовании BROWSE WINDOW заголовок Browse-окна заместит заголовок пользовательского окна.
VALID lExpression2 [:F] ERROR cMessageText – осуществляет проверку значения редактируемой записи. Проверка выполняется, если запись изменена и выполняется попытка перемещения на другую запись. VALID-проверка не выполняется, если изменялись только memo-поля записи.
Если lExpression2 вычисляется со значением .T., то перемещение на другую запись разрешается, если – со значением .F., то курсор остается в текущем поле и генерируется ошибка, если – со значением 0, то положение курсора также не меняется, но ошибка не генерируется.
Сообщение об ошибке выводится, если SET NOTIFY установлен в ON. Причем, если SET STATUS BAR установлен в ON, сообщения выводятся в статус-строку, а если в OFF – в WAIT-окно.
Встроенный генератор сообщений о VALID-ошибках можно заменить на пользовательский, если в качестве lExpression2 использовать вызов функции, возвращающей в случае ошибки 0 и информирующей о ней пользователя.
Нажатие на Esc позволяет закрыть Browse-окно с ошибочными данными, то есть когда lExpression2 возвращает .F. Чтобы этого избежать, можно временно отключить выполняемое по умолчанию действие Esc, например следующим образом:
on key label Esc MessageBox("Клавиша отключена!")
После завершения BROWSE действие Esc следует восстановить:
on key label Esc
Опция [:F] обеспечивает выполнение VALID-проверки всякий раз, когда покидается текущая строка, даже если все ее поля остались неизмененными.
Опция ERROR cMessageText задает сообщение, выдаваемое при ошибке, обнаруженной VALID-проверкой, взамен заданному по умолчанию сообщению.
Пример:
on key label Esc MessageBox("Клавиша отключена!")
set notify on
set status bar off
select Authors
browse title "Авторы";
valid InputDate <= Date( );
error "Неверная дата"
on key Label Esc
WHEN lExpression3 – задает проверку, выполняемую при перемещении к следующей записи. Запись, которая стала текущей, будет доступна для редактирования, если lExpression3 вычисляется со значением .T., и будет доступна только для чтения, если lExpression3 возвращает .F. или 0.
Пример:
select Authors
browse when InputDate > {^2004-01-01}
WIDTH nFieldWidth – задает ширину nFieldWidth, которую будут иметь все столбцы при открытии Browse-окна. После открытия ширина может быть изменена интерактивно. Если аналогичный параметр (:nColumnWidth) задан для отдельного поля, то его значение имеет больший, чем WIDTH nFieldWidth, приоритет.
COLOR SCHEME nSchemeNumber – задает номер цветовой схемы для Browse-окна. На самом деле Browse-окно использует цветовую схему, устанавливаемую на панели управления Windows (Экран – Оформление – Цветовая схема).
Замечание. При нажатии на Esc Browse-окно закрывается; изменения, выполненные в текущем поле, не сохраняются.
Пример:
define window wForBrowse at 10, 10 size 20, 80 ;
in desktop system float close title "Browse" ;
font "Times New Roman", 12
select Authors
&& Заголовок "Авторы" заместит заголовок "Browse"
browse title "Авторы" window wForBrowse save