ID: Q195017
The information in this article applies to:
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.
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);
}
*****
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.
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