Creating a custom ODBC driver
I have not, but I once interviewed at a company that had done exactly this. They made
a 4GL/DBMS product called AMPS of the same sort of architecture as MUMPS - a hierarchical database with integrated 4GL (a whole genre of such systems came out during the 1970s). They had quite a substantial legacy code base and customers wishing to connect to it using MS Access.
The lead developer who interviewed me shared some war stories about this. Apparently it is exceedingly painful to do and shouldn't be taken lightly. However, they did actually succeed in implemnenting it.
One alternative to doing this would be to provide a data mart/BI product (along the lines of SAP BW) that presents your application data in an external database and massages it into a more friendly format such as a star or snowflake schema.
This would suffer from not supporting real-time access, but might be considerably easier to implement (and more importantly maintain) than an ODBC driver. If your real-time access requirements are reasonably predicitable and limited, you could possibly expose a web service API to support those.
creating a custom odbc driver for application
If you have to ask, you won't be able to do it :-) Seriously, writing an ODBC driver is big undertaking - I looked at doing so for a project I was on once, and eventually advised against trying, and I have a pretty good understanding of ODBC. And it really needs to be mostly written in a lower level language such as C or C++ - VB6 is not really suitable.
Related Topics
Ora-01652: Unable to Extend Temp Segment by 128 in Tablespace System: How to Extend
SQL Like Condition to Check for Integer
Removing Duplicate Rows (Based on Values from Multiple Columns) from SQL Table
Retrieve Column Names and Types of a Stored Procedure
Group Datetime into 5,15,30 and 60 Minute Intervals
Ora-00972 Identifier Is Too Long Alias Column Name
Bigquery SQL for 28-Day Sliding Window Aggregate (Without Writing 28 Lines of SQL)
Performance of Like '%Query%' VS Full Text Search Contains Query
How to Drop a Default Value or Similar Constraint in T-Sql
Union the Results of Multiple Stored Procedures
The Conversion of a Datetime2 Data Type to a Datetime Data Type Resulted in an Out-Of-Range
Combinations (Not Permutations) from Cross Join in SQL
How to Speed Up Counting Rows in a Postgresql Table
Generate Default Values in a Cte Upsert Using Postgresql 9.3