DOCUMENT:Q195017 12-JUN-2001 [odbc] TITLE :FIX: Memory Leak in Microsoft Access ODBC Driver in MDAC 2.0 PRODUCT :Open Database Connectivity (ODBC) PROD/VER:WINDOWS:2.0,2.1 SP2,2.5,3.5 OPER/SYS: KEYWORDS:kbDatabase kbDriver kbJET kbMDAC kbODBC kbSDKDataAc200bug kbGrpDSMDAC kbDSupport kbMDAC ====================================================================== ------------------------------------------------------------------------------- The information in this article applies to: - Microsoft ODBC Driver for Access, version 3.5 - Microsoft Data Access Components versions 2.0, 2.1 SP2, 2.5 ------------------------------------------------------------------------------- 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 ODBC Driver 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); } ***** Additional query words: ====================================================================== Keywords : kbDatabase kbDriver kbJET kbMDAC kbODBC kbSDKDataAc200bug kbGrpDSMDAC kbDSupport kbMDAC250 Technology : kbAudDeveloper kbAccessSearch kbODBCSearch kbMDACSearch kbMDAC200 kbMDAC210SP2 kbMDAC250 kbODBCAccess350 Version : WINDOWS:2.0,2.1 SP2,2.5,3.5 Issue type : kbbug Solution Type : kbfix ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 2001.