Об использовании класса CursorAdapter в Microsoft ® Visual FoxPro ® приложениях Фирма: ИИС, Пермь Ссылка в Интернет:

Презентация:



Advertisements
Похожие презентации
ADO.NET Интегрированная среда разработки. ADO.NET Общая картина Все типы ADO.NET предназначены для выполнения одного набора задач: установить соединение.
Advertisements

Тема 5. Основы современной технологии программирования Программирование в средах современных информационных систем. Интегрированные системы разработки.
1 из 4 Данный документ носит исключительно информационный характер. КОРПОРАЦИЯ МАЙКРОСОФТ НЕ ПРЕДОСТАВЛЯЕТ В ЭТОМ ДОКУМЕНТЕ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ.
СУБД Access Запросы Автор: Тутыгин В.С.. Назначение запросов Запросы обеспечивают простой доступ к определенному подмножеству записей одной или нескольких.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
СУБД Microsoft Access 2003 Элементы языка SQL. Язык SQL SQL (Structured Query Language) – структурированный язык запросов Язык SQL применяется во многих.
Соколова В. В. Поддержка баз данных в РНР. Соколова В. В. Лаб 6 Работа с базами данных в РНР В РНР реализована обширная поддержка практически всех существующих.
Создание объектов баз данных. Создание таблицы в режиме Мастера таблиц Процесс создания объекта БД при помощи мастера делиться на несколько шагов, на.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Технология модели «клиент-сервер». Роли Компьютер, управляющий тем или иным ресурсом, принято называть сервером этого ресурса Компьютер, желающий воспользоваться.
Выполнение запросов, создание и редактирование отчета MS Access.
Работа с таблицами в MS Access. Таблицы Единицей хранящейся в БД информации является таблица. Таблица представляет собой совокупность строк и столбцов,
Создание электронных учебников
Web-узлы. Разработка и администрирование.. Часть 1. Web-технология.
СУБД Microsoft Access 2003 ЗНАКОМСТВО. Что такое Access? Access – Приложение, входящее в состав пакета Microsoft Office (разработано компанией Microsoft).
Администрирование ИС Администрирование DNS. Установка сервера DNS DNS-сервер представляет собой дополнительную компоненту операционной системы Windows.
Администрирование и безопасность MySQL. Создание и удаление пользователей Под учетной записью пользователя MySQL подразумевается строка в таблице user.
Презентация на тему: Ключевое слово TOP n [PERCENT] [WITH TIES]
Ekaterina B. Egorkina,© VEELTECH.RU Загрузка и вывод изображений Каким образом можно сохранить картинку в БД, а потом отобразить ее на странице?
Связи между таблицами являются необходимым элементом структуры БД. Для того, чтобы связь была возможна, таблицы должны иметь общие поля. Чаще всего в одной.
Транксрипт:

Об использовании класса CursorAdapter в Microsoft ® Visual FoxPro ® приложениях Фирма: ИИС, Пермь Ссылка в Интернет: Докладчик: Михаил Дроздов Электронный адрес: Интернет-страница: Уфа, 2006г.

Содержание Назначение VFP- класса CursorAdapter(CA) Назначение VFP- класса CursorAdapter(CA) Основные функциональные возможности CA-класса Основные функциональные возможности CA-класса Особенности использования различных типов источников данных в CA-классе Особенности использования различных типов источников данных в CA-классе Настройка обновляемых данных в CA-классе (Auto-update) Настройка обновляемых данных в CA-классе (Auto-update) Настройка обновляемых данных в CA-классе (Advanced) Настройка обновляемых данных в CA-классе (Advanced) Настройка обновляемых данных в CA-классе (XML) Настройка обновляемых данных в CA-классе (XML) Примеры фрагментов кода для XML-источников данных Примеры фрагментов кода для XML-источников данных Использование одного соединения и параметров в SQL-запросе для ADO-источника Использование одного соединения и параметров в SQL-запросе для ADO-источника Назначение свойства __VFPSetup в CA-классе при использовании построителя в vcx/scx Назначение свойства __VFPSetup в CA-классе при использовании построителя в vcx/scx Журнал событий (DatasourceType=ADO,DeteEnvironment.AutoOpenTables=.T.) Журнал событий (DatasourceType=ADO,DeteEnvironment.AutoOpenTables=.T.) Схема обмена данными между клиентом и сервером Схема обмена данными между клиентом и сервером Ссылки на ресурсы в Интернет Ссылки на ресурсы в Интернет

