Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This example uses the MaxRecords property to open a Recordset containing the 10 most expensive titles in the Titles table.
Example
// MaxRecords_Property_Example.cpp
// compile with: /EHsc
#import "msado15.dll" no_namespace rename("EOF","EndOfFile")
#include <ole2.h>
#include <stdio.h>
#include <conio.h>
#include "icrsint.h"
// This class extracts titles and type from the titles table
class CTitleRs : public CADORecordBinding {
BEGIN_ADO_BINDING(CTitleRs)
// Column title is the 1st field in the Recordset
ADO_VARIABLE_LENGTH_ENTRY2(1, adVarChar,m_szau_Title,
sizeof(m_szau_Title), lau_TitleStatus, FALSE)
// Column price is the 2nd field in the Recordset
ADO_VARIABLE_LENGTH_ENTRY2(2, adDouble, m_szau_Price,
sizeof(m_szau_Price), lau_PriceStatus, FALSE)
END_ADO_BINDING()
public:
CHAR m_szau_Title[81];
ULONG lau_TitleStatus;
DOUBLE m_szau_Price;
ULONG lau_PriceStatus;
};
// Function Declarations
inline void TESTHR(HRESULT x) { if FAILED(x) _com_issue_error(x); };
void MaxRecordsX();
void PrintProviderError(_ConnectionPtr pConnection);
void PrintComError(_com_error &e);
int main() {
if ( FAILED(::CoInitialize(NULL)) )
return -1;
MaxRecordsX();
::CoUninitialize();
}
void MaxRecordsX() {
// Define ADO ObjectPointers. Initialize Pointers on define
// These are in the ADODB :: namespace
_RecordsetPtr pRstTemp = NULL;
// Define Other Variables
IADORecordBinding *picRs = NULL; // Interface Pointer Declared
CTitleRs titlers; // C++ Class Object
try {
// Assign Connection String to Variable
_bstr_t strCnn("Provider='sqloledb'; Data Source='My_Data_Source'; Initial Catalog='pubs'; Integrated Security='SSPI';");
// Open Recordset containing the 10 most expensive titles in the Titles table.
TESTHR(pRstTemp.CreateInstance(__uuidof(Recordset)));
pRstTemp->MaxRecords = 10;
pRstTemp->Open("SELECT title,price FROM Titles ORDER BY Price DESC",
strCnn, adOpenForwardOnly, adLockReadOnly, adCmdText);
// Open IADORecordBinding interface pointer for binding Recordset to a class
TESTHR(pRstTemp->QueryInterface(__uuidof(IADORecordBinding), (LPVOID*)&picRs));
// Bind the Recordset to a C++ class here
TESTHR(picRs->BindToRecordset(&titlers));
// Display the contents of the Recordset
printf("Top Ten Titles by Price:\n\n");
while ( !(pRstTemp->EndOfFile) ) {
printf("%s --- %6.2lf\n", titlers.lau_TitleStatus == adFldOK ?
titlers.m_szau_Title : "<NULL>", titlers.lau_PriceStatus == adFldOK ?
titlers.m_szau_Price : 0.00);
pRstTemp->MoveNext();
}
}
catch(_com_error &e) {
// Display errors, if any. Pass connection pointer accessed from the Recordset.
_variant_t vtConnect = pRstTemp->GetActiveConnection();
// GetActiveConnection returns connect string if connection
// is not open, else returns Connection object.
switch(vtConnect.vt) {
case VT_BSTR:
PrintComError(e);
break;
case VT_DISPATCH:
PrintProviderError(vtConnect);
break;
default:
printf("Errors occurred.");
break;
}
}
// Clean up objects before exit. Release the IADORecordset Interface here
if (picRs)
picRs->Release();
if (pRstTemp)
if (pRstTemp->State == adStateOpen)
pRstTemp->Close();
};
void PrintProviderError(_ConnectionPtr pConnection) {
// Print Provider Errors from Connection object
// pErr is a record object in the Connection's Error collection
ErrorPtr pErr = NULL;
if ( (pConnection->Errors->Count)>0 ) {
long nCount = pConnection->Errors->Count;
// Collection ranges from 0 to nCount-1
for ( long i = 0 ; i < nCount ; i++ ) {
pErr = pConnection->Errors->GetItem(i);
printf("\t Error Number :%x \t %s", pErr->Number, pErr->Description);
}
}
}
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);
}
Top Ten Titles by Price:
But Is It User Friendly? --- 22.95
Computer Phobic AND Non-Phobic Individuals: Behavior Variations --- 21.59
Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean --- 20.95
Secrets of Silicon Valley --- 20.00
The Busy Executive's Database Guide --- 19.99
Straight Talk About Computers --- 19.99
Silicon Valley Gastronomic Treats --- 19.99
Prolonged Data Deprivation: Four Case Studies --- 19.99
Sushi, Anyone? --- 14.99
Fifty Years in Buckingham Palace Kitchens --- 11.95