Export (0) Print
Expand All
Expand Minimize

Attributes and Name Properties Example (VC++)

This example displays the value of the Attributes property for Connection, Field, and Property objects. It uses the Name property to display the name of each Field and Property object.

// BeginAttributesCpp.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 LastName, FirstName, FaxPhone from Employees table

class CEmployeeRs : public CADORecordBinding {
   BEGIN_ADO_BINDING(CEmployeeRs)

      // Column LastName is the 2nd field in the table
      ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, m_szemp_LastName, sizeof(m_szemp_LastName), lemp_LastNameStatus, TRUE)

      // Column FirstName is the 17th field in the table
      ADO_VARIABLE_LENGTH_ENTRY2(17, adVarChar, m_szemp_FirstName, sizeof(m_szemp_FirstName), lemp_FirstNameStatus, TRUE)

      // Column FaxPhone is the 18th field in the table
      ADO_VARIABLE_LENGTH_ENTRY2(18, adVarChar, m_szemp_Faxphone, sizeof(m_szemp_Faxphone), lemp_FaxphoneStatus, TRUE)

      END_ADO_BINDING()

public:
   CHAR  m_szemp_LastName[21];
   ULONG lemp_LastNameStatus;
   CHAR  m_szemp_FirstName[11];
   ULONG lemp_FirstNameStatus;
   CHAR  m_szemp_Faxphone[25];
   ULONG lemp_FaxphoneStatus;
};

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

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

void AttributesX() {
   // Define ADO object pointers.  Initialize pointers on define.
   // These are in the ADODB::  namespace
   _RecordsetPtr pRstEmployee  = NULL;
   _ConnectionPtr pConnection = NULL;
   FieldsPtr fldLoop = NULL;    
   PropertiesPtr proLoop = NULL;

   // Define Other Variables
   HRESULT hr = S_OK;
   _variant_t Index;
   Index.vt = VT_I2;
   int j = 0;      
   // Open a recordset using a Client Cursor for the Employee Table
   _bstr_t strCnn("Provider='sqloledb'; Data Source='(local)'; Initial Catalog='pubs'; Integrated Security='SSPI';");

   try {
      // open connection and record set
      TESTHR(pConnection.CreateInstance(__uuidof(Connection)));
      pConnection->Open(strCnn, "", "", adConnectUnspecified);

      TESTHR(pRstEmployee.CreateInstance(__uuidof(Recordset)));
      pRstEmployee->Open("Employee", _variant_t((IDispatch *)pConnection,true), adOpenForwardOnly,
         adLockReadOnly, adCmdTable);

      // Display the attributes of Connection.
      printf("Connection attributes: %d \n", pConnection->Attributes);

      // Display the attribute of the employee table's fields
      printf("\nFields attributes:\n");
      fldLoop = pRstEmployee->GetFields();

      for (int i = 0 ; i < (int)fldLoop->GetCount() ; i++) {
         Index.iVal = i;
         printf ("   %s = %d \n", (LPSTR)fldLoop->GetItem(Index)->GetName(),
            (int)fldLoop->GetItem(Index)->GetAttributes());
      }

      // Display Fields of the Employee table which are NULLBALE
      printf("\nNULLABLE Fields :");

      for (int i1 = 0 ; i1 < (int)fldLoop->GetCount() ; i1++) {
         Index.iVal = i1;

         if (fldLoop->GetItem(Index)->GetAttributes()  & adFldIsNullable)
            printf ("%s  \n", (LPSTR)fldLoop->GetItem(Index)->GetName());    
      }

      // Display the attributes of the Employee tables's  properties
      printf("\nProperty attributes:\n");
      proLoop = pRstEmployee->GetProperties();

      for (int i2 = 0 ; i2 < (int)proLoop->GetCount() ; i2++) {
         j = j + 1;
         Index.iVal = i2;
         printf (" %s = %d \n", (LPSTR)(_bstr_t)proLoop->GetItem(Index)->GetName(),
            (int)proLoop->GetItem(Index)->GetAttributes()); 
      }
   }
   catch(_com_error &e) {
      // Notify the user of errors if any.

      PrintProviderError(pConnection);
      PrintComError(e);
   }

   // Clean up objects before exit.
   if (pRstEmployee)
      if (pRstEmployee->State == adStateOpen)
         pRstEmployee->Close();
   if (pConnection)
      if (pConnection->State == adStateOpen)
         pConnection->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;
   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", (LPCSTR) pErr->Number, (LPCSTR) pErr->Description);
      }
   }
}

void PrintComError(_com_error &e) {
   _bstr_t bstrSource(e.Source());
   _bstr_t bstrDescription(e.Description());

   // Print Com errors.  
   printf("\nError\n");
   printf("Code = %08lx\n", e.Error());
   printf("Code meaning = %s\n", e.ErrorMessage());
   printf("Source = %s\n", (LPCSTR) bstrSource);
   printf("Description = %s\n", (LPCSTR) bstrDescription);  
}
Show:
© 2014 Microsoft