
- •Глава1 Постановка задачи и разработка бизнес-правил
- •1.1.Некоторые определения
- •Глава2 Основы теории проектирования баз данных
- •Глава3 Обзор возможностей и особенностей различных СУБД
- •3.5.MS SQL Server
- •Глава4 Основы языка программирования
- •4.3. "Горячая десятка"
- •Глава5 Объектно-ориентированное программирование
- •5.1.Объектная модель и ее свойства
- •Объекты для работы с данными
- •Объекты для управления работой приложения
- •Объекты для оформления интерфейса пользователя
- •Объекты-контейнеры
- •Невизуальные объекты
- •Объекты OLE
- •Глава6 Создание базы данных
- •6.1.Visual FoxPro
- •Создание и модернизация структуры базы данных
- •Использование словаря данных
- •Создание и модернизация структуры таблиц
- •Глава7 Средства работы с данными
- •Запросы выборки
- •Запросы добавления
- •Запросы обновления
- •Запросы удаления
- •Запрос добавления
- •Запрос - Создание таблицы
- •Запрос удаления
- •Запрос обновления
- •Перекрестный запрос
- •Microsoft Access
- •Глава8 Использование технологии клиент-сервер
- •8.1. Работа с внешними данными с помощью технологии ODBC
- •Команды Transact-SQL
- •Создание представлений
- •Создание триггеров
- •Синхронный и асинхронный процессы
- •Создание внешних представлений
- •9.1.Инструментарий разработчика
- •Создание формы "Прием заказов" на Access
- •Разработка меню в Visual FoxPro
- •Разработка меню в Access
- •Глава10 Использование готовых компонентов в приложении
- •10.1.Основные преимущества модульного проектирования прикладных программ
- •Управление объектами Excel
- •Управление объектами Word for Windows
- •Построение графиков с помощью MS Graph 5.0
- •Построение отчета в Word for Windows
- •Запись информации в Schedule+
- •10.4.Применяем ActiveX
- •Иерархический список
- •Календарь
- •Глава11 Подготовка отчетных данных
- •11.1.Создание отчетов в Visual FoxPro
- •Управление режимом печати
- •Глава12 Подготовка и отладка пользовательского приложения
- •12.1.Общие принципы отладки приложения
- •Отладка программы в Access
- •Обработка ошибок процессора баз данных в Access
- •Отладка программы в Visual Basic
- •Визуальные средства проектирования
- •Поставка программного пакета
- •Требования к установке
- •Project Manager
- •Работа с кодом программы
- •Создание базы данных
- •Работа с данными
- •Расширение возможностей технологии клиент-сервер
- •Построение пользовательского интерфейса
- •Расширение функций OLE
- •Отладка приложения

