Необходимо добавить функцию обработчика для кнопки выполнить в файле ресурсов диалогового окна.
Создание обработчика кнопки Run
CTRL и дважды нажмите на кнопку запустить . CTestProvDlg::OnRun функция появляется в окне исходного кода.Для создания обработчика, используйте следующие классы шаблонов потребителей OLE DB:
Каждый из этих классов соответствует COM-объект в поставщике.
Добавьте приведенный ниже код. В этом коде обработчика объект CCommand принимает класс CProvider в качестве параметра шаблона. Этот параметр представляет привязки, используемые поставщиком доступа к данным.
///////////////////////////////////////////////////////////////////////
/ / TestProvDlg.cpp
void CTestProvDlg::OnRun()
{
CCommandlt;CAccessor <CProvider> > Таблица;
CDataSource источник;
CSession сессии;
Если (источник.Open("MyProvider.MyProvider.1", NULL)! = S_OK)
возвращение;
Если (сессия.Open(Source)! = S_OK)
возвращение;
Если (таблица.Открытый (сессия, _T("c:\\public\\testprf2\\gloo.txt"))! = S_OK)
возвращение;
во время (таблица.MoveNext() == S_OK)
{
m_ctlString1.AddString(Table.szCommand);
m_ctlString2.AddString(Table.szText);
}
}
Обработчик использует три открытые призывы, показано ниже, которые соответствуют трем объектам COM в поставщике. Это находит провайдера, с помощью ProgID. ProgID можно получить из системного реестра или посмотрев в поставщике rgs файл ( MyProvider.rgs для простого поставщика в реализации простого поставщика только для чтения). Поставщик открывает текстовый файл с именем gloo.txt , который содержит четное количество строк, разделенных перевозку возвращается. Открытый проходит путь к поставщику как строку поставщику.
если (источник.Open("MyProvider.MyProvider.1", NULL)! = S_OK)
возвращение;
Если (сессия.Open(Source)! = S_OK)
возвращение;
Если (таблица.Открытый (сессия, _T("c:\\public\\testprf2\\gloo.txt"))! = S_OK)
возвращение
Для извлечения данных, вызовов обработчика table.MoveNext , как показано ниже. Если строк больше нет, поставщик возвращает DB_S_ENDOFROWSET и цикл завершается. Оператор цикла управления сравнивает возвращаемое значение S_OK. Если код макроса SUCCEEDED , цикл прекращается не потому, что DB_S_ENDOFROWSET рассматривается успешный код возврата.
во время (таблица.MoveNext() == S_OK)
{
m_ctlString1.AddString(Table.szCommand);
m_ctlString2.AddString(Table.szText);
}
Теперь потребитель готов для тестирования с простой поставщик (построен в реализации простого поставщика только для чтения).
Следующий раздел показывает, как изменить потребителя для использования с более поставщик , реализующий интерфейс IRowsetLocate.