显然,在 VS2012 中,不推荐使用 SQL_CUR_USE_ODBC。[更新:游标库似乎已从 VS2012 中完全删除]。
MFC 的 CDatabase 不再使用它(而它是 VS2010 和 MFC 早期版本的默认设置),而是使用 SQL_CUR_USE_DRIVER。
不幸的是,SQL_CUR_USE_DRIVER 不能与 Jet ODBC 驱动程序一起正常工作(我们正在与 Access 数据库交互)。驱动程序最初声称支持位置操作(但不支持位置更新),但是当尝试实际查询数据库时,所有并发模型都会失败,直到 MFC 库下降到与数据库的只读交互(这不会为我们飞)。
问题
- 这是 MS 迫使开发人员远离基于 Jet 的数据源并迁移到 SQL Express(或类似)的最新尝试吗?
- 我们应该使用另一种方式通过 VS 2012 版本的 MFC/ODBC 与我们的 Access 数据库进行交互吗?(1)
另请参阅: http ://social.msdn.microsoft.com/Forums/kk/vcmfcatl/thread/acd84294-c2b5-4016-b4d9-8953f337f30c
更新:查看各种选项,似乎游标库已从 VS2012 的 ODBC 库中删除。结合 Jet 不能正确支持位置更新 (2) 的事实,它使“快照”模式无法使用。只要基础表具有主键,它似乎就支持“动态集”。无键表与“动态集”模式 (3) 不兼容。所以 - 我可以坚持使用 VS 2010,或者我可以更改我的表格以包含自动编号或类似的东西,以确保 pkey 可用,以便我可以对记录集使用动态集模式。
(1) 例如,我们应该为 CRecordset 使用不同的开放类型吗?我们目前使用 CRecordset::snapshot。但我从来没有真正理解快照、动态、动态集的各种模式。一组快速的“尝试每个”未能获得到我们的访问数据库的工作可更新接口......
(2)它在最初查询时声称,但随后返回它之前声称支持的所有并发模式的错误
(3) “动态”也出来了,因为 Jet 根本不支持它(从我的测试中可以看出)。