Назначение VFP-класса CursorAdapter (CA) Данный класс появился в VFP 8.0 и расширяет существовавшую ранее в рамках VFP-баз данных (dbc-фалов) технику работы через редактируемые представления (View) основанную на SQL-запросах к VFP-таблицам (Local View), а также к внешним ODBC- источникам (Remote View) Данный класс появился в VFP 8.0 и расширяет существовавшую ранее в рамках VFP-баз данных (dbc-фалов) технику работы через редактируемые представления (View) основанную на SQL-запросах к VFP-таблицам (Local View), а также к внешним ODBC- источникам (Remote View) во-первых, до возможности работы с ADO и XML источниками данных, во-первых, до возможности работы с ADO и XML источниками данных, во-вторых, до объектного подхода, поскольку эта возможность представлена VFP-классом. Обладая большим количеством свойств, событий и методов, этот класс существенно расширяет и обогащает возможности, существовавшие ранее в рамках представлений (View). во-вторых, до объектного подхода, поскольку эта возможность представлена VFP-классом. Обладая большим количеством свойств, событий и методов, этот класс существенно расширяет и обогащает возможности, существовавшие ранее в рамках представлений (View). Таким образом, этот класс обеспечивает работу VFP-приложений с такими внешними источниками данных, как ODBC, ADO, XML и VFP-таблицами. Таким образом, этот класс обеспечивает работу VFP-приложений с такими внешними источниками данных, как ODBC, ADO, XML и VFP-таблицами. С помощью его вы можете абстрагироваться от конкретики внешнего источника и работать с данными независимо от того, какой именно источник данных вами используется, т.е. взаимодействовать с внешними данными исключительно только через методы/свойства CA-класса. Естественно, что значения свойств, также как и код в методах/событиях экземпляра CA-класса, будут зависимы от обслуживаемого внешнего источника данных. С помощью его вы можете абстрагироваться от конкретики внешнего источника и работать с данными независимо от того, какой именно источник данных вами используется, т.е. взаимодействовать с внешними данными исключительно только через методы/свойства CA-класса. Естественно, что значения свойств, также как и код в методах/событиях экземпляра CA-класса, будут зависимы от обслуживаемого внешнего источника данных. Средствами этого класса внешние данные могут быть, как преобразованы во временные VFP-курсоры, так и наоборот, изменённые данные из VFP-курсоров могут быть преобразованы и переданы на соответствующие внешние источники. Средствами этого класса внешние данные могут быть, как преобразованы во временные VFP-курсоры, так и наоборот, изменённые данные из VFP-курсоров могут быть преобразованы и переданы на соответствующие внешние источники. В своей работе данный класс может использовать классы-помощники там, где средств самого CA-класса недостаточно. Так, при работе с XML-данными обычно требуется использование VFP-класса XMLAdapter, а при работе с MS ADO (Microsoft® ActiveX® Data Objects) возникает необходимость в использовании объектов, входящих в объектную модель ADODB: ADODB.Connection, ADODB.Recordset, ADODB.Command В своей работе данный класс может использовать классы-помощники там, где средств самого CA-класса недостаточно. Так, при работе с XML-данными обычно требуется использование VFP-класса XMLAdapter, а при работе с MS ADO (Microsoft® ActiveX® Data Objects) возникает необходимость в использовании объектов, входящих в объектную модель ADODB: ADODB.Connection, ADODB.Recordset, ADODB.Command Данные в VFP-курсорах, получаемых средствами CA, представляют из себя «локальную копию» внешних данных и всегда являются буферизованными. А VFP-функция TABLEUPDATE(), сохраняющая изменения клиента из VFP-курсоров на свои внешние источники, поддерживает работу с CA. Данные в VFP-курсорах, получаемых средствами CA, представляют из себя «локальную копию» внешних данных и всегда являются буферизованными. А VFP-функция TABLEUPDATE(), сохраняющая изменения клиента из VFP-курсоров на свои внешние источники, поддерживает работу с CA.

