Поделиться через


Создание собственного пользовательского обработчика

Область применения: Access 2013 | Access 2016

Вы можете написать собственный обработчик, если вы являетесь администратором сервера IIS, которому нужна поддержка RDS по умолчанию, но больший контроль над запросами пользователей и правами доступа.

The MSDFMAP. Обработчик реализует интерфейс IDataFactoryHandler .

Интерфейс IDataFactoryHandler

Этот интерфейс имеет два метода : GetRecordset и Reconnect. Для обоих методов требуется, чтобы свойству CursorLocation было присвоено значение adUseClient.

Оба метода принимают аргументы, которые появляются после первой запятой в ключевом слове Handler=. Например, "Handler=progid,arg1,arg2;" передает строку аргумента "arg1,arg2", и передает строку аргумента "arg1,arg2", а "Handler=progid" также передает пустой аргумент.

Метод GetRecordset

Этот метод запрашивает источник данных и создает новый объект Recordset с использованием предоставленных аргументов. Набор записей должен быть открыт с помощью adLockBatchOptimistic и не должен открываться асинхронно.

Аргументы GetRecordset

Конн Строка подключения.

Args Аргументы для обработчика.

Запроса Текст команды для выполнения запроса.

ppRS Указатель, в который должен быть возвращен набор записей .

Метод повторного подключения

Этот метод обновляет источник данных. Он создает новый объект Connection и присоединяет заданный набор записей.

Аргументы повторного подключения

Конн Строка подключения.

Args Аргументы для обработчика.

Prs Объект Recordset .

msdfhdl.idl

Это определение интерфейса для IDataFactoryHandler , которое отображается в файле msdfhdl.idl .

[ 
  uuid(D80DE8B3-0001-11d1-91E6-00C04FBBBFB3), 
  version(1.0) 
] 
library MSDFHDL 
{ 
    importlib("stdole32.tlb"); 
    importlib("stdole2.tlb"); 
 
    // TLib : Microsoft ActiveX Data Objects 2.0 Library 
    // {00000200-0000-0010-8000-00AA006D2EA4} 
    #ifdef IMPLIB 
    importlib("implib\\x86\\release\\ado\\msado15.dll"); 
    #else 
    importlib("msado20.dll"); 
    #endif 
 
    [ 
      odl, 
      uuid(D80DE8B5-0001-11d1-91E6-00C04FBBBFB3), 
      version(1.0) 
    ] 
    interface IDataFactoryHandler : IUnknown 
    { 
HRESULT _stdcall GetRecordset( 
      [in] BSTR conn, 
      [in] BSTR args, 
      [in] BSTR query, 
      [out, retval] _Recordset **ppRS); 
 
// DataFactory will use the ActiveConnection property 
// on the Recordset after calling Reconnect. 
   HRESULT _stdcall Reconnect( 
      [in] BSTR conn, 
      [in] BSTR args, 
      [in] _Recordset *pRS); 
    }; 
}; 

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.