我新建了一个ATL工程,类型是DLL,没有使用MFC。然后向其中添加ATL Object-》Data Access-》consumer,选择Microsoft.Jet.OLEDB.4.0和一个Access表,测试连接成功,但是当程序一运行打开数据源时就失败,代码如下:
HRESULT hr;
CDBPropSet dbinit(DBPROPSET_DBINIT); //If have been opened
if (m_bDataSourceOpen)
return TRUE; //Setting
dbinit.AddProperty(DBPROP_AUTH_CACHE_AUTHINFO, true);
dbinit.AddProperty(DBPROP_AUTH_ENCRYPT_PASSWORD, false);
dbinit.AddProperty(DBPROP_AUTH_MASK_PASSWORD, false);
dbinit.AddProperty(DBPROP_AUTH_PASSWORD, OLESTR(""));
dbinit.AddProperty(DBPROP_AUTH_USERID, OLESTR(""));//换成Admin也不行
dbinit.AddProperty(DBPROP_INIT_DATASOURCE, OLESTR("c:\\dbtest.mdb"));
dbinit.AddProperty(DBPROP_INIT_MODE, (long)3);
dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
dbinit.AddProperty(DBPROP_INIT_PROVIDERSTRING, OLESTR(""));
dbinit.AddProperty(DBPROP_INIT_LCID, (long)1033);
dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
hr = m_DataSource.Open(_T("Microsoft.Jet.OLEDB.4.0"), &dbinit);
if (FAILED(hr))//运行到这就错
{
GetLastErrorDesc(m_szLastErrorDesc);
return FALSE;
}我在exe的程序中,不用上面的代码而只用下面的就可以:
HRESULT hr;
hr = m_DataSource.Open(_T("Microsoft.Jet.OLEDB.4.0"), _T("c:\\Dbtest.mdb"));//打开数据源
if (FAILED(hr))
{
GetLastError(m_szLastErrorDesc);
}
问题是我现在必须要使用动态库做,如何解决这个问题呢?请各位大侠帮帮忙!

解决方案 »

  1.   

    用 ado 来做#import "msado15.dll" rename_namespace("ADODB") rename ("EOF", "adoEOF")
    using namespace ADODB;
      

  2.   

    to newkey007(无限天空):
    不行呀!
      

  3.   

    我也用OLE DB+Access2000开发项目,但是我不用ATL DLL,更不用ATL向导。
    我用MFC DLL或MFC扩展DLL开发。没有你的问题,一切正常。
      

  4.   

    这句话中hr的返回值是0x800401f0
      

  5.   

    这是一个系统错误,用Error Lookup察看显示: 尚未调用 CoInitialize。 
    解决的办法是在初始化时调用CoInitialize。 
      

  6.   

    我添加CoInitialize(NULL);后还有错误,代码是0x80040e21,请问这个错误是什么呢?
      

  7.   

    没有人知道如何连接Access吗?
      

  8.   

    to ITColgate(黑夜彩虹):
    真会说风凉话!