|
' ****************************************************
// MDB テーブル一覧
' ****************************************************
STDMETHODIMP CAdo::GetMdbTables(BSTR Target, VARIANT *pvaVariant)
{
VariantClear( pvaVariant );
V_VT(pvaVariant) = VT_BSTR;
if(FAILED(::CoInitialize(NULL))) {
V_BSTR(pvaVariant) = A2BSTR( "COM ライブラリの初期化に失敗しました" );
return S_OK;
}
_ConnectionPtr pConnection = NULL;
_RecordsetPtr pRstSchema = NULL;
LONG nCnt;
_bstr_t strCnn("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");
_bstr_t strTarget(Target, false);
_bstr_t strEnd(";");
_bstr_t strSep(",");
strCnn += strTarget;
strCnn += strEnd;
try {
TESTHR(pConnection.CreateInstance(__uuidof(Connection)));
pConnection->Open( strCnn, "", "", adConnectUnspecified );
pRstSchema = pConnection->OpenSchema( adSchemaTables );
nCnt = 0;
while( !(pRstSchema->EndOfFile) ) {
nCnt++;
pRstSchema->MoveNext();
}
pRstSchema->MoveFirst();
BOOL ret;
SAFEARRAY *psa;
LPVARIANT rgElems;
ret = CreateSafearray( &pvaVariant, &psa, &rgElems, nCnt );
nCnt = 0;
while( !(pRstSchema->EndOfFile) ) {
_bstr_t table_name = pRstSchema->Fields->GetItem("TABLE_NAME")->Value;
_bstr_t table_type = pRstSchema->Fields->GetItem("TABLE_TYPE")->Value;
table_name += strSep;
table_name += table_type;
SetSafeArrayData( &rgElems, (LPTSTR)table_name, nCnt );
nCnt++;
pRstSchema->MoveNext();
}
pRstSchema->Close();
pConnection->Close();
// Safe Array を解放
SafeArrayUnaccessData(psa);
// 戻り値へセット
V_ARRAY(pvaVariant) = psa;
}
catch (_com_error &e)
{
V_BSTR(pvaVariant) = A2BSTR( e.ErrorMessage() );
}
::CoUninitialize();
return S_OK;
}
| |