Функции анализа типа и наличия данных TYPE(ВырC) –имя переменной должно быть заключено в апострофы(иначе возвращаемое значение - U)
Character C
Numeric (also float, double, and integer) N
Currency Y
Date D
DateTime T
Logical L
Memo M
Object O
General G
Undefined type of expression U
Empty(Выр)
Возвращает значение .T. если переданный аргумент:
Character Пустая строка, строка пробелов, табуляций, CR, LF, или любая комбинация из них.
Numeric 0
Currency 0
Float 0
Integer 0
Double 0
Date Empty (ò.å. CTOD(''))
DateTime Empty (ò.å. CTOT(''))
Logical False (.F.)
Memo Empty (no contents)
Функции подстановок
Оператор - &
EVALUATE(cExpression)
вычисляет выражение и возвращает результат.
Функции и команды для работы с массивами
ACOPY (SourceArrayName, DestinationArrayName
[, nFirstSourceElement [, nNumberElements [, nFirstDestElement]])]
Копирует элементы из одного массива в другой.
SourceArrayName – исходный массив
DestinationArrayName – результирующий массив.
Массивы могут быть одно - или двумерные. Если результирующий массив не существует, VFP автоматически создает его.
NFirstSourceElement - первый элемент в исходном массиве, который будет скопирован;
NNumberElements - число элементов для копирования. Если nNumberElements -1, все элементы исходного массива, начиная с элемента nFirstSourceElement будут скопированы.
NFirstDestElement Определяет первый элемент в результирующем массиве.
ADEL (ArrayName, nElementNumber [,] 2)
Удаляет элемент из одномерного массива, или строки или столбцы из двумерного массива.
ArrayName Определяет массив из которого удаляются элемент, строка, или столбец.
nElementNumber Определяет номер элемента, строки, или столбца для удаления.
ADIR (ArrayName [, cFileSkeleton [, cAttribute]])
Заносит информацию о файлах в массив и возвращает число файлов.
ArrayName – имя массива.
Следующая таблица описывает содержание и тип данных каждого столбца в массиве:
Столбец
| Информация
| Тип данных
|
| Имена файла
| Строка символов
|
| Размер файла
| Числовой
|
| Дата последней модификации
| Дата
|
| Время последней модификации
| Строка символов
|
| Атрибуты файла
| Строка символов
| CFileSkeleton – шаблон имени файла. Разрешается использовать символы обощения * и ?.
CAttribute может содержать любую комбинацию символов D, H, и S.
AELEMENT( )
AFIELDS(ArrayName [, nWorkArea | cTableAlias]) Размещает информацию о структуре таблицы в массиве и возвращает число полей.
AINS(ArrayName, nElementNumber [, 2]) Добавляет элемент в одномерный массив, или строку или столбец в двумерный массив.
ALEN (ArrayName [, nArrayAttribute])
Возвращает число элементов, строк, или столбцов в массиве.
ArrayName – имя массива.
NArrayAttribute Определяет что возвращает ALEN () число элементов, строк или столбцов в массиве.
0 Возвращает число элементов в массиве.
1 Возвращает число строк в массиве.
2 Возвращает число столбцов в массиве.
ASCAN(ArrayName, eExpression [, nStartElement [, nElementsSearched]])
Просматривает массив в поисках элемента содержащего значение заданное выражением eExpression. Если элемент найден возвращается его номер или 0 в противном случае.
ASORT(ArrayName [, nStartElement [, nNumberSorted [, nSortOrder]]])
Упорядочивает элементы в массиве в возрастающем или убывающем порядке.
ASUBSCRIPT( )
Команды для работы с массивами
DECLARE /DIMENSION
См. выше
COPY TO ARRAY
Копирует данные из таблицы в массив.
Синтаксис
COPY TO ARRAY ArrayName
[FIELDS FieldList]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[NOOPTIMIZE]
Аргументы
ArrayName Определяет массив, в который копируются данные.
FieldList указывает поля таблицы которые будут копироваться в массив. Если FieldList, не указан, копируются все поля.
APPEND FROM ARRAY
Добавляет одну запись в таблицу для каждой строки в массиве и заполняет каждую запись данными из соответствующей строки массива.
Синтаксис
APPEND FROM ARRAY ArrayName
[FOR lExpression]
[FIELDS FieldList]
Аргументы
ArrayName Определяет имя массива, который содержит данные для добавления в таблицу.
Если присутствует список FieldList, то только указанные поля переносятся из массива в таблицу.
Пара команд SCATTER - GATHER
SCATTER
Копирует данные из текущей записи таблицы в переменные или массив.
Синтаксис
SCATTER
[FIELDS FieldNameList
| FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [MEMO]
TO ArrayName | TO ArrayName BLANK | MEMVAR | MEMVAR BLANK
| NAME ObjectName
Аргументы
FIELDS FieldNameList Определяет поля, которые будут переданы в переменные или массив.
FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] можно избирательно переносить поля в переменные или массив включением предложения LIKE ИЛИ EXCEPT или обоих.
Шаблон имени поля поддерживает символы обобщения.
Предложение LIKE может быть объединено с предложением EXCEPT:
MEMVAR переносит данные в множество переменных вместо массива. SCATTER создает одну переменную для каждого поля в таблице и заполняет каждую переменную данными из соответствующего поля в текущей записи, присваивая переменной то же самое название, размер, и тип.
GATHER
Заменяет данные в текущей записи таблицы с данными из массива, множества переменных, или объекта.
Синтаксис
GATHER FROM ArrayName | MEMVAR | NAME ObjectName
[FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton]
[MEMO]
Аргументы
FROM ArrayName Определяет массив, данные из которого заменяют данные в текущей записи таблицы. Значение первого элемента массива заменяет первое поле в текущей записи; значение второго элемента массива заменяет второе поле, и так далее.
Если массив имеет меньшее количество элементов чем таблица полей, дополнительные поля игнорируются. Если массив имеет большее количество элементов чем таблица полей, дополнительные элементы массива игнорируются.
Контрольные вопросы.
1. Перечислите операторы управления ходом выполнения программы.
2. Какие команды используются для удаления данных?
3. Оператор Replace – его назначение и синтаксис.
4. Сформулируйте классификацию функций Visual Foxpro.
Лекция 8
Элементы объектно-ориентированного программирования в VFP
Хотя Visual FoxPro поддерживает стандартное процедурное программирование Xbase, новые расширения языка дают пользователям мощность и гибкость объектно-ориентированного программирования, что предопределяет изменение всей логики и методики разработки прикладной программы.
Классы и объекты — два фундаментальных понятия объектно-ориентированного программирования. Класс содержит информацию о том, как объект должен выглядеть и вести себя. Другими словами, класс — это прообраз объекта. Visual FoxPro дает возможность пользователям создавать объекты как с помощью визуальных средств, так и программно на основании базовых классов, список которых приведен в табл. 1. Более подробная информация по классам Visual FoxPro приведена ниже.
Таблица 1. Базовые классы Visual FoxPro
CheckBox
| EditBox
| ListBox Shape
| Column
| Form
| OLEBoundControl Spinner
| CommandButton
| FormSet
| OLEContainerControl TextBox
| CommandGroup
| Grid
| OptionButton Timer
| CombcBox
| Header
| OptionGroup ToolBar
| Container
| Image
| Page
| Control
| Label
| PageFrame
| Custom
| Line
| Separator
| Для описания объекта используется набор свойств. Эти свойства объект получает из соответствующего класса, на основании которого он создан. Если нам нужен объект, имеющий свойства, отличные от свойств его класса, мы должны создать подкласс с измененными свойствами и уже его использовать для создания объекта.
Для описаний действий, выполняемых объектом, используются методы, то есть процедуры и функции, объявленные внутри класса и непосредственно с ним связанные. Методы легко координируются с событиями, происходящими при работе программы. Главное преимущество для разработчика здесь заключается в том, что привязанные к событию методы выполняются автоматически, и у нас даже есть возможность принудительно вызвать какое-то событие. Список в таблице представляет основные события Visual FoxPro, которые могут использовать большинство объектов управления пользовательского интерфейса. Для каждого класса этот список может меняться как в сторону расширения, так и сужения.
Таблица 2. Основные события Visual FoxPro
Событие
| Описание
| Load
| Форма или набор форм загружаются в память
| Unload
| Форма или набор форм удаляются из памяти
| Init
| Объект создается
| Destroy
| Объект удаляется из памяти
| Click
| Пользователь щелкает на объекте основной кнопкой мыши
| DblClick
| Пользователь дважды щелкает на объекте основной кнопкой мыши
| RightClick
| Пользователь щелкает на объекте дополнительной кнопкой мыши
| GotFocus
| Объект выделяется либо действиями пользователя (с помощью клавиатуры или мыши), либо программно (используя метод SetFocus)
| LostFocus
| Объект перестает быть выделенным либо действиями пользователя (выделяется другой объект), либо программно (используя метод SetFocus)
| KeyPress
| Пользователь нажимает или отпускает клавишу
| MouseDown
| Пользователь нажимает кнопку мыши, когда указатель мыши находится на объекте
| MouseMove
| Пользователь перемещает мышь над объектом
| MouseUp
| Пользователь отпускает кнопку мыши, когда указатель мыши находится на объекте
| InteractiveChange
| Значение объекта изменяется интерактивно
| ProgrammaticChange
| Значение объекта изменяется программно
|
Для программиста здесь кроется простая возможность организации полного контроля программы за работой пользователя с приложением не только с помощью клавиатуры, но и мыши.
Рассмотрим некоторые из возможностей объектной модели Visual FoxPro.
Наследование
Наследование — одна из наиболее мощных возможностей объектно-ориентированного программирования. Заново созданный объект может наследовать характеристики (то есть свойства и методы) от предшественника — другого объекта. Хотя объекты могут наследовать характеристики от родительских классов, они также могут и не принимать во внимание наследование. Это позволяет разработчикам устранить потребность в двойном коде, когда необходимы подобные функциональные возможности, и настроить объекты для использования в конкретных условиях. Visual FoxPro полностью поддерживает наследование и, в случае надобности, его отмену либо программно, либо с помощью интерфейса.
Создание подклассов
Использование подклассов значительно расширяет возможности как наследования, так и классов. Это означает, что не только заново созданный объект способен наследовать характеристики от родительского класса, но также и заново созданный класс может быть наследником родительского. В дополнение к выгодам наследования, способность создания подклассов дает разработчикам возможность создавать библиотеки классов для многократного использования с очень маленьким новым кодом или вообще без него. Кроме того, если новые функциональные возможности нужны во всех полученных дочерних классах, разработчик просто реализует эти возможности только в родительском классе, а во всех полученных дочерних классах функциональные возможности будут наследоваться автоматически.
Инкапсуляция
Объектно-ориентированное программирование также позволяет пользователям помещать атрибуты (свойства) и правила поведения (методы) в объекты. В Visual FoxPro программисты могут разместить информацию об объекте так, чтобы доступ к ней был невозможен. Это позволяет создавать “черные ящики”, которые скрывают информацию. Даже если внутренняя реализация объекта и управление им может быть полностью скрыта, объект “знает” все, что ему требуется “знать”, чтобы вести себя в соответствии с задуманным алгоритмом.
Полиморфизм
Visual FoxPro дает программистам возможность пользоваться преимуществами полиморфизма. Полиморфизм полезен, когда специфическая функция должна вести себя по-разному при различных обстоятельствах. Например, произвольный метод Append может быть полиморфен в зависимости от типа объекта (скажем, различные кнопки в пользовательской форме для добавления данных в различные таблицы), который вызвал метод Append. Это динамическое связывание функциональных возможностей позволяет создавать структурные классовые иерархии, где базисные скелеты объектов определены в базовом классе, а специализированный код — в полученных подклассах.
Простейший пример создания управляющей кнопки для завершения работы с формой средствами объектно-ориентированного программирования приведен на рис.
При работе в Visual FoxPro следует обратить самое серьезное внимание на то, что классы и объекты хотя и являются очень близкими понятиями, но это не одно и то же.
Класс содержит информацию о том, как объект будет выглядеть и как он будет себя вести. Другими словами, класс — это прототип или шаблон объекта. Когда вы создадите класс, опишете его свойства и необходимую реакцию на возможные события, с точки зрения пользователя в программе ничего не изменится. Чтобы что-то появилось (кнопка, поле и т. д.), необходимо на основании этого класса создать объект. Естественно, что чем точнее описания свойств класса соответствуют необходимой функциональности объекта, тем меньше работы придется выполнить, чтобы пройти путь от шаблона до реального объекта.
Стандартные возможности средств управления заложены в свойствах базовых классов Visual FoxPro. Описание базовых классов включено в саму СУБД и не может быть модернизировано. Это готовый инструмент для работы или исходный образец для создания других классов и подклассов.
Кроме перечисленных, новые для FoxPro средства управления и объекты могут быть созданы визуально или программно на основе соответствующих базовых классов. В табл. 3 перечислены доступные элементы управления и соответствующие им типы данных.
Таблица 3. Типы данных элементов управления
Элемент управления
| Допустимые типы данных
| CheckBox
| Логический, числовой
| ComboBox
| Символьный, числовой
| CommandButton
| Числовой
| Command Group
| Символьный, числовой
| EditBox
| Символьный
| Grid
| Символьный, числовой
| ListBox
| Символьный, числовой
| OptionButton
| Числовой
| OptionGroup
| Символьный, числовой
| Spinner
| Числовой
| TextBox
| Любой тип данных
|
Контрольные вопросы.
1. Перечислите возможности объектно-ориентированного программирования Visual Foxpro.
2. Какие базовые классы существуют в Visual Foxpro.
3. Перечислите основные события Visual Foxpro.
4. С какими типами данных могут работать элементы управления.
Заметим, что литературы на русском языке, посвященной тематике СУБД, очень много. Невозможно порекомендовать одну или несколько книг, содержание которых покрывало бы материал данного курса. К числу лучших относятся книги К. Дейта "Введение в системы баз данных" (имеет много переизданий) и книга Дж. Ульмана "Основы систем баз данных"
Список литературы
1) К.Дж. Дейт Введение в системы баз данных, 8-е издание.: Пер. с англ. — Москва: Издательский дом "Вильяме", 2005.
2)М. Ричардс и др. “ORACLE 7.3 Энциклопедия пользователя”.
Киев, изд. Диасофт, 1997г
3)Омельченко Л. Н., Шевякова Д. А. Самоучитель Visual FoxPro 9.0.
СПб: БХВ-Петербург, 2005г.
4)Дж. Грофф, П. Вайнберг. SQL: Полное руководство; Пер. с англ., Киев: Издательская группа BHV, 2001г.
Оглавление
Лекция 1. 2
Лекция 2. 14
Лекция 3. 37
Лекция 4. 52
Лекция 5. 63
Лекция № 6. 73
Лекция 7. 83
Лекция 8. 104
|