我正在尝试使用C ++为Windows环境(如PostgreSQL,Simba,Firebird等)创建自定义ODBC驱动程序,因为默认情况下ODBC API有多个ODBC API方法。
我使用DSN建立了连接,并且我能够使用SQLExecuteDirect方法执行SQL查询。
但是,在将Excel与我们的ODBC驱动程序连接时,我无法将表列表绑定到Microsoft查询向导。
此处使用SQLTables(),SQLBindColumn()和SQLFetch()方法检索表名列表。使用SQLBindColumn方法绑定数据。
但是我对如何检索表名并将它们绑定到Excel感到困惑?
答案 0 :(得分:0)
调用 SQLExecDirect()或 SQLPrepare()后,您可以调用 SQLDescribeCol()。 SQLDescribeCol()将返回您需要的所有列信息。
您可以在此处访问Microsoft的网站: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
答案 1 :(得分:0)
Excel应用程序将在执行任何查询之前加载所有架构信息。
在这种情况下,将使用目录,模式和表名等属性调用SQLTables方法。基于名为schema的属性,必须在SQLFetch方法中返回信息。
供参考: https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqltables-function
如果使用catalog name属性调用了SQLTables方法,那么必须使用SQLBindCol方法中返回的数据地址在SQLFetch方法中绑定目录名。
同样,还要为SQLTables方法返回模式和表名。
有关如何绑定列式架构信息的更多信息,请参阅上面链接下的注释部分。