Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: Access 2013 | Access 2016
В этом примере демонстрируется свойство обработчика объекта DataControl RDS. (Дополнительные сведения см. в разделе Настройка DataFactory .)
Предположим, что следующие разделы файла параметров, Msdfmap.ini, находятся на сервере:
[connect AuthorDataBase]
Access=ReadWrite
Connect="DSN=Pubs"
[sql AuthorById]
SQL="SELECT * FROM Authors WHERE au_id = ?"
Код выглядит следующим образом. Команда, назначенная свойству SQL , будет соответствовать идентификатору AuthorById и получит строку для автора Майкла О'Лири. Хотя свойство Connect в коде указывает источник данных Northwind, этот источник данных будет перезаписан разделом Msdfmap.ini connect . Свойство Recordset объекта DataControl назначается отключенным объекту Recordset исключительно для удобства программирования.
// BeginHandlerCpp#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")#import "C:\Program Files\Common Files\System\MSADC\msadco.dll"
#include <ole2.h>#include <stdio.h>
#include <conio.h>// Function declarations
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};void HandlerX(void);
void PrintProviderError(_ConnectionPtr pConnection);void PrintComError(_com_error &e);
//////////////////////////////////////////////////////////// //
// Main Function //// //
//////////////////////////////////////////////////////////void main()
{HRESULT hr = S_OK;
hr = ::CoInitialize(NULL);if (SUCCEEDED(hr))
{HandlerX();
printf("Press any key to continue...");getch();
::CoUninitialize();}
}//////////////////////////////////////////////////////////
// //// HandlerX Function //
// ////////////////////////////////////////////////////////////
void HandlerX(void){
HRESULT hr = S_OK;// Define ADO object pointers.
// Initialize pointers on define.// These are in the ADODB:: namespace.
_RecordsetPtr pRst = NULL;//Define RDS object pointers.
RDS::IBindMgrPtr dc;try
{TESTHR(hr = dc.CreateInstance(__uuidof(RDS::DataControl)));
dc->Handler = "MSDFMAP.Handler";dc->Server = "https://MyServer";
dc->Connect = "Data Source=AuthorDatabase";dc->SQL = "AuthorById('267-41-2394')";
// Retrieve the record.dc->Refresh();
// Use another Recordset as a convenience.pRst = dc->GetRecordset();
printf("Author is %s %s",(LPSTR) (_bstr_t) pRst->Fields->GetItem("au_fname")->Value,\(LPSTR) (_bstr_t) pRst->Fields->GetItem("au_lname")->Value);
pRst->Close();} // End Try statement.
catch (_com_error &e){
PrintProviderError(pRst->GetActiveConnection());PrintComError(e);
}}
//////////////////////////////////////////////////////////// //
// PrintProviderError Function //// //
//////////////////////////////////////////////////////////void PrintProviderError(_ConnectionPtr pConnection)
{// Print Provider Errors from Connection object.
// pErr is a record object in the Connection's Error collection.ErrorPtr pErr = NULL;
long nCount = 0;long i = 0;
if( (pConnection->Errors->Count) > 0){
nCount = pConnection->Errors->Count;// Collection ranges from 0 to nCount -1.
for(i = 0; i < nCount; i++){
pErr = pConnection->Errors->GetItem(i);printf("\t Error number: %x\t%s", pErr->Number, pErr->Description);
}}
}//////////////////////////////////////////////////////////
//// PrintComError Function //
// ////////////////////////////////////////////////////////////
void PrintComError(_com_error &e){
_bstr_t bstrSource(e.Source());_bstr_t bstrDescription(e.Description());
// Print Com errors.printf("Error\n");
printf("\tCode = %08lx\n", e.Error());printf("\tCode meaning = %s\n", e.ErrorMessage());
printf("\tSource = %s\n", (LPCSTR) bstrSource);printf("\tDescription = %s\n", (LPCSTR) bstrDescription);
}// EndHandlerCpp
См. также
- Форум для разработчиков Access
- Помощь при работе с Access на support.office.com
- Помощь при работе с Access на answers.microsoft.com
- Форумы Access на UtterAccess
- Справочный центр (FMS) для разработки и VBA программирования для Access
- Публикации по Access на StackOverflow
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.