我正在尝试使用 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 应用程序将在执行任何查询之前加载所有架构信息。
在这种情况下,将使用目录、模式和表名称等属性调用 SQLTables 方法。基于称为架构信息的属性,必须在 SQLFetch 方法中返回。
供参考: https://learn.microsoft.com/en-us/sql/odbc/reference/syntax/sqltables-function
如果使用目录名称属性调用 SQLTables 方法,则必须使用 SQLBindCol 方法返回的数据地址在 SQLFetch 方法中绑定目录名称。
同样,SQLTables 方法也将返回模式和表名称。
有关如何绑定列模式信息的更多信息,请参阅上述链接下的评论部分。