System DSN to Access DB | CodeGuru

System DSN to Access DB

This article was contributed by J. Smits. Environment: VC6 SP5, Win 2K SP2 The code below shows how you can add a Data Source Name at run-time. In this sample, we use the MS Access Driver to connect to an MDB File. I have implemented the code in a class so it can easily be […]

Written By
CodeGuru Staff
CodeGuru Staff
Nov 21, 2001
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

This article was contributed by J. Smits.

Environment: VC6 SP5, Win 2K SP2

The code below shows how you can add a Data Source Name at run-time.

In this sample, we use the MS Access Driver to connect to an MDB File. I have implemented the code in a class so it can easily be reused in different applications. Follow the steps below:

  1. Add the classes from the download to your project. Alternatively, paste the code below into the spot of your choice.
  2. Make sure you have the following include-statements in your project:
    #include <afxdb.h>       //Needed for WriteProfile
    #include <odbcinst.h>    //Needed for SQLConfigDataSource etc
    
  3. Create an object from the class you have included, or, if you have not done so, declare the function "CreateDSN".
  4. Compile and run the program.
  5. Check whether the DSN has been created. Be mindful that if you keep the ODBC-panel open, it doesn’t refresh, even if you click a different tab. For that reason, consider using the Registry editor (see illustration). Just press F5 and new entries are listed!

Please supply any suggestions to improve my code to this site! Thanx!

BOOL CODBC::CreateDSN( CString sDBPath,
                       CString sProjectName,
                       CString sDescription)
{
 //Function creates System DSN.
 //Projectname should be one word ("Demo")
 //DBPath should be full path without
 //       filename: ("C:\Tests")
 //Description: optional parameter.
 //Check in ODBC.INI (In your Windows DIR) if DSN already exists:
 HKEY hKey;
 if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,
             TEXT("Software\\ODBC\\ODBC.INI\\" + sProjectName),
             0L,
             KEY_QUERY_VALUE,
             &hKey))
 {
   RegCloseKey(hKey);
   AfxMessageBox("Data Source is already registered");
   return FALSE;
 }
 char MdbFile[_MAX_FNAME];
 char DSNName[_MAX_FNAME];
 char Description[_MAX_PATH];
 char* szDesc;
 char* szAttributes;
 int mlen, i=0, j=0;
 lstrcpy(DSNName, sProjectName);
 sProjectName=sDBPath + "\\" + sProjectName +
                      ".mdb";
 lstrcpy(MdbFile, sProjectName);
 lstrcpy(Description,sDescription);
 szDesc = new char[256];
 szAttributes = new char[256];
 //Use Hexadecimal ‘FF’ (=255) as temporary place holder
 wsprintf( szDesc,
     "DSN=%s \xFF DESCRIPTION=%s \xFF DBQ=%s: FIL=MS Access;\xFF \xFF ",
     DSNName,
     Description,
     MdbFile);
 mlen = strlen(szDesc);

 //Loop to replace "FF" by "\0"(so as to store multiple
 //   strings into one):
 while(i < mlen-1)
 {
   if ((szDesc[i] == ‘\xFF’) && (szDesc[i+1] == ‘ ‘))
   {
     szAttributes[j] = ‘\0’;
     i++;
   }
   else
   {
     szAttributes[j] = szDesc[i];
   }
   i++;
   j++;
 }
 //Create DSN:
 if (!SQLConfigDataSource( NULL,
                           ODBC_ADD_SYS_DSN,
                           “Microsoft Access Driver (*.mdb)\0”,
                           (LPCSTR)szAttributes))
 {
   AfxMessageBox( “Failed to add Data Source\nBe sure” +
                  ” you are logged on as an Administrator”);
   delete [] szDesc;
   delete [] szAttributes;
   return FALSE;
 }
 else
 {
   AfxMessageBox(“Data Source Name was added successfully”);
 }
 delete [] szDesc;
 delete [] szAttributes;
 return TRUE;
}

Downloads

Download demo project – 30 Kb

Download source – 2 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.