Практикум по
MICROSOFT VISUAL FOXPRO
пособие для лабораторных занятий
по курсу «Базы данных»
Часть 1. Язык FoxPro – краткий справочник
СОДЕРЖАНИЕ
ВВЕДЕНИЕ.................................................................................................................................................................................... 3
ИСПОЛЬЗУЕМЫЕ ОБОЗНАЧЕНИЯ................................................................................................................................ 3
РЕКОМЕНДАЦИИ ПО РАБОТЕ......................................................................................................................................... 4
ТИПЫ ДАННЫХ........................................................................................................................................................................ 4
ОПЕРАТОРЫ............................................................................................................................................................................... 5
ОПРЕДЕЛЕНИЯ......................................................................................................................................................................... 5
СОЗДАНИЕ, МОДИФИКАЦИЯ И УДАЛЕНИЕ БАЗЫ ДАННЫХ........................................................................ 7
ОТКРЫТИЕ, ЗАКРЫТИЕ И РАБОТА С БАЗОЙ ДАННЫХ.................................................................................... 8
РАБОТА С ТАБЛИЦАМИ.................................................................................................................................................... 10
РАБОТА С ЗАПРОСАМИ..................................................................................................................................................... 14
РАБОТА С ПРЕДСТАВЛЕНИЯМИ И СОЕДИНЕНИЯМИ................................................................................... 14
КОМАНДЫ ЯЗЫКА SQL...................................................................................................................................................... 16
НАВИГАЦИЯ В ТАБЛИЦЕ................................................................................................................................................. 18
ПОИСК И ЛОКАЛИЗАЦИЯ ДАННЫХ.......................................................................................................................... 19
ПРОСМОТР И РЕДАКТИРОВАНИЕ ТАБЛИЦ.......................................................................................................... 20
ПОДСЧЕТ ИТОГОВЫХ ЗНАЧЕНИЙ............................................................................................................................. 22
УДАЛЕНИЕ ДАННЫХ.......................................................................................................................................................... 22
ДОБАВЛЕНИЕ ДАННЫХ.................................................................................................................................................... 23
ИЗМЕНЕНИЕ ДАННЫХ....................................................................................................................................................... 24
РАБОТА С ПЕРЕМЕННЫМИ И МАССИВАМИ....................................................................................................... 24
РАБОТА СО СТРОКАМИ.................................................................................................................................................... 25
РАБОТА С ДАТАМИ.............................................................................................................................................................. 26
ПРОЦЕДУРЫ И ФУНКЦИИ............................................................................................................................................... 26
РАБОТА С МЕНЮ.................................................................................................................................................................. 27
НАЗНАЧЕНИЯ НА КЛАВИШИ......................................................................................................................................... 29
КОМАНДЫ УПРАВЛЕНИЯ................................................................................................................................................ 30
Настоящее учебное пособие предназначено для поддержки практических занятий по курсам “Информационные технологии в экономике”, “Базы данных” и т.п., предполагающим изучение современных СУБД. В первой части учебника излагаются основы языка FoxPro (версия Visual 7.0), рассматриваются его основные команды и некоторые функции. Пособие может быть использовано для изучения FoxPro “с нуля” и полезно как справочник в практической работе.
ВВЕДЕНИЕ
Система управления базами данных (СУБД) FoxPro имеет славную и довольно давнюю по сегодняшним постиндустриальным меркам историю. Будучи прямым потомком dBase, FoxPro унаследовал от него структуру данных, а также мощный и удобный язык, каким не может похвастаться больше ни одна из всемирно известных СУБД. FoxPro оказался лакомым кусочком и был прибран к рукам фирмой Microsoft, что также само за себя говорит. Впрочем, в семействе Microsoft он так и остался слегка неродным… Тем не менее, добавленная в версии 3.0 visual’ность, развитая далее в версиях 5-7.0 (на сегодняшний момент) позволяет делать с данными и программами их обработки если не все, что угодно, то очень многое. Возможности его развития безграничны, с каждой версией появляется что-то новое, особенно в области интегрирования с другими программами и технологиями. И мне хотелось бы, чтобы читатели тоже оценили и полюбили “старый добрый Fox”.
Внутренний язык FoxPro является гибким и мощным. Для того чтобы профессионально программировать на Fox’е, этот язык нужно хорошо знать. Неспроста в объявлениях о поиске программистов на Fox’е встречается фраза: “Желателен опыт работы в FoxPro 2.0-2.6 под DOS и Windows” (мне повезло – я изучала еще Fox под DOS). К сожалению, современная литература уделяет больше внимания визуальным аспектам, а сам язык отходит на второй план. До сих пор самой лучшей книгой по внутреннему языку Fox’а остается пережившая множество изданий “Создание приложений для FoxPro 2.5/2.6 в DOS и Windows”, А.Попов (последнее издание вышло в 2001 году).
ИСПОЛЬЗУЕМЫЕ ОБОЗНАЧЕНИЯ
Ключевые слова команд выделяются жирными заглавными буквами, например, CREATE.
Идентификаторы представлены мнемоническими обозначениями, например, ИмяТаблицы. Если для идентификатора имеет значение тип, то он упоминается в его названии, например, логВыражение.
Необязательные аргументы заключаются в квадратные скобки, например, [NOWAIT].
Выражение, набранное курсивом, например, база данных, имеет определение в соответствующем параграфе.
Все команды, для которых режим использования не оговаривается особо, могут выполняться в программном режиме либо из командного окна. Признак Меню (Пункты меню) означает, что команда может быть также выполнена с помощью соответствующего пункта меню.
Запомните! FoxPro не различает регистр букв. Однако ключевые слова принято писать заглавными буквами – так текст программы легче читается.
Запомните! – Многие ключевые слова можно сокращать до 4-х букв.
Запомните! – Если команда не уместилась на одной строке, точка с запятой в конце строки означает перенос команды на следующую строку (однако в HELP’е точки с запятой ставить не принято, поэтому в данном учебнике их тоже нет).
РЕКОМЕНДАЦИИ ПО РАБОТЕ
Отдельные команды FoxPro удобно тестировать через командное окно (Window – Command Window или Ctrl+F2). При этом в командном окне записывается весь протокол вашей работы – как верные, так и неверные команды. Команды не обязательно набирать каждый раз заново – можно просто исправить старую строку и нажать Enter.
Список открытых таблиц удобно просматривать через окно сеанса данных (Window – Data sessions).
Для печати текущих значений переменных удобно использовать команду
? Выражение. Информация будет выведена прямо на экран.
Более экзотичный способ вывода текущей информации – команда
WAIT WINDOW симвВыражение. Выражение будет выведено в системное окно в правом верхнем углу экрана (не забывайте преобразовывать выражение к символьному типу!).
ТИПЫ ДАННЫХ
Ниже приведены типы данных для полей таблиц. Типы, отмеченные звездочками (*), могут использоваться также для переменных.
Тип поля |
Размер в байтах |
Пример |
Комментарий |
Character* |
Задается, не более 255 |
“строка1” ‘строка2’ [строка3] |
Текст |
Currency* |
Фиксирован, 8 |
100.00 |
Денежный формат |
Numeric* |
Задается, не более 20 |
1 123.456 |
Числовой формат |
Float* |
Задается, не более 20 |
1e-5 123.456 |
Формат с плавающей точкой |
Date* |
Фиксирован, 8 |
{01.04.2002} (до версии 5.0) {^2001-04-01} (версия 6.0 и выше) |
Дата |
DateTime* |
Фиксирован, 8 |
{01.04.2002 12:00:00} (до версии 5.0) {^2001-04-01 12:00:00 a} (версия 6.0 и выше) |
Дата и время |
Double |
Фиксирован, 8 |
1e300 123.456 |
Формат с плавающей точкой двойной точности |
Integer |
Фиксирован, 4 |
123 |
Целое |
Logical* |
Фиксирован, 1 |
.t. .f. .T. .F. |
Логический тип |
Memo |
Фиксирован, 10 |
|
Текст произвольной длины. В DBF-файле хранится только ссылка на данные, сами данные записываются в файл с расширением FPT. |
General |
Фиксирован, 10 |
|
Ссылка на файл любого типа. |
ОПЕРАТОРЫ
Строковые
+ Конкатенация.
- Конкатенация с подавлением концевых пробелов в первом операнде
$ Поиск первого операнда во втором. Возвращает истину, если найдено.
Числовые
**, ^ Возведение в степень
*, / Арифметические умножение и деление
% Остаток по модулю
+, - Арифметические сложение и вычитание
Логические
NOT,! Логическое отрицание
AND Логическое И
OR Логические ИЛИ
Сравнения
< Меньше, чем
> Больше, чем
= Равно
<>, #, != Не равно
<= Не больше
>= Не меньше
== Точное сравнение строк
Операторы даты и времени
+ Сложение:
время1 = время2 + секунды или
дата1 = дата2 + дни
– Вычитание
секунды = время1 – время1 или
время1 = время2 – секунды или
дата1 = дата2 - дни
ОПРЕДЕЛЕНИЯ
База данных в FoxPro – это контейнер, содержащий информацию о таблицах, их свойствах, связях, индексах, соединениях, представлениях, хранимых процедурах. Эта информация хранится в файлах с расширениями .DBC, .DCX и .DCT.
Таблица базы данных и свободная таблица представлены файлами с расширением .DBF (кроме того, файлы с расширениями .FPT и .TBK содержат информацию для мемо-полей – текстовых полей произвольной длины). Различие между ними состоит в том, что свободная таблица не принадлежит никакой базе данных, а таблица базы данных может принадлежать только одной базе данных и иметь дополнительные свойства по сравнению со свободной таблицей – длинные имена полей, шаблоны и условия проверки для ввода данных и т.п. Свободную таблицу можно включить в базу данных командой ADD, и наоборот, таблицу базы данных можно сделать свободной таблицей с помощью команды FREE.
Триггер – процедура, которая неявно вызывается при изменении данных. Различают триггеры добавления, удаления и обновления. Триггеры хранятся в базе данных в виде хранимых процедур. Триггер возвращает логическое значение: если возвращается ложь, триггер отменяет сделанные изменения и выдает сообщение об ошибке.
Исключительный или монопольный (EXCLUSIVE) и разделяемый (SHARED) режимы открытия относятся к базам данных и таблицам. При использовании разделяемого режима несколько пользователей могут одновременно работать с одними и теми же данными. Исключительный режим работы позволяет администратору захватить файлы в монопольное использование и выполнять такие действия, как переиндексация, упаковка и проверка целостности.
Рабочая область – логическая область, в которой в каждый момент времени может быть открыта только одна таблица (таблицу открывают командой USE). К рабочей области можно обращаться по номеру (от 1 до 32767) или по псевдониму таблицы, если в данной рабочей области открыта таблица. Только одна рабочая область может быть текущей. Для переключения между рабочими областями используется команда SELECT (не путайте с командой SQL SELECT!).
Псевдоним таблицы создается при открытии таблицы командой USE. По этому псевдониму можно обращаться к таблице и к рабочей области в текущем сеансе работы. Если псевдоним не указан явно, он совпадает с коротким именем таблицы.
Индекс – вспомогательный файл, который позволяет логически сортировать записи и ускорять поиск в таблице, а также необходим для организации временных и постоянных связей между таблицами. Одновременно с таблицей может быть открыто несколько индексов, но только один из них является активным, т.е. определяет логический порядок записей в таблице. При открытии таблицы следует открывать и все ее индексы, иначе изменения, сделанные в таблице, не будут отражены в индексах и они “устареют”.
Простой индексный файл – файл с расширением .IDX, содержащий один индекс.
Мультииндексный файл – файл с расширением .СDX, содержащий несколько тегов-индексов.
Тег – составная часть мультииндексного файла.
Структурный индекс – мультииндексный файл с тем же именем, что и таблица. Открывается автоматически при открытии таблицы. Единственный тип индекса, который может храниться в базе данных.
Связь между таблицами может быть постоянной и временной.
Постоянная связь хранится в базе данных и нужна для поддержания целостности базы данных.
Временная связь позволяет автоматически перемещать указатель в младшей таблице при передвижении по строкам старшей таблицы.
Запрос – файл с расширением .QPR. Содержит SQL-команду SELECT.
Для не слишком сложных команд (без вложенных запросов, без UNION) запрос можно редактировать с помощью визуального редактора.
Представление – объект базы данных, пользовательская виртуальная таблица, можно рассматривать его как обновляемый запрос. Хранится в базе данных. Различают локальные и удаленные представления. Локальное представление может быть построено только на основе таблиц текущей базы данных. Удаленное представление позволяет организовать доступ к базам данных других типов, например, SQL Server или Oracle.
Соединение – объект базы данных, специфицирующий удаленный источник данных. Является (необязательным) промежуточным звеном между удаленным представлением и источником данных.
Источник данных ODBC (ODBC Data Source Name) – понятие Windows, содержит информацию об установке связи с источником. В качестве источника может выступать сервер баз данных или файловый сервер, простейший источник данных – текстовый файл.
Меню – кроме стандартного понятия – строки в верхней части окна с возможностью выбора разных режимов работы – меню в FoxPro представляет собой 2 файла с расширениями .MNX и .MNT. Кроме того, файл .MPR содержит сгенерированный код меню
СОЗДАНИЕ, МОДИФИКАЦИЯ И УДАЛЕНИЕ БАЗЫ ДАННЫХ
CREATE DATABASE [ИмяБазы | ?]
– создает базу данных с именем ИмяБазы, ( ? – для запроса имени выводит стандартное окно WINDOWS). Меню (File – New – Database).
Пример: Cоздаем базу данных primer.
CREATE DATABASE primer
DELETE DATABASE ИмяБазы | ? [DELETETABLES] [RECYCLE]
– удаляет базу данных с именем ИмяБазы, ( ? – для запроса имени выводит стандартное окно WINDOWS). Дополнительные параметры указывают, удалять ли физически таблицы базы данных с диска или превращать их в свободные таблицы и помещать ли удаленные файлы в корзину.
Пример: Удаляем базу данных primer и все ее таблицы, не помещая их в корзину.
DELETE DATABASE primer DELETETABLES
MODIFY DATABASE [ИмяБазы | ?] [NOWAIT] [NOEDIT]
– открывает базу данных в режиме конструктора (NOEDIT – только для просмотра). Параметр NOWAIT в программном режиме запрещает паузу и продолжает выполнение программы. Меню (File – Open – Database(*.dbc)).
Пример: Открываем базу данных primer в режиме конструктора с возможностью редактирования.
MODI DATABASE primer
ADD TABLE ИмяТаблицы | ? [NAME ДлинноеИмяТаблицы]
– добавляет в текущую базу данных свободную таблицу ИмяТаблицы или таблицу по запросу “?” и назначает ей свойство ДлинноеИмяТаблицы (до 128 символов). Меню (в режиме конструктора базы данных – Database – Add Table…)
Пример: Добавляем уже существующую свободную таблицу departments в текущую базу данных и назначаем ей соответствующее длинное имя.
ADD TABLE departments NAME “Справочник отделов”
REMOVE TABLE ИмяТаблицы | ? [DELETE] [RECYCLE]
– удаляет таблицу ИмяТаблицы из текущей базы данных и делает ее свободной таблицей или (DELETE) физически удаляет ее с диска. Параметр RECYCLE указывает, что удаляемый файл нужно перенести в корзину. Меню (в режиме конструктора базы данных – Database – Remove)
Пример: Удаляем таблицу employees из текущей базы данных и с диска.
REMOVE TABLE employees DELETE
FREE TABLE ИмяТаблицы
– удаляет таблицу ИмяТаблицы из базы данных и делает ее свободной таблицей. Команда выполняется, даже если базы данных уже не существует.
Пример: Делаем таблицу employees свободной.
FREE TABLE employees
DISPLAY TABLES
[TO PRINTER [PROMPT] | TO FILE ИмяФайла] [NOCONSOLE]
- выводит информацию об открытых таблицах текущей базы данных на экран (по умолчанию), на принтер (PROMPT - с предварительной настройкой свойств принтера) или в файл ИмяФайла. NOCONSOLE отменяет вывод на экран.
Пример: Вывести информацию об открытых таблицах прямо на экран.
DISPLAY TABLES
CREATE TRIGGER ON ИмяТаблицы
FOR DELETE | INSERT | UPDATE AS логВыражение
- создает триггер удаления, добавления или обновления для таблицы ИмяТаблицы в текущей базе данных из логВыражения.
Пример: Создаем триггер для таблицы employees, который не разрешает удалять строки из таблицы, если текущее число месяца от 1 до 15, и разрешает, если текущее число месяца от 16 до 31.
CREATE TRIGGER ON employees FOR DELETE AS DAY(DATE())>15
DELETE TRIGGER ON ИмяТаблицы FOR DELETE | INSERT | UPDATE
- удаляет триггер удаления, добавления или обновления для таблицы ИмяТаблицы в текущей базе данных из логВыражения.
Пример: Удаляем триггер удаления для таблицы employees.
DELETE TRIGGER ON employees FOR DELETE
ОТКРЫТИЕ, ЗАКРЫТИЕ И РАБОТА С БАЗОЙ ДАННЫХ
OPEN DATABASE [ИмяФайла | ?]
[EXCLUSIVE | SHARED]
[NOUPDATE]
[VALIDATE]
– открывает базу данных ИмяФайла ( ? – для запроса имени выводит стандартное окно WINDOWS). База данных открывается в исключительном (EXCLUSIVE) или разделяемом (SHARED) режиме, только для просмотра (NOUPDATE), с предварительной проверкой целостности (VALIDATE).
Пример: Открываем базу primer в режиме совместного использования.
OPEN DATA primer SHARED
CLOSE DATABASES [ALL]
- закрывает текущую (ALL – все) базу данных со всем содержимым. Если нет текущей базы, закрывает все свободные таблицы, индексы и форматные файлы.
Общий формат команды CLOSE:
CLOSE
[ALL | ALTERNATE | DATABASES [ALL] | DEBUGGER
| FORMAT | INDEXES | PROCEDURE | TABLES [ALL]]
Пример: Закрываем все таблицы, индексы и т.п. База данных при этом не закрывается.
CLOSE ALL
DBC( )
– возвращает полное имя текущей базы данных.
Пример:
? DBC() – будет напечатано, например, C:\VFP6\EXAMPLES\primer
SET DATABASE TO [ИмяБазы]
– назначает открытую базу ИмяБазы текущей базой данных. Команда без параметра указывает, что текущей базы данных нет.
PACK DATABASE
– упаковывает текущую базу данных, т.е., физически удаляет помеченные к удалению записи во всех таблицах базы данных. Требует, чтобы база данных была открыта в монопольном режиме.
VALIDATE DATABASE
[RECOVER]
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE ИмяФайла]
– проверяет целостность базы данных с выдачей информации на экран, принтер или в файл. Команду можно вызывать только из командного окна, но не из программы.
Если включен параметр RECOVER (лечить), требуется, чтобы база была открыта в монопольном режиме.
Пример:
VALI DATA – будет напечатана информация о корректности или некорректности базы данных, без возможности исправления ошибок.
DBGETPROP(симвИмя, симвТип, симвСвойство)
– функция для получения информации о разнообразных свойствах базы данных. СимвИмя означает имя элемента базы, о котором мы хотим получить информацию, симвТип – его тип (CONNECTION, DATABASE, FIELD или TABLEVIEW), симвСвойство – название свойства, значение которого нас интересует.
Пример:
? DBGETPROP(“employees .name”, “field”, “caption”) – будет напечатан заголовок (длинное имя) поля с названием name из таблицы employees.
DBSETPROP(симвИмя, симвТип, симвСвойство, ЗначСвойства)
- функция для присвоения значений разнообразным свойствам базы данных (параметры – см. DBGETPROP).
Пример: Полю с названием name из таблицы employees назначаем длинное имя “Фамилия сотрудника”.
DBGETPROP(“employees.name”, “field”, “caption”, “Фамилия сотрудника”)
РАБОТА С ТАБЛИЦАМИ
CREATE [ИмяФайла | ?]
– создает таблицу с именем ИмяФайла и выводит на экран окно конструктора таблиц, ( ? – для запроса имени выводит стандартное окно WINDOWS). Меню (File – New – Table).
Пример: Создаем таблицу departments в режиме конструктора.
CREATE departments
MODIFY STRUCTURE
– выводит на экран окно конструктора таблицы, открытой в текущей рабочей области. Меню (в режиме конструктора базы данных – Database – Modify)
Пример:
MODI STRU.
AFIELDS(ИмяМассива [, числРабОбласть | симвПсевдТабл])
– создает массив и помещает в него информацию о таблице. По умолчанию выбирается таблица из текущей рабочей области, рабочую область можно задать также номером или псевдонимом открытой в ней таблицы. В полученном массиве 16 столбцов, количество строк равно количеству полей таблицы, в первых 3 столбцах содержится информация об имени, типе и ширине поля.
USE [[ИмяБазы.]Таблица | SQLИмяПредставления | ?]
[IN числРабОбласть | симвПсевдТабл]
[ONLINE]
[ADMIN]
[AGAIN]
[NOREQUERY [числСеансДан]]
[NODATA]
[INDEX СписокИндексов | ?
[ORDER [числНомИндекса | IDXИмяФайла
| [TAG] ИмяТега [OF CDXИмяФайла]
[ASCENDING | DESCENDING]]]]
[ALIAS симвПсевдТабл]
[EXCLUSIVE | SHARED]
[NOUPDATE]
Открывает таблицу в текущей рабочей области или в области, которая указана в опции IN. Вместе с таблицей можно открыть ее индексы и назначить активный индекс. Таблица открывается в монопольном (EXCLUSIVE) или совместном (SHARED) режиме. Для таблицы можно задать псевдоним (ALIAS). Команда USE без параметров закрывает таблицу в текущей рабочей области.
Пример: В свободной рабочей области открываем таблицу departments в режиме совместного доступа, одновременно с ней открываются два ее индекса: по номеру и по названию отдела. Таблице назначается псевдоним dept, в качестве активного индекса назначается имя отдела.
USE departments IN 0 ALIAS dept INDEX deptNo, deptName ORDER 2 SHARED
SELECT числРабОбласть | симвПсевдТабл
– устанавливает в качестве текущей рабочей области область с номером числРабОбласть или псевдонимом симвПсевдТабл. Если в качестве номера записать 0, то будет выбрана первая свободная рабочая область. (Не путайте с командой SELECT SQL!)
Пример: Переходим в рабочую область dept.
SELECT dept
SELECT([ 0 | 1 | симвПсевдТабл ])
- возвращает номер текущей рабочей области (если параметр отсутствует или равен 0) или рабочей области, в которой открыта таблица с псевдонимом симвПсевдТабл. Если параметр равен 1, возвращает максимальный номер рабочей области.
Пример:
? SELECT(“dept”) – будет напечатан номер рабочей области, в которой открыта таблица dept.
DBF([симвПсевдТабл | числРабОбласть])
- возвращает полное имя таблицы, открытой в рабочей области с номером числРабОбласть или с псевдонимом симвПсевдТабл.
Пример:
? DBF(“dept”) – будет напечатано полное имя таблицы dept, например, C:\VFP6\EXAMPLES\departments.dbf.
USED([числРабОбласть | симвПсевдТабл])
- возвращает истину, если в рабочей области с номером числРабОбласть или с псевдонимом симвПсевдТабл открыта таблица.
Пример: Если таблица dept открыта, закрываем ее.
IF USED(“dept”)
USE IN dept
ENDIF
ALIAS([числРабОбласть | симвПсевдТабл])
-возвращает псевдоним таблицы в текущей рабочей области или в рабочей области с номером числРабОбласть или с псевдонимом симвПсевдТабл.
Пример:
? ALIAS() – будет напечатан псевдоним таблицы, открытой в текущей рабочей области.
INDEX ON Выражение
TO ИмяФайлаIDX | TAG ИмяТега [OF ИмяФайлаCDX]
[FOR логВыражение]
[COMPACT]
[ASCENDING | DESCENDING]
[UNIQUE | CANDIDATE]
[ADDITIVE]
- создает индекс для таблицы, открытой в текущей рабочей области, на основе Выражения и записывает его в простой индексный файл или в отдельный тег мультииндексного файла. Если имя мультииндексного файла не указано, имеется в виду структурный индекс.
Пример: открываем таблицу departments (пусть в ней есть поля nomer и name)и создаем для нее два индекса – по номеру и по имени. Для каждого индекса создается IDX-файл
USE departments
INDEX ON nomer TO deptNo
INDEX ON name TO deptName
Пример: открываем таблицу departments (пусть в ней есть поля nomer и name)и создаем для нее два тега – по номеру и по имени. Оба тега сохраняются в одном CDX-файле.
USE departments
INDEX ON nomer TAG deptNo OF deptInd
INDEX ON name TAG deptName OF deptInd
SET INDEX TO [СписокИндексов | ? ]
[ORDER числНомИндекса | ИмяФайлаIDX
| [TAG] ИмяТега [OF ИмяФайлаCDX]
[ASCENDING | DESCENDING]] [ADDITIVE]
- открывает один или несколько индексов для таблицы, открытой в текущей рабочей области. Параметр ADDITIVE указывает, что ранее открытые для этой таблицы индексы закрывать не нужно.
Пример: В свободной рабочей области открывается таблица departments в режиме совместного доступа, затем открываются два ее индекса.
USE departments SHARED
SET INDEX TO deptNo, deptName ORDER 2
SET ORDER TO
[числНомИндекса | ИмяФайлаIDX |
[TAG] ИмяТега [OF ИмяФайлаCDX]
[IN числРабОбласть | симвПсевдТабл]
[ASCENDING | DESCENDING]]
- устанавливает активный индекс из числа открытых индексов для таблицы, открытой в текущей рабочей области или в области, указанной в параметре IN. Если в команде не указать параметры, будет установлен режим, в котором ни один индекс не является активным, и записи в таблице будут представлены в физическом порядке.
Пример: В свободной рабочей области открывается таблица departments в режиме совместного доступа, затем открываются два ее индекса. Второй индекс назначается активным.
USE departments SHARED
SET INDEX TO deptNo, deptName
SET ORDER TO deptName
REINDEX [COMPACT] – переиндексирует таблицу (обновляет индексы) в текущей рабочей области. Требует, чтобы таблица была открыта в режиме исключительного доступа.
COPY INDEXES СписокИндексов | ALL
[TO ИмяФайлаCDX]
– создает мультииндексный файл на основе IDX-файлов. Если его имя ИмяФайлаCDX не указано, имеется в виду структурный индекс.
Пример: В свободной рабочей области открывается таблица departments в режиме совместного доступа, затем открываются два ее IDX-индекса. Копируем все индексы в файл deptInd.CDX
USE departments SHARED INDEX deptNo, deptName
COPY INDEXES ALL TO deptInd
COPY TAG ИмяТега [OF ИмяФайлаCDX]
TO ИмяФайла
– создает IDX-файл на основе тега ИмяТега мультииндексного файла ИмяФайлаCDX. Если последний не указан, имеется в виду структурный индекс.
Пример: Копируем тег deptNo индексного файла deptInd.CDX в отдельный индекс deptNo.IDX.
COPY TAG deptNo OF deptInd TO deptNo
DELETE TAG ИмяТега1 [OF ИмяФайлаCDX1]
[, ИмяТега2 [OF ИмяФайлаCDX2]] ...
– удаляет тег с именем ИмяТега1 из мультииндексного файла ИмяФайлаCDX (физически тег не удаляется и продолжает занимать место!)
Пример: Удаляем тег deptNo индексного файла deptInd.CDX.
DELETE TAG deptNo OF deptInd
DELETE TAG ALL [OF ИмяФайлаCDX]
– удаляет все теги из мультииндексного файла ИмяФайлаCDX и сам файл.
Пример: Удаляем все теги индексного файла deptInd.CDX.
DELETE TAG ALL OF deptInd
SORT TO ИмяТаблицы
ON ИмяПоля1 [/A | /D] [/C]
[, ИмяПоля2 [/A | /D] [/C] ...]
[ASCENDING | DESCENDING]
[Границы] [FOR логВыражение1] [WHILE логВыражение2]
[FIELDS СписокИменПолей
| FIELDS LIKE Шаблон
| FIELDS EXCEPT Шаблон]
[NOOPTIMIZE]
– физически сортирует информацию из текущей таблицы и записывает ее в новый файл ИмяТаблицы.
Пример: Создаем копию для текущей таблицы, отсортированную по полю name.
SORT TO sortDepartments ON name
SET RELATION TO
[Выражение1 INTO числРабОбласть1 | симвПсевдТабл1
[, Выражение2 INTO числРабОбласть2 | симвПсевдТабл2 ...]
[IN числРабОбласть | симвПсевдТабл]
[ADDITIVE]]
– устанавливает связь между таблицами.
Если не указан номер области числРабОбласть или псевдоним таблицы симвПсевдТабл, в качестве старшей таблицы выбирается таблица в текущей рабочей области. Связь устанавливается по ВыражениюI c таблицей, указанной номером области числРабОбластьI или псевдонимом симвПсевдТаблI. Вторая таблица должна быть открыта с индексом по этому выражению.
Параметр ADDITIVE указывает, что устанавливаемая связь не отменяет предыдущие.
Команда без параметров разрывает все связи для таблицы в текущей рабочей области.
Пример: Открываем таблицу “Отделы” и таблицу “Сотрудники” (для каждого сотрудника хранится номер отдела). Связываем таблицы по номеру отдела. Выдаем на экран список сотрудников и названия отделов, где они работают.
USE employees IN 0 ALIAS emp
USE departments IN 0 ALIAS dept INDEX deptNo ORDER 1
SELECT employees
SET RELA TO nomer INTO dept
BROWSE FIELDS emp.name, dept.name
RELATION(числНомСвязи [, числРабОбласть | симвПсевдТабл])
– возвращает выражение, по которому установлена связь для указанной таблицы. Так как таблица может участвовать в нескольких связях, необходимо указать параметр числНомСвязи. Если не указан номер области числРабОбласть или псевдоним таблицы симвПсевдТабл, имеется с виду таблица в текущей рабочей области.
Пример:
? RELATION(1) – для предыдущего примера будет напечатано имя поля nomer
SET RELATION OFF INTO числРабОбласть | симвПсевдТабл
– разрывает связь между таблицей в текущей рабочей области и таблицей, открытой в области числРабОбласть или имеющей псевдоним симвПсевдТабл.
Пример:
SET RELATION OFF INTO dept – для предыдущего примера связь будет разорвана.
РАБОТА С ЗАПРОСАМИ
Запросы в Visual Pro можно создавать с помощью визуального конструктора. Более подробно эта тема будет рассмотрена в Части 2.
CREATE QUERY [ИмяФайла | ?]
[NOWAIT]
– создает запрос с именем ИмяФайла, ( ? – для запроса имени выводит стандартное окно WINDOWS). Меню (File – New – Query).
MODIFY QUERY [ИмяФайла | ?]
[[WINDOW ИмяОкна1]
[IN SCREEN]
[NOWAIT]
[SAVE]
[AS числКодСтр]
– открывает запрос в режиме конструктора. Меню (File – Open – Query(*.qpr)).
РАБОТА С ПРЕДСТАВЛЕНИЯМИ И СОЕДИНЕНИЯМИ
Представления и соединения в Visual Pro можно создавать с помощью визуальных конструкторов. Более подробно эта тема будет рассмотрена в Части 2 данной книги. Приведенные ниже команды позволяют работать с представлениями и соединениями из командной строки и в программном режиме.
CREATE CONNECTION [ИмяСоединения | ?]
[DATASOURCE cИмяИсточнДан]
[USERID симвИдентПольз] [PASSWORD симвПароль]
[DATABASE cИмяБазы]
| CONNSTRING симвСтрокаСоединения]
- создает соединение и сохраняет его в текущей базе данных.
Пример: Пусть у нас имеется база данных books.mdb на MS Access и для нее создан источник данных books. Создадим соединение для этой БД.
CREATE CONNECTION conBooks DATASOURSE books
MODIFY CONNECTION [ИмяСоединения | ?]
- открывает соединение в редакторе соединений. ( ? – для запроса имени выводит стандартное окно WINDOWS). Меню (File – New – Connection).
LIST CONNECTIONS
[TO PRINTER [PROMPT] | TO FILE ИмяФайла]
[NOCONSOLE]
и
DISPLAY CONNECTIONS
[TO PRINTER [PROMPT] | TO FILE ИмяФайла]
[NOCONSOLE]
- распечатывает информацию обо всех соединениях текущей базы данных.
RENAME CONNECTION ИмяСоединения1 TO ИмяСоединения2
- переименовывает соединение в текущей базе данных.
Пример:
RENAME CONNECTION conBooks TO books
DELETE CONNECTION ИмяСоединения
- удаляет соединение из текущей базы данных.
Пример:
DELETE CONNECTION conBooks
CREATE SQL VIEW [ИмяПредставления ] [REMOTE]
[CONNECTION ИмяСоединения [SHARE]
| CONNECTION ИмяИсточнДан]
[AS ИнструкцияSQL]
– создает представление с именем ИмяПредставления, используя соединение или источник данных и SQL-команду. Команда без параметров вызывает на экран окно визуального редактора представлений. Меню (File – New – View) и (File – New – Remote View). Правда, такое представление не будет обновляемым.
Пример: Пусть в БД на MS Access имеется таблица titles. Создадим для нее удаленное представление.
CREATE SQL VIEW vTitles REMOTE CONNECTION conBooks
AS SELECT * FROM titles
DELETE VIEW ИмяПредставления
- удаляет представление из текущей базы данных.
Пример:
DELETE VIEW vTitles
RENAME VIEW ИмяПредставления1 TO ИмяПредставления2
- переименовывает представление в текущей базе данных.
Пример:
RENAME VIEW vTitles TO Titles
MODIFY VIEW ИмяПредставления [REMOTE]
- открывает представление в визуальном редакторе.
USE ИмяПредставления
[другие параметры – см. команда USE для таблиц]
- открывает представление как виртуальную таблицу. Обратите внимание, что таблицы и представления БД не должны иметь одинаковые имена.
Пример:
USE vTitles
DISPLAY VIEWS
[TO PRINTER [PROMPT] | TO FILE ИмяФайла]
[NOCONSOLE]
и
LIST VIEWS
[TO PRINTER [PROMPT] | TO FILE ИмяФайла]
[NOCONSOLE]
- распечатывает информацию обо всех представлениях текущей базы данных.
КОМАНДЫ ЯЗЫКА SQL
FoxPro имеет собственную версию встроенного языка SQL. По языку SQL написано множество книг, поэтому не буду повторяться. Приведенные ниже команды демонстрируют диалект FoxPro. Можете сравнить его со стандартами SQL и диалектами других СУБД.
SELECT [ALL | DISTINCT] [TOP числВыражение [PERCENT]]
[ЛокальныйПсевдоним.] Поле [AS ИмяСтолбца]
[, [ЛокальныйПсевдоним.] Поле [AS ИмяСтолбца] ...]
FROM [FORCE] [ИмяБазы!]Таблица [ЛокальныйПсевдоним]
[[INNER | LEFT [OUTER] | RIGHT [OUTER] |
FULL [OUTER] JOIN
ИмяБазы!]Таблица [ЛокальныйПсевдоним]
[ON УсловиеСвязывания …]
[[INTO Назначение]
| [TO FILE ИмяФайла [ADDITIVE] | TO PRINTER [PROMPT]
| TO SCREEN]]
[PREFERENCE PreferenceName]
[NOCONSOLE]
[PLAIN]
[NOWAIT]
[WHERE УсловиеСвязывания [AND УсловиеСвязывания ...]
[AND | OR УсловиеОтбора [AND | OR УсловиеОтбора ...]]]
[GROUP BY Столбец [, Столбец ...]]
[HAVING УсловиеОтбора]
[UNION [ALL] КомандаSELECT]
[ORDER BY Столбец [ASC | DESC] [, Столбец [ASC | DESC] ...]]
- выбирает данные из одной или нескольких таблиц по заданным условиям.
CREATE TABLE | DBF ИмяТаблицы1
[NAME ДлинноеИмяТаблицы] [FREE]
(ИмяПоля1 ТипПоля [(числРазмер [, числТочность])]
[NULL | NOT NULL]
[CHECK логВыражение1 [ERROR симвСообщение1]]
[DEFAULT Выражение1]
[PRIMARY KEY | UNIQUE]
[REFERENCES ИмяТаблицы2 [TAG ИмяТега1]]
[NOCPTRANS]
[, ИмяПоля2 ...]
[, PRIMARY KEY Выражение2 TAG ИмяТега2
|, UNIQUE Выражение3 TAG ИмяТега3]
[, FOREIGN KEY Выражение4 TAG ИмяТега4 [NODUP]
REFERENCES ИмяТаблицы3 [TAG ИмяТега5]]
[, CHECK логВыражение2 [ERROR симвСообщение2]])
| FROM ARRAY ИмяМассива
- создает таблицу.
CREATE CURSOR Псевдоним
( ИмяПоля1 ТипПоля [(числРазмер [, числТочность])
[NULL | NOT NULL]
[CHECK логВыражение [ERROR симвСообщение]]
[DEFAULT Выражение]
[UNIQUE]
[NOCPTRANS]]
[, ИмяПоля2 ...])
| FROM ARRAY ИмяМассива
- создает временную таблицу (cursor – current set of record), которая уничтожается после закрытия.
ALTER TABLE ИмяТаблицы1
ADD | ALTER [COLUMN] ИмяПоля1
ТипПоля [(числРазмер [, числТочность])]
[NULL | NOT NULL]
[CHECK логВыражение1 [ERROR симвСообщение1]]
[DEFAULT Выражение1]
[PRIMARY KEY | UNIQUE]
[REFERENCES ИмяТаблицы2 [TAG ИмяТега1]]
[NOCPTRANS]
- изменяет таблицу – добавляет или изменяет столбец.
ALTER TABLE ИмяТаблицы1
ALTER [COLUMN] ИмяПоля2
[NULL | NOT NULL]
[SET DEFAULT Выражение2]
[SET CHECK логВыражение2
[ERROR симвСообщение2]]
[DROP DEFAULT]
[DROP CHECK]
- изменяет таблицу – изменяет параметры столбца.
ALTER TABLE ИмяТаблицы1
[DROP [COLUMN] ИмяПоля3]
[SET CHECK логВыражение3 [ERROR симвСообщение3]]
[DROP CHECK]
[ADD PRIMARY KEY Выражение3 TAG ИмяТега2]
[DROP PRIMARY KEY]
[ADD UNIQUE Выражение4 [TAG ИмяТега3]]
[DROP UNIQUE TAG ИмяТега4]
[ADD FOREIGN KEY [Выражение5] TAG ИмяТега4
REFERENCES ИмяТаблицы2 [TAG ИмяТега5]]
[DROP FOREIGN KEY TAG ИмяТега6 [SAVE]]
[RENAME COLUMN ИмяПоля4 TO ИмяПоля5]
[NOVALIDATE]
- изменяет таблицу – удаляет столбец или изменяет параметры таблицы.
INSERT INTO ИмяТаблицы [(ИмяПоля1 [, ИмяПоля2, ...])]
VALUES (Выражение1 [, Выражение2, ...])
- добавляет строку в таблицу.
INSERT INTO ИмяТаблицы
FROM ARRAY ИмяМассива | FROM MEMVAR
- добавляет строки в таблицу из массива или из переменных памяти.
DELETE FROM [ИмяБазы!]ИмяТаблицы
[WHERE УсловиеОтбора1 [AND | OR УсловиеОтбора2 ...]]
- удаляет строки из таблицы (не путайте с командой DELETE!).
UPDATE [ИмяБазы1!]ИмяТаблицы1
SET ИмяСтолбца1 = Выражение1
[, ИмяСтолбца2 = Выражение2 ...]
WHERE УсловиеОтбора1 [AND | OR УсловиеОтбора2 ...]]
- обновляет строки в таблице.
НАВИГАЦИЯ В ТАБЛИЦЕ
GO[TO] [RECORD] числНомЗаписи [IN числРабОбласть | IN симвПсевдТабл]
- переходит к строке с физическим номером числНомЗаписи в рабочей области с номером числРабОбласть или псевдонимом симвПсевдТабл или в текущей рабочей области (по умолчанию).
GO[TO] TOP | BOTTOM [IN числРабОбласть | IN симвПсевдТабл]
- переходит к началу (TOP) или к концу (BOTTOM) таблицы.
SKIP [числКолЗап]
[IN числРабОбласть | симвПсевдТабл]
- передвигается на числКолЗап (число может быть и отрицательным) записей. По умолчанию – переходит к следующей записи в таблице.
Пример. Переход к предыдущей записи в текущей рабочей области
SKIP –1
IF BOF()
GO TOP
ENDIF
Пример. Переход к следующей записи в текущей рабочей области
SKIP
IF EOF()
GO BOTTOM
ENDIF
BOF([числРабОбласть | симвПсевдТабл])
- возвращает истину, если указатель записей находится в начале таблицы.
EOF([числРабОбласть | симвПсевдТабл])
- возвращает истину, если указатель записей находится после последней строки таблицы.
RECNO([числРабОбласть | симвПсевдТабл])
- возвращает физический номер текущей записи.
RECCOUNT([числРабОбласть | симвПсевдТабл])
- возвращает количество строк в таблице (включая помеченные к удалению).
ПОИСК И ЛОКАЛИЗАЦИЯ ДАННЫХ
LOCATE FOR логВыражение1
[Границы]
[WHILE логВыражение2]
[NOOPTIMIZE]
- производит поиск в текущей таблице первой строки, для которой выполняется условие логВыражение1. Если запись не найдена, возникает состояние “конец файла”.
В качестве Границ могут использоваться выражения:
All – весь диапазон записей (по умолчанию).
Next числВыражение – заданное количество записей, начиная с текущей.
Record числВыражение – только запись с данным номером.
Rest - все оставшиеся записи, начиная с текущей.
Пример. Ищем в таблице отдел с номером 5. Если не нашли, остаемся на той же строке, что были до поиска.
rec=RECNO()
IF !FOUND()
GOTO rec
ENDIF
CONTINUE
- продолжает поиск записей по условию, заданному в последней команде LOCATE.
SEEK Выражение
[ORDER числНомИндекса | ИмяФайлаIDX
| [TAG] ИмяТега [OF ИмяФайлаCDX]
[ASCENDING | DESCENDING]]
[IN числРабОбласть | симвПсевдТабл]
- производит поиск с использованием индекса. Команда ищет первую запись, в которой ключевое значение индекса совпадает с Выражением.
Результат поиска зависит от установки режима SET NEAR.
Пример. Ищем в таблице отдел с номером 5. Если не нашли, остаемся на строке с ближайшим номером отдела. Печатаем номер и название отдела.
SET NEAR ON
USE departments INDEX deptNo ORDER 1
SEEK 5
? dept.No, deptName
SEEK(Выражение [, числРабОбласть | симвПсевдТабл
[, числНомИндекса | симвИмяФайлаIDX | симвИмяТега]])
- аналогична команде SEEK. В случае успешного поиска возвращает истину.
FOUND([числРабОбласть | симвПсевдТабл])
- возвращает истину, если последняя операция поиска в заданной рабочей области была успешной.
SET NEAR ON | OFF
- включает/выключает режим “нестрогого поиска” для SEEK. Если режим включен и попытка поиска неудачна, курсор останавливается на записи с ближайшим похожим значением ключа. Если режим выключен и попытка поиска неудачна, возникает состояние “конец файла”.
SET EXACT ON | OFF
- включает/выключает режим точного сравнения символьных строк.
Если режим выключен, сравнение производится по длине второй строки.
Пример.
SET EXACT OFF
? ‘Иванов’=’И’
печатает значение “Истина” (.T.)
Пример.
SET EXACT ON
? ‘Иванов’=’И’
печатает значение “Ложь” (.F.)
SET OPTIMIZE ON | OFF
- включает/выключает режим оптимизации для условий, заданных в параметре FOR разных команд (оптимизация заключается, в основном, в использовании индексов при поиске).
SET FILTER TO [логВыражение]
- устанавливает фильтр на записи текущей таблицы. Записи, для которых условие логВыражение не выполняется, становятся невидимыми.
После выполнения этой команды для активизации фильтра нужно обязательно выполнить какое либо перемещение в таблице (например, GO TOP). Команда без параметров отменяет фильтр.
Пример. Фильтруем таблицу “Сотрудники” по отделу с номером 5.
SELECT emp
SET FILTER TO nomer=5
GO TOP
FILTER([числРабОбласть | симвПсевдТабл])
- возвращает условие фильтрации, если на заданную рабочую область наложен фильтр.
Пример. Печатаем условие фильтра
? FILTER(“emp”)
ПРОСМОТР И РЕДАКТИРОВАНИЕ ТАБЛИЦ
BROWSE
[FIELDS СписокПолей]
[FONT симвШрифтНазв [, числШрифтРазмер]]
[STYLE симвШрифтСтиль]
[FOR логВыражение1 [REST]]
[FORMAT]
[FREEZE ИмяПоля]
[KEY Выражение1 [, Выражение2]]
[LAST | NOINIT]
[LOCK числНомерПоля]
[LPARTITION]
[NAME Имя]
[NOAPPEND]
[NODELETE]
[NOEDIT | NOMODIFY]
[NOLGRID] [NORGRID]
[NOLINK]
[NOMENU]
[NOOPTIMIZE]
[NOREFRESH]
[NORMAL]
[NOWAIT]
[PARTITION числНомСтолб [LEDIT] [REDIT]]
[PREFERENCE Имя]
[SAVE]
[TIMEOUT числСекунд]
[TITLE симвЗаголовок]
[VALID [:F] логВыражение2 [ERROR симвСообщение]]
[WHEN логВыражение3]
[WIDTH числРазмер]
[WINDOW ИмяОкна1]
[IN [WINDOW] ИмяОкна2 | IN SCREEN]
[COLOR SCHEME числНомСхемы]
- данная команда с огромным числом параметров имеет славное заслуженное прошлое, а в настоящее время не слишком актуальна. Удобна для использования при отладке приложения – для быстрого отбора и просмотра (с возможностью редактирования) строк текущей таблицы по условию (BROWSE FOR …) из командного окна.
Пример. Выводим на экран сотрудников отдела с номером 5.
SELECT emp
BROWSE FOR nomer=5
EDIT
[те же самые параметры, что и у команды BROWSE]
- синоним команды BROWSE.
LIST [FIELDS СписокПолей]
[Границы] [FOR логВыражение1] [WHILE логВыражение2]
[OFF]
[NOCONSOLE]
[NOOPTIMIZE]
[TO PRINTER [PROMPT] | TO FILE ИмяФайла]
- печатает текущую таблицу (по умолчанию – все записи).
LIST FILES
[ON Диск]
[LIKE Шаблон]
[TO PRINTER [PROMPT] | TO FILE ИмяФайла]
- печать списка таблиц по шаблону
LIST MEMORY
[LIKE Шаблон]
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE ИмяФайла]
- печатает список переменных памяти по шаблону
LIST STRUCTURE
[IN числРабОбласть | симвПсевдТабл]
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE ИмяФайла]
- печатает структуру таблицы.
DISPLAY
[[FIELDS] СписокПолей]
[Границы] [FOR логВыражение1] [WHILE логВыражение2]
[OFF]
[NOCONSOLE]
[NOOPTIMIZE]
[TO PRINTER [PROMPT] | TO FILE ИмяФайла]
- печатает текущую таблицу (по умолчанию – только текущая запись).
ПОДСЧЕТ ИТОГОВЫХ ЗНАЧЕНИЙ
При работе с табличными данными часто бывает необходимо подсчитать итоговые значения – сумму, максимум и пр. Одна из возможностей подсчета итогов – использование итоговых функций в SQL-команде SELECT. В отчетах также есть свои средства подсчета итогов. Еще одна альтернатива – использование команды CALCULATE
CALCULATE СписокВырыжений
[Границы] [FOR логВыражение1] [WHILE логВыражение2]
[TO СписокПеременных | TO ARRAY ИмяМассива]
[NOOPTIMIZE]
Пример. Пусть в текущей таблице поле kod содержит уникальные идентификаторы числового типа. Добавляем в таблицу новую строку и получаем для нее уникальный код.
mykod=0
CALC MAX(kod) TO mykod
APPEND BLANK
REPLACE kod WITH mykod+1
УДАЛЕНИЕ ДАННЫХ
DELETE
[Границы] [FOR логВыражение1] [WHILE логВыражение2]
[IN числРабОбласть | симвПсевдТабл]
[NOOPTIMIZE]
- помечает для удаления строки таблицы (по умолчанию – только текущую запись).
Пример. Удаляем сотрудников, относящихся к отделу с номером 5.
SET DELETED ON
SELECT emp
DELETE FOR nomer=5
RECALL
[Границы] [FOR логВыражение1] [WHILE логВыражение2]
[NOOPTIMIZE]
- восстанавливает помеченные к удалению строки таблицы (по умолчанию – только текущую запись).
Пример. Восстанавливаем данные, удаленные в предыдущем примере.
SELECT emp
RECALL FOR nomer=5
SET DELETED ON | OFF
- включает/выключает режим отображения помеченных к удалению записей. Если режим включен (ON) – удаленные записи не видны.
DELETED([симвПсевдТабл | числРабОбласть])
- возвращает истину, если текущая строка помечена к удалению.
Пример. Это условие удобно использовать в выражении для индекса по главному ключевому полю таблицы. Ключевое поле требует уникальности, а удаленные записи только мешают.
USE departments
INDEX ON nomer TAG deptNo OF deptInd FOR NOT DELETED()
PACK [MEMO] [DBF]
- физически удаляет помеченные к удалению строки (DBF – только в DBF-файле, MEMO – только в FPT-файле, без параметров – в обоих файлах).
DELETE FILE [ИмяФайла | ?] [RECYCLE]
- удаляет файл.
Пример. Удаляем файл индекса
DELETE FILE deptNo.IDX
ДОБАВЛЕНИЕ ДАННЫХ
APPEND [BLANK]
[IN числРабОбласть | симвПсевдТабл]
[NOMENU]
- добавляет новую строку к текущей таблице и, если не указан параметр BLANK, выводит на экран BROWSE-окно для редактирования таблицы.
Пример. Добавим пустую строку в текущую таблицу
APPEND BLANK
APPEND FROM ИмяФайла | ?
[FIELDS СписокПолей]
[FOR логВыражение]
[[TYPE] [DELIMITED [WITH Разделитель | WITH BLANK |
WITH TAB | WITH CHARACTER Разделитель]
| DIF | FW2 | MOD | PDOX | RPD | SDF | SYLK
| WK1 | WK3 | WKS | WR1 | WRK | XLS | XL5]]
[AS числКодСтр]
- добавляет новые строки к текущей таблице из файла.
APPEND FROM ARRAY ИмяМассива
[FOR логВыражение]
[FIELDS СписокПолей]
- добавляет новые строки к текущей таблице из массива.
APPEND MEMO MemoИмяПоля FROM ИмяФайла
[OVERWRITE] [AS числКодСтр]
- добавляет значение memo-поля в текущую строку из файла.
APPEND GENERAL ИмяПоля
[FROM ИмяФайла]
[DATA симвВыражение]
[LINK]
[CLASS ИмяКлассаOLE]
- добавляет значение general-поля в текущую строку из файла (например, картинку или WORD-документ).
ИЗМЕНЕНИЕ ДАННЫХ
REPLACE ИмяПоля1 WITH Выражение1 [ADDITIVE]
[,ИмяПоля 2 WITH Выражение2 [ADDITIVE]] ...
[Границы] [FOR логВыражение1] [WHILE логВыражение 2]
[IN числРабОбласть | симвПсевдТабл]
[NOOPTIMIZE]
- заменяет значения полей ИмяПоляN на ВыражениеN. По умолчанию действует на текущую строку таблицы.
Пример. Изменим номер отдела для сотрудника с фамилией “Иванов”.
SELECT emp
REPLACE nomer WITH 5 FOR name=”Иванов”
РАБОТА С ПЕРЕМЕННЫМИ И МАССИВАМИ
Переменные в языке FoxPro не требуют объявления. Они объявляются неявно при инициализации, явно объявлять нужно только массивы. По умолчанию область действия переменной – процедура или функция, в которой она впервые появилась. Во всех вызываемых функциях переменная также видна.
DIMENSION ИмяМассива1(числСтрок1 [, числСтолб1])
[, ИмяМассива2(числСтрок2 [, числСтолб2])] ...
и
DECLARE ИмяМассива1 (числСтрок1 [, числСтолб1])
[, ИмяМассива2 (числСтрок2 [, числСтолб2])] ...
- явное определение массивов. Можно использовать как круглые, так и квадратные скобки.
Пример. Определим массив для названий месяцев
DIME mes(12)
Mes[1]=”Январь”
И т.д.
PUBLIC СписокПеременных
- явное описание глобальных переменных.
PUBLIC [ARRAY] ИмяМассива1(числСтрок1 [, числСтолб1])
[, ИмяМассива2(числСтрок2 [, числСтолб2])] ...
- явное описание глобальных массивов.
PRIVATE СписокПеременных
и
PRIVATE ALL [LIKE Шаблон | EXCEPT Шаблон]
- явное описание локальных переменных.
STORE Выражение TO СписокПеременных | СписокМассивов
и
Переменная | ИмяМассива = Выражение
- оператор присваивания.
SCATTER
[FIELDS СписокПолей | FIELDS LIKE Шаблон |
FIELDS EXCEPT Шаблон] [MEMO]
TO ИмяМассива | TO ИмяМассива BLANK |
MEMVAR | MEMVAR BLANK | NAME ИмяОбъекта
- копирует значения заданных полей текущей строки текущей таблицы в массив или в переменные памяти (переменные с теми же именами, что и поля таблицы и с префиксом m, например, m.kod) или в свойства объекта с теми же именами, что и поля таблицы.
GATHER FROM ИмяМассива | MEMVAR | NAME ИмяОбъекта
[FIELDS СписокПолей | FIELDS LIKE Шаблон |
FIELDS EXCEPT Шаблон] [MEMO]
- копирует в заданные поля текущей строки текущей таблицы значения из массива или из переменных памяти (переменные с теми же именами, что и поля таблицы и с префиксом m, например, m.kod) или из свойств объекта с теми же именами, что и поля таблицы.
COPY TO ARRAY ИмяМассива
[FIELDS СписокПолей]
[Границы] [FOR логВыражение1] [WHILE логВыражение2]
[NOOPTIMIZE]
- копирует значения заданных полей текущей таблицы в массив (по умолчанию копируется вся таблица).
РАБОТА СО СТРОКАМИ
ALLTRIM(симвВыражение)
- удаляет лишние пробелы слева и справа и возвращает символьное выражение.
LTRIM(симвВыражение)
- удаляет лишние пробелы слева и возвращает символьное выражение.
RTRIM(симвВыражение)
- удаляет лишние пробелы справа и возвращает символьное выражение.
STR(числВыражение)
и
VAL(симвВыражение)
- преобразуют число в строку и строку в число. Функция STR почти всегда добавляет лишние пробелы. Не забывайте их удалять!
DTOC(датВыражение | времВыражение)
и
СTOD(симвВыражение)
- преобразуют дату в строку и строку в дату
AT(симвСтрока1, симвСтрока2 [, числНомер])
- ищет в строке симвСтрока2 вхождение строки симвСтрока1 с номером числНомер и возвращает номер символа или 0, если не найдено
SUBSTR(симвВыражение, числСтарт, числКоличество)
- выделяет подстроку из строки.
РАБОТА С ДАТАМИ
DATE()
- возвращает текущую дату.
SET DATE GERMAN
- устанавливает привычный для нас формат даты DD-MM-YY
SET CENTURY ON | OFF
- включает/выключает режим отображения столетия в дате.
Пример.
SET DATE GERMAN
SET CENT ON
? DATE()
напечатает текущую дату в формате 18.11.2002
YEAR(датВыражение)
- возвращает год из заданной даты.
MONTH(датВыражение)
- возвращает номер месяца из заданной даты.
DAY(датВыражение)
- возвращает число из заданной даты.
Пример. Получить дату 1 января текущего года.
SET DATE GERMAN
myDate = CTOD(“01.01.”+ALLTRIM(STR(YEAR(DATE()))))
Пример. Получить дату 1 число текущего месяца.
SET DATE GERMAN
myDate = CTOD(“01.”+ ALLTRIM(STR(MONTH(DATE()))) +”.”+ALLTRIM(STR(YEAR(DATE()))))
ПРОЦЕДУРЫ И ФУНКЦИИ
FUNCTION Имя
Команды
[RETURN [Выражение]]
ENDFUNC
- формат определения функции. В функцию параметры передаются по значению.
PROCEDURE Имя
Команды
[RETURN [Выражение ]]
ENDPROC
- формат определения процедуры. В процедуру параметры передаются по ссылке.
PARAMETERS СписокПараметров
- описание параметров процедуры или функции.
LPARAMETERS СписокПараметров
- описание локальных параметров процедуры или функции.
DO ИмяПрограммы1 | ИмяПроцедуры
[IN ИмяПрограммы2]
[WITH СписокПараметров]
- вызов процедуры или функции.
SET PROCEDURE TO [ИмяФайла1 [, ИмяФайла2, ...]]
[ADDITIVE]
- установка процедурного файла, в котором удобно разместить часто используемые процедуры и функции.
Пример.
SET PROC TO myproc.txt
РАБОТА С МЕНЮ
В настоящее время вряд ли кто пишет меню вручную – удобнее конструировать меню с помощью визуального редактора, а затем генерировать код программы. Тем не менее, не вредно разбираться в этой программе: а что, собственно, этот генератор меню нагенерировал?
CREATE MENU [ИмяФайла | ?]
[NOWAIT] [SAVE]
[WINDOW ИмяОкна1]
[IN [WINDOW] ИмяОкна2 | IN SCREEN]
– создает меню с именем ИмяФайла, ( ? – для запроса имени выводит стандартное окно WINDOWS). Меню (File – New – Menu).
MODIFY MENU [ИмяФайла | ?]
[[WINDOW ИмяОкна1]
[IN [WINDOW] ИмяОкна2 | IN SCREEN]]
[NOWAIT]
[SAVE]
– открывает меню в режиме конструктора. Параметр NOWAIT в программном режиме запрещает паузу и продолжает выполнение программы. Меню (File – Open – Menu(*.mnx)).
DEFINE MENU ИмяМеню
[BAR [AT LINE числСтрока]]
[IN [WINDOW] ИмяОкна | IN SCREEN]
[FONT симвШрифтНазв [, числШрифтРазмер]]
[STYLE симвШрифтСтиль]
[KEY НазвКлавиши]
[MARK симвМетка]
[MESSAGE симвСообщение]
[NOMARGIN]
[COLOR SCHEME числНомСхемы
| COLOR СписокЦветовыхПар]
- определяет горизонтальное меню.
DEFINE PAD ИмяПункта1 OF ИмяМеню PROMPT симвНазвание
[AT числСтрока, числСтолбец]
[BEFORE ИмяМеню2 | AFTER ИмяМеню3]
[NEGOTIATE LEFT | NEGOTIATE MIDDLE |
NEGOTIATE RIGHT]
[FONT симвШрифтНазв [, числШрифтРазмер]]
[STYLE симвШрифтСтиль]
[KEY НазвКлавиши [,симвТекст]]
[MARK симвМетка]
[SKIP [FOR логВыражение]]
[MESSAGE симвСообщение]
[COLOR SCHEME числНомСхемы
| COLOR СписокЦветовыхПар]
- определяет пункт меню.
ON PAD ИмяПункта OF ИмяМеню1
[ACTIVATE POPUP ИмяМеню
| ACTIVATE MENU ИмяМеню2
- определяет активизацию подменю при выборе пункта меню.
ON SELECTION PAD ИмяПункта OF ИмяМеню [Command]
- определяет действие при выборе пункта меню.
ACTIVATE MENU ИмяМеню
[NOWAIT]
[PAD ИмяПункта]
- активизирует меню.
DEACTIVATE MENU ИмяМеню1 [, ИмяМеню2 ...] | ALL
- активизирует меню.
READ EVENTS
- запускает цикл обработки сообщений. Эту команду нужно выполнять сразу после активизации главного меню.
CLEAR EVENTS
- останавливает цикл обработки сообщений. Эту команду нужно выполнять перед завершением работы приложения.
SET SYSMENU TO DEFAULT
- восстанавливает системное меню.
DEFINE POPUP ИмяМеню
[FROM числСтрока1, числСтолбец1]
[TO числСтрока2, числСтолбец2]
[IN [WINDOW] ИмяОкна | IN SCREEN]
[FONT симвШрифтНазв [, числШрифтРазмер]]
[STYLE симвШрифтСтиль]
[FOOTER симвЗаголовок]
[KEY НазвКлавиши]
[MARGIN]
[MARK симвМетка]
[MESSAGE симвСообщение]
[MOVER]
[MULTISELECT]
[PROMPT FIELD ИмяПоля | PROMPT FILES [LIKE Шаблон]
| PROMPT STRUCTURE]
[RELATIVE]
[SCROLL]
[SHORTCUT]
[TITLE симвНазвание]
[COLOR SCHEME числНомСхемы
| COLOR СписокЦветовыхПар]
- определяет вертикальное подменю.
DEFINE BAR числНомерПункта1 | СистемИмяПункта
OF ИмяМеню PROMPT симвНазвание
[BEFORE числНомерПункта2 | AFTER числНомерПункта3]
[FONT симвШрифтНазв [, числШрифтРазмер]]
[STYLE симвШрифтСтиль]
[KEY НазвКлавиши [, симвТекст]]
[MARK симвМетка]
[MESSAGE симвСообщение]
[SKIP [FOR логВыражение]]
[COLOR SCHEME числНомСхемы
| COLOR СписокЦветовыхПар]
- определяет пункт подменю.
ON BAR числНомерПункта1 OF ИмяМеню1
[ACTIVATE POPUP ИмяМеню
| ACTIVATE MENU ИмяМеню2
- определяет активизацию подменю следующего уровня при выборе пункта подменю.
ON SELECTION BAR числНомерПункта1 OF ИмяМеню
[Command]
- определяет действие при выборе пункта подменю.
НАЗНАЧЕНИЯ НА КЛАВИШИ
Команды работы с клавиатурой были очень популярны в версии под DOS. Теперь они, разумеется, устарели, но при необходимости их можно использовать.
ON KEY [Команда]
- назначает Команду на нажатие любой клавиши. Без параметров – отменяет предыдущее назначение.
ON ESCAPE [Команда]
- назначает Команду на клавишу Esc. Без параметров – отменяет предыдущее назначение.
ON KEY LABEL НазвКлавиши [Команда]
- назначает Команду на клавишу с заданным названием. Без параметров – отменяет предыдущее назначение.
PUSH KEY [CLEAR]
- запоминает все текущие назначения на клавиши в стэк, CLEAR – отменяет все текущие назначения на клавиши.
POP KEY [ALL]
- восстанавливает назначения на клавиши из стэка.
INKEY([числСекунд] [, симвСкрытьКурсор])
- ждет нажатия клавиши заданное число секунд и возвращает код, если клавиша была нажата, и 0 – в противном случае.
LASTKEY( )
- возвращает код последней нажатой клавиши.
КОМАНДЫ УПРАВЛЕНИЯ
Используются, главным образом, в программном коде.
DO WHILE логВыражение
Команды
[LOOP]
[EXIT]
ENDDO
– цикл по условию. EXIT – выход из цикла, LOOP – переход к следующей итерации.
FOR переменная = числНачЗнач TO числКонЗнач [STEP числШаг]
Команды
[EXIT]
[LOOP]
ENDFOR | NEXT
– цикл по счетчику.
IF логВыражение [THEN]
Команды
[ELSE
Команды]
ENDIF
– условный оператор.
IIF(логВыражение, Выражение1, Выражение2)
– функция, эквивалентная условному оператору. Если истинно логВыражение, возвращает Выражение1, в противном случае Выражение2.
SCAN [NOOPTIMIZE]
[Границы] [FOR логВыражение1] [WHILE логВыражение2]
[Команды]
[LOOP]
[EXIT]
ENDSCAN
– цикл сканирования таблицы в текущей рабочей области. Эквивалентен
DO WHILE !EOF() – … SKIP – ENDDO, но не требует явного выполнения команды SKIP.
DO CASE
CASE логВыражение1
Команды1
[CASE логВыражение2
Команды2
...
CASE логВыражениеN
КомандыN]
[OTHERWISE
КомандыИначе]
ENDCASE
– выбор из нескольких условий. Проверяются на истинность логВыраженияI, как только встретится истинное условие, выполняются его КомандыI. Если все условия ложны, выполняются КомандыИначе.
EXIT – выход из цикла.
CANCEL – выход из программы и возврат в среду FoxPro.
QUIT – выход из программы и возврат в операционную систему.
* и && – однострочные комментарии.
&
&& · 30
*
* · 30
A
ACTIVATE MENU · 27
ADD TABLE · 6
AFIELDS · 9
ALIAS · 10
ALLTRIM · 24
ALTER TABLE · 16
APPEND · 22
APPEND FROM · 22
APPEND FROM ARRAY · 22
APPEND GENERAL · 23
APPEND MEMO · 23
AT · 25
B
BOF · 17
BROWSE · 19
C
CALCULATE · 21
CANCEL · 30
CLEAR EVENTS · 27
CLOSE · 8
CONTINUE · 18
COPY · 24
COPY INDEXES · 11
COPY TAG · 11
CREATE · 9
CREATE CONNECTION · 13
CREATE CURSOR · 16
CREATE DATABASE · 6, 7
CREATE MENU · 26
CREATE QUERY · 13
CREATE SQL VIEW · 14
CREATE TABLE · 15
CREATE TRIGGER · 7
CTOD · 25
D
DATE() · 25
DAY() · 25
DBC · 8
DBF · 10
DBGETPROP · 8
DBSETPROP · 8
DEACTIVATE MENU · 27
DECLARE · 23
DEFINE BAR · 28
DEFINE MENU · 26
DEFINE PAD · 27
DEFINE POPUP · 27
DELETE · 21
DELETE CONNECTION · 14
DELETE DATABASE · 6
DELETE FILE · 22
DELETE FROM · 17
DELETE TAG · 12
DELETE TRIGGER ON · 7
DELETE VIEW · 14
DELETED · 22
DIMENSION · 23
DISPLAY · 21
DISPLAY CONNECTIONS · 14
DISPLAY TABLES · 7
DISPLAY VIEWS · 14
DO · 26
DO CASE · 30
DO WHILE · 29
DTOC · 25
E
EDIT · 20
EOF · 17
F
FILTER · 19
FOR · 29
FOUND · 18
FREE TABLE · 7
FUNCTION · 25
G
GATHER · 24
GO · 17
GO TOP · 17
I
IF · 29
IIF · 30
INDEX ON · 10
INKEY · 29
INSERT INTO · 17
L
LASTKEY · 29
LIST · 20
LIST CONNECTIONS · 13
LIST FILES · 20
LIST MEMORY · 20
LIST STRUCTURE · 21
LIST VIEWS · 15
LOCATE · 18
LPARAMETERS · 26
LTRIM · 24
M
MODIFY CONNECTION · 13
MODIFY DATABASE · 6
MODIFY MENU · 26
MODIFY QUERY · 13
MODIFY STRUCTURE · 9
MODIFY VIEW · 14
MONTH() · 25
O
ON BAR · 28
ON ESCAPE · 29
ON KEY · 28
ON KEY LABEL · 29
ON PAD · 27
ON SELECTION · 27
ON SELECTION BAR · 28
OPEN DATABASE · 7
P
PACK · 22
PACK DATABASE · 8
PARAMETERS · 26
POP KEY · 29
PRIVATE · 24
PROCEDURE · 26
PUBLIC · 23
PUSH KEY · 29
Q
QUIT · 30
R
READ EVENTS · 27
RECALL · 21
RECCOUNT · 18
RECNO · 17
REINDEX · 11
RELATION · 12
REMOVE TABLE · 7
RENAME CONNECTION · 14
RENAME VIEW · 14
REPLACE · 23
RETURN · 25, 26
RTRIM · 24
S
SCAN · 30
SCATTER · 24
SEEK · 18
SELECT · 9, 10
SELECT SQL · 15
SET CENTURY · 25
SET DATABASE TO · 8
SET DATE · 25
SET DELETED · 22
SET EXACT · 19
SET FILTER TO · 19
SET INDEX TO · 11
SET NEAR · 19
SET OPTIMIZE · 19
SET ORDER TO · 11
SET PROCEDURE · 26
SET RELATION · 12, 13
SET SYSMENU · 27
SKIP · 17
SORT · 12
STORE · 24
STR · 24
SUBSTR · 25
U
UPDATE · 17
USE · 9, 14
USED · 10
V
VAL · 24
VALIDATE DATABASE · 8
Y
YEAR() · 25
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.