Поиск и упорядочение информации в таблице
SET FILTER TO <условие> – установка условия для всех следующих команд обработки данных
SET FILTER TO без параметров – отмена ранее поставленных условий
LOCATE FOR <условие> [<границы>] [WHILE <условие>] – последовательный поиск. Предварительное индексирование не требуется. При успешном поиске функция Found() выдает значение True, а функция Recno() указывает на номер искомой записи с первым вхождением заданного условия поиска. Продолжение поиска осуществляется командой CONTINUE.
USE Students
SET FILTER TO Group=21402
LOCATE FOR Name=”Екатерина”
DISPLAY
CONTINUE
SORT ON <список полей с ключами> TO <имя новой таблицы> [<границы>][<условия>] – создание новой таблицы, в которой физическое размещение записей соответствует заданному принципу. Первое поле в списке считается главным. Ключи: /A – сортировка по возрастанию, /D – сортировка по убыванию.
SEEK <выражение> – быстный поиск по ведущему индексу. Если поиск удачен, Found() возвращает True, а Recno() – номер первой записи, удовлетворяющей условию (при этом остальные искать не надо, они находятся ниже по соседству). Помимо команды SEEK и её синонима FIND существует аналогично работающая функция Seek(<выражение>), возвращающая True, если поиск удачен.
Пример программы изменения данных в таблице: откроем БД Streets, найдём запись со значением «Урицкого» (считаем, что запись уникальная) и заменим её на «Александра Невского».
Clear ALL
Set near off && включаем нежёсткий режим поиска
Use Streets
Set index to && закрываем все дополнительные индексные файлы
INDEX on street_nam to ind_name && создаём новый индексный файл по полю street_nam
SEEK ”Урицкого” && быстрый поиск возможен только с использованием индекса
If Found()
Replace street_nam WITH ”Александра Невского”
else
? ”Нет такого имени”
endif
BROWSE && проверим, что сейчас таблица упорядочена по алфавиту по полю street_nam
Set index to
Связи между таблицами
SET RELATION TO <ключевое поле> INTO <область>, … [ADDITIVE] – связывает указатель записей в активной рабочей области с указателями записей из других рабочих областей по заданному полю. Дочерние таблицы должны быть открыты, и в обязательном порядке проиндексированы по ключевым полям. Создаётся связь вида 1:1.
SET RELATION TO без параметров – разрывает связи между всеми таблицами.
SET SKIP TO <область> – преобразует связь 1:1 к связи 1:М
JOIN <параметры> – альтернативный вариант команды для связывания таблиц
Пример: создадим программу, осуществляющую выборку из двух таблиц, связанных по одному индексному полю. Программа должна запросить фамилию и вывести на экран владельцев телефонов с заданными фамилиями, номера их телефонов и адреса.
clear
select 1
use streets
index on id_street to id_1 unique && совершенно очевидно, что код улицы уникален
pathind=ndx(1) && функция возвращает путь к индексному файлу
select 2
use phones_flat
set relation to id_street into streets && связь один-к-одному
var_name=Space(30) && определим переменную текстового типа
@ 4,4 SAY "Введите имя для дальнейшего поиска:"
@ 5,4 GET var_name PICTURE "@!" && воспользуемся простыми средствами ввода данных
READ
set filter to Alltrim(Upper(name))==AllTrim(m.var_name) && можно и так ...
i=1
FormatFont="FONT 'Courier',12 " && эта переменная будет использована как макроподстановка
@ 6,1 && всего лишь начало области вывода
do while not eof()
&& самая простая команда вывода при желании может обрести неожиданный вес
? i PICTURE "@L 9999 " &FormatFont STYLE 'BI',;
Padr(Substr(surname,1,At(" ",surname)),20," ") &FormatFont ,;
house PICTURE "@R дом 9999 " FONT 'Tahoma',14 STYLE 'B',;
" по ",;
AllTrim(streets.street_typ) &FormatFont,;
streets->street_nam &FormatFont
i=i+1
skip
enddo
set filter to
set relation to
close indexes
close tables
erase "&pathind"
Разработка форм в FoxPro 6.
Вызов редактора форм из командной строки с целью создания формы: create form <имя формы> При этом создаётся файл <имя формы>.scx.
Редактирование формы: modify form <имя формы> При этом открывается окно Form Designer с панелями Form Controls и Properties. Прежде всего необходимо сформировать среду окружения (выпадающее меню Data Environement при клике на окне формы) для формы: добавить таблицы и связать их между собой.
Созданная форма сразу готова для выполнения (меню Form / Run Formили кнопка «!»). Запуск формы на выполнение из командной строки:
do form <имя формы>
read events
Обращение к объектам текущей формы:
thisform.<имя объекта>.<имя свойства> = <значение>
Основные поля, методы или свойства формы и связанные с ними типичные реакции:
Unload Event | закрытие формы | clear events |
Init Event | инициализация формы | устанавливаются нач. знач. объектов формы |
Caption | заголовок формы | уже установлен |
Основные объекты формы:
мастер помогает установить параметры объектов | 1. Поле комментария (Label) | текстовая информация (заголовки) |
2. Текстовое поле (Text Box) | поле ввода и вывода данных с форматом и маской | |
3. Поле редактирования (Edit Box) | поле для редактирования символьных полей большого размера и memo-полей | |
4. Кнопка (Command Button) | одиночная кнопка с надписью или рисунком | |
5. Группа кнопок (Command Group) | заданное количество кнопок в одном контейнере* | |
6. Группа переключателей (Option Group) | Кнопки с зависимой фиксацией* | |
7. Флажок (Check Box) | Принимает значение 0 или 1 | |
8. Поле со списком (Combo Box) | Данные вводятся или выбираются из вып. списка | |
9. Список выбора (List Box) | Отображение многостолбцовых данных со скролл. | |
10. Катушка (Spinner) | инкремент/декремент с заданным шагом | |
11. Табличное представление (Grid) | если не хочется использовать BROWSE | |
12. Изображение (Image) | поддерживаются все известные графич. форматы | |
13. Таймер (Timer) | отображение системных часов или обновление данных через заданный интервал | |
14. Рамка вкладок (Page Frame) | составной объект из заданного числа страниц* | |
15. Элем. отображения ActiveX (ActiveX Bound Control, OLE Bound Control) | подключение внешних элементов управления для отображения значений поля типа General | |
16. Элем. управления ActiveX | создание ActiveX-объекта | |
17. Линия, Контур (Line, Shape) | линия, прямоугольник, эллипс, окружность | |
18. Контейнер (Container) | собирает объекты для однотипного управления | |
19. Разделитель (Separator) | разделитель кнопок | |
20. Гиперссылка (Hyperlink) |
* чтобы проникнуть внутрь контейнера для редактирования его объектов следует выбрать в выпадающем меню опцию «Edit», щёлкнув по объекту-контейнеру правой кнопкой мыши.
С помощью команд меню Format (/Align, /Size) можно сделать объекты одинакового размера, выровнять их относительно друг друга или формы, сделать равными расстояния между ними и т.п.
Для каждого объекта существуют свойства и методы, управляющие его внешним отображением (вкладка Layout в окне Properties), взаимодействием с источником данных для этого объекта (вкладка Data), методами обработки событий от других элементов или связанных с действиями пользователя (вкладка Methods), прочие свойства (вкладка Other). В выделенном на рисунке окне может работать построитель выражений (кнопка fx) для определения значения свойства (если в этом есть необходимость). Если для метода указано [Default], то выполняются действия по умолчанию для каждого из методов. Если требуется ввести собственные действия, после двойного щелчка открывается окно для ввода программы, назначаемой данному методу, помимо действий, выполняемых по умолчанию. |
Основные методы объектов формы и связанные с ними типичные реакции:
Caption | текст для Label и Button | конечно, можно менять программно, например this.caption = time() |
Name | имя объекта (уникальное) | зная его, программно управляем объектом |
Value | текущее значение объекта | можем устанавливать и читать, например: Thisform.Text1.Value = Date() |
Picture | изображение для Button и Image | вводится имя файла изображения |
Click Event | нажатие – прежде всего для Button | пример для кода кнопки «К началу таблицы»: if !bof() go top endif _screen.ActiveForm.Refresh() |
Format, InputMask | для полей ввода | такие же опции форматирования, что и для команд SAY/GET с шаблоном PICTURE |
RowSource | для списков – источник данных | совместно с полем RowSourceType |
Пример кода для кнопки «Выход из формы»:
if MessageBox(“Выходить из формы ?”, 4+32+256, ”Выход”) = 6
_screen.ActiveForm.Release()
else
_screen.ActiveForm.Refresh()
EndIf
Если переменную или массив намечается использовать вне формы или при взаимодействии нескольких форм, создавайте её как Public.
Разработка отчётов в FoxPro 6.
Под отчётом понимается форматированное представление данных, выводимое на экран, принтер или в файл.
Вызов редактора отчётов из командной строки с целью создания нового отчёта:
create report <имя отчёта>. При этом создаётся файл <имя отчёта>.frx. На экране появляется окно Report Designer и панель инструментов Report Controls. Редактирование отчёта: modify report <имя отчёта>.
Создание исполняемых модулей в FoxPro 6.
- Создаём главную программу :
- В окне Project Manager нажимаем кнопку Build и выбираем Build Executable:
Дата добавления: 2015-07-30; просмотров: 1042;