Aracılığıyla paylaş


İşlem: Kayıt Kümesinde İşlem Gerçekleştirme (ODBC)

Bu konuda, kayıt kümesinde işlem gerçekleştirme işlemi açıklanmaktadır.

Not

Yalnızca bir işlem düzeyi desteklenir; işlemleri iç içe yerleştiremezsiniz.

Kayıt kümesinde işlem gerçekleştirmek için

  1. Nesnenin CDatabase üye işlevini çağırın BeginTrans .

  2. Toplu satır getirme uygulamadıysanız, aynı veritabanındaki AddNew/Updatebir veya daha fazla kayıt kümesi nesnesinin , Edit/Updateve Delete üye işlevlerini gerektiği kadar çağırın. Daha fazla bilgi için bkz. Kayıt Kümesi: Kayıtları Ekleme, Güncelleştirme ve Silme (ODBC). Toplu satır getirme işlemi uyguladıysanız, veri kaynağını güncelleştirmek için kendi işlevlerinizi yazmanız gerekir.

  3. Son olarak, nesnenin CDatabase üye işlevini çağırın CommitTrans . Güncelleştirmelerden birinde hata oluşursa veya değişiklikleri iptal etmeye karar verirseniz üye işlevini çağırın Rollback .

Aşağıdaki örnek, öğrencinin kaydını bir okul kayıt veritabanından silmek için iki kayıt kümesi kullanır ve öğrencinin kayıtlı olduğu tüm sınıflardan öğrenciyi kaldırır. Delete Her iki kayıt kümesindeki çağrıların başarılı olması gerektiğinden bir işlem gereklidir. Örnekte, veri kaynağına zaten bağlı türde CDatabase bir üye değişkeninin ve ve kayıt kümesi sınıflarının CEnrollmentSet varlığı m_dbStudentRegCStudentSetvarsayılır. strStudentID değişkeni, kullanıcıdan alınan bir değer içerir.

BOOL CEnrollDoc::RemoveStudent( CString strStudentID )
{
    // remove student from all the classes
    // the student is enrolled in

    if ( !m_dbStudentReg.BeginTrans( ) )
        return FALSE;

    CEnrollmentSet rsEnrollmentSet(&m_dbStudentReg);
    rsEnrollmentSet.m_strFilter = "StudentID = " + strStudentID;

    if ( !rsEnrollmentSet.Open(CRecordset::dynaset) )
        return FALSE;

    CStudentSet rsStudentSet(&m_dbStudentReg);
    rsStudentSet.m_strFilter = "StudentID = " + strStudentID;

    if ( !rsStudentSet.Open(CRecordset::dynaset) )
        return FALSE;

    TRY
    {
        while ( !rsEnrollmentSet.IsEOF( ) )
        {
            rsEnrollmentSet.Delete( );
            rsEnrollmentSet.MoveNext( );
        }

        // delete the student record
        rsStudentSet.Delete( );

        m_dbStudentReg.CommitTrans( );
    }

    CATCH_ALL(e)
    {
        m_dbStudentReg.Rollback( );
        return FALSE;
    }
    END_CATCH_ALL

    rsEnrollmentSet.Close( );
    rsStudentSet.Close( );

    return TRUE;

}

Not

Arama BeginTrans yapmadan yeniden çağırmak CommitTrans veya Rollback bir hatadır.

Ayrıca bkz.

İşlem (ODBC)
İşlem: İşlemlerin Güncelleştirmeleri Etkilemesi (ODBC)
CDatabase Sınıfı
CRecordset Sınıfı