ADO 2.7 Samples

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
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
    no_namespace rename("EOF", "EndOfFile")

#include <ole2.h>
#include <stdio.h>
#include<conio.h>

// 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);

///////////////////////////////////////////////////////////
//                                                       //
//      Main Function                                    //
//                                                       //
///////////////////////////////////////////////////////////

void main()
{
   if(FAILED(::CoInitialize(NULL))) 
      return;

   AttributesX();

   //Wait here for user to see the output..
   printf("\nPress any key to continue...");
   getch();

   ::CoUninitialize();
}


///////////////////////////////////////////////////////////
//                                                       //
//      AttributesX Function                             //
//                                                       //
///////////////////////////////////////////////////////////

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=MyServer;"
   "Initial Catalog=pubs;User Id=sa;Password=;");

     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()); 
      
         if (((j % 23) == 0) || ( i2==6))
         {
            printf("\nPress any key to continue...");
            getch();
   
            //Clear the screen for the next display   
            system("cls"); 
            j=0;
         }
   
      }
     // Clean up objects before exit.  
     pRstEmployee->Close();
     pConnection->Close();
   }
   
   catch(_com_error &e)
   {
      // Notify the user of errors if any.
      
      PrintProviderError(pConnection);
      PrintComError(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", (LPCSTR) pErr->Number, (LPCSTR) pErr->Description);
      }
   }
}

///////////////////////////////////////////////////////////
//                                                       //
//      PrintComError Function                           //
//                                                       //
///////////////////////////////////////////////////////////

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);  
}
// EndAttributesCpp

AttributesX.h:

// BeginAttributesH
#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;
};

// EndAttributesH

See Also

Attributes Property | Connection Object | Field Object | Name Property | Property Object

© 1998-2001 Microsoft Corporation. All rights reserved.