2016-03-23 11 views
9

ODBC APIに複数のODBC APIメソッドがあるため、Windows環境(PostgreSQL、Simba、Firebirdなど)用にC++を使用してカスタムODBCドライバを作成しようとしています。デフォルトではC++を使用してODBCドライバAPIを使用してSQLBindColにデータをバインドする方法

DSNを使用して接続を確立しましたが、SQLExecuteDirectメソッドを使用してSQLクエリを実行できます。

ただし、ODBCドライバを使用してExcelに接続しているときに、Microsoftのクエリウィザードにテーブルリストをバインドできません。 enter image description here

SQLTables()SQLBindColumn() 、およびSQLFetch()方法は、ここでテーブル名のリストを取得するために使用されています。データはSQLBindColumnメソッドを使用してバインドされます。

しかし、私はテーブルの名前を取得してExcelにバインドする方法について混乱していますか?

+0

なぜ独自のODBCドライバを作成していますか?そして、このドライバを作成しているデータソースは何ですか? – MikeC

+0

応答@MikeCに感謝します。私は自分自身の倹約サービスを持っています。私は接続し、MS-Excelや他のツールにこの倹約ベースのデータをバインドしたい...この[Hive-ODBC](https://cwiki.apache.org/confluence/display/Hive/HiveODBC)と同様です。しかし私はこれをビジュアルスタジオで作りたいと思っています。 –

+0

あなたのドライバの基礎としてSimbaEngine SDK(http://www.simba.com/drivers/simba-engine-sdk/)を使用することを検討しましたか? SimbaドライバはすべてこのSDKに基づいており、1週間以内にほとんど完了して実行できるはずです。 – KylePorter

答えて

0

あなたはのSQLExecDirect()またはにSQLPrepare()を呼び出した後は、にSQLDescribeCol()を呼び出すことができます。 SQLDescribeCol()は、必要なすべての列情報を返します。

あなたはここでそれについては、MicrosoftのWebサイトを訪問することができます:https://docs.microsoft.com/en-gb/sql/odbc/reference/syntax/sqldescribecol-function

をあなたは

select top 1 * from (table name **SQLTables** found) 

それとも、汎用のSQLから列名を検索する場合を行っている場合にのみ便利ですが。


あなたはすべての列を見つけるために行くことができる他の方法は、のSQLColumns()機能を使用することです。これはSQLTables()(同じ検索priniciple)に似ており、結果の結果セットを返す。ここにあります:https://docs.microsoft.com/en-gb/sql/odbc/reference/syntax/sqlcolumns-function

0

Excelアプリケーションは、クエリを実行する前にすべてのスキーマ情報を読み込みます。

この場合、カタログ、スキーマ、テーブル名などの属性を使用してSQLTablesメソッドが呼び出されます。スキーマ情報と呼ばれる属性に基づいて、SQLFetchメソッドで返される必要があります。参考のため

https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqltables-function

SQLTablesの方法は、カタログ名属性で呼ばれてきた場合には、カタログ名は、データのアドレスがSQLBindColのメソッドで返さ使用SQLFetchの方法でバインドする必要があります。

同様に、SQLTablesメソッドでも同様にスキーマ名とテーブル名が返されました。

列別スキーマ情報をバインドする方法の詳細については、上記のリンクの「コメント」セクションを参照してください。

関連する問題