#include "stdafx.h"
#import "c:\Programmi\File Comuni\SYSTEM\ADO\msado15.dll" no_namespace rename("EOF","EndOfFile") // 2° Rigo
................................
................................
CoInitialize(NULL);
_ConnectionPtr pCon("ADODB.Connection");
_RecordsetPtr pRs1("ADODB.Recordset" );
CString csTemp, NomeTab;
_variant_t varCriteria[4];
_bstr_t codice, strCnn;
LONG lIndex = 0, NTab = 0;
HRESULT hr = 0;
try
{
_bstr_t bstrTableType("Table");
varCriteria[0].vt = VT_EMPTY;
varCriteria[1].vt = VT_EMPTY;
varCriteria[2].vt = VT_EMPTY;
varCriteria[3] = bstrTableType;
VARIANT varData;
SAFEARRAY FAR* psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 4;
psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
// Fill the safe array.
for ( lIndex = 0; lIndex < 4; lIndex++)
{
hr = SafeArrayPutElement(psa, &lIndex,&varCriteria[lIndex]);
}
// Initialize variant with safearray.
varData.vt = VT_VARIANT | VT_ARRAY;
V_ARRAY(&varData) = psa;
// Stringa di connessione DSN-Less con un database ACCESS
strTmp.Format ( "Driver={Microsoft Access Driver (*.mdb)};"
"Dbq=%s; "
"Uid=; Pwd=; "
"Security Info=True", mio_database); //File *.mdb
_bstr_t strCnn(strTmp); //Converto da CString a _bstr_t
strCnn += " (_bstr_t)";
pCon->Open(strCnn, "", "", adConnectUnspecified); //Apro la Connessione al database
pRs1 = pCon->OpenSchema(adSchemaTables, varData);
int nFieldCount = pRs1->Fields->GetCount();
VARIANT varValue;
csTemp.Empty();
while ( VARIANT_TRUE != pRs1->EndOfFile ) //while (VARIANT_TRUE != Rs1->GetadoEOF())
{
// Traversing through the Fields collection to get the values.
if ( !csTemp.IsEmpty() )
csTemp += " ; ";
varValue = pRs1->Fields->GetItem(_variant_t((long)2))->Value;
if ( varValue.vt == VT_BSTR )
{
//csTemp += varValue.bstrVal;
NomeTab = varValue.bstrVal;
NTab++;
}
else
if ( varValue.vt == VT_UI4)
csTemp.Format("%s %l",csTemp,varValue.lVal);
pRs1->MoveNext();
}
OutputDebugString(csTemp);
pRs1->Close(); //Chiudo connessione al recordset
pCon->Close(); //Chiudo la connessione al database
}
catch(_com_error &exception)
{
// Exception handling.
_bstr_t codice;
TCHAR szFinal[256];
memset ( szFinal, '\0', 256 );
codice = (_bstr_t)exception.Description();
_stprintf(szFinal, _T("%s"), (LPCTSTR)codice);
CString Err;
Err.Format ( "Errore: %s", szFinal );
AfxMessageBox( Err );
}
// libero la memoria utilizzata da COM
CoUninitialize();