Основные функциональные возможности CA-класса Свойство DataSourceType. CA-класс поддерживает работу с внешними источниками данных: ODBC, ADO, XML, VFP- Narive. Какой именно источник данных обслуживается экземпляром класса, определяется значением свойства DataSourceType Свойство DataSourceType. CA-класс поддерживает работу с внешними источниками данных: ODBC, ADO, XML, VFP- Narive. Какой именно источник данных обслуживается экземпляром класса, определяется значением свойства DataSourceType Метод CursorFill() – выполняет команду (из свойства SelectCmd), чтобы заполнить данными курсор (свойство Alias). Заполнение курсора может выполняться с использование метода AutoOpen(), если класс CA помещён в экземпляр класса DataEnvironment (DE). При выполнение метода CursorFill() также вызываются соответствующие события: BeforeCursorFill(), AfterCursorFill(). Метод CursorFill() – выполняет команду (из свойства SelectCmd), чтобы заполнить данными курсор (свойство Alias). Заполнение курсора может выполняться с использование метода AutoOpen(), если класс CA помещён в экземпляр класса DataEnvironment (DE). При выполнение метода CursorFill() также вызываются соответствующие события: BeforeCursorFill(), AfterCursorFill(). Метод AutoOpen() – вызывает метод CursorFill(), по умолчанию без параметров. Если CA-класс принадлежит экземпляру класса DE, то метод DE.OpenTables() вызывает метод AutoOpen() для каждого экземпляра CA. Такой механизм позволяет (при DE.AutoOpenTables=.T.) как открыть данные формы до наступления события Load() формы, так и более точно настроить параметры вызова метода CursorFill() в случае необходимости. Например, при параметризованных запросах для ADO-источников данных. Метод AutoOpen() – вызывает метод CursorFill(), по умолчанию без параметров. Если CA-класс принадлежит экземпляру класса DE, то метод DE.OpenTables() вызывает метод AutoOpen() для каждого экземпляра CA. Такой механизм позволяет (при DE.AutoOpenTables=.T.) как открыть данные формы до наступления события Load() формы, так и более точно настроить параметры вызова метода CursorFill() в случае необходимости. Например, при параметризованных запросах для ADO-источников данных. Метод CursorRefresh() – обновляет данные в курсоре (свойство Alias) данными с сервера, повторно выполняя команду (из свойства SelectCmd) в соответствии типом источника данных (свойства DataSourceType) При выполнение этого метода также вызываются соответствующие события: BeforeCursorRefresh(), AfterCursorRefresh(). Метод CursorRefresh() – обновляет данные в курсоре (свойство Alias) данными с сервера, повторно выполняя команду (из свойства SelectCmd) в соответствии типом источника данных (свойства DataSourceType) При выполнение этого метода также вызываются соответствующие события: BeforeCursorRefresh(), AfterCursorRefresh(). Метод RecordRefresh() – обновляет данные указанной(ых) записи(ей) в курсоре (свойство Alias) данными с сервера. Этот метод интегрирован с функцией REFRESH(). Команда обновления записи может быть уточнена с помощью свойства RefreshCmd При выполнение метода также вызываются соответствующие события: BeforeRecordRefresh(), AfterRecordRefresh(). Метод RecordRefresh() – обновляет данные указанной(ых) записи(ей) в курсоре (свойство Alias) данными с сервера. Этот метод интегрирован с функцией REFRESH(). Команда обновления записи может быть уточнена с помощью свойства RefreshCmd При выполнение метода также вызываются соответствующие события: BeforeRecordRefresh(), AfterRecordRefresh(). Методы: CursorAttach(),CursorDetach() – позволяют подсоединиться/отсоединиться к/от заданному курсору, чтобы автоматически заполнить свойства экземпляра CA-класса, взяв их из указанного курсора. Методы: CursorAttach(),CursorDetach() – позволяют подсоединиться/отсоединиться к/от заданному курсору, чтобы автоматически заполнить свойства экземпляра CA-класса, взяв их из указанного курсора. Свойство: CursorSchema – позволяет (пере)определить структуры данных источника. В VFP 8.0 используется для XML-данных, в VFP 9.0 распространяется на все типы данных. В VFP 9.0 значение свойства CA.UseCursorSchema определяет значение по умолчанию для передачи как параметра lUseSchema в метод CursorFill(), если этот параметр не использован при обращении к этому методу. Свойство: CursorSchema – позволяет (пере)определить структуры данных источника. В VFP 8.0 используется для XML-данных, в VFP 9.0 распространяется на все типы данных. В VFP 9.0 значение свойства CA.UseCursorSchema определяет значение по умолчанию для передачи как параметра lUseSchema в метод CursorFill(), если этот параметр не использован при обращении к этому методу. Свойство NoData - в VFP 9.0 определяет значение по умолчанию, передаваемое в качестве lNoData параметра методу CursorFill() в том случае, если этот параметр не использован при обращении к этому методу. Свойство NoData - в VFP 9.0 определяет значение по умолчанию, передаваемое в качестве lNoData параметра методу CursorFill() в том случае, если этот параметр не использован при обращении к этому методу. и т.д. См. описания в документации… и т.д. См. описания в документации… CA-класс тесно интегрирован с функциями: CURSORSETPROP(), CURSORGETPROP(), TABLEUPDATE() CA-класс тесно интегрирован с функциями: CURSORSETPROP(), CURSORGETPROP(), TABLEUPDATE() См. также ряд статей Юрия Шутенко на начиная с «Часть I Создание CursorAdapter'а с помощью построителя». См. также ряд статей Юрия Шутенко на начиная с «Часть I Создание CursorAdapter'а с помощью построителя».ряд статей Юрия Шутенко«Часть I Создание CursorAdapter'а с помощью построителя»ряд статей Юрия Шутенко«Часть I Создание CursorAdapter'а с помощью построителя»

