Showing posts with label database. Show all posts
Showing posts with label database. Show all posts

Sunday, 25 November 2012

Building a DSN less connection for OLE DB

Needed to hook a Windows application to an MS-Access database . The windows application would insert records into the tables when the end user choose one of the application's menu option.

I thought that it would be good idea to free up the end user from having to create the databases DSN using the ODBC data source administrator control panel. A DSN less connection string look like this

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\myapplication\\mycooldb.accdb"

The only down size of this is that I would have to hard code this somewhere on the source code.

Wait! Since the database will be distributed with the application what about if  'Data Source"' property gets built dynamically.

To achieve this it's need to retrieve the directory of the running application , append to this the database name and make sure that the Provider property is included.

CString myDatabasePath;
CString connString (_T("Provider=Microsoft.ACE.OLEDB.12.0;Data Source = "));

//this get the file path of the application ,chop  off the executable name and
// add the database name
GetModuleFileName(NULL,myDatabasePath.GetBufferSetLength(MAX_PATH),MAX_PATH);
myDatabasePath.Truncate(targetDir.ReverseFind('\\') + 1) ;
myDatabasePath +=        "mycooldb.accdb";

// add the database path (i.e C\myapplication\\mycooldb.accdb) to the connection string
connString += myDatabasePath

//need to do this since  OLE DB is used
BSTR bstrConnString = connString.AllocSysString();
hr = _db.OpenFromInitializationString(bstrConnString);

//free up string used
targetDir.ReleaseBuffer(MAX_PATH);
SysFreeString(bstrConnString);

Sunday, 15 April 2012

Where is my ODBC driver gone?


Hello Boys and Girls,
Just finish installing some database drivers for SQLAnywhere 5.0 in my Windows 7.
I have the Professional version of Windows 7.

After the installation of the drivers I wanted to create an ODBC data source.

To my surprise when I went to the Control Panel->All Control Panel Items->Administrative Tools->Data Sources (ODBC)
and tried to add a new datasource the recently SQLAnywhere driver was not there.
The only drivers listed on the ODBC data source administrator were: SQL Server and SQL Server native client.
No trace of any drive for SQLAnywhere.








After spending 10 or 15 minutes with my friend Google I found one interesting fact:
There are two ODBC data source administrator executable (odbcad32.ex) in my Windows 7:
One is located on C:\Windows\System32 and the other is located in C:\Windows\SysWOW64






To manage a data source that connects to 64 bits driver, under a windows 7 64 bits, the odbcad32.exe located
on C:\Windows\System32

To manage a data source that connects to a 32 bit driver, under a 64 bits platform, the odbcad32.exe located on
C:\Windows\SysWOW64 should be used.

Snce I want to create a data source for the SQLAnywhere 5.0 driver which is a 32 bits I should use the odbcad32.exe located on, C:\Windows\SysWOW64
once I double click on it I was presented with the familiar ODBC data source administrator and then I clicked on "Add" I could see the SQLAnywhere 5.0
driver.







Problem solved.