2016-11-10 6 views
0

私はMFCアプリケーション(SDI)を開発して、セキュリティと呼ばれるデータベース内のテーブルを更新、追加、削除します。 問題は、テーブルの1つの行を更新した後、その行が更新されていることです。別の操作(別の行の更新または行の削除)を行うと、更新がキャンセルされます。 CRecordsetやデータベース自体に問題があるかどうかは本当に分かりません。 OracleSQL Serverとの私の経験でデータベースの更新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

commit文が起こる方法の違いがあります。表示されている動作は、Updateが暗黙的にコミットされていないことを意味します。

Oracleでは、コミットは明示的な記述であり、トランザクションを実行した後に実行する必要があります。

SQL Serverでは、コミットはデフォルトで暗黙的に行われ、トランザクション後に実行する必要はありません。

言い換えれば、この他のStack Overflow Question and Answerには、SQL Serverでコミットを明示的にする2つの方法があるようです。つまり、コミットせずにトランザクションが失われる可能性があります。

最初に、BEGIN TRANSACTIONを使用してデータベースにコミットステートメントを待機させることができます。あなたが投稿したものから、これはそうではないようです。

commitステートメントをSQL Serverで明示的にするもう1つの方法は、databsae自体の一部の設定を変更することです。あなたの考え方に基づいて、ここで述べた記事の設定をチェックし、あなたが暗黙のうちにコミットしていないことを確認します。

関連する問題