_ConnectionPtr Connection;
HRESULT hr=Connection.CreateInstance("ADODB.Connection");
Connection.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Path\\db.mdb","",adModeUnknown);
c:\Path\db.mdb文件是存在的,Connection.CreateInstance("ADODB.Connection");
返回hr==S_OK。
Win2K连接数据库完全成功,
98下就不行。查注册表存在Microsoft.Jet.OLEDB.4.0注册项。
为什么?
另外,急请教有关DCOM安全问题,如何才能使任何人都可以创建/访问DCOM?
我按照一些资料上说的CoInitializeSecurity(NULL,-1,....)
但是98下客户端不能与2K下的DCOM通讯,不能挂接ConnectionPoint回调接口
2K下客户端也不能保证挂接ConnectionPoint回调接口。
客户端也做了CoInitializeSecurity(NULL,-1,....)。
急盼回复,谢谢!
HRESULT hr=Connection.CreateInstance("ADODB.Connection");
Connection.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Path\\db.mdb","",adModeUnknown);
c:\Path\db.mdb文件是存在的,Connection.CreateInstance("ADODB.Connection");
返回hr==S_OK。
Win2K连接数据库完全成功,
98下就不行。查注册表存在Microsoft.Jet.OLEDB.4.0注册项。
为什么?
另外,急请教有关DCOM安全问题,如何才能使任何人都可以创建/访问DCOM?
我按照一些资料上说的CoInitializeSecurity(NULL,-1,....)
但是98下客户端不能与2K下的DCOM通讯,不能挂接ConnectionPoint回调接口
2K下客户端也不能保证挂接ConnectionPoint回调接口。
客户端也做了CoInitializeSecurity(NULL,-1,....)。
急盼回复,谢谢!
DCOM下要用CoCreateInstanceEx()来创建远程对象。
在2k下编译的程序是不能再98下运行的,因为ado不想下兼容,你在98下编译,在2k下可以运行的,建议你在win98下编译。
在Win98下编译
调试到Connection.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Path\\db.mdb","",adModeUnknown);
就立即抛出异常,甚至Open不能返回错误码。
但是ADBDB.Connection类在注册表中已注册。Connection.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Path\\db.mdb","",adModeUnknown);
中Microsoft.Jet.OLEDB.4.0改为Microsoft.Jet.OLEDB在2K下会连接失败。
继续请教!
我的这篇文章也许有用?
谢谢!好文章。
_GUID IID_AdoRecordset = {0x0000050e,0x0000,0x0010,{0x80,0x00,0x00,0xaa,0x00,0x6d,0x2e,0xa4}};CComPtr<Connection15> m_pConnection;
CComPtr<RecordSet15> m_pRecordset;
hr=m_pConnection.CoCreateInstance(IID_AdoConnection);//返回hr=0x80040154
m_pRecordset.CoCreateInstance(IID_AdoRecordset);继续试验
hr=m_pConnection.CoCreateInstance(IID_AdoConnection);//返回hr=0x80040154_ConnectionPtr Connection;
hr=m_pConnection.CreateInstance("ADODB.Connection");
98下Rebuild All,同样返回hr=0x80040154
if (!AfxOleInit())
{
AfxMessageBox("ole 初始化错误");
return FALSE;
} CString strOpen,strDB;
strDB.Format("%sDB\\balance.mdb",gszAppPath);
strOpen.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;"
"Persist Security Info=False",strDB); try
{
lpADOCnn.CreateInstance(__uuidof(Connection));
lpADOCnn->Open((const char *)strOpen,"","",-1);
} catch(...)
{
AfxMessageBox("数据源初始化错误:找不到文件"+strDB+",程序将关闭!",MB_ICONERROR);
if(lpADOCnn != NULL)
lpADOCnn.Release();
return FALSE;
}
直接用智能指针_ConnectionPtr定义的吗?问题是为什么在98下Rebuild All(将msado15.tlh和msado15.tli文件
都删除重新生成了),还是发生0x80040154错误。
CComPtr<Connection15> m_pConnection;
hr=m_pConnection.CoCreateInstance(__uuidof(Connection15));//返回hr=0x80040154