efox.gif (1606 bytes)Для разработчиков VFP

Карта данных и приложений

Инструментальные средства "EvnFox"

EvnFox home

Vallmind home

Единая схема размещения в локальных или глобальных сетях, типов источников и транспортов создается для группы приложений и оформляется в виде базы данных, называемой картой данных. Если у вас полномочия администратора в текущем приложении, то можно вызвать карту данных с помощью пункта системного меню: \Система\Доступ к данным и структуры\Карта данных и приложений... И выглядеть она будет приблизительно так:

data_map.gif (17712 bytes)

Карта данных состоит из следующих основных таблиц на доступном для всех приложений сервере:

indbul2a.gif (311 bytes) EDATAMAP     - список и свойства источников данных
-
DATASOURCE C(20) Имя источника данных
TYPE C(10) Тип источника данных (DBF_TABLES, MS_SQL, ...)
SQL_SERVER C(100) Имя SQL сервера. Можно IP или имя хоста
SQL_DBASE C(30) Имя базы данных SQL
EXT_SR_APP C(8)
EXT_CL_APP C(8)
EXT_PROPS M
MODIFIED T
USER C(10)
-
indbul2a.gif (311 bytes) ETRANSPR     - перечень транспортов для источников данных
-
ID_ C(10) Идентификатор транспорта
DATASOURCE C(20) Имя источника данных
TRANSPORT C(10) Тип транспорта (DIRECT, ODBC, ...)
ORDER C(10) Порядок транспорта
DIRECTORY C(200) Директория прямого доступа к DBF на сервере
HOST C(50) Имя домена (SQL или COM) или IP хоста
COM_CLASS C(50) Класс automation server
COM_DIR C(200) Рабочая директория automation server на сервере
EXT_SR_APP C(8)
EXT_CL_APP C(8)
EXT_PROPS M
MODIFIED T
USER C(10)

В поле SQL_SERVER через точку с запятой можно явно прописать другие реквизиты доступа используя синтаксис: uid@pwd!server , где вместо uid - указать пользователя, pwd - пароль, server - имя сервера, например user@111!MAIN_SQL

Кроме того, в рабочей директории каждого клиента на локальной станции создается таблица с локальными вариантами отдельных свойств источников данных:

indbul2a.gif (311 bytes) DS_PATHS.DBF
-
DATASOURCE C(20) Имя источника данных
TRANSPORT C(10) Транспорт по умолчанию из ETRANSPR
DIRECTORY C(200) Директория прямого доступа к DBF в видимости с текущей станции
BUFFERED N(1) Признак буферизации данных (в основном в GRID) средствами EvnFox
OBJEX N(1)
SYSACCOUNT N(1) Подключаться к SQL с системными именем и паролем
PDIRECTORY C(200)
-

            
Если Вы выполнили приложение в стандарте "EvnFox" и используете рекомендуемые базовые классы приложения, то при его установки или первом запуске Вам потребуется создать или указать источник данных с картой данных и приложений. Все его свойства при этом описываются и хранятся локально. Если в указанном или созданном источнике таблиц карты данных не обнаружено, то базовые классы приложения создадут их автоматически.

Источники данных

Все таблицы приложения группируются в источники данных и процедура доступа организуется не к конкретной таблице, а к источнику данных. Другими словами, для доступа к таблице в среде "EvnFox" необходимо указывать ни директорию или базу данных SQL плюс дополнительно адрес или имя компьютера, а только имя-идентификатор источника данных, в котором находится таблица. В идеальном случае, для каждого приложения в его записи в карте приложений определяется источник данных по умолчанию, и, практически для открытия таблицы в среде "Басурман" Вам достаточно знать только ее имя, хотя она находится на сервере в Internet на другой стороне земли. Где физически находится таблица и как организуется к ней доступ указывается в свойствах источника данных хранимых в карте данных

В текущей версии источники данных могут быть двух типов:

маркированный список Директория с таблицами DBF(VFP)
маркированный список База данных SQL Server

Для каждого источника данных описываются две группы свойств:

