Aracılığıyla paylaş


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

Bu konu kayıt kümesinde nasıl işlem gerçekleştireceğinizi açıklar.

Not

Yalnızca bir düzey işlem desteklenir, işlemleri iç içe geçiremezsiniz.

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

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

  2. Toplu sıra getirmeyi uygulamadıysanız, aynı veritabanının bir ya da daha çok kayıt kümesi nesnesinin AddNew/Update, Edit/Update, ve 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 sıra getirmeyi uyguladıysanız, veri kaynağını güncellemek için kendi işlevlerinizi yazmalısınız.

  3. Son olarak, CDatabase nesnesinin CommitTrans üye işlevini çağırın. Güncellemelerin birinde hata oluşursa ya da değişikleri iptal etmeye karar verirseniz, Rollback üye işlevini çağırın.

Aşağıdaki örnek, bir öğrenciyi kayıt olduğu tüm sınıflardan kaldırarak, öğrencinin kaydını okul kayıt veritabanından silmek için iki kayıt kümesi kullanır. İki kayıt kümesinde de Delete çağrılarının başarılı olması gerektiği için, bir işlem gereklidir. Örnek, veri kaynağına bağlı olan CDatabase türünde bir üye değişken m_dbStudentReg'in ve CEnrollmentSet ile CStudentSet kayıt kümesi sınıflarının var olduğunu varsayar. 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

CommitTrans ya da Rollback'i çağırmadan BeginTrans'ı tekrar çağırmak hatadır.

Ayrıca bkz.

Başvuru

CDatabase Class

CRecordset Class

Kavramlar

İşlem (ODBC)

İşlem: İşlemler Güncelleştirmeleri Nasıl Etkiler (ODBC)