converted to PDF by HupBaH9I
Перед выбором соответствующего средства разработки стоит хорошо подумать о том, на каких
компьютерах и под управлением какой операционной системы будет работать создаваемое вами пользовательское приложение. Требования к программному и аппаратному обеспечению сведены в табл. 3.10.
Таблица 3.10. Требования к программному и аппаратному обеспечению
Показатели |
Visual |
Access |
Visual |
SQL Server |
|
FoxPro |
7.0 |
Basic |
6.5 |
3.04.0
Минимальные |
486DX |
486DX |
386DX |
486DX-33 |
требования к |
|
|
|
(Intel |
процессору |
|
|
|
Pentium), |
компьютера |
|
|
|
PowerPC, |
|
|
|
|
MIPS, R4xxx |
|
|
|
|
или Alpha |
|
|
|
|
AXP |
Операционная |
+ |
+ |
+ |
+ |
система (наиболее |
|
|
|
|
ранняя |
|
|
|
|
поддерживаемая |
|
|
|
|
версия): |
|
|
|
|
Windows 3.1 |
+ |
++ |
++ |
|
Windows 95 |
++ |
++ |
++ |
|
Windows NT 3.5 |
+ |
++ |
++ |
++ |
Необходимый |
8 (12) |
12 (16 |
6 (16 для 16 (32) |
|
объем оперативной |
|
для |
Windows |
|
памяти, Мб |
|
Windows |
NT) |
|
|
|
NT) |
|
|
Занимаемый объем |
15-80 |
10-40 |
8-36 |
80 |
на жестком диске, |
|
|
|
|
Мб |
|
|
|
|
Дополнительные |
Мышь, |
Мышь, |
Мышь, |
Привод CD- |
устройства |
привод |
привод |
привод |
ROM |
|
CD-ROM CD-ROM |
CD-ROM |
|
Не меньшее значение, чем параметры, имеет качество техники, на которой планируется использовать программу. Даже средней сложности система автоматизации обработки данных заставляет компьютер работать с максимальной интенсивностью, используя все возможности процессора и пересылая громадные объемы данных между процессором, жестким диском и оперативной памятью. Особо следует обратить внимание на качество и надежность работы сетевых плат, если ваше приложение работает в локальной сети. Очень часто именно низкого качества сетевые платы приводят к разрушению баз данных и индексных файлов, что влечет за собой весьма длительные простои и потери данных.
Глава 4
Основы языка программирования
4.1.Что такое язык программирования
4.2.Как написать программу
4.3."Горячая десятка"
4.4.Еще несколько навязчивых советов
Авторы, обладая гипертрофированным самомнением, полагают, что эту книгу будут читать люди с самой разной степенью компьютерной подготовки. Возможно даже, что она попадется тем, кто слышал о программировании, как о занятии достаточно странных, обычно бородатых людей, бормочащих о каких-то нулях и единицах. На самом деле этот страшный образ порожден довольно давно, и истории про нули и единицы не имеют непосредственного отношения к
converted to PDF by HupBaH9I
современным СУБД для персональных компьютеров, которые оснащены языковыми средствами, позволяющими достаточно легко написать простую программу.
В этой главе мы попробуем дать основные сведения о языке программирования Visual FoxPro читателям, которые от работы с диалоговыми средствами хотят перейти к написанию пользовательской программы. Для тех, кто уже пишет такие программы, мы систематизировали
справочный материал и дали несколько советов по наиболее эффективных приемам программирования в рассматриваемых средствах разработки.
4.1. Что такое язык программирования
В предыдущей главе мы познакомились с основными действиями, которые можно выполнить с помощью диалоговых средств в визуальной среде разработки. Очевидно, что, работая с СУБД, некоторые действия приходится выполнять многократно. Например, открывать одни и те же таблицы. Многие функции работы пользовательского приложения невозможно реализовать, используя только визуальные средства. Решить эти проблемы можно с помощью языка программирования.
Вэтом параграфе вы узнаете:
∙Из чего состоит язык программирования.
∙Где могут храниться нужные данные.
∙С помощью каких средств можно выполнять какие-либо действия с данными.
∙Как делятся в программе переменные и массивы по области действия.
При попытке описания языков программирования в рассматриваемых средствах разработки авторы столкнулись с достаточно большими трудностями. Не сомневаясь в своих интеллектуальных способностях, вину за это они целиком и полностью возложили на сами языки,
апособниками признали тех, кто их придумал - разработчиков из Microsoft. Действительно, так как СУБД Access использует язык программирования Visual Basic, то
остается рассказать о нем и языке программирования Visual FoxPro. Эти языки программирования имеют достаточно много общих черт, но одна из них - богатое историческое наследие - привела к тому, что современные объектно-ориентированные свойства в них сосуществуют с традиционными структурными составляющими. Причем число команд и функций, составляющих структурную основу языка, перевалило далеко за тысячу. Чтобы разобраться в этой лавине, начнем со структурной части рассматриваемых языков, а в следующей главе изучим их объектно- ориентированные возможности. При этом мы будем стараться максимально выделять общие
черты рассматриваемых языков программирования и заранее приносим свои извинения опытным разработчикам за игнорирование каких-то, может быть, и достаточно важных особенностей каждого языка. Например, в наследство от Xbase в Visual FoxPro до сих пор можно символьные значения указывать не только в кавычках, но и в квадратных скобках. В Visual Basic так делать нельзя. Мы думаем, что стоит придерживаться общих возможностей и указывать символьные значения в кавычках, не упоминая о квадратных скобках.
Язык программирования представляет собой набор команд, которые последовательно обрабатываются интерпретатором и преобразуются им в машинный код, в свою очередь обрабатываемый микропроцессором. С помощью команд мы выполняем какие-либо действия, аналогично выбору команды в меню. Типичная структура команды:
COPY TO FileName [FIELDS FieldList] [Scope][FOR lExpression]
Название команды является ключевым элементом для ее идентификации. В связи с тем, что
разработчики языка старались дать названиям команд максимальную смысловую нагрузку для их более легкого запоминания, в ряде случаев команды получились достаточно громоздкими. Что ж, если вы не хотите долго стучать по клавиатуре, откроем маленький секрет. Например, в Visual FoxPro названия команд в большинстве случаев можно сокращать до четырех символов. Если в каком-то случае так делать нельзя из-за опасности потерять уникальность идентификации, об этом обязательно будет написано в справочном файле Visual FoxPro при описании данной команды.
Опции служат для уточнения действия, выполняемого командой. В данном примере можно использовать опцию FIELDS для указания списка тех полей, которые будут копироваться в новый файл.
Часть команды, обозначенная словом Scope, позволяет задать диапазон записей, на которые будет воздействовать команда. Если мы используем эту возможность, то в команде вместо слова Scope надо использовать один из перечисленных вариантов: ALL - все записи в таблице; NEXT nRecords - указанное число записей после текущей (включая текущую); RECORD nRecordNumber - запись с указанным номером; REST - записи от текущей до конца таблицы.
converted to PDF by HupBaH9I
Условие выполнения команды FOR позволяет предопределить выполнение команды в зависимости, например, от содержания данных в полях.
Для обработки информации мы можем использовать данные, хранящиеся в таблицах или в памяти компьютера. В последнем случае для данных в памяти, которые называются переменными, мы должны определить идентификатор, ссылаясь на который можно однозначно установить, какие данные мы имеем в виду. Для хранения в памяти однородных данных используются массивы.
Таблица 4.1. Способы представления данных
Способ |
Описание |
|
представления |
||
|
||
Константы |
Единичные элементы данных, |
|
|
записываемые в программном коде и |
|
|
неизменяемые в процессе работы |
|
Переменные |
Единичные элементы данных, хранящиеся |
|
|
в оперативной памяти (ОЗУ) |
|
Массивы |
Множество элементов данных, хранящихся |
|
|
в ОЗУ |
|
Записи в |
Множество строк, содержащих заранее |
|
таблицах |
определенные поля, каждое с |
|
|
предопределенным фрагментом данных, |
|
|
хранящихся в файле таблицы |
Константы часто используются для включения в выражения каких-то предопределенных данных, которые не изменяются во время работы программы. В качестве констант мы можем использовать данные различных типов:
∙Символьные данные записываются в кавычках. Например, мы можем запомнить слово имя, используя его указание в кавычках: "Имя".
∙Данные типа "дата" или "дата и время" в Visual FoxPro записываются в фигурных скобках: {10/10/95}. В Visual Basic функции этих двух типов данных выполняет один тип данных "дата и время". Данные этого типа выделяются значками "решетка": #10/10/95#.
∙Числовые данные используются без каких-либо разделителей.
∙Логические данные в качестве константы могут принимать одно из двух значений. В Visual FoxPro при записи они ограничиваются точками: ".T." - соответствует истине (True), ".F." - ложному значению (False). В Visual Basic присваивание любого отличного от нуля значения установит константу в значение True, и только 0 - в значение False.
Для работы с данными используются операторы, перечень которых приведен в табл. 4.2. Для того чтобы вспомнить обозначение типа данных, вернитесь к табл. 3.2.
Помните, что с одним оператором необходимо использовать данные одного типа! Многие из приведенных в табл. 4.2 операторов знакомы нашим читателям со школьной
скамьи. Для некоторых же из этих операторов требуется более пространное пояснение.
∙Оператор "$" используется для поиска символа или набора символов в каком-либо символьном выражении или поле примечаний. Искомый символ указывается слева от этого оператора.
∙Оператор "==" отнюдь не то же самое, что оператор "=". Если последний можно идентифицировать словом "равно", то для первого больше подходит название "идентично". Например, если мы будем искать данные по условию cName = "ИВАН", то Visual FoxPro будет считать верным результат, если найдет значения "ИВАНОВ", "ИВАНЕНКО", так же как и указанное слово "ИВАН". Если же в выражении для поиска указать оператор "==", то к верному результату приведет только найденное слово "ИВАН". Это различие очень удобно использовать для поиска данных по неполному соответствию, когда точно неизвестно искомое значение.
Поля, переменные, константы, функции и операторы представляют собой элементы для составления выражений. При написании выражений необходимо учитывать приоритет выполнения операций:
1. Возведение в степень
converted to PDF by HupBaH9I
2.Умножение и деление
3.Сложение и вычитание
4.Сложение символьных выражений
5.Операции сравнения
6.NOT
7.AND
8.OR
При необходимости изменения порядка действий следует использовать скобки.
Переменные в программе имеют строго определенные области действия и по этому признаку делятся на три типа.
Локальные переменные (private) существуют только во время работы процедуры или программного файла (модуля), в котором они были определены. По умолчанию всем переменным, определяемым в программе, присваивается статус локальных. Явно определить статус переменной в Visual FoxPro можно командой
PRIVATE MemVarList | PRIVATE ALL [LIKE Sceleton | EXCEPT Sceleton]
В Visual Basic для этого используется команда
Dim VarName [([Subscripts])] [As [New] Type][, VarName [([Subscripts])] [As [New] Type]]...
или
Static VarName [([Subscripts])] [As [New] Type][, VarName [([Subscripts])] [As [New] Type]]...
В последнем варианте объявленные переменные сохранят свои значения до конца работы программы.
Важная особенность локальных переменных заключается в том, что если они были определены с теми же именами, которые были объявлены ранее (в программе более высокого уровня), то после завершения работы программы "старые" значения будут восстановлены. Таким образом, локальные переменные, созданные в какой-либо процедуре, будут действовать и во всех вызываемых из нее процедурах и функциях, но перестанут быть доступными, как только мы возвратимся из создавшей их процедуры на более высокий уровень. Опции команды в Visual FoxPro позволяют не приводить полный список всех переменных, а использовать для их идентификации шаблон, который с помощью символов "*" и "?" укажет распространение действия команды на переменные, имена которых соответствуют шаблону (LIKE), или на переменные, имена которых не соответствуют приведенному шаблону (EXCEPT). Напомним, что шаблон обычно включает общую часть имени и знаки замещения "?" и "*", первый замещает один алфавитно-цифровой символ, а второй - любое их число. Это позволяет знаком "*" задавать все имена, а несколькими знаками "?" имена соответствующей длины.
В Visual Basic мы должны перечислить все объявляемые переменные.
При большом количестве однотипных переменных более эффективно использовать вместо них массивы, то есть одно- или двумерные таблицы переменных под общим именем. Обращение к
элементам массива производится с помощью указания после имени массива в круглых или квадратных скобках нужных номеров строк и (или) столбцов. Перед использованием массивов в Visual FoxPro их надо объявить командой
DIMENSION ArrayName1(nRows1 [, nColumns1]) [, ArrayName2(nRows2 [, nColumns2])] ...
Каждый массив может содержать не более 65000 элементов, то есть предельная размерность двумерного массива может составить 254x255, 1000x65 и т. п. В последнем случае nRows1 =1000 и nColumns1=65, если значение nColumns1 не опpеделено, то массив одномеpный. После
объявления массива по умолчанию всем его элементам присваивается логический тип данных со значением .F..
В Visual Basic задать массив можно в команде Dim, указав его размерность в параметре
Subscripts.
Для задания нужного типа данных, а это относится и к переменным, в Visual FoxPro
необходимо использовать команду
STORE Expression TO MemVarList | ArrayList
или использовать присвоение
converted to PDF by HupBaH9I
MemVar | Array = Expression
= Пpи указании идентификатоpа массива без аpгументов указанное значение Expression пpисваивается всем элементам массива. Например:
DIMENSION aMembers(4,2)
STORE 5 TO aMembers
В Visual Basic такая же процедура будет выглядеть следующим образом (нам придется использовать цикл, о чем мы будем говорить в дальнейшем):
Dim aMembers(4,2), nX As Integer For nX = 0 To 4
aMembers(nX) = 5 Next nX
Для определения переменной типа даты в Visual FoxPro можно использовать следующую команду, которая одновременно присвоит ей нулевое значение:
STORE CTOD('. .') TO dDate
или
STORE {} TO dDate
Для присвоения конкретного значения лучше воспользоваться вариантом с фигурными скобками, например:
SET DATE GERMAN
STORE {01.01.91} TO dDate
Для форматирования значения даты в Visual FoxPro удобно использовать установочную
команду SET DATE.
В Visual Basic присвоение значения даты можно выполнить следующим образом:
Dim dToday As Date dToday = #1/11/96#
А для форматирования даты надо использовать функцию
Format(Expression [, Format [, FirstDayOfWeek [, FirstWeekOfYear]]])
Например:
dDate = Format(dToday, "dd.mm.yy")
Возвращает значение переменной dToday в виде 01.11.96.
Глобальные переменные (public) будут сохранять свои значения во всех программных файлах и вызываемых ими процедурах. Для объявления переменных и элементов массива глобальными в Visual FoxPro используется команда
PUBLIC MemVarList | [ARRAY] ArrayName1(nRows1 [, nColumns1]) [, ArrayName2(nRows2 [,
nColumns2])]...
В Visual Basic такая команда будет выглядеть аналогично команде Dim
Public VarName [([Subscripts])] [As [New] Type][, VarName [([Subscripts])] [As [New] Type]] ...
converted to PDF by HupBaH9I
Лишь после объявления глобальным переменным можно присвоить какие-либо значения. Внутренние переменные (local) действуют только в пределах процедуры или функции, в
которых были созданы. К ним нельзя обратиться из программы или функции ни более высокого, ни более низкого уровня. Объявить переменные внутренними в Visual FoxPro можно командой
LOCAL MemVarList | [ARRAY] ArrayName1(nRows1 [, nColumns1]) [, ArrayName2(nRows2 [,
nColumns2])] ...
В Visual Basic для этой цели можно использовать команду Dim.
Вы должны сначала объявить переменные или массивы внутренними и только потом присвоить им необходимые значения. После выхода из процедуры или функции, в которой были созданы внутренние переменные, они будут удалены из памяти.
Региональные переменные или массивы (regional) могут использоваться только в Visual FoxPro.
Они подобны локальным и объявляются с помощью команды
REGIONAL MemVarList
Перед командой помещается директива
#REGION nRegionNumber
с указанием номера региона nRegionNumber (от 0 до 31), в котором действуют переменные, перечисленные в списке MemVarList. В регионе с другим номером та же переменная может иметь другое значение.
4.2. Как написать программу
В этом параграфе мы научимся составлять очень простые программы, которые будут работать
в
∙СУБД Visual FoxPro;
∙Visual Basic;
∙СУБД Access.
Писать даже самую простую программу непросто. Из рассматриваемых средств разработки легче всего сделать это в Visual FoxPro. С него и начнем.
Чаще всего самым трудным бывает первый шаг. Не будем искать трудностей и просто избежим этого первого шага. Поручим это самой СУБД, пусть сама напрягает свои "электронные мозги".
Обратите внимание, что при выполнении каких-либо действий в интерфейсе Visual FoxPro в окне Command автоматически записывается соответствующая команда. Если несколько последовательных команд перенести в программный файл, то получится программа. Если ее запустить, несколько действий, которые мы до этого делали с помощью меню и соответствующих диалоговых окон, будут выполнены сразу без нашего непосредственного вмешательства.
Если мы захотим из таблицы SPPOS.DBF, содержащей список поставщиков, прочитать данные, относящиеся к фирме с названием "Компьютерное образование", мы должны из меню File выбрать команду Open, установить тип файла и из списка выбрать SPPOS.DBF. Из меню Database выбрать команду Browse и найти запись, относящуюся к указанной фирме.
Программно тот же результат можно получить, набрав в окне Command следующие команды:
USE Sppos
BROWSE
LOCATE FOR Company = "Компьютерное образование"
Если приведенная выше последовательность команд будет записана в файле, мы получим простейшую программу. Это может быть сделано несколькими способами. Например, можно из меню File выбрать команду New, установить тип файла Program. Откроется окно Редактора FoxPro. В нем можно набрать указанные строчки или скопировать их из окна Command. При закрытии окна редактирования будет необходимо указать имя файла, которое в дальнейшем и будет являться именем программы.
Для изменения или дополнения программы необходимо ее открыть с помощью команды Open в меню File.