Глобальные свойства хранятся в карте данных и являются неизменными или используются по умолчанию всеми локальными станциями и приложениями, использующими карту данных, в которой описан источник. К неизменным свойствам относятся: имя-идентификатор источника, адрес в сети, имя директории или базы данных на сервере, перечень поддерживаемых транспортов, ... К значениям по умолчанию относятся: транспорт по умолчанию,...

Локальные свойства законны только для компьютера, на котором находится клиентская часть приложения. Так, при прямом доступе к таблицам DBF, полный путь к директории с таблицами может быть для каждой локальной станции индивидуален. От операционной системы и ее настроек зависит метод доступа к COM-объекту транспорта automation server. Индивидуально может использоваться буферизация, и т.д. Для каждого источника индивидуально для компьютера может быть назначен транспорт, который отличается от используемого по умолчанию, и приложение будет использовать только этот транспорт для организации доступа к источнику.

Используйте буферизацию с транспортами обеспечивающими технологию клиент-сервер на низко производительных каналах, а лучше - всегда! И особенно при прямом доступе в локальной сети. При включенной буферизации во время read only отображения имен и кодов реквизитов в диалоговых таблицах будет создаваться read only буфер со сроком жизни равным сроком жизни окна с таблицей. Так, например, если в диалоговом списке для выбора сторонней организации уже отражено наименование предприятия (попало в поле видимости), то при последующем попадании его в поле видимости или перерисовке списка клиентская часть не будет опять обращаться к серверу, а возьмет код и наименование из буфера.

Директория с таблицами DBF(VFP)

Данные хранятся в директории, поддерживаемой операционной системой компьютера, в виде таблиц DBF стандарта Visual Foxpro. Хотя таблицы и имеют расширение DBF, но их заголовок отличается от семейства X-Base, и Вы не сможете открыть их средствами DBase или Clipper.

Глобальными свойства данного типа источника ограничиваются его наименованием-идентификатором. В качестве локальных свойств может выступать транспорт, назначаемый принудительно.

База данных SQL Server

Данные хранятся в базе данных Microsoft SQL Server. Если распределение данных ограничивается одним компьютером, то вместо полной версии SQL Server может использоваться MSDE.

В качестве глобальных свойств источника должны быть определены:

В поле с именем SQL сервера можно явно прописать другие реквизиты доступа, например: user@password!MAIN_SQL, где user - имя пользователя, password - пароль !!! Но!!! Если имя пользователя начинается с SA_ , то данное правило игнорируется и в SQL сервер будут передаваться имя пользователя и пароль, которые были указаны при активизации программы. (Сделано для оставления возможности входа с индивидуальными полномочиями)

В качестве локальных свойств может выступать транспорт, назначаемый принудительно, но в текущей версии используется только ODBC.

source_properties.gif (14498 bytes)

 

Транспорты

То, что нам известно о том, в каком виде и где хранятся данные, еще не позволяет получить к ним доступ и работать. В зависимости от места нахождения сервера и станции в сети, наличия прямого доступа или только удаленного, производительности каналов, типов операционных систем и др.обстоятельств позволяют нам использовать только те или иные технологии доступа, называемые транспортами. Один источник данных может поддерживать несколько технологий доступа к нему. Так, если это директория с таблицами DBF, то клиенты, находящиеся в высокопроизводительной локальной сети могут получить прямой доступ к таблицам, а для клиентов, которые могут работать только удаленно по телефонным каналам устанавливается Automation server.

Для каждого источника данных должен быть описан, как минимум, один транспорт. Для этого в свойствах источника существует список транспортов и набор соответствующих кнопок для добавления, удаления и редактирования свойств транспорта. Существенен порядок, в котором транспорты перечислены в списке. Первый в списке транспорт используется всеми клиентами по умолчанию, если для клиента не назначен тип транспорта принудительно. Для изменения порядка транспорта в списке перетащите его мышкой вверх или вниз за значок move_in_list_button.gif (122 bytes) . Для назначения или отмены транспорта принудительно для текущего клиента предназначены кнопки "Назначить" и "Как у источника" под списком транспортов. Так, если по умолчанию используется транспорт "Automation server", а текущий компьютер находится в единой высокопроизводительной локальной сети с компьютером, на котором расположен источник, назначьте ему принудительно транспорт "Прямой доступ".

