CREATE TABLE &ltИмя_таблицы&gt (&ltОпределение_полей&gt) Изменение структуры таблиц Оператор SQL для изменения структуры таблиц — ALTER TABLE.

Содержание:
13 TOC \o "1-3" \h \z \u 1413 LINK \l "_Toc298750555" 14Команды FoxPro для работы с данными таблицы. 13 PAGEREF _Toc298750555 \h 1421515
13 LINK \l "_Toc298750556" 14Добавление записей в таблицу 13 PAGEREF _Toc298750556 \h 1421515
13 LINK \l "_Toc298750557" 14Просмотр содержимого таблиц и заполнение полей 13 PAGEREF _Toc298750557 \h 1421515
13 LINK \l "_Toc298750558" 14Удаление записей 13 PAGEREF _Toc298750558 \h 1441515
13 LINK \l "_Toc298750559" 14Выбор рабочей области 13 PAGEREF _Toc298750559 \h 1441515
13 LINK \l "_Toc298750560" 14Открытие таблицы 13 PAGEREF _Toc298750560 \h 1441515
13 LINK \l "_Toc298750561" 14Общая информация о таблице 13 PAGEREF _Toc298750561 \h 1451515
13 LINK \l "_Toc298750562" 14Перемещения по таблице 13 PAGEREF _Toc298750562 \h 1451515
13 LINK \l "_Toc298750563" 14Поиск данных в таблице 13 PAGEREF _Toc298750563 \h 1451515
13 LINK \l "_Toc298750564" 14Изменение данных в записи 13 PAGEREF _Toc298750564 \h 1461515
13 LINK \l "_Toc298750565" 14Связывание таблиц 13 PAGEREF _Toc298750565 \h 1471515
13 LINK \l "_Toc298750566" 14SQL Запросы 13 PAGEREF _Toc298750566 \h 1471515
13 LINK \l "_Toc298750567" 14Создание таблиц 13 PAGEREF _Toc298750567 \h 1471515
13 LINK \l "_Toc298750568" 14Изменение структуры таблиц 13 PAGEREF _Toc298750568 \h 1471515
13 LINK \l "_Toc298750569" 14Изменение данных в записях 13 PAGEREF _Toc298750569 \h 1471515
13 LINK \l "_Toc298750570" 14Выборка данных из таблиц 13 PAGEREF _Toc298750570 \h 1481515
13 LINK \l "_Toc298750571" 14Управление транзакциями 13 PAGEREF _Toc298750571 \h 1481515
13 LINK \l "_Toc298750572" 14Работа с удаленными базами данных 13 PAGEREF _Toc298750572 \h 1481515
13 LINK \l "_Toc298750573" 14Программирование на FoxPro. 13 PAGEREF _Toc298750573 \h 1491515
13 LINK \l "_Toc298750574" 14Типы переменных 13 PAGEREF _Toc298750574 \h 1491515
13 LINK \l "_Toc298750575" 14Массивы 13 PAGEREF _Toc298750575 \h 1491515
13 LINK \l "_Toc298750576" 14Процедуры 13 PAGEREF _Toc298750576 \h 1491515
13 LINK \l "_Toc298750577" 14Функции 13 PAGEREF _Toc298750577 \h 14101515
13 LINK \l "_Toc298750578" 14Арифметические действия 13 PAGEREF _Toc298750578 \h 14101515
13 LINK \l "_Toc298750579" 14Операции над строками 13 PAGEREF _Toc298750579 \h 14111515
13 LINK \l "_Toc298750580" 14Конструкция IF 13 PAGEREF _Toc298750580 \h 14111515
13 LINK \l "_Toc298750581" 14Конструкция IIF 13 PAGEREF _Toc298750581 \h 14111515
13 LINK \l "_Toc298750582" 14Конструкция CASE 13 PAGEREF _Toc298750582 \h 14111515
13 LINK \l "_Toc298750583" 14MESSAGEBOX 13 PAGEREF _Toc298750583 \h 14111515
13 LINK \l "_Toc298750584" 14Цикл FOR 13 PAGEREF _Toc298750584 \h 14121515
13 LINK \l "_Toc298750585" 14Цикл DO WHILE 13 PAGEREF _Toc298750585 \h 14121515
13 LINK \l "_Toc298750586" 14Цикл SCAM 13 PAGEREF _Toc298750586 \h 14121515
13 LINK \l "_Toc298750587" 14Работа с датами 13 PAGEREF _Toc298750587 \h 14131515
13 LINK \l "_Toc298750588" 14Работа с файлами 13 PAGEREF _Toc298750588 \h 14131515
15 Команды FoxPro для работы с данными таблицы.
Добавление записей в таблицу
Чтобы добавить пустую запись, следует выбрать в меню Table (Таблица) команду Append New Record (Добавить новую запись) или нажать комбинацию клавиш Ctrl+Y. Можно также ввести в окне Command команду
APPEND BLANK
Если необходимо заполнить таблицу записями из другой таблицы, можно использовать команду APPEND FROM.
APPEND FROM <Имя_файла> I ? [FIELDS <Список_полей>] [FOR <Условие>] [[TYPE] [DELIMITED [WITH <Разделитель1> I WITH BLANK I WITH TAB 1 WITH CHARACTER <Разделитель2>] I DIF ! FW2 i MOD I PDOX I RPD I SDF I SYLK I WK1 I WK3 I WKS 1 WR1 I WRK ! CSV I XLS I XL5 (SHEET <Имя_листа>] 1 XL8 [SHEET <Имя_листа>]1] [AS <Кодовая_страница>]
>- <Имя_файла> - имя таблицы, записи которой требуется добавить;
> ? - выдается стандартное диалоговое окно открытия файла для выбора таблицы, записи которой требуется добавить;
> <Список_полей> - через запятую перечисляются поля, значения которых требуется добавить;
> <Условие> - добавляются только записи, которые удовлетворяют условию. Можно использовать функции и операции сравнения;
> TYPE - определяет тип файла-источника;
>DELIMITED - позволяет добавить записи из ASCH-файла, строки которого оканчиваются символами перевода строки (CHR (13 )) и символами конца строки (CHR (10)). По умолчанию содержимое полей в ASCII-фгйле должно быть разделено запятыми, а символьные поля заключены в кавычки ("Петров", "бухгалтер", 15000);
> <Разделитель1> - указывается символ, которым выделяются символьные поля, если для этого не используются кавычки;
WITH BLANK - содержимое полей в ASCII-файле разделено пробелами;
WITH TAB - содержимое полей в ASCII-файле разделено символами табуляции;
<Разделитеть2> - указывается символ, которым разделено содержимое полей в ASCII-файле;
DIF - указывает, что данные добавляются из DIF-файла (файлы VisiCalc);
FW2 - указывает, что данные добавляются из файла с расширением .fw2, созданного во Framework II;
> MOD - указывает, что данные добавляются из файла с расширением .mod, созданного в Microsoft Multiplan версии 4.01;
PD0X - указывает, что данные добавляются из файла с расширением .db, созданного в Paradox версии 3.5 или 4.0;
RPD - указывает, что данные добавляются из файла с расширением .rpd, созданного в RapidFile версии 1.2;
SDF - позволяет добавить записи из ASCII-файла формата System Data Format со строками фиксированной длины;
SYLK - указывает, что данные добавляются из файла SYLK (Symbolic Link), созданного в Microsoft Multiplan;
WK1 - указывает, что данные добавляются из файла с расширением .wkl, созданного в Lotus 1-2-3 версии 2.x;
WK3 - указывает, что данные добавляются из файла с расширением .wk3, созданного в Lotus 1-2-3 версии 3.x;
> WKS - указывает, что данные добавляются из файла с расширением .wks, созданного в Lotus 1-2-3 версии 1-А;
WR1 - указывает, что данные добавляются из файла с расширением .wrl, созданного в Lotus Symphony версии 1.1 или 1.2;
WRK - указывает, что данные добавляются из файла с расширением .wrl, созданного в Lotus Symphony версии 1.0;
CSV - позволяет добавить записи из ASCII-файла. По умолчанию содержимое полей в ASCII-файле должно быть разделено запятыми. Первая строка текстового файла содержит имена полей. Она игнорируется;
> XLS - указывает, что данные добавляются из файла с расширением .xls, созданного в Microsoft Excel;
>XL5 - указывает, что данные добавляются из файла с расширением .xls, созданного в Microsoft Excel версии 5.0;
> XL8 - указывает, что данные добавляются из файла с расширением .xls, созданного в Microsoft Excel 97;
> SHEET <Имя_ листа> - при добавлении записей из файла с расширением .xls, созданного в Microsoft Excel, позволяет указать лист, данные которого нужно загружать;
> <Кодовая_страница> - задает кодировку, в которой хранятся данные в файле-источнике.
Просмотр содержимого таблиц и заполнение полей
Для заполнения полей записи при использовании команды BROWSE нужно щелкнуть в нужном поле мышью и ввести его значение. Значение сохраняется, когда вы переходите к следующему полю. Перейти к следующему полю можно также, нажав Enter или Tab.
Рассмотрим подробнее команду отображения и редактирования таблиц BROWSE:
BROWSE [FIELDS <Список_полей>] [FONT <Имя_шрифта> [,<Размер_шрифта>]] [STYLE <Стиль_шрифта>] [FOR <Условие1> [REST]] [FORMAT] [FREEZE <Имя_поля>] [KEY <Выражение1> [, <Выражение2>]] [LAST I NOINIT] [LOCK <Количество_полей>] [LPARTITION] [NAME <Имя__объекта>] [NOAPPEND] [NOCAPTIONS] [NODELETE] [NOEDIT I NOMODIFY] [NOLGRID] [NORGRID] [NOLINK] [NOMENU] [NOOPTIMIZE] [NOREFRESH] [NORMAL] [NOWAIT] [PARTITION <ЧиСЛО> [LEDIT] [REDIT]]
[PREFERENCE <Предпочтительное_имя>] [SAVE] [TIMEOUT <Секунды>]
[TITLE <Текст_заголовка>] [VALID [:F] <Условие2> [ERROR <Текст_ошибки>]]
[WHEN <УсловиеЗ>] [WIDTH <Ширина_столбцов>] [WINDOW <Имя_окна1>]
[IN [WINDOW] <Имя_окна2> I IN- SCREEN] [COLOR SCHEME <Номер_схемы>]
> <Список_полей> - перечисление полей через запятую, если нужно отобразить не все поля, а только часть из них;
> <Имя_шрифта> - дает возможность задать шрифт, которым будут отображаться данные;
> <Размер_шрифта> - дает возможность задать размер шрифта, которым будут отображаться данные;
> <Стиль_шрифта> - позволяет выбрать стиль шрифта, которым будут отображаться данные. Варианты: 'В' - жирный, 'I' - курсив, 'N1 - нормальный, 1S' - тень, '-' - зачеркнутый, "Г" - прозрачный, 'U' - подчеркнутый;
> <Условие1> - показываются только записи, которые удовлетворяют условию. Можно использовать функции и операции сравнения;
> REST - оставляет курсор на текущей записи. В противном случае текущей становится первая запись отображаемого диапазона записей;
> FORMAT - устанавливает контроль формата ввода данных в поля в соответствии с установками, сделанными командой SET FORMAT;
> FREEZE <Имя_поля> - позволяет разрешить внесение изменений только в указанное поле;
>KEY <Выражение1> - ограничивает диапазон отображаемых записей, если таблица проиндексирована. Указанное выражение должно соответствовать ключу, по которому в данный момент упорядочена таблица;
> LAST I N0INIT - позволяет записывать текущую конфигурацию по окончании работы с командой;
> LOCK <Количество_полей> - позволяет закрепить указанное количество полей. Эти поля всегда будут видны на экране, независимо от положения горизонтальной полосы прокрутки. Допускаются отрицательные значения;
> LPARTITI0N - при использовании LOCK устанавливает курсор в первое поле в левой части окна. По умолчанию в таком случае курсор устанавливается в первое поле правой части окна;
>- NAME <Имя_объекта> - создает ассоциированный с окном Browse объект, имеющий набор свойств, аналогичных свойствам объекта Grid. Подробнее об этом объекте можно будет прочитать в главе 4;
> N0APPEND - запрещает добавлять записи с помощью комбинации клавиш Ctrl+Y или команды Append New Record (Добавить новую запись) из меню Table (Таблица). Если в окне Command ввести команду APPEND BLANK, то новая запись успешно добавится;
>- NOCAPTIONS - принудительный вывод в качестве наименований столбцов таблицы имен полей, даже если заданы иные наименования;
> NODELETE - запрещает помечать записи на удаление мышью или комбинацией клавиш Ctrl+T. Если в окне Command ввести команду DELETE, то на запись успешно установится пометка на удаление;
> NOEDIT | NOMODIFY - запрещает изменять содержимое полей таблицы, однако можно добавлять записи и удалять их;
> NOLGRID - убирает линии сетки, разделяющей ячейки таблицы, в левой части окна;
> NORGRID - убирает линии сетки, разделяющей ячейки таблицы, в правой части окна;
>NOLINK - разрывает связь между перемещениями курсора в левой и правой частях окна. По умолчанию при перемещении курсора в одной части окна курсор в другой части окна перемещается на ту же запись;
> NOMENU - запрещает вывод пункта меню Table (Таблица) в основном меню;
> NOOPTIMIZE - отключает оптимизацию по технологии Rushmore;
>NOREFRESH - запрещает обновление таблицы. Обычно обновление происходит с установленной командой SET REFRESH периодичностью;
> NORMAL - выводит окно таблицы с параметрами по умолчанию;
> NOWAIT - продолжает работу программы после вывода окна с таблицей на экран. Если не указать этот параметр, программа ждет завершения работы команды BROWSE и лишь потом продолжает свою работу;
> PARTITION <Число> - разбивает окно на две части и определяет ширину частей;
> LEDIT - позволяет редактировать левую часть окна;
> REDIT - позволяет редактировать правую часть окна;
> PREFERENCE <Предпочтительное_имя> - сохраняет установки окна;
> SAVE - оставляет окно с таблицей на экране и позволяет вернуться к нему
после работы с другими окнами. Имеет смысл только при вызове BROWSE
из программ;
>TIMEOUT <Секунды> - определяет, через какое время (в секундах) окно с таблицей автоматически закроется. Имеет смысл только при вызове BROWSE из программ;
> TITLE <Текст_заголовка> - заменяет помещаемое в заголовок окна имя таблицы на заданный вами текст;
>VALID [.- F] <Условие2> - если произошло редактирование какого-либо поля записи и сделана попытка перейти к другой записи, осуществляется проверка указанного условия, и, если оно не выполняется, переход не возможен. Например, при вводе в поле с именем сотрудника (Name) новых сведений всегда кроме фамилии должны присутствовать или имя и отчество, или инициалы. От фамилии они отделяются пробелом. Тогда можно проверять наличие пробела (функция AT ()). Чтобы в таком случае не захватить пробел в начале или в конце строки, воспользуемся функцией, отрезающей «крайние» пробелы, - ALLTRIM (). Команда BROWSE с такой проверкой будет выглядеть так:
BROWSE VALID AT(CHR(32), ALLTRIM(Name)) о 0
ERROR <Текст_ошибки> - указывает сообщение, которое выводится, если проверка VALID показала нарушение. Например, ERROR «Вы не ввели имя или инициалы'». Указанное сообщение отобразится в сроке состояния;
WHEN <УсловиеЗ> - проверяет условие при переходе к следующей записи и запрещает ее редактирование. Отличие от VALID в том, что VALID не выпускает курсор из ошибочной записи, a WHEN позволяет переходить к другим записям;
> WIDTH <1ирина_столбцов> - позволяет задать при отображении ширину столбцов в символах. Если содержимое поля шире отведенной ширины, отобразится только часть содержимого, которая уместилась в указанные рамки, а остальное можно увидеть, если щелкнуть в поле мышью и перемещать курсор внутри поля с помощью клавиш со стрелками вправо и влево;
WINDOW <Имя_окна1> - позволяет разместить содержимое окна Browse внутри указанного окна. Полезно для придания окну с таблицей требуемых характеристик;.
IN [WINDOW] <Имя_окна2>-указывает, какое окно будет родительским для окна с таблицей, то есть в рабочем поле какого окна будет открыто окно с таблицей;
IN SCREEN - указывает, что родительским окном будет основное окно Visual FoxPro;
> COLOR SCHEME <Номер_схемы> - задает номер цветовой схемы для окна с таблицей.
Удаление записей
Пометка записей на удаление при работе с таблицей через BROWSE происходит при щелчке мышью в поле слева от полей записи. При установке пометки поле окрасится в другой цвет (обычно в черный). Чтобы снять пометку, надо еще раз щелкнуть в этом поле. Установка пометки на удаление еще не значит, что запись удаляется физически из таблицы. Еще есть время подумать.
Второй способ пометки записей на удаление - команда DELETE, вводимая в окне Command.
DELETE [<Диапазон>] [FOR <Условие1>] [WHILE <Условие2>] [IN <Рабочая_область> i <Имя_таблицы>] [NOOPTIMIZE]
> <Диапазон> - если не используется FOR или WHILE и указать ALL, то будут помечены на удаление все записи;
><Условие1> - удаляются только записи, которые удовлетворяют условию. Можно использовать функции и операции сравнения;
><Условие2> - записи удаляются, пока выполняется условие; >
· <Рабочая_область> I <Имя_таблицы> - указывается таблица или рабочая область, где производится удаление.
Если не указывать параметры, то будет помечена на удаление текущая запись таблицы в текущей рабочей области.
Можно выполнить и обратную операцию и снять пометку на удаление. Для этого существует команда RECALL.
RECALL [<Диапазон>] [FOR <Условие1>] [WHILE <Условие2>] [IN <Рабочая_область> I <Имя_таблицы>] [N00PTIMI2E]
><Диапазон> - если не используется FOR или WHILE и указать ALL, то будут сняты пометки на удаление со всех записей;
><Условие1> - снимаются пометки на удаление только с записей, которые удовлетворяют условию. Можно использовать функции и операции сравнения;
><Условие2> - пометки на удаление снимаются с записей, пока выполняется условие;
> <Рабочая_область> I <Имя_таблицы> - указывается таблица или рабочая область, где производится снятие пометок на удаление.
Таким образом, например, для снятия пометок на удаление со всех записей используется команда RECALL ALL.
Если с удалением записей решено окончательно и бесповоротно, то следует упаковать таблицу командой PACK в окне Command.
PACK [MEMO] [D3F] [<Имя_таблицы>] [IN <Рабочая_область>I<Имя_таблицы>]
> MEMO - удаляет неиспользуемые пробелы в memo-полях, не удаляя при этом записи;
> DBF - удаляет помеченные на удаление записи, не затрагивая при этом memo-файл.
Если использовать команду PACK без параметров, удалятся все помеченные на удаление записи таблицы в текущей рабочей области и упакуется присоединенный memo-файл.
Выбор рабочей области
Выбор рабочей области осуществляется с помощью команды:
SELECT <Номер_рабочей_области> 1 <Алиас_таблицы>
><Номер__рабочей_области> - задает номер рабочей области, которую требуется сделать текущей. Если указать номер 0, произойдет переход в рабочую область, не занятую никакой таблицей;
> <Алиас_таблицы> - указывается имя таблицы или ее алиас.
Открытие таблицы
Открытие таблицы производят посредством команды:
USE [[<База_данных>\} <Имя_таблицы> I <Представление_30Ъ> I ?]
[IN <Номер_рабочей_области> I <Алиас_таблицы>] [ONLINE] [ADMIN] [AGAIN]
[NOREQUERY [<Номер_сессии_данных>]] [NODATA]
[INDEX <Гписок_индексных_файлов> I ?
[ORDER [<Номер_индекса> I IDXFileName I [TAG] <Имя_тега> [OF <Имя_СОХ-файла>] [ASCENDING | DESCENDING]]]] [ALIAS <Алиас_таблицы>] [EXCLUSIVE] [SHARED] [NOUPDATE] [CONNSTRING <Строка_соедкнения> I <Указатель> ]
<База_данных> - указывается имя базы данных, в которой находится открываемая таблица. Если таблица находится в текущей базе данных или используется сама по себе, без указания принадлежности к базе данных, то этот параметр команды не указывается;
<Имя_таблицы> - имя открываемой таблицы;
<ГГредставление_50Ъ> - открывает представление, хранящееся в текущей базе данных;
? - открывает стандартное диалоговое окно для выбора файла таблицы;
IN <Комер_рабочей_области> I <Алиас_таблицы> - указывается рабочая область (или алиас), в которой требуется открыть таблицу;
ONLINE - открывает offline-представление, сохраненное предварительно с помощью команды CREATEOFFLINE ();
> ADMIN - открывает offline-представление, сохраненное предварительно с помощью команды CREATEOFFLINE (), не обновляя измененные в представлении данные на сервере;
> AGAIN - позволяет повторно открыть в другой рабочей области уже открытую на данный момент таблицу;
> NOREQUERY - определяет, что открываемое SQL-представление не обновляется из БД в момент открытия;
> NODATA - загружает структуру SQL-представления;
> INDEX <Список_индексных_файлов> I ? - задает индексные файлы, используемые для упорядочивания записей в таблице. Подробнее индексы рассмотрим позже. Если указать ?, откроется стандартное диалоговое окно для выбора индексного файла;
> ALIAS <Алиас_таблицы> - указывает алиас. (псевдоним) для открываемой таблицы;
> EXCLUSIVE - открывает таблицу в эксклюзивном режиме. Такой режим запрещает другим пользователям, открывшим эту же таблицу, вносить изменения. Этот режим требуется для выполнения определенных операций над таблицами;
> SHARED - позволяет открывать таблицу при совместном использовании несколькими пользователями даже в случае, когда она уже открыта одним из пользователей в эксклюзивном режиме;
> NOUPDATE - запрещает изменение таблицы.
> CONNSTRING <Строка_соединения> | <Указатель> - задает строку соединения для базы данных, к которой происходит подключение через драйверы ODBC. Если указать вместо строки соединения пустые кавычки (""), откроется стандартное диалоговое окно ODBC Data Source.
Если таблица свободная (Free), то есть она не входит в базу данных, а располагается на диске в виде файла, можно сразу открывать ее с помощью команды USE.
Если же таблица входит в базу данных, требуется сначала открыть базу данных. Это можно сделать, используя команду OPEN DATABASE.
OPEN DATABASE [<Имя_базы_данных> I ?] [EXCLUSIVE I SHARED) [NOUPDATE] [VALIDATE)
> EXCLUSIVE - открывает базу данных в эксклюзивном режиме;
> SHARED - открывает базу данных в режиме совместного использования;
NOUPDATE - открывает базу данных и запрещает ее редактирование;
VALIDATE - открывает базу данных и производит проверку наличия входящих в состав базы данных файлов на диске.
Общая информация о таблице
Visual FoxPro при работе с таблицами поддерживает систему курсоров. Курсор указывает для каждой таблицы, какая запись является текущей. При работе с командой BROWSE та запись, поле которой выделено (обычно рамочкой вокруг поля), и является текущей. Узнать номер текущей записи можно, если воспользоваться функцией RECNO ().
RECNO([<Номер_рабочей_области> 1 <Алиас_таблицк>))
Если не указать параметры, будет возвращена информация по таблице, открытой в текущей рабочей области.
Попробуйте набрать в окне Command
? RECNOO
Еще одна полезная функция для получения информации о записях таблицы -RECCOUNT (). Она возвращает число записей в таблице.
RECCOUNT([<Номер_рабочей_области> I <Алиас_таблицы>])
Перемещения по таблице
Быстро перемещать курсор по таблице (делать ту или иную запись текущей) можно посредством команды GO.
GO [RECORD] <Номер_записи> [IN <Номер_рабочей_области> I IN <Алиас_таблицы>]
GO TOP [IN <Номер_рабочей_области> I IN <Алиас_таблицы>] -делает текущей первую запись таблицы.
GO BOTTOM [IN <Номер_рабочей_области> I IN <Алиас_таблицы>] - делает текущей последнюю запись таблицы.
Таким образом, чтобы переместиться в начало текущей таблицы надо выполнить команду:
GO ТОР
Перемещаться относительно текущей записи можно, если воспользоваться командой SKIP.
SKIP [<Число>][IN <Номер_рабочей_области> I IN <Алиас_таблицы>]
<Число> - указывается количество записей, на которое надо перескочить от текущей записи. А как узнать, какая запись текущая? На этот случай у Visual FoxPro припасена функция RECNOО, которая была рассмотрена выше.
Поиск данных в таблице
Следующая группа команд, которую мы рассмотрим, - команды поиска записей. Основные команды поиска записей - LOCATE, CONTINUE и SEEK. Первая и вторая работает с таблицами независимо от того, проиндексирована таблица или нет. Команда SEEK осуществляет поиск только в проиндексированных таблицах.
LOCATE [FOR <Условие1>] [Диапазон] [WHILE <Условие2>] [NOOPTIMIZE]
<Условие1> - ищется первая запись, удовлетворяющая этому условию;
Диапазон - задает диапазон поиска и может принимать значения: ALL -все записи, NEXT <Количество> - указанное количество следующих за текущей записей, RECORD <Номер_записи> - поиск в конкретной записи, REST - поиск начиная с текущей записи и до конца таблицы;
<Условие2> - задает выражение, при истинности которого продолжается поиск;
NOOPTIMIZE - отключает использование оптимизации Rushmore.
Команда LOCATE ищет запись, соответствующую условиям поиска, и делает ее текущей. Продолжить поиск после нахождения первой записи, удовлетворяющей условиям поиска, можно посредством команды CONTINUE. Поиск в этом случае будет продолжен с записи, следующей за текущей.
Рассмотрим синтаксис команды SEEK.
SEEK <Ключевое_выражение> [ORDER <Номер_индекса> I <Имя_1сЗх-файла> I [TAG] <Имя_тега> [OF <Имя_ссЗх-фаЙла>] [ASCENDING I DESCENDING] ] [IN <Номер_рабочей_области> I IN <Алиас_таблицы>]
> <Ключевое_выражение> - выражение для поиска записи, соответствующее ключевому выражению, использованному при индексировании;
> <Номер_индекса> I <Имя_1с1х-файла> - определяет номер или имя индексного idx-файла, в соответствии с индексами которого производится поиск;
> <Имя_тега> - имя тега в cdx-файле, в соответствии с индексами которого производится поиск;
> ASCENDING - поиск в таблице будет производиться по возрастанию индексов;
> DESCENDING - поиск в таблице будет производиться по убыванию индексов;
> <Номер_рабочей_области> I <Алиас_таблицы> - обозначение таблицы, в которой производится поиск.
Команда SEEK ищет запись, соответствующую условиям поиска, и делает ее текущей. Как мы уже говорили, команда SEEK работает только с индексированными таблицами и поиск можно осуществлять только по полям или выражениям над полями, по которым производилось индексирование. Подробнее об использовании индексов будет рассказано в следующем разделе.
Определить, найдена ли запись командами LOCATE, CONTINUE или SEEK, можно, если после их выполнения оценить значение, возвращаемое функцией FOUND().
FOUND([<Номер_рабочей_области> I <Алиас_таблицы>])
Если функция FOUND () вернула значение True (.Т.), значит, поиск увенчался успехом, если функция FOUND() вернула значение False (.F.) - искомое значение не найдено.
Изменение данных в записи
Изменять значения полей при работе с командой BROWSE можно интерактивно, щелкнув в соответствующем поле и вводя новое его значение. Если вы обращаетесь к таблице не из программы, а просто запустили среду Visual FoxPro и открыли таблицу, работа в окне с записями таким образом - самое естественное поведение. Однако рассмотрим и изменение значений полей с использованием команд, вводимых в окне Command.
Для изменения значений полей в записях существует команда REPLACE.
REPLACE <Имя_поля> WITH <3начение> [ADDITIVE]
[,<Имя_поля2> WITH <3начение> [ADDITIVE]] ... [Диапазон]
[FOR <Условие1>] [WHILE <Условие2>] [IN <Номер_рабочей_области>
I <Алиас_таблицы>] [NOOPTIMIZE]
<Имя_поля> - имя поля, значение которого требуется изменить;
<3начение> - новое значение поля;
ADDITIVE - позволяет добавлять текст в memo-поле, а не заменять его;
<Условие1> - значение полей будут изменены только в тех записях, которые удовлетворяют этому условию;
<Условие2> - значение полей будут изменяться до тех пор, пока выполняется условие;
<Номер_рабочей_области> I <Алиас_таблицы> - обозначение таблицы, в которой производятся изменения;
NOOPTIMIZE - отключает использование оптимизации Rushmore.
Создание индексов
Основная команда, служащая для создания индексных файлов, - INDEX.
INDEX ON <Выражение> ТО <Имя_1сЗх-файла> I TAG <Имя_тега> [COLLATE <Национальная_сортировка>] [OF <Имя_ссЗх-файла>]
[FOR <Условие >] [COMPACT] [ASCENDING I DESCENDING] [UNIQUE I CANDIDATE] [ADDITIVE][BINARY]
>
· <Выражение> - индексное выражение;
>- <Имя__1с1х-файла> - имя файла для хранения индекса (указывается, если создается одиночный индекс в idx-файле);
>
· <Имя_тега> - имя индекса внутри комплексного индексного cdx-файла (указывается, если создается индекс внутри cdx-файла);
>- <Национальная_сортировка> - необязательный параметр, указывающий, как производить сортировку символьных полей с национальными кодировками. Возможные значения см. в раскрывающемся списке Collating sequence (Последовательность сортировки) на вкладке Data (Данные): Tools (Инструменты) >
· Options (Параметры);
>- <Имя_сс1х-файла> - имя файла для хранения индекса (указывается, если создается индекс в cdx-файле);
>- <Условие> - логическое условие для отбора записей. В индекс войдут только те записи, которые удовлетворяют условию. Эта возможность позволяет выделять из большого количества записей только подмножество с необходимыми характеристиками. Физически в таблице все записи останутся, но при работе с индексами покажутся только удовлетворяющие условию записи;
>- COMPACT - создается компактный idx-файл. Для cdx-файла этот параметр значения не имеет, так как он всегда создается компактным;
>- ASCENDING I DESCENDING - направление сортировки. Если указано DESCENDING, то по убыванию. Если ничего не указывать, то сортировка происходит по возрастанию;
>- UNIQUE I CANDIDATE-определение режима включения в индексный файл записей с повторяющимися ключевыми полями. Если UNIQUE, в индексный файл будет занесен только индекс первой из нескольких записей с одинаковыми ключевыми полями;
>- ADDITIVE - при создании индекса индексные файлы, уже открытые для данной таблицы, продолжают оставаться открытыми;
>- BINARY - создание бинарных индексов. При этом не поддерживаются параметры FOR, ASCENDING, DESCENDING, UNIQUE и CANDIDATE. Для бинарных индексов не поддерживаются команды SET ORDER и SEEK.
Связывание таблиц
Для связывания таблиц служит команда SET RELATION. При этом таблица, с которой мы связываем главную таблицу, должна быть проиндексирована по тому полю или группе полей, по которому мы собираемся связывать таблицы.
SET RELATION ТО [<Выражение1> INTO <Рабочая_область1>I
·<Имя_таблицы1> [, <Выражение2> INTO <Рабочая_область2>|<Имя_таблицы2> ...] [IN <Рабочая_область>I<Имя_таблицы>] [ADDITIVE]]
>- <Выражение1> - поле главной таблицы или действие над полями главной
таблицы, соответствующее индексному выражению в таблице, с которой
связывается главная таблица; >- <Рабочая_область1> I <Имя_таблицы1> - указывается либо номер (или
имя) рабочей области, либо имя таблицы, с которой устанавливается
связь;
>- <Выражение2> INTO <Рабочая_область2>|<Имя_таблицы2>...-еслитаблиц, с которыми вы хотите связать главную таблицу, несколько, соответствующие индексные выражения и имена таблиц или номера рабочих областей перечисляются через запятую (между каждым выражением и именем таблицы ставится ключевое слово INTO);
>
· IN <Рабочая_область> I <Имя_таблицы> - указывается либо номер (или имя) рабочей области, либо имя таблицы, которая является главной, если она не является текущей (расположена не в текущей рабочей области);
>
· ADDITIVE - при создании новой сохраняет все существующие связи главной таблицы (если не указывать этот параметр, все существовавшие до этого момента связи главной таблицы будут разорваны).
SQL Запросы
Создание таблиц
Оператор SQL для создания таблиц - CREATE TABLE.
CREATE TABLE <Имя_таблицы> (<Определение_полей>)
Изменение структуры таблиц
Оператор SQL для изменения структуры таблиц - ALTER TABLE.
ALTER TABLE <Имя_таблицы> ADD [COLUMN] <Определение_поля> I ALTER [COLUMN] <Имя_поля> <Определение_поля> I DROP [COLUMN] <Имя_поля> I ADD <Накладываемое_ограничение> I DROP CONSTRAINT <Имя_удаляемого_ограничения>
> ADD COLUMN - позволяет добавить столбец; > ALTER COLUMN - позволяет изменить столбец; > DROP COLUMN - позволяет удалить столбец;
> ADD <Накладываемое_ограничение> - позволяет наложить на таблицу ограничение для проверки целостности; > DROP CONSTRAINT - позволяет удалить ограничение для проверки целостности.
Удаление таблиц
Оператор SQL для удаления таблиц - DROP TABLE.
DROP TABLE <Имя_таблицы>
Добавление записей
Для добавления записей в SQL используется конструкция INSERT INTO.
INSERT INTO <Икя_таблицы> (<Список-полей>) VALUES (<Список_значений>)
Изменение данных в записях
Для изменения данных в записях в SQL используется конструкция UPDATE.
В SQL есть две формы оператора изменения - позиционная и поисковая. Позиционное изменение осуществляется с помощью курсоров, а поисковое использует предложение WHERE с заданием условия, которому должны удовлетворять изменяемые записи. Позиционное изменение рассматривать не будем потому, что при работе через SQL с различными БД оно реализуется по-разпому (это зависит от того, какой стандарт на SQL поддерживается в той или иной СУБД).
Синтаксис UPDATE приведен ниже.
Update <Иия. таблицы;- SET <Иия._псшя> = <Новое„значение> [, <;1ил_поля> = <НоЕое_значение>. . . ] [WHERE <Условие_отбора>]
Д]ш указания новых значений полей можно использовать не только конкретные значения, но и значения, вычисленные, например, по другой таблице. Такой оператор обновления может выглядеть, например, как показано ниже.
UPDATE Persons SET 1Л = (SELECT Id FROM Staff WHERE Sum = 15000.00) ; WHEKE Tabnum = 70008
Удаление записей
Для удаления записей в SQL используется конструкция DELETE FROM. DELETE FROM <Иш_таблицк> [WHERE <Условие_отбора>]
Если не указывать никакого условия (предложение WHERE отсутствует), будут удалены все записи таблицы.
Выборка данных из таблиц
Основой оператор для выборки данных в SQL - SELECT.
В Visual FoxPro 9 существует два варианта использования команды SELECT. В одном случае параметров команды большее количество, но в полном объеме они работают только при выборке данных из базы данных Visual FoxPro. Во втором случае применяется минимальный набор параметров, но все они будут работать практически со всеми системами управления базами данных. Надо помнить, что при обращении приложения к базе данных и приложение должно поддерживать формат запроса, чтобы его сформировать и суметь обработать результат, и СУБД, к которой приложение обращается, должна иметь возможность понять запрос и обработать его.
SELECT [ALL I DISTINCT] <Список_полей1> FROM <Список_таблиц> [WHERE <Условие1> [AND I OR <Условие2>] ...]
[GROUP BY <Список_полей2> [, . ..]] [HAVING <Условие> [AND ! OR ...]] [UNION <БЕЬЕСТ-выборка>] [ORDER BY <Список_зыражений> [ASC I DESC] [INTO <Имя_табл*лцы>]
>DISTINCT - показывает, что в результирующую выборку из нескольких одинаковых записей включается только одна;
> FROM <Список_таблиц> - позволяет задать таблицу или список таблиц, к которым осуществляется запрос;
> WHERE <Условие1> - позволяет задать условия для выбора записей. В результирующую выборку будут включены только записи, удовлетворяющие условию. Условие может быть сложным и состоящим из нескольких условий, разделенных логическими операторами AND или OR;
> GROUP BY <Список_полей2> ^-указывается список полей для группировки по ним. Имеет смысл использовать, если в <Список_полей1> включить функции SUM (суммирование), COUNT (количество записей) и т.п.;
> HAVING <Условие> - условие, которому должны удовлетворять записи. Имеет смысл при использовании GROUP BY, иначе действие аналогично WHERE;
> UNION <ЗЕЬЕСТ-выборка>-позволяет объединить результаты нескольких выборок в одну результирующую таблицу;
> ORDER BY - упорядочивает результат выборки по указанным полям по возрастанию (ASC) или убыванию (DESC);
> INTO <Имя_таблицы> - позволяет указать таблицу, в которую следует поместить результирующую выборку.
Мы уже упоминали агрегатные функции, которые можно испогн.зор.л jь в запросах. Перечислим их:
> COUNT () - возвращает количество записей в группе. Обычно используют
COUNT(*);
> SUM (<поле>) - возвращает числовую сумму значений укатанного ноля д-гя группы записей;
> AVG(<поле>) - возвращает среднее значение чисел мсазашичо ноля для группы записей;
> МАХ(<поле>) - возвращает максимальное значение указанного поля д'я группы записей;
> MIN(<поле>) - возвращает минимальное значение указанною поля для группы записей.
Управление транзакциями
Транзакция - это последовательность операций над БД, рассматриваемых СУБД как единое целое. Удаление записей - это транзакция, добавление записей - это транзакция. Контроль транзакций присущ любой СУБД. В процессе внесения изменений транзакция считается не завершенной, и состояние БД до начала транзакции может быть восстановлено. Подтвердить завершение транзакции можно либо командой, либо автоматически.
При использовании команд SQL для удаления записей в таблицах записи помечаются на удаление, однако физического удаления не происходит. Для таблиц Visual FoxPro для полного удаления записи необходимо использовать команду PACK. Или, если вы хотите отменить удаление, надо выполнить команду RECALL. Обе эти команды мы уже рассматривали ранее.
Для операций с удаленными таблицами придется использовать другие команды. В случае завершения операции удаления надо выполнить SQLCOMMIT(), а в случае отмены удаления - SQLROLLBACK ().
SQLCOMMIT(<Указатель_на_соединение>) SQLROLLBACK(<Указатель_на_соединение>)
В обеих командах в качестве параметра задается указатель на соединение. Указатель возвращается при установке соединения при помощи функции SQL-CONNECT ().
Работа с удаленными базами данных
Перед тем как обратиться к удаленной базе данных, требуется установить с ней соединение. Для установки соединения с удаленными базами данных используют функцию SQLCONNECT (). Она возвращает указатель на установленное соединение.
SQLCONNECT([<Имя_соединения> I <Источник_данных> [, <Имя_пользователя> [, <Паропь> ]][, ]])
>- <Имя_соединения> - имя, использованное при создании соединения при помощи команды CREATE CONNECTION (используется в случае, когда такое соединение предварительно установлено);
>- <Источник_данных> - указывается база данных, к которой происходит подключение. Имя источника должно соответствовать имени, указанному в перечне источников данных ODBC;
> <Имя_пользователя> - указывается имя пользователя для подключения к базе данных;
> <Пароль> - указывается пароль для подключения к базе данных;
> - указывается тип соединения (в режиме совместного использования или нет). Возможные варианты: True (.Т.) и False (.F).
Программирование на FoxPro.
Типы переменных
Тип переменной
Размер памяти
Описание
Диапазон занчений

Blob
Ограничено доступной памятью
Двоичные данные


Character
1 байт на символ, до 254 символов
Любой текст
Любые символы

Currency
8 байт
Валюта
от -9223372036854775807 до 9223372036854775807

Date
8 байт
Дата, содержащая день, месяц и год
от01.01.0001 до31.12.9999

DateTime
8 байт
Дата и время. Содержит день, месяц, год, часы, минуты и секунды
[ Cкачайте файл, чтобы посмотреть ссылку ] до31.12.9999 и от 00:00:00 a.m. до 11:59:59р.гл.

Logical
1 байт
Логическое значение
True (.Т.) или False (.F.)

Numeric
8 байт
Целочисленные или дробные значения
-9999999999Е+19ДО 9999999999Е+20

Varbinary
1 байт на шестнадцате-ричный символ, до 255 символов
Двоичные данные
Любые шестнадцатеричные символы

Variant

Произвольный тип. Может содержать данные любого из перечисленных типов


Массивы
FoxPro инициализация массива происходит при выполнении команды:
DIMENSION <Имя__массива1> (<Количество_строк> [, <Количество_столбцов>] ) [AS <Тип>]
[, <Имя_массиьа2> (<Количество_строк> [, <Ко;:ичествс_столбцов>] ) ] ...
Имена массивов желательно задавать с учетом приведенных выше правил для переменных. Примеры инициализации массивов:
DIMENSION la_FileNames(50) && Массив из 50 строк
DIMENSION ga_Types(50, 2) && Массив из 50 строк и 2 столбцов
Процедуры
Оформление процедуры в Visual FoxPro происходит следующим образом:
PROCEDURE <Имя_процедуры>
[ LPARAMETERS <Параметр1>[ , <Параметр2>] , ... ] Команды_процедуры
[ RETURN [<Возвращаемое_значение>] ] [ENDPROC]
Есть и другой способ оформления процедуры (отличается только способом передачи параметров):
PROCEDURE <Имя_процедуры>([<Параметр1>[ AS <Тип>]
[ , <Параметр2>[ AS <Тип>]] ]) [AS <Тип_возвращаемого„значения>]
Команды_процедуры
[ RETURN [<Возвращаемое_значение>] ] [ENDPROC]
Чтобы вызвать процедуру на выполнение из программы, нужно воспользоваться командой:
DO <Имя_лрограммы1> I <Имя_процедуры> [IN <Имя_программы2>] [WITH <Список_параметров>]
> <Имя_программы1> | <Имя_процедуры> - имя вызываемой процедуры или имя запускаемой программы;
> IN <Имя_программы2> - указывает имя программы, где находится процедура, которую нужно выполнить, если она располагается не в текущей программе;
> WITH <Список_параметров> - указывает через запятую параметры, которые нужно передать вызываемой процедуре или программе.
Командой Do можно вызывать из программы на выполнение не только процедуры, но и любые исполнимые файлы Visual FoxPro. Если не задать расширение файла программы, то поиск будет осуществляться в следующем порядке:
> файлы с заданным именем и расширением .ехе; > файлы с заданным именем и расширением .арр; > файлы с заданным именем и расширением .fxp; > файлы с заданным именем и расширением .prg.
Например, запустить из программы другую программу Primer.prg, расположенную в папке D:\MyFolder\, можно, используя команду
DO [ Cкачайте файл, чтобы посмотреть ссылку ]
Функции
Функции очень похожи на процедуры. Основное отличие состоит в том, что функции изначально ориентированы на обязательный возврат какого-либо значения. Функция может не иметь параметров, но вернуть значение она обязана. Если вы сами не обозначите возвращаемое значение, Visual FoxPro автоматически подставит логическое значение True (.Т.).
Формат записи функций аналогичен формату записи процедур:
FUNCTION <Имя_процедуры>
[ LPARAMETERS <Параметр1>[ , <Параметр2>] ]
Команды_процедуры
[ RETURN 1<Возврашаемое_значение>] ]
[ENDFUNC]
и, так же как процедура, функция имеет второй вариант оформления передающихся параметров:
FUNCTION <Имя_гроцедуры>([<Параметр1>[ AS <Тип>]
[ , <Параметр2>[ AS <Тип>1] ]) [AS <Тип_возвращаемого_значения>]
Команды._процедуры
[ RETURN [<Возврацаемое„значение>] ] [ENDFUNC]
Вызов функции можно осуществить, как и вызов процедуры, используя команду Do. Однако мало кто пользуется этим вариантом вызова. Обычно функции вызывают, просто указав после оператора присваивания (=) имя функции и в круглых скобках параметры вызова функции через запятую. Если параметров нет, ставят просто пустые круглые скобки. Ниже приведены два совершенно аналогичных вызова функции.
DO MyFunc WITH "test", 11 Используют редко
или
lc_RetCocle = MyFunc ("test", 11) &S. Так делаю г чаще
Арифметические действия
Оператор
Назначение
Пример

+
Сложение
ln_Res = 2 + 5; ln_Res = 7

-
Вычитание
ln_Res = 5-2; ln_Res = 3


Умножение
ln_Res = 5*2; ln_Res = 10

1
Деление
ln_Res = 5/2; ln_Res = 2.5

%
Остаток от деления
ln_Res = 12 % 5; ln_Res = 2

О
Группировка
ln_Res = (5 + 2) * 3; ln_Res = 21

" и **
Возведение в степень
InRes = 3 л 2; InRes = 9

Тригонометрические функции Visual FoxPro, как правило, имеют только один параметр (аргумент). К таким функциям относятся:
SIN(<аргумент>) - синус; > COS (<аргумент>) - косинус;
AS IN (<аргумент>) - арксинус; > AC0S (<аргумент>) - арккосинус; >
· TAN(<аргумент>) - тангенс;
> АТА1^(<аргумент>) - арктангенс.
> функция PI () возвращает значение числа Пи.
> функция DTOR (<аргумент>) конвертирует градусы в радианы. <Аргумент> указывается в градусах.
Функции округления и взятия по модулю в Visual FoxPro 9 присутствуют следующие:
> ABS (<аргумент>) - абсолютное значение числа (ABS(-10.7) = 10.7);
>- CEILING (<аргумент>) - ближайшее целое число, большее, чем аргумент, если он дробный (CEILING (10.7) =11);
> FLOOR (<аргумент>) - ближайшее целое число, меньшее, чем аргумент, если он дробный (FLOOR(10. 7) =10);
>- INT (<аргумент>) - целая часть аргумента (INT(10.7) = 10);
> ROUND(<аргумент>, <количество_знаков>) - округляет аргумент до указанного количества знаков после запятой (ROUND (75.235, 2) = 75.24). Допускается отрицательное значение количества знаков. Это приводит к округлению до десятков, сотен и так далее (ROUND (75.235, -1) = 80) .
Функция вычисления экспоненты - ЕХР (<аргумент>).
Функции вычисления логарифмов: натуральный логарифм (по основанию е) -LOG(), десятичный логарифм - LOG10 (<аргумент>).
При помощи функции SQRT (<аргумент>) можно вычислить квадратный корень числа.
В1ТАND(<аргумент1>, <аргумент2>, . . . ) - возвращает результат побитовой операции AND над аргументами
BITOR(, <аргумент2>, ... ) - возвращает результат побитовой операции OR
В1ТХ0R(<аргумент1>, <аргумент2>, ... )
BITCLEAR (<аргумент>, <позиция>) - в указанной позиции двоичного аргумента проставляет 0.
BITSET (<аргумент>, <позиция>) - в указанной позиции двоичного аргумента проставляет 1. Значение позиции может изменяться от 0 (крайняя справа цифра) до 31 (крайняя слева цифра).
BITLSHIFT (<аргумент>, <количество>) - сдвигает двоичное число влево на указанное количество разрядов (BITLSHIFT (5 ,1) =10, 5 в двоичном виде 0101, а 10 в двоичном виде 1010).
BITRSHIFT(, <количество>) - сдвигает двоичное число вправо на указанное количество разрядов (BITRSHIFT (5 ,1) = 2, 5 в двоичном виде 0101, а 2 в двоичном виде 0010).
BITTEST (<аргумент>, <позиция>) - проверяет, стоит ли в указанной позиции двоичного аргумента 1. Значение позиции может изменяться от 0 (крайняя справа цифра) до 31 (крайняя слева цифра). Если проверка показывает, что в указанной позиции стоит 1, то функция возвращает значение True (.Т.), если стоит 0, то возвращается False (.F.).
Операции над строками
Для определения длины строки используют функцию LEN(<строка>). Возвращаемое значение - целое число. Например:
ln_StrLn = LEN("He очень длинная строка")
Для решения еще одной часто встречающейся задачи - выделению подстроки в строке - предназначены функции LEFT, RIGHT и SUBSTR.
LEFT (<строка>, <количество_символов>) - возвращает указанное количество символов строки, отсчитывая их от левого края строки.
RIGHT (<строка>, <количество_символов>) - возвращает указанное количество символов строки, отсчитывая их от правого края строки
SUBSTR(<строка>, <позиция_начала>[, <количество_символов>]) -возвращает подстроку, начинающуюся с указанной позиции, с заданной длиной. Позиция первого символа - 1. Если не указать длину подстроки, вернется подстрока, начинающаяся с указанного символа и заканчивающаяся с окончанием исходной строки.
Примеры:
lc_sbstr = SUBSTR("Мультиканальный передатчик", 7,5)
LTRIM(<строка>[, <флаг>][, <символ1> [, <символ2>[, ...]]]) - возвращает строку с удаленными из начала строки пробелами или указанными символами.
RTRIM(<строка>[, <флаг>][, <символ1> [, <символ2>[, ...]]]) -возвращает строку с удаленными из конца строки пробелами или указанными символами.
ALLTRIM(<строка>[, <флаг>][, <символ1> [, <символ2>[, ...]]])- возвращает строку с удаленными из начала и конца строки пробелами или указанными символами.
Есть и обратные операции, которые добавляют пробелы или указанные символы, чтобы строка достигла определенного размера.
PADR(, <размер> [, <символ>] ) - добавляет пробелы или указанные символы в конец строки.
PADL (<строка>, <размер>[, <символ>] ) - добавляет пробелы или указанные символы в начало строки.
PADC (<строка>, <размер>[, <символ>]) - добавляет пробелы или указанные символы в начало и конец строки.
Конструкция IF
Конструкция IF применяется во многих языках программирования и отличается, как правило, только синтаксисом. В Visual FoxPro синтаксис следующий:
IF <Условие> [THEN]
<Список_команд> [ELSE
<Список_команд>] END IF
Можно использовать следующие операторы сравнения: = (равно); == (точное равенство строк); < (меньше); > (больше); != (не равно); <= (меньше или равно); >= (больше или равно).
Конструкция IIF
IIF(<Условие>, <Выражение1>, < Выражение2>)
При истинности условия возвращается первое выражение, если условие ложно - то второе.
Конструкция CASE
Но есть способ гораздо изящнее - использовать конструкцию CASE.
DO CASE
CASE <Условие1> [<Список_команд>] [CASE <Условие2> [<Список_команд>] ]
[CASE <Условие№> [<Список_команд>] ] [OTHERWISE [<Список_команд>]] ENDCASE
MESSAGEBOX
MESSAGEBOX(<Сообщение> [, <Тип_окна> ][, <Заголовок>][, <3адержка>])
> <Сообщение> - текст сообщения или переменная, значение которой нужно вывести на экран. Можно использовать функции, результат действия которых (возвращаемое значение) и будет отображаться. Максимальная длина сообщения - 1024 символа;

> <Тип_окна> - определяет, какую пиктограмму и какие кнопки выводить в диалоговом окне. Возможные значения для вариантов наборов кнопок приведены в табл. 3.6, для вариантов пиктограмм - в табл. 3.7, для вариантов установки кнопок по умолчанию - в табл. 3.8. Следует обратить внимание, что допускается суммирование этих значений. Например, надо получить окно с кнопками ОК и Отмена (Cancel), пиктограммой со знаком вопроса и выбором по умолчанию кнопки Отмена (Cancel). В этом случае параметр <Тип__окна> формируется так: 1 + 32 + 2 56 = 289, то есть надо ставить 289;
) <3аголовок> - задает строку заголовка диалогового окна;
>- <3адержка> - определяет задержку в миллисекундах. Через указанное время произойдет закрытие окна, если пользователь не нажмет никакую клавишу или не щелкнет мышью по какой-либо кнопке диалогового окна. Если время вышло, MESSAGEBOX () вернет значение -1.
Таблица 3.6 т
Значения для вариантов наборов кнопок