converted to PDF by HupBaH9I
Если вы взялись за разработку программ, то вам часто придется проделывать эту операцию и работать с редактором Visual FoxPro. Поэтому уделим ему немного внимания. Начнем с конфигурации, ведь от того, насколько удобно установлены те или иные параметры работы редактора, зависит производительность вашего труда.
Откройте какой-либо файл с программой или создайте новый файл. Выберите команду Options в меню Tools. В появившемся диалоговом окне найдите вкладку Edit. Доступные установки для редактора видны из рис. 4.1.
Рис. 4.1.
При первом запуске программы и в последующем, при ее изменении, FoxPro компилирует исходный код программы в так называемый препроцессорный код, или "p-код", который выполняется во много раз быстрее интерпретируемой программы. Файлы с "p-кодом" получают другое расширение. Обратите внимание на очень удобную возможность компиляции программы перед ее сохранением. Включение этой опции позволяет сразу определить синтаксические ошибки, выявляемые на этом этапе, - недостаток или отсутствие запятых, неправильное написание ключевых слов и т. д.
В связи с тем, что редактор Visual FoxPro используется не только для работы с файлами программ, но и вообще для редактирования текстовых данных, например в полях примечаний, то перечень доступных опций в диалоговом окне Options зависит от типа окна, которое было активным перед его вызовом. Например, если активным окном было окно с данными поля примечаний, то внешний вид окна Options будет таким, как это видно на рис. 4.2. Естественно, при этом некоторые опции, например компиляции, будут недоступны.