Типы поддерживаемых транспортов зависят от типа источника. Далее описаны транспорты для каждого типа источника, которые планируется реализовать в текущей версии.

Транспорты для директории с таблицами DBF(VFP)

маркированный список Транспорт: Прямой доступ к таблицам DBF(VFP)

Технология файл-сервер в чистом виде. Таблицы открываются напрямую. Клиентская часть понятия не имеет, работает ли она с файлами на своем компьютере или на чужом со всеми вытекающими последствиями. Если сеть высокой производительности - нет проблем. Свойства транспорта немногочисленны и все они локальные.

direct_transport_properties.gif (7219 bytes)

Так-как полный путь к директории может быть индивидуален для каждой станции в локальной сети, то, естественно, данное единственное свойство является локальным. Наберите его вручную или щелкните кнопку "..." и выберите директории вручную.

Если Вы только создаете источник данных, например при установке, и набранная директория отсутствует, то после нажатия кнопки "Установить" Вам будет предложено ее создать.

маркированный список Транспорт: Automation server для доступа к таблицам DBF(VFP)

Технология клиент-сервер в чистом виде. Automation server - небольшая программа на FoxPro. Поставляется отдельным установочным комплектом, но вместе с любым приложением, выполненным в стандарте среды "EvnFox". Один Automation server может обслуживать все источники данных, расположенные на компьютере. Если клиентской части приложения надо внести изменения в данные в источнике, то она не делает это сама а поручает это сделать COM-объекту или automation server, который работает непосредственно на компьютере с источником данных. Если из таблицы необходимо сделать выборку или осуществить поиск, то клиентская часть приложения передает automation server имя таблицы и условие поиска. Automation server осуществляет поиск или выборку по указанному условию и возвращает только результат. Это позволяет программе не "перекачивать" по сети всю таблицу при каждом поиске и на несколько порядков сокращает трафик сети. При работе по телефонным линиям, например, технология файл-сервер вообще "заткнется", а клиент-сервер в таком самом простом варианте уже позволяет работать с данными на сервере удаленно.

Сочетание источника данных - директории с таблицами и транспорта "automation server" позволяет реализовать технологию клиент-сервер на самом простом оборудовании. Так, например, если у Вас всего две машины с Windows 95 на разных концах города, и ни на что не смотря Вы хотите работать в единой сети (хоть и по телефону), это - оптимальный выход.

Другой более вероятный случай. У клиента примитивная локальная сеть, он работает благополучно и не хочет забивать себе голову Back-офисом, но Вы оказываете ему услуги по ведению учета или аудиторские. Поставьте всем своим клиентам по модему, настройте службу RAS(remote access service) и Dial Up, установите Automation server, и работайте со всеми своими десятками подопечных невыходя из своего офиса.

У транспорта automation server свойств побольше, чем у прямого доступа. Есть глобальные, есть и локальные.

automation_tables_transport.gif (8440 bytes)

К глобальным свойствам транспорта Automation server при работе с источником "директория DBF" относятся:

маркированный список имя host-а

Полный сетевой адрес URL. Например: www.myserver.com Указывается только при включенном флажке "Host" и при методе доступа, выбор которого описан в локальных свойствах. Естественно, что сетевой адрес законен для всей сети.

маркированный список полное наименование класса COM-объекта.

По умолчанию это efoxserv.e_vfp_automation_server Именно этот OLE сласс регистрируется на сервере при установке Automation server и может быть проконтролирован программой "RemAuto Connection Manager" (RACMGR32.EXE в системной директории)

маркированный список полный путь + директория

Указываются именно при условии видимости на сервере с источником данных и законны только для сервера. Если Вы решите указать директорию в диалоге и щелкните кнопку "..." за полем с директорией, то на сервере будет активизирован automation server указанного в предыдущем поле класса. В диалоге Вы будете работать с директориями как-бы глазами automation server, какими он их видит на своем компьютере.

В качестве локальных свойств указываются:

маркированный список метод доступа к COM-объекту

