Microsoft KB Archive/149558

= How to create an .mdb file for Microsoft Access databases in Visual C++ =

Article ID: 149558

Article Last Modified on 12/31/2005

-

APPLIES TO


 * Microsoft Data Access Objects 3.0
 * Microsoft Data Access Objects 3.5
 * Microsoft Data Access Objects 3.51
 * Microsoft Data Access Objects 3.6
 * Microsoft Visual C++ 2005 Express Edition
 * Microsoft Visual C++ .NET 2003 Standard Edition
 * Microsoft Visual C++ .NET 2002 Standard Edition

-



This article was previously published under Q149558



Note Microsoft Visual C++ .NET 2002 and Microsoft Visual C++ .NET 2003 support both the managed code model that is provided by the Microsoft .NET Framework and the unmanaged native Microsoft Windows code model. The information in this article applies only to unmanaged Visual C++ code. Microsoft Visual C++ 2005 supports both the managed code model that is provided by the Microsoft .NET Framework and the unmanaged native Microsoft Windows code model.



SUMMARY
Prior to the release of the Microsoft ODBC Desktop Driver Pack version 2.0, there was no way to programmatically create a Microsoft Access database (an .mdb file). For more details about this, please see the following article in the Microsoft Knowledge Base:

118609 How To Create an .MDB File for Microsoft Access Databases

With the release of the version 2.0 driver pack and higher, MFC ODBC applications can now create .mdb files. Additionally, with the incorporation of DAO into Visual C++ 4.x or higher, you have another way to create Microsoft Access databases programmatically.



Using the Microsoft Access ODBC Driver to Create .MDB Files
Kyle Geiger's book "Inside ODBC" provides a sample program, ODBCACC, that nicely demonstrates how to use the ODBC installer DLL API function SQLConfigDataSource to create an .mdb file. The syntax of the function call is: BOOL SQLConfigDataSource(hwndParent, fRequest, lpszDriver,                           lpszAttributes) Where:

hwndParent is either NULL if no dialogs are to be displayed or a valid hwnd to act as parent to any driver generated dialogs.

fRequest is ODBC_ADD_DSN to specify creation of the .mdb file.

lpszDriver is Microsoft Access Driver (*.mdb).

lpszAttributes is "CREATE_DB= .mdb \0" where the  combination identifies where the file should be created and is language sorting order (for example, General). must be specified even if the .mdb is to be created in the current working directory. Use standard relative path syntax.

NOTE: Unlike most other ODBC API functions, SQLConfigDataSource returns a boolean value. This return value is TRUE if the .mdb was created, FALSE if creation failed.

To use the installer DLL functions, you must:


 * Use #include .
 * Link with Odbcinst.lib for 16-bit applications.
 * Link with Odbccp32.lib for 32-bit applications.

NOTE: The functionality of SQLConfigDataSource is available through the ODBC Administrator. If you choose to add a new Microsoft Access datasource, the driver dialog includes a Create button that you can use to create an .mdb file interactively.

Using DAO to Create .MDB Files
DAO allows applications developed with Visual C++ 4.x to interface with the Microsoft Jet database engine directly. This allows more efficient manipulation of Microsoft Access objects than can be achieved through ODBC, including the creation of .mdb files. For a sample program that demonstrates how to create databases and other objects, search the Microsoft Knowledge Base for the DAOTABLE sample.

Note To compile this sample in Visual C++ .NET 2002 and Visual C++ .NET 2002, change the following line or lines in the code: pDX->m_hWndLastControl = theControl->m_hWnd; to pDX->m_idLastControl = (UINT)theControl->m_hWnd;)

Sample Code
Use of SQLConfigDataSource ODBC installer DLL API function: BOOL fCreated; fCreated = SQLConfigDataSource(NULL,                       ODBC_ADD_DSN,                       "Microsoft Access Driver (*.mdb)",                       "CREATE_DB=.\\ATest.mdb General\0" ); This will create ATest.mdb in the application's working directory using general sorting.

