更新数据库 MFC C++ ODBC CRecordset

Posted

技术标签:

【中文标题】更新数据库 MFC C++ ODBC CRecordset【英文标题】:Update Database MFC C++ ODBC CRecordset 【发布时间】:2016-11-10 13:40:57 【问题描述】:

我正在开发一个 MFC 应用程序 (SDI) 来更新、添加和删除数据库中名为 security 的表。 问题是在更新表中的一行后,该行已更新(我已验证)然后当我执行另一个操作(更新另一行或删除一行)时,更新被取消。真不知道是CRecordset有问题还是数据库本身有问题。

//m_pSet is a an instance of a class based on CRecordSet:

m_pSet->Open();
m_pSet->Edit();
m_pSet->m_Security_Id = sec->SecurityId;
m_pSet->m_Security_Name = sec->SecurityName;
m_pSet->m_Security_Type_Id = sec->SecurityTypeStringToInt();
if (!m_pSet->Update())

    AfxMessageBox(_T("Record not updated; no field values were set."));

【问题讨论】:

你需要提交 【参考方案1】:

根据我对OracleSQL Server 的经验,commit 语句的发生方式有所不同。您看到的行为暗示 Update 没有被隐式提交。

Oracle 中,commits 是一个显式的声明,需要在你执行了一些事务之后再执行。

SQL Server中,提交默认是隐式的,不需要在事务之后进行。

话虽如此,另一个 Stack Overflow Question and Answer 似乎有两种方法可以在 SQL Server 中显式提交,这意味着如果没有提交,您可能会丢失事务。

首先,您可以使用BEGIN TRANSACTION 让数据库等待提交语句。从您发布的内容来看,情况似乎并非如此。

在 SQL Server 中使commit 语句显式化的另一种方法是更改​​数据库本身的一些设置。根据您的思路,我将检查此处提到的帖子中提到的设置,并确保您没有隐式提交。

【讨论】:

以上是关于更新数据库 MFC C++ ODBC CRecordset的主要内容,如果未能解决你的问题,请参考以下文章

MFC ODBC SQLConfigDataSource() 未处理的异常

MFC - 如何在运行时更新编辑框? (C++)

mfc c++ 从编辑控件更新文本文件

MFC通过ODBC连接Mysql

我在哪里可以获得有关 ODBC 和 Access 数据库的高质量信息?

受限数据类型属性冲突 - 带有 Access 数据库的 ODBC