Я разрабатываю приложение MFC (SDI) для обновления, добавления и удаления таблицы в базе данных, которая называется безопасность.
Проблема в том, что после обновления одной строки в таблице она обновляется (я проверял), а затем, когда я выполняю другое действие (обновление другой строки или удаление строки), обновление отменяется. Я действительно не знаю, есть ли проблема с 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."));
}
По моему опыту с Oracle
а также SQL Server
есть разница в пути commit
заявления случаются. Поведение, которое вы видите, подразумевает, что Update
не является неявным образом совершенным.
В Oracle
Коммиты являются явным заявлением и должны выполняться после того, как вы выполнили какую-либо транзакцию.
В SQL Server
Коммиты неявны по умолчанию и не должны выполняться после транзакций.
Это, как говорится, это другой другой Переполнение стека Вопрос и ответ похоже, есть два способа сделать коммит явным в SQL Server, то есть без коммита вы можете потерять транзакцию.
Первое, что вы можете использовать BEGIN TRANSACTION
чтобы база данных ждала утверждения коммита. Из того, что вы опубликовали, может показаться, что это не так.
Другой способ сделать commit
Явные операторы в SQL Server — это изменение некоторых параметров на самих базах данных. Исходя из вашего мнения, я бы проверил настройки, указанные в посте, указанном здесь, и убедился, что вы не сделали коммиты неявными.
Других решений пока нет …