Особенности использования различных типов источников данных в CA-классе Свойства: Tables, KeyFieldList, UpdateNameList, UpdatableFieldList обеспечивают настройку обновления данных (могут быть настроены на закладке [Auto-Update] в CA Builder). Если эти свойства неопределенны, то предполагается указание явного механизма обновления данных. Например, используя SQL-команды в качестве свойств: UpdateCmd, InsertCmd, DeleteCmd при соответствующих *CmdDataSource и *CmdDataSourceType (по кнопке Advanced… на закладке [Auto-Update] в CA Builder) Свойства: Tables, KeyFieldList, UpdateNameList, UpdatableFieldList обеспечивают настройку обновления данных (могут быть настроены на закладке [Auto-Update] в CA Builder). Если эти свойства неопределенны, то предполагается указание явного механизма обновления данных. Например, используя SQL-команды в качестве свойств: UpdateCmd, InsertCmd, DeleteCmd при соответствующих *CmdDataSource и *CmdDataSourceType (по кнопке Advanced… на закладке [Auto-Update] в CA Builder) Значение свойства DataSourceType определяет тип источника данных. Возможные значения строки: ODBC, ADO, XML, Native. Значение свойства DataSourceType определяет тип источника данных. Возможные значения строки: ODBC, ADO, XML, Native. Native – означает, что источниками данных являются VFP-таблицы. Единственно, что здесь нужно хорошо осознавать, - это то, что мы обращаемся не к VFP-таблицам непосредственно (чрез открытие её по команде USE), а к буферизованным VFP-курсорам, являющимся результатами выполнения SQL-команд к соответствующим VFP-таблицам. Как следствие в частности, имя полученного курсора (CA.Alias) не может совпадать с именем VFP-тблицы (в команде SQL-SELECT … FROM tblName) Native – означает, что источниками данных являются VFP-таблицы. Единственно, что здесь нужно хорошо осознавать, - это то, что мы обращаемся не к VFP-таблицам непосредственно (чрез открытие её по команде USE), а к буферизованным VFP-курсорам, являющимся результатами выполнения SQL-команд к соответствующим VFP-таблицам. Как следствие в частности, имя полученного курсора (CA.Alias) не может совпадать с именем VFP-тблицы (в команде SQL-SELECT … FROM tblName) ODBC – внешним источник является совместимые с Open Database Connectivity приложения, доступ к данным которых, обеспечивается через соответствующие ODBC driver-ы ODBC – внешним источник является совместимые с Open Database Connectivity приложения, доступ к данным которых, обеспечивается через соответствующие ODBC driver-ы Значением свойства CA.DataSource в этом случае, является числовое значение, возвращаемые функцией SQLSTRINGCONNECT() или SQLCONNECT() Значением свойства CA.DataSource в этом случае, является числовое значение, возвращаемые функцией SQLSTRINGCONNECT() или SQLCONNECT() Если к примеру, для получение данных с сервера используется хранимая процедура, то значением свойства SelectCmd может быть команда обращения к такой процедуре Если к примеру, для получение данных с сервера используется хранимая процедура, то значением свойства SelectCmd может быть команда обращения к такой процедуре ADO – определяет, что внешним источником является Microsoft® ActiveX® Data Objects (ADO). Это может быть совместимое с MS OLE DB Provider приложение, обеспечивающее стандартный интерфейс для работы с данными, например SQL Server (SQLOLEDB), либо приложение совместимое с Microsoft OLE DB Provider for ODBC (MSDASQL). ADO – определяет, что внешним источником является Microsoft® ActiveX® Data Objects (ADO). Это может быть совместимое с MS OLE DB Provider приложение, обеспечивающее стандартный интерфейс для работы с данными, например SQL Server (SQLOLEDB), либо приложение совместимое с Microsoft OLE DB Provider for ODBC (MSDASQL). В этом случае, в качестве значения свойства CA.DataSource принимается объект ADODB.Recordset В этом случае, в качестве значения свойства CA.DataSource принимается объект ADODB.Recordset Т.к. объект ADODB.Recordset не имеет возможности работать с параметрами, то по умолчанию метод CA.CursorFill() неспособен обрабатывать команды, содержащие параметры. Поэтому, в случае параметризованных запросов к данным, вам следует переопределить метод CA.CursorFill() так, чтобы создать дополнительный объект ADODB.Command и передать его чрез параметр методу CursorFill(), тем самым обеспечить обработку параметров в запросе. Т.к. объект ADODB.Recordset не имеет возможности работать с параметрами, то по умолчанию метод CA.CursorFill() неспособен обрабатывать команды, содержащие параметры. Поэтому, в случае параметризованных запросов к данным, вам следует переопределить метод CA.CursorFill() так, чтобы создать дополнительный объект ADODB.Command и передать его чрез параметр методу CursorFill(), тем самым обеспечить обработку параметров в запросе. Было обнаружено, что один общий ADODB.Recordset неспособен обрабатывать несколько экземпляров CA-классов. Т.е. не следует пытаться одним DataSource, помещённым например в DataEnvironment, пытаться обслужить несколько CA-классов. Было обнаружено, что один общий ADODB.Recordset неспособен обрабатывать несколько экземпляров CA-классов. Т.е. не следует пытаться одним DataSource, помещённым например в DataEnvironment, пытаться обслужить несколько CA-классов. XML – означает, что внешними источниками являются XML-данные (Extensible Markup Language). XML – означает, что внешними источниками являются XML-данные (Extensible Markup Language). В этом случае свойство CA.SelectCmd должно быть: В этом случае свойство CA.SelectCmd должно быть: либо строкой-результатом работы функции CURSORTOXML(), (т.е. корректной строкой XML-данных для получения VFP-курсора применением функции XMLTOCURSOR()) либо строкой-результатом работы функции CURSORTOXML(), (т.е. корректной строкой XML-данных для получения VFP-курсора применением функции XMLTOCURSOR()) либо строкой, вычисляемой до объекта XMLTable, например «this.oXmlAdapter.Tables(1)» либо строкой, вычисляемой до объекта XMLTable, например «this.oXmlAdapter.Tables(1)» Если определены свойства: Tables, KeyFieldList, UpdateNameList, UpdatableFieldList и значения свойств UpdateCmdDataSourceType, InsertCmdDataSourceType, и DeleteCmdDataSourceType установлены в XML, то свойство CA.UpdateGram на момент сохранения изменений содержит XML-схему изменений в формате, принятом для SQLXML 3.0, а свойства: UpdateCmd, InsertCmd и DeleteCmd могут быть строками, вычисляющимися до методов, к которым следует обратиться при возникновении соответствующих событий. Если определены свойства: Tables, KeyFieldList, UpdateNameList, UpdatableFieldList и значения свойств UpdateCmdDataSourceType, InsertCmdDataSourceType, и DeleteCmdDataSourceType установлены в XML, то свойство CA.UpdateGram на момент сохранения изменений содержит XML-схему изменений в формате, принятом для SQLXML 3.0, а свойства: UpdateCmd, InsertCmd и DeleteCmd могут быть строками, вычисляющимися до методов, к которым следует обратиться при возникновении соответствующих событий.