В традиционном случае доступ к COM-объекту осуществляется непосредственно клиентской частью приложения путем указания его точного адреса в сети - "Host". Поле с адресом хоста доступно только при включенном флажке "Host". Данная методика позволяет работать с automation серверами одного класса на различных компьютерах одновременно. Но! Данная технология требует наличия разграничения доступа на уровне ресурсов. Т.е. она может работать на компьютерах с операционной системой, как минимум, Windows NT 4.0, или Windows 95, но с установленным пакетом DCOM95.

Если у Вас нет возможности настроить разграничение доступа (смотрите свойства сетевого окружения) на уровне ресурсов, то каждый automation server должен быть зарегистрирован на рабочей станции утилитой CliReg32. Естественно, для одновременной работы с несколькими серверами, COM-класс каждого должен быть индивидуален. Для этого с каждым приложением поставляются несколько установочных комплектов одинакового automation server, но регистрирующие себя с разными классами (efoxserv.e_vfp_automation_server1,..,n). В любом случае ограничение на число обслуживаемых компьютеров остается.

Действуйте по следующему принципу: Попробуйте сначала организовать доступ с указанием Host, но если для этого понадобится генерировать NT Server и станции, то подумайте, а не лучше ли тогда уж сгенерить полноценный WEB сервер, поставить MS SQL и хранить данные в нем. Но, думаю, что ограничение по числу источников не придется превзойти в небольших сетях, если Вы поручите заниматься адресами утилиту CliReg32.

Итак, для настройки транспорта automation server Вам необходимо:

маркированный список Установить automation server с установочного диска приложения на компьютере с источником данных;
маркированный список Вызвать на сервере средство "Remote automation connection manager" (RACMGR32.EXE), найти в нем зарегистрированный класс сервера (efoxserv.e_vfp_automation_server) и включить опцию "Allow All Remote Creates" на закладке "Client Access";

racmgr32.gif (20388 bytes)

маркированный список Активизировать на сервере программу "Automation manager" (AUTMGR32.EXE) (должна быть запущена всегда !);
маркированный список Если Вы намерены использовать технологию доступа к automation server без явного указания адреса компьютера, то зарегистрировать ссылку па COM-объект с клиентского компьютера утилитой CliReg32;
маркированный список Вызвать свойства источника данных в карте данных и добавить для него транспорт automation server с указанием свойств.

Транспорты базы данных SQL

маркированный список Транспорт: ODBC для доступа к базе SQL

В более поздних версиях EvnFox транспорту Automation внимание уделялось все меньше согласно тенденциям развития технологий доступа к данным, исповедуемым Microsoft. В текущей же версии он вообще не используется. Вся стратегия реализации технологии клиент-сервер оттдано сочетанию: данные в MS SQL, транспорт - ODBC.

Настройки транспорта очень просты и включают только имя драйвера

odbc_transport.gif (6651 bytes)

маркированный список Транспорт: Automation server для доступа к базе SQL

Далее не используется

 

Работа с ресурсами

Для работы с ресурсами в источниках данных средствами EvnFox файл eproclib.prg содержит функции:

= E_Check_Deleted(m.Table)

= E_Create(m._DataSource,m.Table,m.StrFields,m.StrIndex,m.ItIsCursor,m._NoTranAdd)

= E_CreateIndex(m._DataSource,m.Table,m.StrIndex,m.Drop_Existing)

= E_CreateIndexes(m._DataSource,m._Table,m.Table)

= E_Close(m.Alias)

= E_DeleteTable(m.Table,m._DataSource)

= E_DropIndex(m.Table,m._Tag,m._DataSource)

= E_GetAutoAlias(m.Alias)

= E_GetConnect(m._DataSource)

= E_GetConnectType(m.Alias)

= E_GetDirectDirectory(m._Source)

= E_GetRemoteAlias(m.Alias)

= E_GetSourceBuffered(m._DataSource)

= E_GetSQLDBase(m._DataSource)

= E_GetSQLServer(m._DataSource)

= E_GetTable(m._jwk)

= E_GetTableBuffered(m.Alias)

