无论是用ADO的OpenSchema( adSchemaTables ),还是用 ADOX 的 _CatalogPtr 找系统表,都找不到数据表,而文件里面又确实有一个表,这是什么原因?
附程序代码:
ADODB::_ConnectionPtr m_pConnection;
ADODB::_RecordsetPtr m_pRecordset;
::CoInitialize( NULL );
m_pConnection.CreateInstance( __uuidof( ADODB::Connection ) );
m_pRecordset.CreateInstance( __uuidof( ADODB::Recordset ) );
CString csConnect;
csConnect.Format("Provider=Microsoft.ACE.OLEDB.12.0;"
"Data Source='txlx.xls'; Extended Properties='Excel 8.0;HDR=YES;IMEX=0'" );
_bstr_t strConnect;
strConnect = csConnect;
try{
m_pConnection ->Open( strConnect, "", "", ADODB::adConnectUnspecified );
}
catch( _com_error &e )
{
CString szError;
szError.Format( "数据库连接失败!\n%s\n%s", e.ErrorMessage(), (char*)(e.Description()) );
MessageBox( szError );
}
_CatalogPtr m_pCatalog = NULL;
_TablePtr m_pTable = NULL;
m_pCatalog.CreateInstance( __uuidof( Catalog ));
try{
m_pCatalog ->PutActiveConnection( _variant_t((IDispatch*)m_pConnection));
}
catch( _com_error &e )
{
CString szError;
szError.Format( "数据目录关联失败!\n%s\n%s", e.ErrorMessage(), (char*)(e.Description()) );
MessageBox( szError );
}
_variant_t vIndex = (short)0;
try{
m_pTable = m_pCatalog ->Tables ->GetItem( vIndex );
AfxMessageBox( m_pTable ->Name );
}
catch( _com_error &e )
{
CString szError;
szError.Format( "数据表获取失败!\n%s\n%s", e.ErrorMessage(), (char*)(e.Description()) );
MessageBox( szError );
}
if( m_pRecordset != NULL && m_pRecordset ->State == ADODB::adStateOpen )
{
m_pRecordset ->Close();
}
if( m_pConnection != NULL )
{
m_pConnection->Close();
}
m_pConnection.Release();
m_pRecordset.Release();
::CoUninitialize();
错误提示:数据表获取失败!
在对应所需名称或序数的集合中,未找到项目。