最近在维护一个较早的 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 语句呢?

相关文章:

  • 2022-02-25
  • 2021-10-17
  • 2021-10-10
  • 2022-03-02
  • 2021-07-11
  • 2021-12-26
  • 2022-12-23
  • 2021-09-14
猜你喜欢
  • 2021-06-02
  • 2022-12-23
  • 2022-12-23
  • 2021-11-02
  • 2021-10-19
  • 2021-08-07
  • 2021-05-12
相关资源
相似解决方案