converted to PDF by HupBaH9I
Рис. 4.2.
При работе с редактором мы можем использовать команды, которые располагаются в меню Edit и Format. Еще удобнее использовать клавиатурные комбинации, перечень которых приведен в табл. 4.3. Не забудьте также о кнопках на стандартной панели инструментов. При наборе программы в редакторе очень удобно использовать макросы.
Макросом называется предварительно записанная последовательность команд, которая выполняется при его запуске. Для запуска макроса чаще всего используются клавиатурные комбинации.
В Visual FoxPro макрос можно записать с помощью соответствующей команды в меню Tools. Появляющееся при этом диалоговое окно представлено на рис. 4.3.
Рис. 4.3.
В своей работе вы можете использовать несколько наборов макросов, сохраняя их в соответствующих файлах. Для сохранения и загрузки необходимых макросов надо использовать

converted to PDF by HupBaH9I
кнопки, расположенные внизу диалогового окна.
Для записи макроса нажмите кнопку New. Появится диалоговое окно для создания и редактирования макросов, представленное на рис. 4.4. Нажмите клавиатурную комбинацию, с помощью которой вы хотите в дальнейшем вызывать данный макрос.
Рис. 4.4.
Таблица 4.3. Комбинации клавиш, используемые при работе с редактором
Комбинация |
Пункт |
Выполняемое действие |
|
клавиш |
меню |
||
|
|||
Ctrl+A |
Select All |
Выделить весь текст в окне |
|
|
|
редактора |
|
Ctrl+C |
Copy |
Скопировать выделенный текст |
|
Ctrl+F |
Find |
Найти |
|
Ctrl+L |
Replace |
Заменить |
|
Ctrl+R |
Redo |
Вернуть отмененное действие |
|
Ctrl+V |
Paste |
Вставить фрагмент текста из |
|
|
|
буфера в место нахождения |
|
|
|
курсора |
|
Ctrl+W |
- |
Закрыть редактор и сохранить |
|
|
|
все сделанные изменения |
|
Ctrl+X |
Cut |
Вырезать выделенный текст |
|
Ctrl+Z |
Undo |
Отменить сделанное действие |
|
Ctrl+Home |
- |
Переместить курсор в начало |
|
|
|
текста |
|
Home |
- |
Переместить курсор в начало |
|
|
|
строки |
|
Ctrl+End |
- |
Переместить курсор в конец |
|
|
|
текста |
|
End |
- |
Переместить курсор в конец |
|
|
|
строки |
В качестве примера мы с вами создадим макрос для автоматического набора какой-нибудь сложной команды. Пусть это будет команда задания цикла FOR...NEXT. Такие структурные команды чаще всего вызывают ошибки, так как тело цикла может занимать десятки строк и, разбираясь в его перипетиях, программист забывает о необходимости закрытия цикла. Присвоим этому макросу клавиатурную комбинацию Ctrl+F. Тогда по умолчанию он получит имя ctrl_f. Не следует пытаться присвоить макросу клавиатурную комбинацию, которая уже используется в Visual FoxPro. Теперь в поле Macro Contents наберем такой текст:
FOR{ENTER}{ENTER}NEXT
В фигурных скобках мы указали название клавиш, нажатие которых нам надо имитировать в данный момент. В этом примере мы имитируем двухкратное нажатие клавиши Enter для перехода
на следующую строку и тем самым создаем внутри команды пустую строку для записи тела
converted to PDF by HupBaH9I
цикла. Как правильно записать в макросе названия других клавиш и их сочетаний можно узнать, изучив длинную таблицу в справке к команде ON KEY LABEL после вызова контексной помощи.
Теперь, работая в редакторе, мы всегда можем нажать клавиши Ctrl+F и в программе у нас автоматически появятся следующие три строчки:
FOR
NEXT
Программа в FoxPro - это текстовый файл, содержащий набор команд, написанных в соответствии с синтаксическими правилами языка. Программа может иметь подпрограммы (процедуры), в которые помещаются часто повторяющиеся фрагменты кода, размещаемые после основного текста программы или в отдельном файле. Подпрограмма начинается с ключевого
слова
PROCEDURE ProcedureName
ивыполняется, пока не будет выполнено одно из следующих условий:
∙Еще раз встретится слово PROCEDURE.
∙Будет обнаружена команда RETURN - возвращение в предыдущую программу.
∙Будет выдана команда CANCEL - прерывание работы программы.
∙Будет выдана команда QUIT - выход из СУБД.
∙Встретится новая команда DO для запуска другой программы.
∙Будет достигнут конец файла.
ВFoxPro аналогично подпрограмме трактуется понятие пользовательской функции, которая
начинается с ключевого слова
FUNCTION FunctionName
и в отличие от процедуры, может вернуть необходимые значения в вызывающую программу. Имеются четыре способа вызвать функцию:
1.Присвоить возвращаемое значение переменной. Например, следующая строка кода запоминает текущую системную дату в переменной dToday:
dToday = DATE()
2.Включить вызов функции в команду. Например, следующая команда устанавливает по умолчанию каталог, имя которого возвращает функция GETDIR():
SET DEFAULT TO GETDIR()
3.Напечатать возвращаемое значение в активное окно: ? TIME()
4.Вызвать функцию без запоминания где-либо возвращаемого значения: SYS(2002)
Для прерывания выполнения программы служит оператор
RETURN [Expression | TO MASTER | TO ProgramName]
который возвращает управление в вызывающую программу, и в ней выполняется следующая команда после вызывающей; если указана опция TO MASTER, то управление возвращается на самый верхний уровень вызывающей программы, а эта же программа с опцией TO ProgramName передает управление в указанную программу. При использовании в функции команда автоматически возвращает .T., если не указано другое выражение на месте Expression.
RETRY
действует подобно команде RETURN, но при возвращении управления в вызывающую программу повторяется выполнение последней команды.
Создайте новый программный файл и наберите в редакторе приведенный ниже текст. В этой программе объявляется массив, элементы которого принимают значения от 1 до 10. Каждое
присвоение значения сопровождается появлением на экране сообщения с указанием присвоенной величины. Посмотрите на сообщения, выводимые этой программой на экран.
* Пример простейшей программы
DIMENSION aSampleArray(10)

