SQL Server — Обновление базы данных MFC C ++ ODBC CRecordset

Я разрабатываю приложение 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."));
}

0

Решение

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

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

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

Это, как говорится, это другой другой Переполнение стека Вопрос и ответ похоже, есть два способа сделать коммит явным в SQL Server, то есть без коммита вы можете потерять транзакцию.

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

Другой способ сделать commit Явные операторы в SQL Server — это изменение некоторых параметров на самих базах данных. Исходя из вашего мнения, я бы проверил настройки, указанные в посте, указанном здесь, и убедился, что вы не сделали коммиты неявными.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]