BUG: Memory Leak in Microsoft Access ODBC Driver

ID: Q195017

The information in this article applies to:

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.

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);
   }
   *****

RESOLUTION

To workaround 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.

Additional query words:

Keywords          : kbDatabase kbDriver kbJET kbMDAC kbODBC kbSDKDataAc200bug 
Version           : WINDOWS:2.0,3.5
Platform          : WINDOWS
Issue type        : kbbug
Solution Type     : kbpending

Last Reviewed: November 10, 1998