Article ID: 195017 - Last Review: December 3, 2003 - Revision: 2.1

FIX: Memory Leak in Microsoft Access ODBC Driver in MDAC 2.0

This article was previously published under Q195017
Expand all | Collapse all

SYMPTOMS

The Microsoft Access ODBC Driver, version 3.51.1713, which is provided with the Microsoft Data Access Components version 2.0, leaks memory when opening a connection, performing a query on that connection, and then closing the connection.

RESOLUTION

To work around this behavior, keep the connection open as long as possible. Minimizing the number of times you make a connection will minimize the memory leak.

STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.

This bug was corrected in in a newer version of the Access ODBCDriver included with MDAC 2.1.

MORE INFORMATION

As an example, the following code causes several hundred bytes to leak for each iteration through the loop:
   *****
   for(int nLoops=0; nLoops < 1000; nLoops++)
   {
     RETCODE rc;
     SQLAllocEnv(&henv);
     SQLAllocConnect(henv, &hdbc);

     SWORD nResult;
     UCHAR szConnectOutput[255];
     rc = SQLDriverConnect(hdbc, NULL,(UCHAR*)(const char*)"DSN=MYDSN",
                        SQL_NTS,szConnectOutput, 255, &nResult,
                        SQL_DRIVER_COMPLETE);

     SQLAllocStmt(hdbc, &hstmt);
     rc = SQLExecDirect(hstmt, (UCHAR *)"SELECT * from table1", SQL_NTS);

     SQLFreeStmt(hstmt,SQL_DROP);
     SQLDisconnect(hdbc);
     SQLFreeConnect(hdbc);
     SQLFreeEnv(henv);
   }
   *****
				

APPLIES TO
  • Microsoft Open Database Connectivity Driver for Access 3.5
  • Microsoft Data Access Components 2.0
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.5
Keywords: 
kbbug kbdatabase kbdriver kbfix kbjet KB195017
 

Article Translations