İş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
Nesnenin
CDatabase
üye işlevini çağırınBeginTrans
.Toplu satır getirme uygulamadıysanız, aynı veritabanındaki
AddNew/Update
bir veya daha fazla kayıt kümesi nesnesinin ,Edit/Update
veDelete
ü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.Son olarak, nesnenin
CDatabase
üye işlevini çağırınCommitTrans
. Güncelleştirmelerden birinde hata oluşursa veya değişiklikleri iptal etmeye karar verirseniz üye işlevini çağırınRollback
.
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_dbStudentReg
CStudentSet
varsayı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ı