converted to PDF by HupBaH9I
FOR nItem = 1 TO 10 aSampleArray(nItem) = nItem = Append_proc()
NEXT
FUNCTION Append_proc
? "В массив добавлено новое значение " ?? nItem
Если эта программа показалась вам слишком примитивной, то без сомнения вы правы. По мере чтения книги и расширения лексического запаса языка (набора команд и функций), вы сможете сочинять куда более полезные вещи.
Теперь посмотрим на Visual Basic. Это средство разработки настолько сфокусировано на визуальных возможностях разработки программ, что написать вручную несколько строк кода,
запустить их на выполнение и тут же увидеть результат не так просто для начинающего программиста, как в Visual FoxPro. Однако попробуем это сделать.
Начнем с задания команды Options меню Tools. В появившемся диалоговом окне настройки конфигурации Visual Basic выберем вкладку Project (рис. 4.5). В раскрывающемся списке Startup Form вместо значения, установленного по умолчанию, - Form1, выберем Sub Main. Значение Form1 обеспечивает запуск в качестве главной программы визуальной формы с этим именем по умолчанию. Значение Sub Main позволяет в качестве запускаемой программы использовать процедуру.
Рис. 4.5.
Создадим в проекте программный модуль путем выполнения команды Module в меню Insert. Потом в этом же меню выполним команду Procedure. В появившемся диалоговом окне,

