对ACCESS数据库操作时报错:“由于表'partall'正被别的用户或进程使用,数据库引擎无法锁定它”??
数据库名为part.mdb,其中有一数据表名为partall,我是这样引入的:
void CMyView::InitDb()
{
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));
try // 打开本地Access库part.mdb
{
m_pConnection-> Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=part.mdb ", " ", " ",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox( "数据库连接失败,确认part.mdb是否在当前路径下! "); }
pvrdbRecordset.CreateInstance(__uuidof(Recordset)); // 读取数据库
try
{
pvrdbRecordset-> Open( "SELECT * FROM partall ", m_pConnection. GetInterfacePtr() , adOpenDynamic, adLockOptimistic, adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e-> ErrorMessage());
}
}
然后我对数据库表进行操作,如删除数据表partall中的material列:
CString strSQL = "alter table partall drop column material ";
m_pDatabase-> ExecuteSQL(strSQL);
则报错,错误如题所示。
哪位大侠知道,请告知,谢谢先。
[解决办法]
pvrdbRecordset-> Close();
你打开了记录集,却不关闭?
[解决办法]
pvrdbRecordset-> Close();
例如:
CString sql;
CString Type;
sql= "SELECT Distinct(文件类型描述) FROM Type ";
try
{
m_pRecordset.CreateInstance( "ADODB.Recordset ");
m_pRecordset-> Open((_variant_t)sql,_variant_t((IDispatch*)(this-> m_pConnection),true),adOpenStatic,adLockOptimistic,adCmdText);
while(!m_pRecordset-> adoEOF)
{
Type=(LPCTSTR)(_bstr_t)m_pRecordset-> GetCollect( "文件类型描述 ");
m_tree.InsertItem(Type,item3);
m_pRecordset-> MoveNext();
}
m_pRecordset-> Close();
}
catch(_com_error e)///捕捉异常
{
CATCH_ERROR;
return false;
}
[解决办法]
记录集没有关闭
[解决办法]
pvrdbRecordset-> Close();记录集没有关闭