How To Configure ODBC Data Sources on the Fly (110507)
The information in this article applies to:
- Microsoft Data Access Components 1.5
- Microsoft Data Access Components 2.0
- Microsoft Data Access Components 2.1
- Microsoft Data Access Components 2.5
- Microsoft Data Access Components 2.6
- Microsoft Data Access Components 2.7
This article was previously published under Q110507 IMPORTANT: This article contains information about modifying the registry. Before you
modify the registry, make sure to back it up and make sure that you understand how to restore
the registry if a problem occurs. For information about how to back up, restore, and edit the
registry, click the following article number to view the article in the Microsoft Knowledge Base:
256986 Description of the Microsoft Windows Registry
SUMMARY
You can configure ODBC (Open Database Connectivity) data source names
programmatically. This gives you flexibility to export data without forcing
the user to explicitly use the ODBC Administrator or other programs to
specify the names of data sources. This might, for example, enable your
program to use the ODBC API (application programming interface) to export
an .XLS file. To do this, use the SQLConfigDataSource() function.
The following example uses SQLConfigDataSource to create a new Excel data
source called "New Excel Data Source":
SQLConfigDataSource(NULL,ODBC_ADD_DSN,
(LPSTR) "Excel Files (*.xls)",
(LPSTR) "DSN=New Excel Data Source\0"
"Description=New Excel Data Source\0"
"FileType=Excel\0"
"DataDirectory=C:\\EXCELDIR\0"
"MaxScanRows=20\0");
Note that the data source is actually a directory (C:\EXCELDIR). The Excel
driver has directories as its data sources, and files as the individual
tables (one table per .XLS file).
For additional information on creating tables, please see the following
article(s) in the Microsoft Knowledge Base:
110508
Creating Tables with Foundation Database Classes
The information below discusses the parameters that need to be passed to
the SQLConfigDataSource() ODBC API function. To use the
SQLConfigDataSource() function, you must include the ODBCINST.H header file
and use the ODBCINST.LIB import library.
NOTE: For 32-bit applications, you must still include ODBCINST.H header
file, however you must now link with ODBCCP32.lib
NOTE: The information contained within this article is duplicated in the
'Programming with MFC Encyclopedia' shipped with Visual C++ 4.0. The
article can be found by searching for "SQLConfigDataSource" and selecting
the article titled 'FAQ: Programatically Configuring an ODBC Data Source'.
MORE INFORMATION
NOTE: This article was originally written for the 16-bit ODBC components
only. The 16-bit ODBC components use INI files to store information on
configured datasources (ODBC.INI) and installed drivers (ODBCINST.INI). The
32-bit ODBC components no longer use INI files but, instead, write such
information to the registry. System datasource information and installed
driver information is stored in HKEY_LOCAL_MACHINE\SOFTWARE\ ODBC\ in
ODBC.INI and ODBCINST.INI, respectively. Non-System datasources are stored
in HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI. In the remainder of this
article, references to ODBC.INI should be interpreted as referring to the
appropriate section of the registry if you are using the 32-bit ODBC
components.
An ODBC data source name can be created using the ODBC Administrator
program or similar utility. However, sometimes it is desirable to create a
data source name directly from your application so that access can be
obtained without requiring the user to run a separate utility.
The ODBC Administrator (typically installed in the Windows Control Panel)
creates a new data source by putting entries in the ODBC.INI file. This
file is queried by the ODBC Driver Manager to obtain the required
information about the data source. It's important to know what information
needs to be placed in the ODBC.INI because you'll need to supply it with
the call to SQLConfigDataSource().
Although this information could be written directly to the ODBC.INI file
[without using SQLConfigDataSource()], any application that does this is
relying on the current technique that the Driver Manager uses to maintain
its data. If a later revision to the ODBC Driver Manager implements record
keeping about data sources in a different way, then any application that
used this technique would be broken. It is generally advisable to use an
API function when one is provided.
Below, you will find an explanation of the parameters of the
SQLConfigDataSource() function. Much of the information is taken from the
ODBC API Programmer's Reference supplied with Visual C++ version 1.5.
Function prototype:
BOOL SQLConfigDataSource(HWND hwndParent,UINT fRequest,
LPCSTR lpszDriver,
LPCSTR lpszAttributes); hwndParent - This is the window that will be used as the
owner of any dialog boxes which are created by either the
Driver Manager or the specific ODBC Driver to obtain
additional information from the user about the new data
source. If there is not enough information provided in the
lpszAttributes parameter, a dialog box will appear.
This parameter may be NULL, see the reference for specifics.
fRequest - The operation to be performed. Possible values are:
ODBC_ADD_DSN: Add new user data
source.
ODBC_CONFIG_DSN: Modify an
existing data source.
ODBC_REMOVE_DSN: Remove an
existing data source.
The following values are available in ODBC 2.53.0 or later 32-bit only:
ODBC_ADD_SYS_DSN: Add a new
system data source.
ODBC_CONFIG_SYS_DSN: Modify
an existing system data
source.
ODBC_REMOVE_SYS_DSN: Remove
an existing system data
source. lpszDriver - Driver description. As the documentation mentions,
this is the name presented to the users rather than the
physical driver (the DLL). You can determine the description
of a driver using the ODBC Administrator program as follows:
- Run the ODBC Administrator program.
- Choose Add. This will give you a list of installed drivers.
The list contains driver descriptions. It is this description
that you will use as the lpszDriver parameter. Note that the
ENTIRE description is used [for example, "Excel Files (*.xls)"]
including the file extension and parentheses if they exist
in the description.
Optionally, you can examine the file ODBCINST.INI, which
contains a list of all driver entries and descriptions
in the section [ODBC Drivers].
lpszAttributes - List of attributes in the form "keyname=value".
These strings are separated by null terminators with two
consecutive null terminators at the end of the list.
These attributes will primarily be default driver-specific
entries, which go into the ODBC.INI file for the new data
source. One important key, which is not mentioned in the
ODBC API reference for this function, is "DSN" which
specifies the name of the new data source. The rest
of the entries are specific to the driver
for the new data source. Often times it is not necessary
to supply ALL of the entries because the driver can prompt
the user (if hwndParent is not NULL) with dialog boxes
for the new values. You might want to explicitly supply
default values so that the user is not prompted.
One way to find the keynames and their values is to examine the registry entries for an already configured data source (perhaps one that has been configured by the ODBC Administrator program):
WARNING: If you use Registry Editor incorrectly, you may cause serious problems that may
require you to reinstall your operating system. Microsoft cannot guarantee that you can solve
problems that result from using Registry Editor incorrectly. Use Registry Editor at your own
risk. - Using regedit go to
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\
- Find the hive that corresponds to your data source name. There you will find the keyword pairs. Warning, manually editing registry values can cause system instability and perhaps an unrecoverable failure.
You might also want to examine the documentation for the specific driver
you are going to use. Useful information may be found in the online help
for the driver, which can be accessed by running the ODBC Administrator:
click Add, select the driver name, and click OK. When the information for
creating a new data source comes up for that particular driver, select
Help. This will open the help file for that particular driver, which
generally contains important information concerning the use of the driver.
REFERENCES
ODBC Programmer's Reference and SDK Guide (available in Books Online).
Modification Type: | Minor | Last Reviewed: | 6/29/2004 |
---|
Keywords: | kbDatabase kbhowto KB110507 kbAudDeveloper |
---|
|