中断CADORecordset的Execute操作

tanghaitao4123 2011-01-25 04:03:25
操作类是用网上下的AdoX类
在项目中由于查询结果比较大,用的BOOST的一个线程来执行Execute
在Execute返回前,用户可能会点击关闭对话框
我在窗口的OnDestroy消息里面怎么来结束未返回的Execute操作??
...全文
77 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanghaitao4123 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zyq5945 的回复:]

是m_pDatabase关闭,不是m_records关闭。
[/Quote]

谢谢了 终于搞定了 确实是关闭m_pDatabase
但是要在结束线程(m_queryThread.join();)之前

结贴了~~~
zyq5945 2011-01-25
  • 打赏
  • 举报
回复
是m_pDatabase关闭,不是m_records关闭。
tanghaitao4123 2011-01-25
  • 打赏
  • 举报
回复

CADOCommand m_CmdQuery;
CADORecordset m_records;
CADODatabase* m_pDatabase;
boost::thread m_queryThread;

这是上面一些变量的定义
tanghaitao4123 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zyq5945 的回复:]
1.设置PutCommandTimeout
2.试试直接Close _ConnectionPtr,让Execute出错返回
[/Quote]

1方法貌似不行,因为是用户在查询中途(TimeOut之前)点退出
2方法貌似也不行 我贴点代码吧

// 查询线程
m_CmdQuery.SetActiveConnection(*m_pDatabase);
BOOL bResult = m_records.Execute(&m_CmdQuery, adUseServer);
m_CmdQuery.SetActiveConnection(NULL);


// OnDestroy
m_records.Close();
m_CmdQuery.SetActiveConnection(NULL);

m_exportThread.join();
m_queryThread.join();

if(m_pDatabase)
{
m_pFrameServer->FreeDatabase(m_pDatabase);
m_pDatabase = NULL;
}
zyq5945 2011-01-25
  • 打赏
  • 举报
回复
1.设置PutCommandTimeout
2.试试直接Close _ConnectionPtr,让Execute出错返回
tanghaitao4123 2011-01-25
  • 打赏
  • 举报
回复
来个高人指点下呗

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