千里之行,始于足下

酌贪泉而觉爽,处涸辙而犹欢

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  最近在维护一个较早的 C++ 项目时,发现在调用 CRecordSet 类的 Update() 方法时,居然会出现错误。跟踪进去发现在构造 SQL 语句时,AppendNameValues 生成的查询条件字符串变成了类似 "Field_XXX = ?" 的情况,非常奇怪。细究之下,如果是在 AddNew() 之后的 Update() 方法可以构造出正确的 SQL 语句。但是 Edit() 之后的 Update() 方法就会出现错误,实是有些莫名其妙。

  无可奈何之下,只好不再使用 Update() 方法,改为手工构造 SQL 语句,再调用 CDatabase 的 ExecuteSQL 方法,算是暂时绕开了这个问题。

  后来有同事发现,在调用 CRecordSet.Open 方法的时候,将 nOpenType 参数设定为 CRecordSet::dynaset 就可以解决这个问题,查看了一下源码,发现起先确实是用这个参数打开的,后来不知道何故被换成了 CRecordSet::snapshot,改动的地方没有注释。但是总体上还是有些不太明白,为何它只影响 UPDATE 的 SQL 语句呢?

posted on 2006-03-22 20:58  sunwaywei  阅读(665)  评论(0编辑  收藏  举报