Export (0) Print
Expand All
Expand Minimize

ActualSize and DefinedSize Properties Example (VC++)

This example uses the ActualSize and DefinedSize properties to display the defined size and actual size of a field.

// BeginActualSizeCpp.cpp
// compile with: /EHsc
#import "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 ActualSizeX();
void PrintProviderError(_ConnectionPtr pConnection);

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

void ActualSizeX() {
   HRESULT hr = S_OK;

   // Define ADO object pointers. Initialize pointers on define.
   // These are in the ADODB::  namespace.
   _RecordsetPtr pRstStores = NULL;

   // Define Other variables
   _bstr_t strMessage;
   _bstr_t strCnn("Provider='sqloledb'; Data Source='My_Data_Source'; Initial Catalog='pubs'; Integrated Security='SSPI';");

   try {
      // Open a recordset for the stores table.
      TESTHR(pRstStores.CreateInstance(__uuidof(Recordset)));

      // You have to explicitly pass the Cursor type and LockType to the Recordset here.
      hr = pRstStores->Open("stores", strCnn, adOpenForwardOnly, adLockReadOnly, adCmdTable);

      // Loop through the recordset displaying the contents of the stor_name field, 
      // the field's defined size, and its actual size.
      pRstStores->MoveFirst();

      while (!(pRstStores->EndOfFile)) {
         strMessage = "Store Name: ";
         strMessage += (_bstr_t)pRstStores->Fields->Item["stor_name"]->Value + "\n";
         strMessage += "Defined Size: "; 
         strMessage += (_bstr_t)pRstStores->Fields->Item["stor_name"]->DefinedSize + "\n";
         strMessage += "Actual Size: ";
         strMessage += (_bstr_t) pRstStores->Fields->Item["stor_name"]->ActualSize + "\n"; 

         printf("%s\n",(LPCSTR)strMessage);
         pRstStores->MoveNext();
      }
   }
   catch(_com_error &e) {
      _variant_t vtConnect = pRstStores->GetActiveConnection();

      // GetActiveConnection returns connect string if connection
      // is not open, else returns Connection object.
      switch(vtConnect.vt) {
         case VT_BSTR:
            printf("Error:\n");
            printf("Code = %08lx\n", e.Error());
            printf("Message = %s\n", e.ErrorMessage());
            printf("Source = %s\n", (LPCSTR) e.Source());
            printf("Description = %s\n", (LPCSTR) e.Description());
            break;
         case VT_DISPATCH:
            PrintProviderError(vtConnect);
            break;
         default:
            printf("Errors occured.");
            break;
      }
   }

   // Clean up objects before exit.
   if (pRstStores)
      if (pRstStores->State == adStateOpen)
         pRstStores->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", pErr->Number,(LPCSTR ) pErr->Description);
      }
   }
}
Store Name: Eric the Read Books
Defined Size: 40
Actual Size: 19

Store Name: Barnum's
Defined Size: 40
Actual Size: 8

Store Name: News & Brews
Defined Size: 40
Actual Size: 12

Store Name: Doc-U-Mat: Quality Laundry and Books
Defined Size: 40
Actual Size: 36

Store Name: Fricative Bookshop
Defined Size: 40
Actual Size: 18

Store Name: Bookbeat
Defined Size: 40
Actual Size: 8
Show:
© 2014 Microsoft