converted to PDF by HupBaH9I
показанном на рис. 4.6, напишем имя создаваемой процедуры - Main, для типа процедуры выберем Sub, а для диапазона действия - Public. После нажатия кнопки OK в окне программного модуля появится шаблон, готовый для написания программного кода.
Рис. 4.6.
Здесь следует заметить, что редактор в Visual Basic по своим функциальным возможностям и принципам работы с текстом программы похож на редактор Visual FoxPro. В Visual Basic нет макросов, зато редактор обеспечивает выделение цветом ключевых слов, строк с ошибками и т. д. Цвет в редакторе существенно помогает избежать случайных ошибок. При этом вы можете сами устанавливать цвет для различных ситуаций, как это видно из рис. 4.7, на котором показано диалоговое окно Options, открытое на вкладке Editor.

converted to PDF by HupBaH9I
Рис. 4.7.
Теперь мы можем попробовать создать простейшую программу по аналогии с той, которую мы написали в Visual FoxPro. В окне программного модуля в раскрывающемся списке Proc выберите пункт (declarations), как это показано на рис. 4.8.

converted to PDF by HupBaH9I
Рис. 4.8. Пример простейшей программы в Visual Basic
Наберите следующую строчку для объявления используемого массива и переменной как целых чисел:
Dim aSampleArray(10), nItem As Integer
Переключитесь в раскрывающемся списке Proc на пункт Main и наберите следующий текст:
Public Sub Main() For nItem = 1 To 10
aSampleArray(nItem) = nItem Append_proc
Next End Sub
Теперь создадим новую процедуру с помощью команды Procedure меню Insert и в ней запишем код для функции, которая будет отображать процесс заполнения массива:
Private Function Append_proc()
Debug.Print nItem
End Function
Запустим нашу программу на выполнение командой Start в меню Run. Можно воспользоваться
исоответствующей кнопкой на панели инструментов или просто нажать клавишу F5.
Вотличие от Visual FoxPro в Visual Basic нельзя направить вывод результатов выполнения программы в главное окно. Его просто нет. Сначала надо создать какое-то окно, обычно в виде
формы, а затем уже в него направлять вывод данных. Чтобы не усложнять нашу задачу, мы сознательно выбрали простейший вариант, используя для вывода окно отладки (Debug Window). Для этого перед командой Print необходимо указать через точку Debug. Для того чтобы увидеть результат, откройте окно отладки командой Debug Window в меню View.
Обратите внимание, что коды программ в Visual FoxPro и в Visual Basic очень похожи; код Visual Basic может легко читаться программистом, знающим только Visual FoxPro, и наоборот. В то же время существуют и определенные различия, которые с увеличением сложности программы разрастаются. Посмотрите на команды вызова функции и объявления переменных - в Visual Basic в отличие от Visual FoxPro мы должны явно объявить все используемые переменные и указать их тип.
Что касается СУБД Access, то, как мы уже говорили, многие воспринимают ее как типичное средство создания личных информационных систем, предусматривающее использование только имеющихся в Access диалоговых средств. Поэтому пользователи часто останавливаются на результатах, достигнутых с помощью визуальных средств разработки, и считают, что самостоятельное создание таблиц, не говоря уже о создании форм и отчетов, это нечто из ряда вон выходящее. На самом деле все не совсем так, и стоит относиться к Мастерам как к