Настройка обновляемых данных в CA-классе (Auto-update) Чтобы изменённые данные в курсорах, полученных через Local/Remote View, могли быть сохранены в данных первоисточника, следует: Чтобы изменённые данные в курсорах, полученных через Local/Remote View, могли быть сохранены в данных первоисточника, следует: либо во View Designer на закладке [Update criteria] установить ключевые/редактируемые поля таблиц и отметить флажок SendUpdate либо во View Designer на закладке [Update criteria] установить ключевые/редактируемые поля таблиц и отметить флажок SendUpdate либо используя функцию CURSORSETPROP(), установить свойства: Tables, KeyFieldList, UpdateNameList, UpdatableFieldList, SendUpdates соответствующим образом (см. статью в MDSN KB: Q How to Create Updatable Views by Using SQL Passthrough). либо используя функцию CURSORSETPROP(), установить свойства: Tables, KeyFieldList, UpdateNameList, UpdatableFieldList, SendUpdates соответствующим образом (см. статью в MDSN KB: Q How to Create Updatable Views by Using SQL Passthrough).Q How to Create Updatable Views by Using SQL PassthroughQ How to Create Updatable Views by Using SQL Passthrough В CA-классе имеется ряд аналогичных свойств: Tables, KeyFieldList, UpdateNameList, UpdatableFieldList, - обеспечивающих настройку изменяемых данных. В CA-классе имеется ряд аналогичных свойств: Tables, KeyFieldList, UpdateNameList, UpdatableFieldList, - обеспечивающих настройку изменяемых данных. Изменённые данные из буферизованных Local/Remote View и из курсоров, полученных с помощью CA-классов, могут быть сохранены, используя функцию TableUpdate(). Изменённые данные из буферизованных Local/Remote View и из курсоров, полученных с помощью CA-классов, могут быть сохранены, используя функцию TableUpdate().

