МИНИСТЕРСТВО
ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО
ОБРАЗОВАНИЯ
РОССИЙСКОЙ
ФЕДЕРАЦИИ
ВОЛГОГРАДСКИЙ
ГОСУДАРСТВЕННЫЙ
ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ
Кафедра «САПР
и ПК»
Семестровая
работа
тема:
«Visual
FoxPro 5.0 как
OLE-cервер»
Выполнил:
студенты группы
АС-563
Маштак
О.Н.
Проверил:
Волгоград
1999г.
Содержание:
Visual
FoxPro
как
OLE-сервер 2
Создание
OLE-сервера
в
Visual FoxPro 7
OLE-сервер
в компьютерной
сети 11
Automation
Manager 14
Remote
Automation Connection Manager 15
Visual
FoxPro
как
OLE-сервер
Начиная с
пятой версии,
Visual FoxPro может
выполнять
функции
OLE-сервера. OLE-сервер
— это приложение,
которое может
предоставить
свои объекты
для управления
другой программе,
поддерживающей
OLE Automation.
Эта новая
возможность
существенно
расширяет
возможности
использования
Visual FoxPro, поэтому
остановимся
чуть подробнее
на том, что же
такое
OLE-сервер.
Большинство
OLE-серверов
являются так
называемыми
серверами
Out-of-Process. Они
представляют
из себя исполняемые
программы
(файлы с расширением
ЕХЕ) и могут
взаимодействовать
как с
16-bit, так и с
32-bit OLE-контроллерами.
Расплатой
за это является
невысокая
скорость обмена
данными и
потребляемые
значительные
ресурсы памяти.
Другой тип
OLE-сервера
называется
In-Process и представляет
из себя
DLL-библиотеку,
которая динамически
подгружается
и выгружается
в зависимости
от необходимости.
Хорошим примером
такого сервера
является процессор
баз данных СУБД
Access 7.0.
Обмен данными
с этим типом
OLE-сервера
происходит
значительно
быстрее, но
работать он
может только
с
OLE-контроллером
такой же
разрядности.
В Visual
FoxPro доступ
к объектам
выполняется,
как и в подавляющем
большинстве
других OLE-серверов,
с помощью объекта
верхнего уровня
Application. В табл.
1 перечислены
его свойства,
а в табл. 2 — методы.
Свойства
Объекта Application
Таблица 1.
Свойство
|
Параметры
и описание
|
ActiveForm.Property
[ = Setting]
ActiveForm.Method
|
Property
- свойство
формы.
Setting
- значение
свойства.
Method - метод
формы.
Обеспечивает
ссылку на активную
форму или объект
SCREEN
|
AutoYield
[ = IExpr ] |
IExpr по
умолчанию
равен .Т., что
предусматривает
приоритет
событий
Windows. Значение
.F. предотвращает
прерывание
выполнения
кода
Visual FoxPro. При
этом события
Windows
ставятся в
очередь. Определяет
способ обработки
событий
Windows. |
Caption
[ = cText ] |
cText
- текст
заголовка.
Определяет
заголовок
окна приложения.
|
DefaultFilePath [ = сPath
] |
сPath
- обозначение
устройству
каталога или
путь.
Определяет
каталог по
умолчанию
для приложения.
Определяет
путь и имя файла
для запуска
копии
Visual FoxPro.
|
Height
[ =
nHeight ] |
nHeight
- высота
окна приложения.
Определяет
высоту окна
приложения. |
Let
[ = nDist ] |
nDist
- расстояние
от левого края.
Определяет
расположение
окна приложения
относительно
левого края.
|
Name
[ = cName] |
cName
- имя объекта.
Задает имя
объекта для
ссылки в коде
программы.
|
OLERequestPendingTimeOut
[ = Nmilliseconds ]
|
Nmilliseconds
- величина
задержки в
миллисекундах,
которая по
умолчанию
равна
5000 мс. Если
параметр равен
0, то сообщение
не появляется.
Определяет
задержку, которая
происходит
перед появлением
сообщения о
том, что система
занята в процессе
выполнения
запроса
OLE Automation, если
пользователь
использует
клавиатуру
или мышь.
|
OLEServerRaiseError
[ = lExdivssion ] |
lExdivssion
по умолчанию
равен
.F. - сообщение
об ошибке будет
появляться.
Если параметр
равен .Т., сообщения
будет.
Определяет
появление
сообщения об
ошибке, когда
истекает время,
установленное
в свойстве
OLEServerBusyTimeout.
|
OLEServerBusyTimeout
[ = Nmilliseconds ] |
nMilliseconds
- величина
задержки в
миллисекундах
до появления
сообщения о
том, что сервер
занят.
Определяет
время, в течение
которого
происходит
повторное
выполнение
запроса
OLE Automation, если
сервер занят.
|
StartMode |
Возвращает
число, идентифицирующее
тип запускаемого
приложения. |
StatusBar [ = cMessageText ] |
cMessageText
- строка
сообщения.
Определяет
текст в статус - строке
приложения. |
Top [ = nDist ] |
nDist
— расстояние
от верхнего
края.
Определяет
расположение
окна приложения
относительно
верхнего края.
|
Version |
Возвращает
в виде строки
символов
номер
версии запускаемого
приложения. |
Visible [ = lExpr ] |
lExpr
по умолчанию
равен
.F., т. е. запускаемая
копия приложения
невидима. Если
параметр
lExpr
равен .Т.
- приложение
становится
видимым.
Определяет,
будет ли запускаемая
копия приложения
видима.
|
Width [ = nWidth ] |
nWidth
— ширина
окна приложения.
Определяет
ширину окна
приложения. |
Методы Объекта
Application
Таблица 1.
Метод
|
Параметры
и описание
|
DataToClip
([ nWorkArea | cTableAlias ] [, nRecords ]
[, nClipFormat]) |
nWorkArea, cTabieAlias
— рабочая
область или
псевдоним
источника
данных.
nRecords
— число
копируемых
записей. uClipFormat
по умолчанию
равен
1, при этом
данные полей
разделяются
пробелами.
Если параметр
равен
3, данные
разделяются
знаком табуляции.
Копирует
записи в буфер
обмена в виде
текста, в котором
каждая запись
занимает отдельную
строку.
|
DoCmd
(cCommand) |
cCommand
- выражение,
представляющее
команду
VFP.
Позволяет
выполнить
команду
Visual FoxPro из
приложения
являющегося
OLE-контроллером.
|
Eval
(cExdivssion) |
cExdivssion
- выражение,
которое необходимо
преобразовать.
Преобразует
выражения и
возвращает
его в Visual
FoxPro.
|
Help
([cFileName] [, nContexId] [, cHelpTopic]) |
cFileName - имя
и путь к файлу
оперативной
помощи. NContextID
-
идентификатор
раздела. cHelpTopic
- тема раздела.
Открывает
окно с контекстной
справкой.
|
Quit() |
Закрывает
запущенную
копию приложения
Visual FoxPro. |
RequestData
([nWorkArea | cTableAlias] [, nRecords]) |
nWorkArea, cTableAlias
- рабочая
область или
псевдоним
источника
данных. nRecords
- число
копируемых
записей.
Создает
массив с данными
из источника
данных
Visual FoxPro.
|
Для ссылки
на объект
Application можно
использовать
системную
переменную
_VFP.
Visual FoxPro
5.0 имеет
следующие
коллекции,
которые ассоциируются
с объектом
Application:
При этом
обратите внимание,
что эти коллекции
являются коллекциями
исключительно
OLE-объектов
и могут использоваться
только с объектом
Application. К этим
коллекциям
нельзя обращаться,
используя
ассоциированные
переменные
с включенными
в них объектами.
Вы должны
использовать
свойство
Application, как это
показано ниже:
oFrm
=
CREATEOBJECT( 'Form')
?
oFrm.Application.Forms[1].Controls.Count
Если вы уже
писали программы
в Visual FoxPro
3.0, то приведенное
выше утверждение
может вызвать
некоторое
удивление.
Перечисленные
коллекций были
представлены
и в третьей
версии, это
действительно
так. Но, так как
Visual FoxPro 3.0
не мог выполнять
функции OLE-сервера,
то эти коллекции
не отвечали
общепринятым
стандартам
OLE. В первую
очередь за счет
того, что их
свойства были
доступны для
изменения. Это
удобно, если
мы работаем
с одним приложением.
По-прежнему
нам никто не
мешает продолжать
использовать
эти возможности.
Но, как только
мы начинаем
использовать
приложение
как OLE-сервер,
т. е. обращаемся
к нему из другого
приложения,
то должны
использовать
объекты
Visual FoxPro
как
OLE-коллекции.
Например,
ничто не мешает
нам при создании
формы в
Visual FoxPro написать
такой код:
Frm
=
CREATEOBJECT ('Form'
)
?
oFrm.ControlCount
&&Число
элементов
управления
в форме
Для
OLE-сервера
число элементов
управления
в форме следует
определять
так, как это
было показано
в предыдущем
примере, с
использованием
свойства
Count.
Создание
OLE-сервера
в
Visual FoxPro
Используя
Visual FoxPro 5.0,
можно создать
OLE-сервер,
функциональность
которого будет
использована
несколькими
приложениями.
Для создания
OLE-сервера
используемые
в нем классы
должны быть
описаны как
OLE
Public, т. е.
доступные для
OLE Automation. Для
этого в команду
DEFINE CLASS включена
новая опция
OLEPUBLIC. Если
класс создается
в Конструкторе
классов, необходимо
использовать
соответствующий
независимый
переключать
в диалоговом
окне
Class Info. Отметка
класса как
OLE Public позволяет
Project Manager при
построении
приложения
создавать и
регистрировать
данный
класс
как ОLЕ-сервер
к которому
должен получить
доступ
OLE-контроллер.
В Visual
FoxPro вы можете
создать как
In-Process сервер
(DLL), так и
Out-of-Process сервер
(ЕХЕ). Оба типа
сервера при
работе используют
библиотеку
поддержки
приложений
Visual FoxPro (runtime), однако
существенно
отливаются
в использовании
памяти.
Сервер ЕХЕ
запускается
в собственном
адресном
пространстве,
и в этом плане
его запуск
ничем не отличается
от запуска
копии
Visual FoxPro.
Сервер
DLL использует
адресное пространство
того приложения,
которое инициировало
его запуск.
Поэтому он
запускается
и работает
быстрее. Естественно
стремление
использовать
в первую очередь
именно такой
тип сервера,
однако не всегда
мы можем так
поступить.
Сервер
DLL не может
использоваться
как внешний
сервер
OLE Automation и, таким
образом, должен
находиться
на локальном
компьютере.
Он не поддерживает
события, т. е.
не может использоваться
для интерактивной
работы. Следует
также учитывать,
что авария
сервера
DLL, как правило,
влечет аварию
управляющей
программы.
Сервер ЕХЕ
имеет еще одно
преимущество.
Он может выполнять
роль
OLE-сервера
и обычного
приложения
Visual FoxPro. Таким
образом, если
приложение-контроллер
использует
сервер для
выполнения
процесса, который
может быть
весьма ресурсоемким,
но выполняется
локально на
этом сервере,
мы получим
выигрыш в
производительности.
Покажем
простейший
пример создания
OLE-сервера
Visual FoxPro. Создадим
новый проект
Ole_serv, в котором
будет один
программный
файл со
следующим
кодом:
DEFINE
CLASS
OLE_SERV
AS CUSTOM OLEPUBLIC
PROCEDURE
INIT
MESSAGEBOX(PROGRAM(),
"РАБОТАЕТ МОЙ
ПЕРВЫЙ
OLE-SERVER")
ENDDEFINE
Нажмем кнопку
Build и создадим
EXE- или
DLL-файл.
Если вы внимательно
следили за
сообщениями
появляющимися
в процессе
построения
файла, то наверняка
заметили сообщение
«Creating Type Library and
Registering OLE
Server», которое
свидетельствует
о создании и
регистрации
нашей программы
как OLE-сервера.
Напомним, что
это произошло
из-за наличия
опции
OLEPUBLIC в команде
описания класса.
При построении
OLE-сервера
(OLE_SER.EXE или
OLE_SER.DLL)
создаются
файлы OLE_SERV.TLB
и OLE_SERV.VBR.
Файл
TLB —
это библиотека
OLE-o6ъектов
сервера, которая
может быть
просмотрена
с помощью
Visual FoxPro Class Browser, Excel, Visual Basic
и Visual C. Файл
VBR -
это текстовый
файл с данными
для записи в
Регистре
Windows.
Теперь можно
набрать в командном
окне следующую
строчку:
oObj
=
CREATEOBJECT("OLE_SERV.OLE_SERV")
После непродолжительного
ожидания,
требующегося
для загрузки
сервера вы
увидите окно
с заголовком
«Работает мой
первый
OLE-сервер!»
и сообщением
с именем выполняемой
в данный момент
процедуры
- Init.
Хотя наш
OLE-сервер
не выполняет
никакой полезной
работы, свидетельством
его активности
могут служить
следующие
cтрочки:
?
oObj.Application.Name
?
oObj.Application.Visible
?
TYPE("oObj")
?
oObj.Application.Docmd("MESSACEBOX(HOME())")
?
oObj.Application.Docmd("_ClipText=HOME()+SYS(2003)+
SYS(2004)")
Обратите
внимание на
последнюю
строку примера.
Она записывает
в буфер обмена
путь к
OLE-серверу
с помощью трех
функций. Например,
это может быть
строка:
D\WORKS\VFP5_SAMPLE\. В
нашем
примере она
будет повторена
три раза. Это
свидетельствует
о том, что
OLE начинает
поиск сервера
с каталога
SYSТЕМ ОС
Windows.
Таким образом,
при распространении
приложения
и установке
сервера на
различных
компьютерах
в различных
каталогах, мы
можем столкнуться
с проблемой
указания пути
как к серверу,
так и используемым
им компонентам
(файлам базы
данных, форм,
отчетов и т. д.).
Лучшее решение
- это
использование
для сервера
ЕХЕ-функции
Windows API GetModuleFileName(), которая
возвращает
полный
путь к
главному файлу
ЕХЕ текущего
процесса, если
в качестве
первого параметра
передается
нуль. Для сервера
DLL можно
использовать
функцию
GetModuleHandleQ с именем
файла
DLL в качестве
параметра для
возвращения
указателя на
сервер. Этот
указатель можно
использовать
в функции
GetModuleFileName() для
получения
полного пути
к серверу
DLL.
Сделаем еще
несколько
замечаний
насчет построения
OLE-сервера.
Выберите команду
Project Info из меню
Project, когда
открыт последний
обсуждаемый
проект, ив
появившемся
диалоговом
окне перейдите
на вкладку
Servers. На этой
вкладке сосредоточена
информация,
которую вы
можете просмотреть
или изменить
для каждого
класса
OLE Public в проекте.
Обратите внимание,
что эта информация
появляется
только после
того, как будет
построен
EXE- или
DLL-файл.
Раскрывающийся
список
Instancing позволяет
указать, как
будет работать
сервер Out-of-Process.
Возможные
установки
приведены в
табл. 3.
Возможные
режимы работы
OLE-сервера
Visual FoxPro
Таблица 3.
Single
Use |
Каждый клиент
использует
свою собственную
копию сервера.
Таким образом
для нескольких
пользователей
будет запущено
соответствующие
количество
копий сервера. |
Multiple
Use |
Все клиенты
используют
одну копию
сервера. Для
того, чтобы
избежать их
взаимного
влияния при
работе с общими
данными, следует
установить
значение свойства
DataSession равным
2 (private). |
Not
Creatable |
Предотвращает
создание
OLE-сервера,
несмотря на
наличие в проекте
класса
OLE Public. |
OLE-сервер
Visual FoxPro регистрируется
автоматически.
Для ручной
регистрации
сервера ЕХЕ
достаточно
его запустить
с опцией
/regserver. Опция
/unregserver позволяет
удалить информацию
о сервере из
Регистра
Windows. Для
регистрации
сервера
DLL вручную
запустите
утилиту
REGSVR32.EXE с именем
файла в качестве
первого параметра.
Удалить информацию
о сервере из
Регистра можно,
использовав
второй параметр
/u.
Например:
REGSVR32
OLE_SERV.DLL /u
OLE-сервер
Visual FoxPro для своей
работы требует
присутствия
библиотеки
поддержки
- файлов
VFP500.DLL и
VFP5ENU.DLL.
OLE-сервер
в компьютерной
сети
При коллективное
работе с данными
OLE-сервер
должен обрабатывать
вызовы всех
пользователей
компьютерной
сети и, следовательно,
должен находиться
на сервере, а
не на каждом
компьютеры
пользователя.
Такой подход
позволяет
организовать
трехуровневую
модель обработки
данных.
Эта модель
отличается
от традиционной
модели клиент-сервер,
т. к. отображает
не просто физическое
взаимное -
расположение
пользователя
и программы,
а логику обработки
данных. В трехуровневой
модели выделяют
следующие
логические
процессы:
Пользовательский
процесс
— представляет
возможность
работы с данными
пользователю
приложения,
обеспечивает
защиту данных
от несанкционированного
доступа.
Бизнес-процесс
— обеспечивает
единые правила
работы с данными
с точки зрения
технологии
производственного
процесса, генерирует
информационную
поддержку
маркетинга
и менеджмента.
Процесс
обработки
данных
— обеспечивает
описание и
хранение данных
обработку и
выполнение
запросов, поддержку
целостности
данных.
Таким образом,
в этой логической
модели бизнес-процесс
может быть
ревизован на
основе
OLE-сервера,
в котором с
помощью соответствующих
методов будет
организована
обработка
данных, посылаемых
от клиентских
приложений
с целью выполнения
комплексных
расчетов на
основе различных
источников,
и выработки
каких-либо
решений для
дальнейшей
обработки.
Возможность
взаимодействия
между
OLE-контроллером
и OLE-сервером
обеспечивается
двумя объектами:
Proxy
— обеспечивает
формирование
пакета данных
с параметрами
вызова для
OLE-сервера.
Этот объект
работает в
адресном
пространстве
OLE-контроллера
и обеспечивает
соединение
с соответствующим
объектом
Stub
в адресном
пространстве
OLE-сервера.
Stub
— принимает
пакет данных
и обеспечивает
переадресацию
вызова для
выполнения
соответствующих
действий на
OLE-сервере.
Этот объект
работает в
адресном
пространстве
OLE-сервера
и связан с
соответствующим
объектом
Proxy в адресном
пространстве
OLE-контроллера.
При работе
OLE Automation на одном
компьютере
функционирование
объектов Proxy
и Stub
обеспечивается
системным
файлом
OLEAUT32.DLL
Если
OLE-контроллер
и OLE-сервер
расположены
на разных
компьютерах,
для обеспечения
связи между
ними необходимо
использовать
дополнительный
компонент,
который называется
Automation Manager (файл
AUTMGR32.EXE). Этот
компонент
должен быть
установлен
на обоих компьютерах.
OLE-контроллер
продолжает
использовать
объект
Proxy, но в этом
случае его
функционирование
обеспечивается
файлом
AUTPRX32.DLL. На компьютере
с внешним
OLE-сервером
Automation Manager управляет
как объектом
Stub для получения
пакетов данных
от OLE-контроллера,
так и объектом
Proxy для имитации
наличия
OLE-контроллера
на этом компьютере.
Таким образом
для
OLE-cepвера
создаются все
условия, чтобы
он не ощущал
«одиночества»
от отсутствия
OLE-контроллера
на том же самом
компьютере,
Сервер
OLE Visual FoxPro 5.0
поддерживает
обратные связи.
Вы можете
использовать
метод на сервере,
который будет
получать ссылку
на объект от
OLE-контроллера
как один из
параметров.
Эта возможность
позволяет
устанавливать
асинхронную
связь с сервером,
если эта связь
не может быть
установлена
немедленно
по причине
выполнения
сервером какого-то
длительного
процесса.
В этом случае
на сервере,
который будет,
например, называться
Processor (в Регистр
Windows —
MyServer.Processor) должен
быть описан
класс:
DEFINE CLASS Processor AS Custom OLEPUBLIC
oObjRef
= ""
PROCEDURE
SetupRef (oRef)
This.oObjRef
=
oRef
ENDPROC
PROCEDURE
DoCallBack
This.oObjRef.Notify
()
ENDPROC
ENDDEFINE
В клиентском
приложении
запишем:
oObjl
=
CREATEOBJECT ("Job")
o0bj2
-
CREATEOBJECT ("MyServer .Processor")
o0bj2
.
SetUpRef
(
oObjl)
DEFINE CLASS Job
AS Custom
PROCEDURE Notify
=
MESSAGEBOX
("Задание выполнено!")
ENDPROC
ENDDEFINE
Как только
на сервере
вызывается
метод
DoCallBack,
следует выполнение
метода Notify
объекта клиентского
приложения.
Если связь
с OLE-сервером
происходит
по компьютерной
сети то на компьютере
клиентского
приложения
должен быть
установлю
Automation Manager.
Первоначально
Automation Manager и
Remote
Automation Manager были
разработаны
для Visual
Basic 4.0
и в дальнейшем
использованы
в Visual FoxPro
5.0 для расширения
функциональности
в области разработки
крупных проектов
при коллективной
работе с данными.
Automation
Manager
Automation Manager
работает в
фоновом режиме,
т. к.
его основное
предназначение
заключается
в управлении
процессом
OLE Automation в сети
путем внешних
процедурных
вызовов. Как
отмечалось
выше, эти вызовы
формируются
за счет взаимодействия
между объектами
OLE Proxy и
OLE Stub. Без них
вы не сможете
создать внешний
OLE-сервер.
Automation Manager
устанавливается
на сервере и
распределяет
вызовы от объекта
Proxy рабочей
станции к
соответствующему
объекту
Stub сервера.
Возвращаемые
значения
Automation Manager направляет
OLE-контроллеру
через объект
Stub.
За Счет этого
ни OLE-контроллер,
ни OLE-сервер
не чувствуют,
что расположены
на разных
компьютерах.
В большинстве
случаев достаточно
установки
Automation Manager на сервере.
Однако, если
приложение
предусматривает
наличие «обратной
связи» от
OLE-сервера,
необходима
установка
Automation Manager и на
клиентский
компьютер.
Обычно запуск
Automation Manager происходит
автоматически,
как только
система обнаруживает
в этом необходимость.
Если этого не
произошло, одна
из наиболее
возможных
причин
— повреждение
или неправильная
запись в Регистре
Windows.
В случае
необходимости
непосредственно
из Visual FoxPro
зарегистрировать
Automation Manager
можно следующей
командой:
RUN /n c:\vfp\autmgr32.exe /regserver
Установки
Automation Manager в Регистре
Windows имеют
следующее
расположение:
HKEY_LOCAL_MACHINE\Software\Microsoft\Automation
Manager/
Remote
Automation Connection Manager
Remote Automation Connection Manager
(RACMan) написан
на Visual Basic
4.0 и поэтому
для работы
требует наличия
библиотеки
поддержки
Visual Basic. Его
основное
назначение
заключается
в управлении
записями Регистра
Windows, которые
включают необходимые
сведения для
внешнего соединения
со стороны
клиента и
доступа клиента
на сервере.
RACMan требует
регистрации
сервера на
клиентском
компьютере,
поэтому при
установке
приложения
потребуется
файл CLIREG32.EXE,
который переписывается
автоматически,
если вы используете
Setup Wizard.
При запуске
программа
CLIREG32.EXE требует
нескольких
параметров,
в том числе:
имя файла с
расширением
VBR, который
генерируется
автоматически
при создании
OLE-сервера,
сетевое имя
компьютера,
сетевой протокол
и параметры
доступа пользователя.
При этом только
первый из указанных
параметров
является
обязательным.
Таким образом,
RACMan обеспечивает
две функции:
Внешнее
соединение
на компьютере
клиента. Пользователь
может изменить
сервер, который
уже зарегистрирован
на его компьютере,
и зарегистрировать
новый
OLE-сервер.
Доступ клиента
к серверу. Сервер
может определять
возможность
доступа клиента
как с использованием
имени компьютера,
так и имени
пользователя.
При этом для
Windows NT обеспечивается
интегрированная
авторизация
доступа.
Установки
для внешнего
OLE-сервера
записываются
в Регистре
Windows для данного
сервера с ключом
CLSID в
HKEY_CLASSES__ROOT.
Приведем
пример использования
OLE-сервера
в компьютерной
сети для выполнения
расчетов с
данными таблицы,
хранящейся
на файл-сервере.
Выполним
последовательно
следующие
действия:
1. Для
создания
OLE-сервера
напишем следующую
программу:
*1*'Создаем
подкласс из
базового класса
Custom
*!*
'Ключевое слово
OLEPUBLIC обязательно
*1*
'Именно оно и
позволяет
сделать наш
объект OLE-объектом
DEFINE
CLASS Sum_table AS CUSTOM OLEPUBLIC
*
Свойство, которое
запоминает
значение суммы
Sum_paid
= О
*
Метод для расчета
суммы
PROCEDURE
Proc Summary
PARAMETERS
What
S3T
EXCLUSIVE OFF
SELECT
SUM (lnv_details.price*lnv_aetails .quantity) AS sum ;
FROM
С :\OFFICE4\DATABASE\ Invoices, ;
C:
\OFFICE4\DATABASE\lnv_details ;
WHERE
Invoices .kod_id = lnv_deta-ils.kod_id ;
AND
Invoices .paid = What ;
INTO
CURSOR cur_sum
**"*
Возвращаемое
значение
SELECT
cur_sum
THIS.
Sum_paid = cur_sum .sum
USE
IN cur_sum
END
PROC
ENDDEFINE
Эта программа
будет считать
сумму выписанных
счетов. В зависимости
от значения
передаваемого
параметра будет
считаться сумма
по всем счетам
или только по
оплаченным.
В проекте
нажмем кнопку
Build, щель нем
мышкой на зависимом
переключателе
Build Executable и скомпилируем
ЕХЕ-файл
OLE-сервера
с именем
Ole_sum.
Напомним, что
нам требуется
именно этот
тип сервера,
если мы собираемся
использовать
его в сети.
Зарегистрируем
созданный
сервер на
файл-сервере,
выполнив следующую
команду:
REGSVR32 C:\OFFICE4\OLE_SUM.EXE
4. Запустим
Remote Automation Connection Manager,
выберем в списке
СОМ Classes
наш класс и
установим
требуемые
параметры
доступа.
He
забудьте убедиться,
что на вкладке
Client Access независимый
переключатель
Allow Remote Activation включен.
5. Скопируйте
файл
OLE_SUM.VBR на локальный
компьютер.
6.
Зарегистрируйте
на локальном
компьютере
OLE-сервер,
используя
информацию,
содержащуюся
в файле
VBR. Для этого
необходимо
выполнить
следующую
команду:
C:\VFP\CLIREG32
С \VFP\OLE_SUM.VBR
На экране
появится диалоговое
окно, в котором
необходимо
указать сетевое
имя файл-сервера
7. На
сервере и локальном
компьютере
запустите
Automation Manager.
8. На
локальном
компьютере
запустите
Visual FoxPro и наберите
в окне Command
следующие
команды:
oSum
=
CREATEOBJECT("ole_sum.sum_table")
oSum.ProcSuitmiary(.T.)
?
oSum.Sum_paid
oSum.РrосSummary(.F.)
?oSum.Sum_paid
На экране
вы увидите
полученный
результат.
Широкие
возможности
использования
OLE-сервера
Visual FoxPro заключаются
в управлении
им из любой
другой программы,
поддерживающей
OLE Automation. Например,
те же действия
мы можем выполнить
из Excel,
используя
следующую
процедуру:
Sub mysub()
Dim sum_obj As
Object
Set
sum_obj
=
CreateObject("ole_sum.sum_table")
sum_obj.ProcSummary
True
Sheets("Лист1").Cells(1,1).Value
= sum_obj.Sum_paid
End Sub
Процедура
поместит значение
суммы в первую
ячейку на первый
лист
Excel. Этот
простейший
пример наглядно
показывает
возможности
OLE-сервера
Visual FoxPro, который
может играть
роль сервера
данных в небольшой
компьютерной
сети, там, где
не требуется
вся мощь таких
серверов БД,
как SQL
Server или
Oracle. |