mwq0611 2018-08-22 07:19 采纳率: 100%
浏览 843
已采纳

在MFC中用ADO连接excel时找不到数据表

无论是用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(); 

错误提示:数据表获取失败!
                在对应所需名称或序数的集合中,未找到项目。
  • 写回答

1条回答 默认 最新

  • threenewbee 2018-08-22 10:49
    关注

    csConnect.Format("Provider=Microsoft.ACE.OLEDB.12.0;"
    "Data Source='txlx.xls'; Extended Properties='Excel 8.0;HDR=YES;IMEX=0'" );
    你这个代码按理说根本都不能编译啊,两个字符串,中间没有任何符号。
    你贴的是原始代码么?
    另外datasource写完整的路径和文件名,以及,你确认ace12.0是否安装了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