2016-11-10 73 views
0

我正在开发一个MFC应用程序(SDI)来更新,添加和删除名为security的数据库中的表。 问题是更新表中的一行后,该行更新(我验证),然后当我做另一个动作(更新另一行或删除一行)更新被取消。我真的不知道CRecordset或数据库本身是否存在问题。更新数据库MFC C++ ODBC 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.")); 
} 
+0

您需要提交 – Ben

回答

0

在我与OracleSQL Server经验存在的方式commit陈述发生差异。您所看到的行为意味着Update未隐式提交。

Oracle,提交是一个明确的声明,需要在您进行一些事务后进行。

SQL Server中,默认情况下,提交是隐含的,不需要在事务之后执行。

这就是说,这个其他的其他Stack Overflow Question and Answer似乎有两种方法在SQL Server中明确提交提交,意思是没有提交,你可能会失去你的交易。

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

另一种在SQL Server中显式声明commit语句的方法是更改​​数据库本身的一些设置。根据你的思路,我会检查这里提到的帖子中提到的设置,并确保你没有提交隐含的提交。