Сначала небольшая справка из 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", в котором будет храниться описание этого класса. На экране это может выглядеть так:
Ну и нажмите OK. Откроется основное окно дизайнера классов. Из контекстного меню (щелкните по правой клавише мыши по иконке DataEnvironment) выберите "Builder...":
Откроется окно "DataEnvironment Builder":
В селекторе Source Type выберите пункт "Native" и в качестве базы данных возьмите стнадартную тестовую базу C:\Pprogram Files\Microsoft Visual Foxpro 8\Samples\Northwind\Northwind.dbc. Это будет выглядеть примерно так:
Далее переходим к закладке "2.Cursors". Поскольку у нас пока нет своего уже созданного CursorAdapter'а, а стало быть и нечего добавлять, то воспользуется построителем, для чего нажмем на кнопку "New"
Откроется новое окно "CursorAdapter Builder":
поменяйте наименования по умолчанию, на свои собственные. Name - имя курсора в объекта DataEnvironment, Alias - алиас курсора, который будет сгенерирован при выполнении запроса и установите метку в чек-боксе "Use DataEnvironment data source" (смотри свойство UseDeDatasource). Теперь окно построителя будет выглядеть примерно так:
"Use DataEnvironment data source" - отмечаем потому, что мы уже выбрали базу данных в качестве источника данных. Можно иначе? Определенно, и это чуть ниже.
Теперь переходим на закладку "Data Access". И вновь доверимся построителю VFP, для чего нажмем на кнопку "Build" над полем "Select command"
Откроется окно построителя команды "Select":
В селекторе таблиц уже традиционно, как во многих примерах подсказки, выбираем таблицу "Customers" и из списка полей (лист-бокс сдева) выбираем "Customers.*", то есть все поля, отправляем выбор в правый лист-бокс и нажимаем OK
Теперь мы возвращаемся в окно построителя CursorAdapter'a и можем дополнительно произвести какие-то настройки, как то: модифицировать команду Select (смотри свойство SelectCmd)- добавить фильтры, изменить буферизацию таблицы и так далее, мы еще к этому вернемся. Схему и прочие настройки пока трогать не будем.
Далее перейдем на закладку "3.Auto-Update".
Установим метки в чек-боксах "Auto-update","Update all fields" и установим метку в чек-боксе "Primary key" для поля CUSTOMERID. Остальное оставим по умолчанию. Примерно это выглядит так:
Не будем пока больше ничего менять, нажимаем OK и возвращаемся в окно построителя для DataEnvironment.
еще раз нижимаем 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.
|