Настройка обновляемых данных в CA-классе (Advanced)

Настройка обновляемых данных в CA-классе (XML)

Примеры фрагментов кода для XML-источников данных Создаём экземпляр класса XMLAdapter Получаем XML-строку для таблицы Загружаем XML-таблицу в XMLAdapter Выполняем заполнение локального курсора

Использование одного соединения и параметров в SQL-запросе для ADO-источника В DE.BeforeOpenTables создаём/открываем ADODB.Connection В CA.Init() создаём/настраиваем ADODB.Recordset В CA.AoutoOpen() создаём/используем ADODB.Command, при явном вызове CursorFill()

Назначение свойства __VFPSetup в CA-классе при использовании построителя в vcx/scx Если при создании класса CA вы воспользовались построителем (Builder), то наверняка обратили внимание на код, помещаемый построителем в метод AutoOpen() и событие Init(), где динамически создаётся свойство __VFPSetup. Это делается по следующим причинам: Если при создании класса CA вы воспользовались построителем (Builder), то наверняка обратили внимание на код, помещаемый построителем в метод AutoOpen() и событие Init(), где динамически создаётся свойство __VFPSetup. Это делается по следующим причинам: При использовании CA-класса в классе DataEnvironment(DE) все источники данных должны быть открыты во время выполнения метода DE.OpenTables(). При использовании CA-класса в классе DataEnvironment(DE) все источники данных должны быть открыты во время выполнения метода DE.OpenTables(). Если при этом DE-класс принадлежит форме и если у него DE.AutoOpenTables=.T. (т.е. значение, принятое по умолчанию), то метод DE.OpenTables() вызывается ещё до наступления события Form.Load(). Это делается для того, чтобы открыть все используемые в форме данные ещё до создание контролов формы, но это и нарушает общепринятую очерёдность создания объектов и событий для классов-контейнеров, т.к. к этому моменты экземпляр класса DE, принадлежащий классу формы, ещё не создан. Если при этом DE-класс принадлежит форме и если у него DE.AutoOpenTables=.T. (т.е. значение, принятое по умолчанию), то метод DE.OpenTables() вызывается ещё до наступления события Form.Load(). Это делается для того, чтобы открыть все используемые в форме данные ещё до создание контролов формы, но это и нарушает общепринятую очерёдность создания объектов и событий для классов-контейнеров, т.к. к этому моменты экземпляр класса DE, принадлежащий классу формы, ещё не создан. В этом случае, и метод CA.AutoOpen(), вызываемый из DE.OpenTables(), также нарушает общепринятую очерёдность событий, т.к. к моменту его выполнения экземпляр класса CA, принадлежащий классу DE, ещё не создан. В этом случае, и метод CA.AutoOpen(), вызываемый из DE.OpenTables(), также нарушает общепринятую очерёдность событий, т.к. к моменту его выполнения экземпляр класса CA, принадлежащий классу DE, ещё не создан. Наконец, событие Init() любого класса-контейнера должно происходить «лишь однажды» и «в самую последнюю очередь», т.е. тогда, когда все объекты, принадлежащие этому классу-контейнеру, уже существуют (т.е. успешно отработали их события Init()), но «перед выполнением каких-либо событий/методов объекта». Кодом в событии Init() обычно пользуются, чтобы выполнить окончательную настройку класса перед началом его работы (в определённом смысле «конструктор» объекта). Наконец, событие Init() любого класса-контейнера должно происходить «лишь однажды» и «в самую последнюю очередь», т.е. тогда, когда все объекты, принадлежащие этому классу-контейнеру, уже существуют (т.е. успешно отработали их события Init()), но «перед выполнением каких-либо событий/методов объекта». Кодом в событии Init() обычно пользуются, чтобы выполнить окончательную настройку класса перед началом его работы (в определённом смысле «конструктор» объекта). Добавленный построителем «условный код», включая и динамически создаваемое дополнительное свойство _VFPSetup, в начало метода CA.AutoOpen() и в событие CA.Init(), является попыткой решить перечисленные проблемы, т.е. обеспечивает вызов события CA.Init() лишь однажды в т.ч. и до начала выполнения «прикладного кода» в CA.AutoOpen() Добавленный построителем «условный код», включая и динамически создаваемое дополнительное свойство _VFPSetup, в начало метода CA.AutoOpen() и в событие CA.Init(), является попыткой решить перечисленные проблемы, т.е. обеспечивает вызов события CA.Init() лишь однажды в т.ч. и до начала выполнения «прикладного кода» в CA.AutoOpen()

