Table of contents
Collapse the table of content
Expand the table of content

Handler Property Example (VC++)

office 365 dev account|Last Updated: 4/3/2018
3 Contributors

Applies to: Access 2013 | Access 2016

This example demonstrates the RDS DataControl objectHandler property. (SeeDataFactory Customization for more details.)

Assume the following sections in the parameter file, Msdfmap.ini, located on the server:

[connect AuthorDataBase] 
[sql AuthorById] 
SQL="SELECT * FROM Authors WHERE au_id = ?" 

Your code looks like the following. The command assigned to the SQL property will match the ** AuthorById** identifier and will retrieve a row for author Michael O'Leary. Although theConnect property in your code specifies the Northwind data source, that data source will be overwritten by the Msdfmap.ini connect section. The DataControl objectRecordset property is assigned to a disconnectedRecordset object purely as a coding convenience.

// 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()
hr = ::CoInitialize(NULL);if (SUCCEEDED(hr))
printf("Press any key to continue...");getch();
// //// 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 = "http://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 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 for developers forum on MSDN
Access help on
Access help on
Search for specific Access error codes on Bing
Access forums on UtterAccess
Access wiki on UtterAcess
Access developer and VBA programming help center (FMS)
Access posts on StackOverflow

© 2018 Microsoft