Ado2atl.exe Returns ADO Interfaces from COM

ID: Q186387


The information in this article applies to:
  • ActiveX Data Objects (ADO), used with:
    • Microsoft Visual C++, 32-bit Editions, versions 5.0, 6.0


SUMMARY

The Ado2atl.exe sample demonstrates how to create a simple Active Template Library (ATL) Component Object Model (COM) object that returns an ADO recordset interface. The sample also includes a Visual Basic client project that uses the ATL COM object to create an interface to an ADO _Recordset.

After extracting the files, first build the Visual C++ projects to register the COM Objects, then use Visual Basic 5.0 to build the client program.

For additional information, and for a more complete sample that returns a disconnected recordset, click the article number below to view the article in the Microsoft Knowledge Base:

Q200122 Sample: ATL2ADO.exe Returns Disconnected ADO Recordset
You might want to disconnect an ADO recordset before returning it.


MORE INFORMATION

The following file is available for download from the Microsoft Download Center. Click the file name below to download the file:

Ado2atl.exe
For more information about how to download files from the Microsoft Download Center, please visit the Download Center at the following Web address
http://www.microsoft.com/downloads/search.asp
and then click How to use the Microsoft Download Center. You must register the ATL COM objects before you can use the Visual Basic project. The objects automatically register when built. There are two Visual C++ 5.0 projects: RkADO and RdADO2. When building these projects, you may need to remove the _ATL_MIN_CRT preprocessor from the setting for the release builds. To do this, from the Project menu, click Settings, and then select the preprocessor category from the C/C++ tab. You must include the type libraries from these projects in the Visual Basic project. From the Visual Basic Project menu, choose References, and then click RkADO 1.0 Type Library and RdADO2 1.0 Type Library.

The RdADO project creates a COM object that directly returns an ADO _Recordset interface. To return an ADO interface, you must modify the .idl file that the ATL wizard created. After you add an interface that returns a _Recordset, you must cut the interface from the top of the .idl file and paste it into the library section. You must also import (via importlib) the ADO DLL, which contains the ADO type library information needed to marshal ADO interfaces. Compare the Rdado2.idl file (which requires no modification) to the Rkado.idl file, which requires that you move the interface from the top of the file to the Library section. The RdADO2 project creates a COM object that returns the ADO _Recordset interface as a IDispatch interface. IDispatch interfaces can be returned directly without modification.

To use ADO smart pointers in the COM object implementation, you must add the following code to the Stdafx.h files:

      #import <msado15.dll>     no_namespace 
You get the following compiler warning, which can safely be ignored:
...ado2atl\debug\msado15.tlh(409) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
You must copy the Adostudent.mdb file to the C:\Temp directory. You may have to change the .idl file importlib("path\msado15.dll") statement to reflect the actual location of your ADO DLL file.

You must successfully build each ATL project (so it can register the COM objects) before running the Visual Basic project.

To activate the Visual Basic client, enter a Graduation Year (88 for example). This enables the Get RS (Get Record Set) and Get RS Id (Get Record Set via IDispatch) buttons.

There is minimal error checking in the Visual Basic sample. For additional information, click the article number below to view the article in the Microsoft Knowledge Base:
Q167957 INFO: Extracting Error Information from ADO in VB
CAUTION: The Rkado.idl file uses the importlib directive to bring in the ADO typelib information. The problem with this is that the import occurs at run-time, not compile time. This means that every computer where this typelib is used must have the Msado15.dll file installed in the same location, which is not something you can always expect.

The use of the import directive, which causes the import to occur at compile time instead of the importlib directive, resolves this issue.


REFERENCES

For additional information, click the article numbers below to view the articles in the Microsoft Knowledge Base:

Q200122 SAMPLE: ATL2ADO.exe Returns Disconnected ADO Recordset
Q181733 FILE: Adovcbtd.exe #import Using UpdateBatch and CancelBatch
Q182389 FILE: Adovcbm.exe ADO 1.5 with #import and Getrows/Bookmarks
Q172403 FILE: Adovb.exe Demonstrates How to Use ADO with Visual
(c) Microsoft Corporation 1998, All Rights Reserved. Contributions by Rick Anderson, Microsoft Corporation.

Additional query words:

Keywords : kbfile kbsample kbADO kbADO150 kbDatabase kbMDAC kbVBp500 kbVC500 kbVC600 kbVS97 kbGrpMDAC kbDSupport
Version : WINDOWS:
Platform : WINDOWS
Issue type : kbinfo


Last Reviewed: January 26, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.