使用MFC的ODBC去连接ACCESS数据库后,怎样断开与数据库和数据源的连接。解决办法

使用MFC的ODBC去连接ACCESS数据库后,怎样断开与数据库和数据源的连接。
使用MFC的ODBC去连接ACCESS数据库后,怎样断开与数据库和数据源的连接。

声明:
CDatabase   m_DB;
CMemberRecordset   m_SetMember;


HANDLE   hFile;
//自动创建数据源初始化
//----------------------------------------------------
        CString   sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer   ();
int   nPos;
nPos=sPath.ReverseFind   ( '\\ ');
sPath=sPath.Left   (nPos);
CString   lpszFile   =   sPath   +   "\\MemberData.mdb ";
 
char*   szDesc;
int   mlen;
szDesc=new   char[256];
sprintf(szDesc, "DSN=%s?   DESCRIPTION=TOC   support   source?   DBQ=%s?   FIL=MicrosoftAccess?   DEFAULTDIR=%s??   ", "SearchMemberData ",lpszFile,sPath);
mlen   =   strlen(szDesc);
for   (int   i=0;   i <mlen;   i++)
{
if   (szDesc[i]   ==   '? ')
szDesc[i]   =   '\0 ';
}

if   (FALSE   ==   SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft   Access   Driver   (*.mdb)\0 ",(LPCSTR)szDesc))
AfxMessageBox( "SQLConfigDataSource   Failed ");

        try
{
CString   strConnect;
strConnect.Format( "DSN=SearchMemberData; ");
if(!m_DB.OpenEx(strConnect,CDatabase::useCursorLib))
{
AfxMessageBox( "Unable   to   Connect   to   the   Specified   Data   Source ");
}
else
{
int   i=0;


LPCTSTR   lpszSQL   =   NULL;
DWORD   dwOptions   =   NULL;
if(!m_SetMember.IsOpen())
{
m_SetMember.Open(AFX_DB_USE_DEFAULT_TYPE,lpszSQL,dwOptions);
}
m_SetMember.MoveFirst();
do
{    
CString   str;
m_MemberData.InsertItem(i,   m_SetMember.m_Job,   0);
str.Format( "%s ",m_SetMember.m_Name);
m_MemberData.SetItemText(i,   1,   str);
str.Format( "%s ",m_SetMember.m_Number);
m_MemberData.SetItemText(i,   2,   str);
str.Format( "%s ",m_SetMember.m_Date);
m_MemberData.SetItemText(i,   3,   str);
str.Format( "%s ",m_SetMember.m_Remarks);
m_MemberData.SetItemText(i,   4,   str);

i++;
m_SetMember.MoveNext();
}   while(!m_SetMember.IsEOF());

m_SetMember.Close();

m_DB.Close();
}
}
catch(CDBException   *pE)
{
pE-> ReportError();
pE-> Delete();
}

上边这样写代码后,把“m_SetMember.Close();”和“m_DB.Close();”以后,程序还是无法与数据库断开连接,因为我需要用到不退出程序的情况下,备份数据库与恢复数据库,所以请大家帮我想个办法把与数据库或数据库的当前连接断开可以吗?一定是我那里没释放或没关闭,大家帮我看看,谢谢了!

------解决方案--------------------

你自己做一个简单的程序,不要搞的这么复杂,然后试试看,看行不行;

行得通的话,再找出问题来。
------解决方案--------------------
我只能劝你别用ODBC,老掉牙了,换ADO或者OLEDB不好么?

之所以不能关闭,是因为数据库还没有做完隐式的transactions
你可以把这个工作改为明确的transactions。例如下面的代码:

所有的transaction全部结束,数据库才可以关闭。

CMyDatabase db;
db.Open("MY_DATASOURCE");
CMyRecordset rs(&db);

db.BeginTrans(); // start transaction 1
rs.Open(); // open the recordset