Juri Shutenko Personal Homepage. Visual FoxPro.

CursorAdapter. Часть I Создание CursorAdapter'а с помощью построителя.

Сначала небольшая справка из MS:

Предусматривает класс расширенных (extended - вот поробуй подбери точное соответствие) курсоров, которые обеспечивают поддержку управления широким диапазоном локальных и удаленных источников данных. К этим типам источников данных относятся следующие:

  • Природные курсоры VFP
  • Open Database Connectivity (ODBC)
  • ActiveX Data Object (ADO)
  • Extensible Markup Language (XML)

Цитата из статьи Chuck'а Urwiller'а:
 
"Класс уникален тем, что это первый базовый класс в VFP, который обеспечивает преобразование между природными курсорами VFP и разными источниками данных, в одном, единичном классе, или, другими словами, способностью транслировать потоки данных ODBC, ADO recordsets и документов XML в курсоры Visual FoxPro."

Осталось научиться пользоваться такой приятной штучкой. Для начала построим класс CursorAdapter'a с помощью построителя Visual FoxPro.
 
Откройте дизайнер классов либо через меню File->New->Class или в мэнеджере проектов, в уже существующем проекте, на закладке "Classes" нажмите кнопку "New". В открывшемся диалоговом окне введите название для класса - у меня это "cad_Test", в селекторе типов "Based on" выберите DataEnvironment (не надо удивляться, смотри статью про новые возможности DataEnvironment в VFP 8.0) и, наконец, укажите какую-то библиотеку в селекторе "Store in", в котором будет храниться описание этого класса. На экране это может выглядеть так:

New class window

Ну и нажмите OK. Откроется основное окно дизайнера классов. Из контекстного меню (щелкните по правой клавише мыши по иконке DataEnvironment) выберите "Builder...":

Select 'Builder...' from context-menu

Откроется окно "DataEnvironment Builder":
 
В селекторе Source Type выберите пункт "Native" и в качестве базы данных возьмите стнадартную тестовую базу C:\Pprogram Files\Microsoft Visual Foxpro 8\Samples\Northwind\Northwind.dbc. Это будет выглядеть примерно так:

DataEnvironment Builder window

Далее переходим к закладке "2.Cursors". Поскольку у нас пока нет своего уже созданного CursorAdapter'а, а стало быть и нечего добавлять, то воспользуется построителем, для чего нажмем на кнопку "New"

In DataEnvironment Builder window click on 'New' button

Откроется новое окно "CursorAdapter Builder":

Change name and alias according to your own rules.

поменяйте наименования по умолчанию, на свои собственные. Name - имя курсора в объекта DataEnvironment, Alias - алиас курсора, который будет сгенерирован при выполнении запроса и установите метку в чек-боксе "Use DataEnvironment data source" (смотри свойство UseDeDatasource). Теперь окно построителя будет выглядеть примерно так:

Result picture of the Properties page in CursorAdapter Builder

"Use DataEnvironment data source" - отмечаем потому, что мы уже выбрали базу данных в качестве источника данных. Можно иначе? Определенно, и это чуть ниже.

Теперь переходим на закладку "Data Access". И вновь доверимся построителю VFP, для чего нажмем на кнопку "Build" над полем "Select command"

Click on Build button above the editbox Select command

Откроется окно построителя команды "Select":

Select commad Builder window

В селекторе таблиц уже традиционно, как во многих примерах подсказки, выбираем таблицу "Customers" и из списка полей (лист-бокс сдева) выбираем "Customers.*", то есть все поля, отправляем выбор в правый лист-бокс и нажимаем OK

Select appropriate table from table selector

Select appropriate fileds from field selector

Теперь мы возвращаемся в окно построителя CursorAdapter'a и можем дополнительно произвести какие-то настройки, как то: модифицировать команду Select (смотри свойство SelectCmd)- добавить фильтры, изменить буферизацию таблицы и так далее, мы еще к этому вернемся. Схему и прочие настройки пока трогать не будем.

Result picture of the Data Access page in CursorAdapter Builder

Далее перейдем на закладку "3.Auto-Update".

Auto-Update page in CursorAdapter Builder window

Установим метки в чек-боксах "Auto-update","Update all fields" и установим метку в чек-боксе "Primary key" для поля CUSTOMERID. Остальное оставим по умолчанию. Примерно это выглядит так:

Set appropriate settings

Не будем пока больше ничего менять, нажимаем OK и возвращаемся в окно построителя для DataEnvironment.

Result picture of the DataEnvironment Builder window

еще раз нижимаем OK и дело сделано. Сохраняем сделанные изменения в классе. Далее, набираем последовательно в командном окне приведенные ниже команды - естественно замените имена класса и библиотеки на свои! -.

loCA_Test=Newobject("cad_Test","C:\Hwadmin\Libs\js_cadapters.vcx")
? loCA_Test.OpenTables()
BROWSE

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

Теперь вернемся немного назад, к третьему рисунку. В нашем классе, мы установили для класса DataEnvironment тип источника данных и указали базу данных, с которой мы работали в данном примере.
 
Откройте созданный класс на редактирование, выберите из контекстного меню "Builder...", в окне построителя выберите на закладке "Data Source" в селекторе "Data Source Type" пустую строку, зате очистите поле "Database". Далее перейдите на закладку "Cursors", выделите в лист-боксе созданный курсор и нажмите на кнопку "Builder...". Снимите метку с чек-бокса "Use DataEnvironment data source". Появится селектор типа данных и поле для ввода имени базы данных. Выберите в селекторе типа иточника данных вид "Native", в качестве базы данных установите ту жу базу, что мы использовали ранее и завершите редактирование. Сохраните изменения и выполните приведенный выше код.
 
И все-таки различие есть, особенно если использовать метод CursorFill при установленном в .F. свойстве DE AutoOpenTables и случая, когда CursorAdapter использует источник данных установленный для DataEnvironment. Но эти тонкости, как впрочем и многие другие разберем очень подробно, когда будем рассматривать свойства и методы класса CursorAdapter.
 
В следующей части посмотрим, как CursorAdapter работаем при установке в качестве источника данных ODBC и в частности сервером MySQL.

Селектор для быстрого перехода на сайты, связанные с Visual FoxPro.