【问题标题】:How to bind data to SQLBindCol using ODBC Driver API using C++如何使用 C++ 使用 ODBC 驱动程序 API 将数据绑定到 SQLBindCol
【发布时间】:2016-07-10 19:06:13
【问题描述】:

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

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

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

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

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

【问题讨论】:

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

标签: c++ excel odbc jdbc-odbc


【解决方案1】:

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

在这种情况下,将使用目录、模式和表名等属性调用 SQLTables 方法。在 SQLFetch 方法中必须根据称为 schema 的属性返回信息。

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

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

同样的模式和表名也将返回给 SQLTables 方法。

有关如何绑定按列模式信息的更多信息,请参阅上述链接下的 cmets 部分。

【讨论】:

    【解决方案2】:

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

    你可以在这里访问微软的网站:https://docs.microsoft.com/en-gb/sql/odbc/reference/syntax/sqldescribecol-function

    虽然这只有在你做的时候才有用

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

    或者,如果您想从通用 SQL 中查找列名。


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多