Журнал событий (DatasourceType=ADO,DeteEnvironment.AutoOpenTables=.T.)

XMLAdapter COM, COM+ XML Diffgram XML DataSet Схема обмена данными между клиентом и сервером Интернет/ Интранет Локальная сеть SOAP, HTTP, TCP/IP XML Diffgram DCOM, TCP/IP ODBC, ADO, File X CursorAdapter Буфер данных Данные Изменения в данных MS IIS ASP, ASP.NET DCOM, TCP/IP ODBC, ADO, File X XML DataSet XML Diffgram XML DataSet XMLAdapter CursorAdapter VFP-COM компонента Совместная работа классов CursorAdapter и XMLAdapter Сервер Клиент

Ссылки на ресурсы в Интернет Статьи Московского издательства FoxTalk на Статьи Московского издательства FoxTalk на «Извлечение и обновление данных при помощи CursorAdapters», Дуг Хенниг «Извлечение и обновление данных при помощи CursorAdapters», Дуг Хенниг «Многократно используемые классы данных», Дуг Хенниг «Многократно используемые классы данных», Дуг Хенниг Ряд статей Юрия Шутенко на начиная с Ряд статей Юрия Шутенко на начиная с Примеры кода на стр. Примеры кода на стр. cainde.zip [ ] (56,0KB) - примеры кода для VFP 8.0 (или выше) использования нескольких классов CursorAdapter, содержащих параметризованные SQL-запросы… cainde.zip [ ] (56,0KB) - примеры кода для VFP 8.0 (или выше) использования нескольких классов CursorAdapter, содержащих параметризованные SQL-запросы… xasampls.zip [ ] (8,0KB) - примеры кода для VFP 9.0 (или выше) использования VFP-класса XMLAdapter. Показано использование для получения/применения xml-diffgram… xasampls.zip [ ] (8,0KB) - примеры кода для VFP 9.0 (или выше) использования VFP-класса XMLAdapter. Показано использование для получения/применения xml-diffgram… Обсуждение вопросов, связанных с использованием класса CursorAdapter на форуме Используя страничку поиска по ключевым словам можно попробовать найти соответствующие темы обсуждений… Обсуждение вопросов, связанных с использованием класса CursorAdapter на форуме Используя страничку поиска по ключевым словам можно попробовать найти соответствующие темы обсуждений…