2016-11-10 5 views
0

Я разрабатываю приложение MFC (SDI) для обновления, добавления и удаления таблицы в базе данных под названием security. Проблема заключается в том, что после обновления одной строки в таблице строка обновляется (i проверена), а затем, когда я делаю другое действие (обновление другой строки или удаление строки), обновление отменяется. Я действительно не знаю, есть ли проблема с 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

В моих опытах с Oracle и SQL Server есть разница в том, как commit заявления случиться. Поведение, которое вы видите, подразумевает, что Update не подразумевается.

В Oracle коммиты являются явным заявлением и должны проводиться после того, как вы совершили какую-либо транзакцию.

В SQL Server коммиты по умолчанию неявны и не должны выполняться после транзакций.

Этот, как говорится, другой другой Stack Overflow Question and Answer, как представляется, имеет два метода совершения коммитов в SQL Server, то есть без фиксации, вы можете потерять транзакцию.

Первое, что вы можете использовать BEGIN TRANSACTION, чтобы база данных ожидала фиксации. Из того, что вы опубликовали, казалось бы, это не так.

Другой способ сделать заявления, явно выраженные в SQL Server, - это изменение некоторых параметров на самих базах данных. Основываясь на вашей мысли, я бы проверил настройки, упомянутые в сообщении, отмеченном здесь, и убедитесь, что вы не сделали коммиты неявными.