Значение
Набор кнопок

0
ОК

1
ОК и Отмена (Cancel)

2
Прервать, Повторить, Пропустить (Abort, Retry. Ignore)

3
Да, Нет, Отмена (Yes, No, Cancel)

4
Да, Нет (Yes, No)

5
Повторить, Отмена (Retry, Cancel)

Таблица 3.7т
Значения для вариантов пиктограмм

Значение
Пиктограмма

16
Знак Стоп

32
Знак вопроса

48
Восклицательный знак (внимание)

64
Знак информационного сообщения (i)

Таблица 3.8 т
Значения для вариантов кнопок по умолчанию

Значение
Кнопка по умолчанию

0
Первая кнопка

256
Вторая кнопка

512
Третья кнопка

Цикл FOR
Во-первых, рассмотрим цикл FOR:
FOR <Переменная> = <Нач._значение> ТО <Кон._значение> [STEP <Шаг>]
<Команды>
[EXIT]
[LOOP] ENDFOR
В данном цикле используется переменная, значение которой изменяется от <Нач._значение> до <Кон._значение>. То есть при первом выполнении команд внутри цикла переменная имеет значение <Нач._значение>. При выполнении команд второй раз переменная изменяется в соответствии с указанным значением <Шаг>. Если никакой шаг не задать, то переменная увеличится на 1. После такого изменения, прежде чем выполнять команды второй раз, проверяется, не достигла ли переменная значения <Кон._значение>. Если достигла, то выполнение команд внутри цикла прекращается и управление передается команде, следующей за циклом. Например, вам надо вывести сообщение «Я хочу научиться писать программы!» 10 раз.
FOR ln_i = 1 ТО 10
MESSAGEBOX("Я хочу научиться писать программы!") ENDFOR
Команды EXIT и LOOP прерывают выполнение цикла, но действуют по-разному. EXIT прекращает дальнейшее выполнения цикла и передает управление команде, следующей за циклом. Команда LOOP пропускает выполнение команд, следующих за ней до ключевого слова ENDFOR, и продолжает полноценное выполнение цикла.
Цикл DO WHILE
Когда требуется выполнять группу команд до тех пор, пока выполняется установленное условие, применяют циклическую конструкцию DO WHILE. Собственно, с английского языка эта фраза и переводится «Делай, пока». А после ключевого слова WHILE (пока) и ставится условие, которое должно выполняться.
DO WHILE <Условие>
<Команды>
[EXIT]
[LOOP] ENDDO
Цикл SCAM
Мы уже говорили, что язык Visual FoxPro изначально ориентирован на работу с записями таблиц. По этой причине в языке Visual FoxPro предусмотрена специальная циклическая конструкция для перебора записей таблицы. Она называется SCAN.
Рассмотрим синтаксис циклической конструкции SCAN:
SCAN [NOOPTIMIZE] [<Диапазон>] [FOR <Условие1>] [WHILE < Условие2>]
<Команды>
[EXIT]
[LOOP] ENDSCAN
Работа с кодировками
Для перекодировки открытой таблицы (когда требуется записать текстовые поля в новой кодировке) можно использовать команду COPY ТО с указанием после ключевого слова AS новой кодовой страницы. Например:
USE Persons
COPY ТО DosPers AS 866
Определить кодовую страницу, в которой хранятся символьные поля текущей или заданной открытой таблицы, можно при помощи функции CPDBF( ).
CPDBF([<Номер_рабочей_области> I <Алиас_таблицы>])
Перекодировать переменную из одной кодировки в другую можно с помощью функции CPCONVERT ().
CPCONVERT(<Текущая_кодировка>, <Новая_кодировка>, <Переменная>)
Функция ASC () возвращает код ANSI указанного символа.
ASC(<Символ>)
Функция, возвращающая символ, соответствующий введенному коду, -CHRO.
CHR(<Код_символа>)
Работа с датами
Форматы записи дат, поддерживаемые Visual FoxPro 9:
>- AMERICAN - мм/дд/гг; >- ANSI - гг.мм.дд;
BRITISH / FRANCH - дд/мм/гг;
GERMAN - дд.мм.гг;
ITALIAN - дд-мм-гг; >- JAPAN - гг/мм/дд;
TAIWAN - гг/мм/дд; >- USA - мм-дд-гг;
>- MDY - мм/дд/гг;
DMY - дд/мм/гг;
YMD - гг/мм/дд;
> SHORT - определяется настройками формата короткой даты в Windows; >
· LONG - определяется настройками формата длинной даты в Windows.
Как же установить желаемый формат? Для этого в Visual FoxPro 9 предусмотрена команда
SET DATE ТО <Формат>
Например:
SET DATE ТО GERMAN
Функция DATE () возвращает значение текущей даты (системной даты, на которую ориентируется операционная система вашего компьютера). DATE () значение будет иметь тип даты.
Кроме текущей даты может потребоваться узнать и текущее время. Это можно сделать, используя функцию TIME(). Эта функция возвращает символьное значение.
Функция DAY (<Быражение>) возвращает число, выделенное из выражения. Выражение может быть типа Date или DateTime. В качестве выражения можно подставлять переменные или функции, например DATE () или DATETIME ().
Функция MONTH (<Выражение>) возвращает числовое значение месяца, выделенное из выражения. Выражение может быть типа Date или DateTime. В качестве выражения можно подставлять переменные или функции, например DATE () или DATETIME ( ).
Функция YEAR (<Выражение>) возвращает год, выделенный из выражения. Выражение может быть типа Date или DateTime. В качестве выражения можно подставлять переменные или функции, например DATE () или DATETIME ( ).
Функция HOUR (<Выражение>) возвращает час, выделенный из выражения. Выражение должно быть типа DateTime. В качестве выражения можно подставлять переменные или функции, например TIME (). Возвращаемое значение может быть от 1 до 24.
Функция MINUTE (<Выражение>) возвращает минуты, выделенные из выражения. Выражение должно быть типа DateTime. В качестве выражения можно подставлять переменные или функции, например Т1МЕ().
Функция SEC (<Выражение>) возвращает секунды, выделенные из выражения. Выражение должно быть типа DateTime. В качестве выражения можно подставлять переменные или функции, например Т1МЕ().
DTOC (<Выражение>) - преобразует выражение в формате Date или DateTime в символьное выражение.
CTOD(<Выражение>) - преобразует символьное выражение в выражение в формате Date.
СТОТ (<Выражение>) - преобразует символьное выражение в выражение в формате DateTime.
TTOD (<Выражение>) - преобразует выражение в формате DateTime в выражение в формате Date.
DTOT (<Выражение>) - преобразует выражение в формате Date в выражение в формате DateTime.
Работа с файлами
? - вывод
SET CONSOLE OFF && Отключаем вывод на экран
SET PRINTER ON && Включаем вывод на принтер/в файл
SET PRINTER ТО <Имя_файла> && Направляет вывод в конкретный файл
Перед записью или чтением файла его надо открыть. Для этого используется функция:
FОРЕN(<Имя_файла> [, <Атрибут>] )
>- <Имя_файла> - имя открываемого файла. Можно указывать файл с полным путем к нему;
>- <Атрибут> - позволяет указать, какие действия над содержимым файлов вы предполагаете проделывать. Варианты:
О - только чтение (по умолчанию);
1 - только запись;
2 - чтение и запись.
FPUTS(<Указатель>, <Выражение>[, <Количество_символов>]) -записывает в файл, на который ссылается указатель, символьное выражение. Если указать третий параметр, то запишется не все выражение, а только указанное количество символов.
FWRITE{<Указатель>, <Выражение> [, <Количество_символов>]) - записывает строку в указанный файл аналогично команде FPUTS (). Разница между этими функциями заключается в том, что FPUTS () автоматически помещает в конец записываемой строки символ перевода строки и символ конца строки, а FWRITE() этого не делает
FGETS{<Указатель> [, <Количество_символов>]) - читает из файла, на который ссылается указатель, указанное количество символов (по умолчанию 254). Максимальное возможное количество символов - 8192. Если встретится символ перевода строки или символ конца строки, то вернутся символы с начала строки и до этого места. Функция FGETS () возвращает строковое значение
FREAD(<Укaзaтeль>, <Количество_символов>) - читает из файла, на который ссылается указатель, указанное количество символов. В отличие от функции FGETS (), указание количества символов является обязательным. Максимально возможное количество символов - 65535. Функция FREAD () возвращает строковое значение.
Прежде чем прочитать данные, часто требуется переместить курсор в файле на нужное место. Это действие можно осуществить с помощью команды FSEEK.
FSEEK(<Указатель>, <На_сколко_переместить>[, <Относительно_чего>])
>
· <На_сколко_переместить> - указывается число в байтах, на которое требуется переместить курсор. Если не указывать третий параметр, курсор будет перемещен относительно начала файла. Допускаются и положительные значения, и отрицательные. При положительных значениях курсор будет перемещаться в сторону конца файла, а в случае отрицательных значений - в сторону начала файла;
>
· <Относительно_чего> - позволяет задать, относительно какого места в файле совершать перемещение. Возможные варианты: 0 - начало файла, 1 - тгекущее положение, 2 - конец файла.

ГЛАВА 2 Т Начальные сведения о базах данных

Связывание таблиц






Заголовок 1 Заголовок 2 Заголовок 315

Приложенные файлы

  • doc 7066435
    Размер файла: 265 kB Загрузок: 0

Добавить комментарий