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 ActualSize and DefinedSize properties to display the defined size and actual size of a field.
Example
// 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 occurred.");
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