数据库能否同时打开多个记录集(Access)

时间:2021-09-19 13:25:13
m_pRemRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pRemRecordset->Open("SELECT * FROM RemindList",// 查询RemindList表中所有字段
theApp.m_pConnection.GetInterfacePtr(),// 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
m_pSetRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pSetRecordset->Open("SELECT * FROM Set",   // 查询Set表中所有字段
theApp.m_pConnection.GetInterfacePtr(),// 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
在执行m_pSetRecordset->Open这条语句就会挂掉?

12 个解决方案

#1


把上一个记录集的数据保存到数组等,然后关闭,打开另一个

#2


新建一个Recordset对象, 不就能打开了

#3


第二次Open()前:
m_pRecordset->CancelUpdate()
m_pRecordset->Close();

#4


但是单独打开以下的记录集也会挂,:
m_pSetRecordset.CreateInstance(__uuidof(Recordset)); 
try 

m_pSetRecordset->Open("SELECT * FROM Set",  // 查询Set表中所有字段 
theApp.m_pConnection.GetInterfacePtr(),// 获取库接库的IDispatch指针 
adOpenDynamic, 
adLockOptimistic, 
adCmdText); 

catch(_com_error *e) 

AfxMessageBox(e->ErrorMessage()); 

如果单独执行上一个记录集则没事,这是什么原因呢,表名称也没错啊

#5


可以的,用两个Recordset

#6


还有我如果删除指定记录的话,怎么写:
m_pSetRecordset->Open("SELECT * FROM Set where Id=1",  // 查询Set表中所有字段 
theApp.m_pConnection.GetInterfacePtr(),// 获取库接库的IDispatch指针 
adOpenDynamic, 
adLockOptimistic, 
adCmdText);
是这样吗:
m_pRecordset->Delete(adAffectCurrent);
m_pRecordset->Update();
如果要删除多条的话,是不是就用循环每次去打开,删除,关闭
或者有什么其他的方法吗?

#7


实际上,网上有很多现成的数据库操作类,可以直接使用,觉得不合适就在其基础上修改,易懂也简单得多。
参见:
http://www.vckbase.com/document/viewdoc/?id=668

#8


捕捉异常_com_error e
看e.Description()描述

删除多条记录可以只有执行sql语句delete from table where ??

#9


捕捉不到异常的时候就挂掉了,
就在Open那条语句挂掉了,还没到异常

那个sql语句是用什么函数来执行,也是用Open吗

#10


是你的表不存在吧,两个_RecordSetPtr是可以的,

“delete from table where”是_ConnectPtr指针用Excute执行的!!

#11


就算同时打开50个表,都不关闭,也不会有问题的。
数据库一般最好打开一次,表就无所谓,
捕捉异常的代码有问题,一定会得到表述的。

#12


不好意思,出丑出大了,
SELECT * FROM Set 
Set是sql语句关键字,我竟然用它做表名,
仍然谢谢各位的帮忙,还是学到不少

#1


把上一个记录集的数据保存到数组等,然后关闭,打开另一个

#2


新建一个Recordset对象, 不就能打开了

#3


第二次Open()前:
m_pRecordset->CancelUpdate()
m_pRecordset->Close();

#4


但是单独打开以下的记录集也会挂,:
m_pSetRecordset.CreateInstance(__uuidof(Recordset)); 
try 

m_pSetRecordset->Open("SELECT * FROM Set",  // 查询Set表中所有字段 
theApp.m_pConnection.GetInterfacePtr(),// 获取库接库的IDispatch指针 
adOpenDynamic, 
adLockOptimistic, 
adCmdText); 

catch(_com_error *e) 

AfxMessageBox(e->ErrorMessage()); 

如果单独执行上一个记录集则没事,这是什么原因呢,表名称也没错啊

#5


可以的,用两个Recordset

#6


还有我如果删除指定记录的话,怎么写:
m_pSetRecordset->Open("SELECT * FROM Set where Id=1",  // 查询Set表中所有字段 
theApp.m_pConnection.GetInterfacePtr(),// 获取库接库的IDispatch指针 
adOpenDynamic, 
adLockOptimistic, 
adCmdText);
是这样吗:
m_pRecordset->Delete(adAffectCurrent);
m_pRecordset->Update();
如果要删除多条的话,是不是就用循环每次去打开,删除,关闭
或者有什么其他的方法吗?

#7


实际上,网上有很多现成的数据库操作类,可以直接使用,觉得不合适就在其基础上修改,易懂也简单得多。
参见:
http://www.vckbase.com/document/viewdoc/?id=668

#8


捕捉异常_com_error e
看e.Description()描述

删除多条记录可以只有执行sql语句delete from table where ??

#9


捕捉不到异常的时候就挂掉了,
就在Open那条语句挂掉了,还没到异常

那个sql语句是用什么函数来执行,也是用Open吗

#10


是你的表不存在吧,两个_RecordSetPtr是可以的,

“delete from table where”是_ConnectPtr指针用Excute执行的!!

#11


就算同时打开50个表,都不关闭,也不会有问题的。
数据库一般最好打开一次,表就无所谓,
捕捉异常的代码有问题,一定会得到表述的。

#12


不好意思,出丑出大了,
SELECT * FROM Set 
Set是sql语句关键字,我竟然用它做表名,
仍然谢谢各位的帮忙,还是学到不少