How To Create an .MDB File for Microsoft Access Databases

This article was previously published under Q118609
This article has been archived. It is offered "as is" and will no longer be updated.
NOTE: For information about how to create .MDB files programmatically usingVisual C++ version 4.x or later, please see the following article in theMicrosoft Knowledge Base:
An .mdb file is always required to configure a Microsoft Access data sourceeither by using the Open Database Connectivity (ODBC) administrator or byconfiguring the data source programmatically. An .mdb file cannot becreated by using the MFC Database Classes or the ODBC applicationprogramming interface (API).

You can use one of the following methods to have an application configure adata source on your computer:

  • Ship and install the .mdb file along with the application.
  • Make the .mdb file into a user-defined resource. Then, copy the .mdb file at run time.
This article discusses the second method, making the .mdb file into a user-defined resource.
You can use a user-defined resource to attach miscellaneous data to a .EXEfile. If an .mdb file is made into a resource, the resource can be loadedat run time and then written to an .mdb file. The steps required to do thisare as follows:

  1. Create an .mdb file either by using Microsoft Access or MSQuery.
  2. Create the .mdb file as a user-defined resource by adding the following line to your .RC file:
          mdb_file  MDB_RESOURCE filename.mdb						
          mdb_file      is  a name for identifying the resource.      MDB_RESOURCE  is  a name for identifying the type of the resource                        and can be any user-defined type.      filename.mdb  is  the name of the .mdb file.						
  3. Load the resource and write it out to an .mdb file. You can use the following function, from anywhere in your application, to create the .mdb file. (A typical place for creating the .mdb file would be the override of the CWinApp::InitInstance() function.)
       CreateMDBFile()   {      // Get the instance handle - required for loading the resource      HINSTANCE hInst = AfxGetInstanceHandle();      // Load the user-defined resource.      HRSRC hmdbFile = ::FindResource(hInst, "mdb_file", "MDB_RESOURCE");         HGLOBAL hRes = ::LoadResource(hInst, hmdbFile);         DWORD dwResSize = ::SizeofResource(hInst, hmdbFile);         if (hRes != NULL)         {            UINT FAR* lpnRes = (UINT FAR*)::LockResource(hRes);            CString szFileName = "Filename.mdb";            TRY            {               // Create the .mdb file               CFile f( szFileName, CFile::modeCreate | CFile::modeWrite );               // Write the user-defined resource to the .mdb file               f.WriteHuge(lpnRes, dwResSize);               f.Flush();            }            CATCH( CFileException, e )            {      #ifdef _DEBUG             afxDump << "File could not be opened " << e->m_cause << "\n";      #endif            }            END_CATCH      #ifndef WIN32 //Unlock Resource is obsolete in the Win32 API            ::UnlockResource(hRes);      #endif            ::FreeResource(hRes);         }      }						
The one disadvantage of this method is that it increases the size of the.exe file according to the size of the .mdb file. Because even an empty.mdb file is 64K in size, the .exe is increased by at least 64K. One way toreduce the size of the .exe is to store a compressed .mdb file onto the.exe and expand it at run time when storing the resource.
For more information on user-defined resources, refer to the Windows SDKHelp.

For additional information on configuring a data source programmatically,please see the following articles in the Microsoft Knowledge Base:
110507How To Configure ODBC Data Sources on the Fly

110508How To Create Tables with Foundation Database Classes
2.50 2.51 2.52 3.00 3.10 ODBC

Article ID: 118609 - Last Review: 12/04/2015 10:22:45 - Revision: 3.2

Microsoft Foundation Class Library 4.2

  • kbnosurvey kbarchive kbdatabase kbhowto kbprogramming KB118609