Создание собственного пользовательского обработчика
Область применения: 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);
};
};
См. также
- Форум для разработчиков Access
- Помощь при работе с Access на support.office.com
- Помощь при работе с Access на answers.microsoft.com
- Форумы Access на UtterAccess
- Справочный центр (FMS) для разработки и VBA программирования для Access
- Публикации по Access на StackOverflow
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.