如何使用 C++ 使用 ODBC 驱动程序 API 将数据绑定到 SQLBindCol

How to bind data to SQLBindCol using ODBC Driver API using C++

提问人:ǨÅVËĔŊ RĀǞĴĄŅ 提问时间:3/23/2016 最后编辑:рüффпǨÅVËĔŊ RĀǞĴĄŅ 更新时间:4/19/2017 访问量:1310

问:

我正在尝试使用 C++ 为 Windows 环境(如 PostgreSQL、Simba、Firebird 等)创建自定义 ODBC 驱动程序,因为默认情况下 ODBC API 具有多个 ODBC API 方法。

我使用 DSN 建立了连接,并且能够使用 SQLExecuteDirect 方法执行 SQL 查询。

但是,在将 Excel 与 ODBC 驱动程序连接时,我无法将表列表绑定到 Microsoft 查询向导。enter image description here

SQLTables()SQLBindColumn() 和 SQLFetch() 方法用于检索此处的表名列表。使用 SQLBindColumn 方法绑定数据。

但是我对如何检索表名并将它们绑定到 Excel 感到困惑?

C++ Excel JDBC-ODBC

评论

0赞 MikeC 4/3/2016
为什么要创建自己的 ODBC 驱动程序?!您为其编写此驱动程序的数据源是什么?
0赞 ǨÅVËĔŊ RĀǞĴĄŅ 4/4/2016
感谢您的回复@MikeC。我有自己的节俭服务。我想将这个节俭的基础数据连接并绑定到 MS-Excel 或其他工具......与此 Hive-ODBC 类似。但我想用 Visual Studio 构建它。
0赞 KylePorter 4/14/2016
您是否考虑过使用 SimbaEngine SDK (simba.com/drivers/simba-engine-sdk) 作为驱动程序的基础?所有 Simba 驱动程序都基于此 SDK,您应该能够在一周内完成大部分并运行。
0赞 ǨÅVËĔŊ RĀǞĴĄŅ 4/14/2016
@KylePorter 我的要求是在不使用任何第三方软件的情况下创建 ODBC 自定义驱动程序。
0赞 isapego 4/16/2016
我在这里有点困惑。您是否在问如何正确实现,以便它以正确的形式返回表?SQLTables()

答:

0赞 Nat 4/19/2017 #1

调用 SQLExecDirect() 或 SQLPrepare() 后,可以调用 SQLDescribeCol()。SQLDescribeCol() 将返回您需要的所有列信息。

您可以在此处访问Microsoft的网站:https://learn.microsoft.com/en-gb/sql/odbc/reference/syntax/sqldescribecol-function

虽然这只有在你做

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

或者,如果要从泛型 SQL 中查找列名。


查找所有列的另一种方法是使用 SQLColumns() 函数。这类似于 SQLTables()(相同的搜索原则),并使用结果重新设置结果集。在这里找到: https://learn.microsoft.com/en-gb/sql/odbc/reference/syntax/sqlcolumns-function

0赞 Karthik Sridhar 4/19/2017 #2

Excel 应用程序将在执行任何查询之前加载所有架构信息。

在这种情况下,将使用 catalog、schema 和表名等属性调用 SQLTables 方法。基于调用的属性,必须在 SQLFetch 方法中返回架构信息。

供参考:https://learn.microsoft.com/en-us/sql/odbc/reference/syntax/sqltables-function

如果 SQLTables 方法已使用目录名称属性调用,则必须使用 SQLBindCol 方法中返回的数据地址在 SQLFetch 方法中绑定目录名称。

同样,SQLTables 方法也要返回架构和表名称。

有关如何绑定列式架构信息的更多信息,请参阅上述链接下的评论部分。