Export (0) Print
Expand All
Expand Minimize

Type Property Example (Property) (VC++)

This example demonstrates the Type property. It is a model of a utility for listing the names and types of a collection, like Properties, Fields, etc.

We do not need to open the Recordset to access its Properties collection; they come into existence when the Recordset object is instantiated. However, setting the CursorLocation property to adUseClient adds several dynamic properties to the Recordset object's Properties collection, making the example a little more interesting. For sake of illustration, we explicitly use the Item property to access each Property object.

// BeginTypePropertyCpp.cpp
// compile with: /EHsc
#import "msado15.dll" no_namespace rename("EOF", "EndOfFile")

// Function declarations
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
void TypeX();
void PrintComError(_com_error &e);

int main() {
   if (FAILED(::CoInitialize(NULL)))
      return -1;

   TypeX();
   ::CoUninitialize();
}

void TypeX() {
   // Define ADO object pointers, initialize pointers. These are in the ADODB:: namespace
   _RecordsetPtr pRst = NULL;
   PropertyPtr pProperty = NULL;

   // Define Other Variables
   _bstr_t strMsg;
   _variant_t vIndex;
   int intLineCnt = 0;   

   try {
      TESTHR(pRst.CreateInstance (__uuidof(Recordset)));

      // Set the Recordset Cursor Location
      pRst->CursorLocation = adUseClient;

      for (short iIndex = 0; iIndex <= (pRst->Properties->GetCount() - 1);iIndex++) {
         vIndex = iIndex;
         pProperty = pRst->Properties->GetItem(vIndex);

         int propType = (int)pProperty->GetType();

         switch(propType) {
         case adBigInt:
            strMsg = "adBigInt";
            break;
         case adBinary:
            strMsg = "adBinary";
            break;
         case adBoolean:
            strMsg = "adBoolean";
            break;
         case adBSTR:
            strMsg = "adBSTR";
            break;
         case adChapter:
            strMsg = "adChapter";
            break;
         case adChar:
            strMsg = "adChar";
            break;
         case adCurrency:
            strMsg = "adCurrency";
            break;
         case adDate:
            strMsg = "adDate";
            break;
         case adDBDate:
            strMsg = "adDBDate";
            break;
         case adDBTime:
            strMsg = "adDBTime";
            break;
         case adDBTimeStamp:
            strMsg = "adDBTimeStamp";
            break;
         case adDecimal:
            strMsg = "adDecimal";
            break;
         case adDouble:
            strMsg = "adDouble";
            break;
         case adEmpty:
            strMsg = "adEmpty";
            break;
         case adError:
            strMsg = "adError";
            break;
         case adFileTime:
            strMsg = "adFileTime";
            break;
         case adGUID:
            strMsg = "adGUID";
            break;
         case adIDispatch:
            strMsg = "adIDispatch";
            break;
         case adInteger:
            strMsg = "adInteger";
            break;
         case adIUnknown:
            strMsg = "adIUnknown";
            break;
         case adLongVarBinary:
            strMsg = "adLongVarBinary";
            break;
         case adLongVarChar:
            strMsg = "adLongVarChar";
            break;
         case adLongVarWChar:
            strMsg = "adLongVarWChar";
            break;
         case adNumeric:
            strMsg = "adNumeric";
            break;
         case adPropVariant:
            strMsg = "adPropVariant";
            break;
         case adSingle:
            strMsg = "adSingle";
            break;
         case adSmallInt:
            strMsg = "adSmallInt";
            break;
         case adTinyInt:
            strMsg = "adTinyInt";
            break;
         case adUnsignedBigInt:
            strMsg = "adUnsignedBigInt";
            break;
         case adUnsignedInt:
            strMsg = "adUnsignedInt";
            break;
         case adUnsignedSmallInt:
            strMsg = "adUnsignedSmallInt";
            break;
         case adUnsignedTinyInt:
            strMsg = "adUnsignedTinyInt";
            break;
         case adUserDefined:
            strMsg = "adUserDefined";
            break;
         case adVarBinary:
            strMsg = "adVarBinary";
            break;
         case adVarChar:
            strMsg = "adVarChar";
            break;
         case adVariant:
            strMsg = "adVariant";
            break;
         case adVarNumeric:
            strMsg = "adVarNumeric";
            break;
         case adVarWChar:
            strMsg = "adVarWChar";
            break;
         case adWChar:
            strMsg = "adWChar";
            break;
         default:
            strMsg = "*UNKNOWN*";
            break;
         }

         intLineCnt++;

         printf ("Property %d : %s,Type = %s\n",iIndex, (LPCSTR)pProperty->GetName(),
            (LPCSTR)strMsg);
      }
   }
   catch(_com_error &e) {
      // Notify the user of errors if any.
      PrintComError(e);
   }
}

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);
}
Show:
© 2014 Microsoft