我正在从 ODBC 源将多行检索到列表视图控件中。对于简单的 SELECT,它似乎可以很好地与 SQL_SCROLLABLE 的语句属性一起使用。如何使用 UNION 查询(有两个选择)执行此操作?
最有可能的服务器是 MS SQL Server(可能是 2005 年)。Win32 API 的代码是 C。
这段代码设置(我认为是)一个服务器端游标,它将数据提供给 ODBC 驱动程序,该驱动程序与 SQLFetchScroll 的位置提取大致对应,后者反过来为列表视图提供缓存。(有时也使用 SQL_FETCH_FIRST 或 SQL_FETCH_LAST):
SQLSetStmtAttr(hstmt1Fetch, SQL_ATTR_CURSOR_SCROLLABLE, (SQLPOINTER)SQL_SCROLLABLE, SQL_IS_INTEGER); SQLSetStmtAttr(hstmt1Fetch, SQL_ATTR_CURSOR_SENSITIVITY, (SQLPOINTER)SQL_INSENSITIVE, SQL_IS_INTEGER); ... retcode = SQLGetStmtAttr(hstmt1Fetch, SQL_ATTR_ROW_NUMBER, &CurrentRowNumber, SQL_IS_UINTEGER, 无效的); ... retcode = SQLFetchScroll(hstmt1Fetch,SQL_FETCH_ABSOLUTE,位置);
(上面是单个 SELECT 的工作代码的片段)。
这是最好的方法吗?鉴于我需要检索最后一行以获取行数并填充结束缓冲区,有没有更好的方法呢?(我可以只使用向前滚动吗?)
假设以上是肯定的,我如何使用 UNION 查询获得相同的结果?
后期编辑:联合查询的问题在于它有效地强制仅向前滚动,这会破坏 SQLFetchScroll(hstmt1Fetch,SQL_FETCH_ABSOLUTE,位置)。答案是我怀疑:“你不能”。这实际上意味着重新设计数据库以包含视图或单个表来替换 UNION。但如果我错过了什么,我会留下这个问题。