我需要打开一个数据库里面的多个表单,提取数据进行操作。请问如何同时打开多个表单呢?我现在是重复打开2次数据库,运行时报错。只打开一次数据库,取2次记录集也会报错。 m_pConnection.CreateInstance(__uuidof(Connection));
HRESULT hr;
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=TF.mdb","","",adModeUnknown);
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
}m_pRecordset.CreateInstance(__uuidof(Recordset));try
{
m_pRecordset->Open("SELECT * FROM 主线", // 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}m_pConnection_zd.CreateInstance(__uuidof(Connection));
HRESULT hr_zd;
try
{
hr=m_pConnection_zd.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr_zd))
{
hr=m_pConnection_zd->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=TF.mdb","","",adModeUnknown);
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
}
m_pRecordset_zd.CreateInstance(__uuidof(Recordset));try
{
m_pRecordset_zd->Open("SELECT * FROM 匝道", // 查询DemoTable表中所有字段
m_pConnection_zd.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
HRESULT hr;
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=TF.mdb","","",adModeUnknown);
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
}m_pRecordset.CreateInstance(__uuidof(Recordset));try
{
m_pRecordset->Open("SELECT * FROM 主线", // 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}m_pConnection_zd.CreateInstance(__uuidof(Connection));
HRESULT hr_zd;
try
{
hr=m_pConnection_zd.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr_zd))
{
hr=m_pConnection_zd->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=TF.mdb","","",adModeUnknown);
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
}
m_pRecordset_zd.CreateInstance(__uuidof(Recordset));try
{
m_pRecordset_zd->Open("SELECT * FROM 匝道", // 查询DemoTable表中所有字段
m_pConnection_zd.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
你捕获错误方式不对,换成下面试试
//打印调用ADO控件时产生的详细错误信息
void dump_com_error(_com_error &e)
{
CString ErrorStr;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
ErrorStr.Format( "\n\tADO Error\n\tCode = %08lx\n\tCode meaning = %s\n\tSource = %s\n\tDescription = %s\n\n",
e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource, (LPCTSTR)bstrDescription );
//在调试窗口中打印错误信息,在Release版中可用DBGView查看错误信息
::OutputDebugString((LPCTSTR)ErrorStr);
#ifdef _DEBUG
AfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR);
#endif
}try
{
//你的ADO代码
}
catch(_com_error& e)
{
dump_com_error(e);
}
使用两个不同的m_pRecordset指针来获取两个表单,报错。
使用同一个m_pRecordset指针获取两个表单,报错。
Code= 800a0e7d
Code meaning =Unknown error 0x800A0E7D
Source = ADODB.RecordSet
Description= 连接无法用于执行此才操作。在此上下文中它可能已被关闭或无效。