VC 关闭不了数据库连接

来源:百度知道 编辑:UC知道 时间:2024/05/28 13:49:03
本人在调试恢复备份时老是出错.发现是有程序在连接数据库,所以恢复不了.我做了以下的测试:
1.关闭我的程序,然后用SQL查询分析器执行恢复语句,可以恢复.
2.打开我的程序,然后用SQL查询分析器执行恢复语句,那当然不可以恢复, 这我可以理解.
3.还是打开我的程序,不过已经改过.我的在m_pConnection->Open(略)语句后马上用m_pConnection->Colse(),而且其它地方也没有再建立连接了;按理说我的连接是开了马上又关闭了,如果在查询分析器执行恢复语句应该是可以的,但事实上是"数据库正在使用".另外,我在m_pConnection->Colse()后再加一句:if(m_pConnection->GetState()!= adStateClosed) AfxMessageBox("开着的");结果没有提示信息出来,那就是说我的连接是关闭的.最后我把程序关了,查询分析器执行恢复语句才成功.好像见鬼似的,明明用m_pConnection->Colse()关掉,而且我的m_pConnection还是theApp的成员变量,都不知道程序哪里连上了.
问题解决了,可惜在我解决之前没人回答,想送分都不行.

散分,可以继续回答上面问题,将会采用投票方式结贴.

我是建议你findwindows找到的句柄写到外面去
单步调试的时候 可以看下这个句柄值是多少
然后运行skys 看看你要发送到的对话框的句柄值
是不是一样的。
是一样的 再考虑下你这个消息定义了没有。

单步调试把一步步的结果弄上来看看 看看是哪步出了问题

蹭点分。。

呵呵,把这句改一下:
::PostMessage(::FindWindow("CSetResDlg","恢复备份"),WM_MYFINMSG,NULL,NULL);

改成:
::PostMessage(::FindWindow(NULL,"恢复备份"),WM_MYFINMSG,NULL,NULL);

settimer()
这个的使用方法随便search一下就可以了
但是这个时间不太精确
如果想要更精确的时间可以使用win api
在执行完一个函数后,获取当前cpu指令时间,然后隔2ms后,在调用function2.

settimer() ,killtimer()