= E_FindTableByName(m._Table,m.oAccess)

= E_Get_Database(m.Table)

= E_GetTableLastDateTime(m.Alias)

= E_GetTableName(m.Alias)

= E_GetTableTmpSource(m.Alias)

= E_GetSourceType(m._Source)

= E_GetTableSource(m.Alias)

= E_GetTransportType(m._Source)

= E_IsAllRecordsSelected(m.Alias)

= E_Is_Sources_Physically_Same(m.Source1,m.Source2)

= E_Rename(m._DataSource,m.Table,m.ToTable)

= E_Save_Deleted(m.Table,m.KeyValue,m.Filter1,m.Filter2,m.Filter3)

= E_Source_Table_List(m._DataSource)

= E_TableExist(m.Table,m._DataSource)

= E_Use(m.Table,m.Alias,m._DataSource,m.AllRecordsSelect,m.KeyFieldList,m.MultiKeys)

= E_Use_Deleted(m.Table,m.oAccess)

 

Карта приложений

Каждое приложение, созданное в среде EvnFox при первой установке регистрируется в карте данных и приложений, расположенной в источнике видимом всем рабочим станциям.

Состоит из трех таблиц:

indbul2a.gif (311 bytes) EAPPMAP - непосредственно список приложений
-
APP_TYPE C(50) Тип приложения
APP_NAME C(150) Наименование приложения
COMPANY C(150) Наименование компании
DATA C(20) Наименования источника данных с рабочими таблицами по умолчанию
SHARSET C(20) Наименование источника с глобальными настройками
REPORTS C(20) Наименование источника с отчетами
MODIFIED T
USER C(10)
-
Следующие две таблицы создаются в приложениях, где число станций в сети > 20 или нужно лицензировать каждую параллельную копию приложения. Среда "EvnFox" предполагает использование коротких ключей C(10) для документов. В то время как гарантированно уникальный ключ может быть создан длинною в 30 знаков (например функция NewID() T-SQL) здесь делается попытка максимально ускорить доступ к данным на больших объемах. В генерации уникального ключа в 10 знаков задействованы производные имени пользователя и станции и функция Sys(2015) и производная _VFP.ProcessID. Но, эти производные не дают гарантии на уникальность генерируемого ключа. С данной целью в больших сетях рекомендуется задействует систему генерации суффиксов, которая при генерации ключа в 10 знаков выдает для него уникальный суффикс согласно зарегистрированных с системе ранее имен станции и приложения. Например, использование данной системы неоценима в реальном решении "Расчеты с населением за газ" с сотней локальных станций в районах региона и центральной базой с документами за несколько лет в сотни миллионов записей в таблицах и более сотни гигабайт размером. С другой стороны, если система генерации суффиксов ключей задействована жестко, то ее можно использовать для определения количества станций одновременно работающих в сети и контролировать их в зависимости от числа проданных лицензий.
-
indbul2a.gif (311 bytes) NET_STATIONS
-
RKEY C(15) Ключ станции
DOMAIN C(50) Имя домена NT (не обязательно)
STATION C(50) Наименование станции, возвращаемое функцией ID() FoxPro
NAME C(100) Полное наименование станции произвольно, например "компьютер боса"
PROPERTIES M Свойства станции
-
indbul2a.gif (311 bytes) NET_APP
-
RKEY C(15) Ключ суффикса
STATIONKEY C(15) Ключ станции
APP_NAME C(50) Наименование приложения
KEY_SUFFIX N(10) Уникальный для таблицы префикс ключа
-

Свойства приложения

Для каждого приложения в карте данных определяются свойства:

app_properties.gif (11157 bytes)

Имя и свойства источника с картой данных хранятся отдельно и вызываются для приложения с помощью пункта системного меню: \Система\Доступ к данным и структуры\Свойства источника с картой данных...

data_map_source.gif (14190 bytes)


См. в интернет:    Долина разума    Система учета "Events"     Рассчеты с населением за газ    Предприниматель     Инструментальные средства "EvnFox"    www.vallmind.ru    EasySQL4Fox    ECalcPad    VMZipper    Святая трезвость    Трезвая Россия