TN068: Microsoft Access 7 odbc sürücüsü ile işlemleri gerçekleştirme

Bu notu mfc odbc veritabanı sınıflarını ve Microsoft odbc Masaüstü Sürücü paketi sürümü 3.0 Microsoft Access 7.0 odbc sürücüsü kullanılırken işlemleri gerçekleştirmek açıklar.

Genel bakış

Veritabanı uygulamanızı işlemleri gerçekleştiriyorsa, CDatabase::BeginTrans ve CRecordset::Open doğru sırada uygulama aramak dikkatli olmak gerekir. Microsoft Jet veritabanı altyapısı Microsoft Access 7.0 sürücü kullanır ve uygulamanız bir açık imleç sahip herhangi bir veritabanı üzerinde bir işlem başlamaz Jet gerektirir. mfc odbc veritabanı sınıflarını, açık bir imleç açık bir CRecordset nesnesine eşittir.

BeginTransçağırmadan önce bir recordset açar, herhangi bir hata iletisi göremeyebilirsiniz. Ancak, uygulamanızın CRecordset::Updateçağrıldıktan sonra kalıcı hale yapar herhangi bir recordset güncelleştirmeler ve güncelleştirmeler geri geriçağrılarak alınır değil. Bu sorunu önlemek için BeginTrans çağırın ve recordset açmak.

Mfc sürücü işlevselliği için imleci kaydetme ve geri alma davranışını denetler. Sınıf CDatabase iki üye işlevler, GetCursorCommitBehavior ve GetCursorRollbackBehavior, açık CRecordset nesnesi üzerinde herhangi bir işlem etkisini belirlemek için sağlar. Access sürücüsü imleç koruma desteklemediği Microsoft Access 7.0 odbc sürücüsü, bu üye işlevler sql_cb_close döndürür. Bu nedenle, aşağıdaki CommitTrans veya Rollback işlemi CRecordset::Requery çağırmanız gerekir.

Birbiri ardına birden fazla işlem gerçekleştirmek gerektiğinde, Requery çağrı sonra ilk hareket edemez ve sonraki başlatın. Önce BeginTrans Jet'ın gereksinimi karşılamak için sonraki çağrı kayıt kapatmanız gerekir. Bu teknik Not Bu durum işleme için iki yöntem açıklanmaktadır:

Recordset her CommitTrans veya Rollback işlemi sonra kapanış

İşlem başlamadan önce recordset nesnesi kapalı olduğundan emin olun. BeginTransçağırdıktan sonra kayıt kümesinin Açık üye işlevini çağırın. Recordset, CommitTrans veya Rollbackhemen çağırdıktan sonra kapatın. Not art arda açılış ve kapanış recordset uygulamanın performansını düşürebilir.

SQLFreeStmt kullanma

Odbc API işlevi SQLFreeStmt , açıkça bir hareketin bitiş sonra imleç kapatmak için de kullanabilirsiniz. Başka bir işlem başlatmak için CRecordset::Requerytarafından izlenen BeginTrans diyoruz. SQLFreeStmtararken, ilk parametre ve ikinci parametre olarak sql_close olarak kayıt kümesinin hstmt belirtmeniz gerekir. Bu yöntem kapatılması ve her hareketin başında Recordset'i açmadan daha hızlı olur. Aşağıdaki kod bu tekniği uygulamak gösterilmiştir

 CMyDatabase db;
DB.&Açık ("mydatasource");
CMyRecordset rs (amp; db);

/ / işlem 1 başlangıç ve / / recordset açmak
DB.BeginTrans (;):
RS.(Açık);

/ / veri işleme

/ / end 1 hareketi
DB.CommitTrans (;):  / / ya da geri)

/ / imleç kapatın
:: SQLFreeStmt (rs.m_hstmt, sql_close);

/ / işlem 2 başlangıç
DB.BeginTrans (;):

/ / Şimdi sonuç kümesi almak
RS.() Yeniden sorgulamak;

/ / veri işleme

/ / end hareket 2
DB.CommitTrans (;):

RS.(Kapat);
DB.Kapat)

Bu tekniği uygulamak için başka bir yol, hangi sen-ebilmek seslenmek-e sonraki taahhüt sonra işlem veya rollback ilki başlatmak için RequeryWithBeginTrans, yeni bir işlev yazmaktır. Böyle bir işlevi yazmak için aşağıdaki adımları uygulayın.:

  1. Kopya yeni bir fonksiyonu CRecordset::Requery () kodu.

  2. Hemen sonra SQLFreeStmtçağrısı aşağıdaki satırı ekleyin:
    m_pDatabase->BeginTrans( );

Şimdi sen-ebilmek seslenmek hareketlerinin her çifti arasındaki bu işlevi:

/ / işlem 1 başla&ngıç ve / / recordset açmak
DB.BeginTrans (;):
RS.(Açık);

/ / veri işleme

/ / end 1 hareketi
DB.CommitTrans (); nbsp; / / ya da geri)

/ / imleç kapatın, yeni işlem başlatmak
/ / Sonuç kümesi olsun
RS.RequeryWithBeginTrans ();

/ / veri işleme

/ / end hareket 2
DB.CommitTrans (;):  / / ya da geri)

&Notnbsp;  Recordset üye değişkenleri m_strFilter ya da m_strSort işlemleri arasında değiştirmeniz gerekiyorsa, bu tekniği kullanmayın. Bu durumda, her CommitTrans veya Rollback işlemi sonrasında recordset kapatmalısınız.

Teknik notlar numarasına göre |nbsp; Teknik notlar kategorisine göre

Index