提问人:ǨÅVËĔŊ RĀǞĴĄŅ 提问时间:3/23/2016 最后编辑:рüффпǨÅVËĔŊ RĀǞĴĄŅ 更新时间:4/19/2017 访问量:1310
如何使用 C++ 使用 ODBC 驱动程序 API 将数据绑定到 SQLBindCol
How to bind data to SQLBindCol using ODBC Driver API using C++
问:
我正在尝试使用 C++ 为 Windows 环境(如 PostgreSQL、Simba、Firebird 等)创建自定义 ODBC 驱动程序,因为默认情况下 ODBC API 具有多个 ODBC API 方法。
我使用 DSN 建立了连接,并且能够使用 SQLExecuteDirect 方法执行 SQL 查询。
但是,在将 Excel 与 ODBC 驱动程序连接时,我无法将表列表绑定到 Microsoft 查询向导。
SQLTables()、SQLBindColumn() 和 SQLFetch() 方法用于检索此处的表名列表。使用 SQLBindColumn 方法绑定数据。
但是我对如何检索表名并将它们绑定到 Excel 感到困惑?
答:
调用 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
Excel 应用程序将在执行任何查询之前加载所有架构信息。
在这种情况下,将使用 catalog、schema 和表名等属性调用 SQLTables 方法。基于调用的属性,必须在 SQLFetch 方法中返回架构信息。
供参考:https://learn.microsoft.com/en-us/sql/odbc/reference/syntax/sqltables-function
如果 SQLTables 方法已使用目录名称属性调用,则必须使用 SQLBindCol 方法中返回的数据地址在 SQLFetch 方法中绑定目录名称。
同样,SQLTables 方法也要返回架构和表名称。
有关如何绑定列式架构信息的更多信息,请参阅上述链接下的评论部分。
评论
SQLTables()