Aracılığıyla paylaş


Kayıt Kümesi: Kayıtları Toplu Yakalama (ODBC)

Bu konu MFC ODBC sınıfları için geçerlidir.

CRecordset sınıfı toplu sıra getirme için destek sağlar, bu da veri kaynağından her seferinde bir kayıt çekilmesi yerine tek bir getirme sırasında birçok kaydın getirilebileceği anlamına gelmektedir. Yalnızca türetilmiş bir CRecordset sınıfında toplu satır getirme işlemi uygulayabilirsiniz. Veri kaynağından kayıt kümesi nesnesine aktarma işlemi toplu kayıt alanı değişimi (Toplu RFX) olarak adlandırılır. CRecordset türevi bir sınıfta toplu satır getirmeyi kullanmıyorsanız, verilerin kayıt alanı değişimi (RFX) üzerinden aktarıldığını unutmayın. Daha fazla bilgi için bkz. Kayıt Alanı Değişimi (RFX).

Bu konu şunları açıklar:

  • CRecordset toplu satır getirmeyi nasıl destekler.

  • Toplu satır alma kullanırken dikkat edilecek bazı özel durumlar.

  • Toplu alan kayıt değişimi nasıl uygulanır.

CRecordset Toplu Satır Getirmeyi Nasıl Destekler

Kayıt kümesi nesnenizi açmadan önce SetRowsetSize üye işleviyle bir satır kümesi boyutu tanımlayabilirsiniz. Satır kümesi boyutu, bir tek getirme sırasında kaç kaydın alınması gerektiğini belirtir. Toplu satır alımı uygulandığında varsayılan satır kümesi boyutu 25'tir. Toplu satır getirme uygulanmadıysa, satır kümesi boyutu 1 sabitlenmiş olarak kalır.

Satır kümesi boyutunu ayarladıktan sonra, üye işlevini çağırın. Burada, toplu satır alma uygulamak için dwOptions parametresinin CRecordset::useMultiRowFetch seçeneğini belirtmeniz gerekir. Ayrıca CRecordset::userAllocMultiRowBuffers seçeneğini de ayarlayabilirsiniz. Toplu kayıt alanı değişim mekanizması bir getirme sırasında alınan bir çok veri satırını depolamak için diziler kullanır. Bu depolama arabellekleri çerçeve tarafından ayrılabilir veya ayırma işlemini elle gerçekleştirebilirsiniz. CRecordset::userAllocMultiRowBuffers seçeneğinin belirtilmesi, ayırma işlemini sizin yapacağınız anlamına gelir.

Aşağıdaki tablo toplu satır getirmeyi destelemek için CRecordset tarafından sağlanan üye işlevlerini listeler.

Üye işlevi

Açıklama

CheckRowsetError

Alma sırasında oluşan tüm hataları işleyen sanal işlev.

DoBulkFieldExchange

Toplu kayıt alan değişimini uygular. Birden çok veri satırını veri kaynağından kayıt kümesi nesnesine aktarmak için otomatik olarak çağrıldı.

GetRowsetSize

Satır kümesi boyutu için geçerli ayarı alır.

GetRowsFetched

Belirli bir getirmeden sonra kaç satırın gerçekten geri alındığını belirtir. Çoğu durumda tamamlanmamış bir satır kümesi getirilmezse satır kümesinin boyutu budur.

GetRowStatus

Bir satır kümesi içinde belirli bir satır için getirme durumu döndürür.

RefreshRowset

Verileri ve bir satır kümesindeki belirli bir satırın durumunu yeniler.

SetRowsetCursorPosition

İmleci bir satır kümesi içinde belirli bir satıra taşır.

SetRowsetSize

Satır kümesi boyutu için ayarı belirtilmiş değere değiştiren sanal işlev.

Özel Konular

Her ne kadar toplu satır getirme bir performans kazancı olsa da, bazı özellikler farklı çalışır. Toplu satır almayı uygulamaya karar vermeden önce aşağıdakileri göz önünde bulundurun:

  • Çerçeve, veri kaynağından kayıt kümesi nesnesine veri aktarmak için otomatik olarak DoBulkFieldExchange üye işlevini çağırır. Ancak, veri kayıt kümesinden veri kaynağına geri aktarılmaz. AddNew, Düzenle, Sil veya Güncelleştir üye işlevlerini çağırmak, başarısız bir onayla sonuçlanır. Her ne kadar CRecordset toplu veri satırlarını güncelleştirmek için bir mekanizma sağlamasa da, ODBC API SQLSetPos işlevini kullanarak kendi işlevlerinizi yazabilirsiniz. SQLSetPos hakkında daha fazla bilgi için MSDN belgelerindeki ODBC SDK Programcının Başvurusu konusuna bakın.

  • Üye işlevler IsDeleted, IsFieldDirty, IsFieldNull, IsFieldNullable, SetFieldDirty, ve SetFieldNull toplu satır getirmeyi uygulayan kayıt kümelerinde kullanılamaz. Ancak, IsDeleted yerine GetRowStatus ve IsFieldNullable yerine GetODBCFieldInfo çağırabilirsiniz.

  • Taşıma işlemleri, satır kümesi ile kayıt kümenizi yeniden konumlandırır. Örneğin, Başlangıç satır kümesi 10 olan 100 kayıt kümesi içeren bir kayıt kümesi açtığınızı varsayın. seçeneği 1 satırında bulunan geçerli kayıt ile birlikte 1'den 10'un sonuna kadar olan satırları getirir. MoveNext öğesine yapılan çağrı, sonraki satırı değil sonraki satır kümesini getirir. Bu satır kümesi 11'den 20'nin sonuna kadar olan satırlardan oluşur ve geçerli kayır 11. satıra yerleştirilmiştir. Toplu satır getirme uygulandığında MoveNext ve Taşı( 1 ) öğelerinin eşdeğer olmadığını unutmayın. Taşı( 1 ) komutu geçerli kayıttan 1 satır başlatan satır kümesini getirir. Bu örnekte, Taşı (1) öğesini Açık öğesinden sonra çağırmak geçerli kaydın 2. satırda konumlandığı 2'den 11'e kadar olan satır kümesini getirir. Daha fazla bilgi için, Taşı üye işlevine bakın.

  • Kayıt alanı değişiminden farklı olarak sihirbazlar toplu kayıt alanı değişimini desteklemez. Buna göre alan veri üyelerinizi elle belirtmeniz ve Toplu RFX işlevlerine çağrılar yazarak DoBulkFieldExchange öğesini elle geçersiz kılmanız gerekmektedir. Daha fazla bilgi için bkz. Sınıf Kitaplığı Başvurusu belgesinde Kayıt Alanı Değişimi İşlevleri'ne bakın.

Toplu Kayıt Alan Değişimi Nasıl Uygulanır

Toplu kayıt alanı değişimi, bir veri satırını veri kaynağından kayıt kümesi nesnesine aktarır. Toplu RFX işlevleri bu veriyi depolayan diziler ve aynı zamanda satır kümesindeki her bir veri öğesinin uzunluğunu saklayan diziler kullanır. Sınıf tanımınız içinde veri dizilerine erişmek için alan veri üyelerini işaretçi olarak tanımlamalısınız. Ayrıca, dizilerin uzunluklarına erişmek için işaretçiler kümesi tanımlamalısınız. Parametre verisi üyeleri, işaretçiler olarak bildirilmemelidir; parametre verisi üyelerini toplu kayıt alanı değişimini kullanırken bildirmek onları kayıt alanı değişimini kullanırken bildirmekle aynıdır. Aşağıdaki kod basit bir örnek gösterir:

class MultiRowSet : public CRecordset
{
public:
   // Field/Param Data
      // field data members
      long* m_rgID;
      LPSTR m_rgName;

      // pointers for the lengths
      // of the field data
      long* m_rgIDLengths;
      long* m_rgNameLengths;

      // input parameter data member
      CString m_strNameParam;

   .
   .
   .
}

Bu depolama arabelleklerini el ile ayırabilir veya ayırma işlemini çerçevenin gerçekleştirmesini sağlayabilirsiniz. Arabellekleri kendiniz ayırmak için, Open üye işlevindeki dwOptions parametresinin CRecordset::userAllocMultiRowBuffers seçeneğini belirmeniz gerekir. Dizilerin boyutlarını en az satır kümesi boyutuna eşit ayarladığınızdan emin olun. Ayırmayı çerçevenin yapmasını istiyorsanız, işaretçilerinizi NULL. olarak başlatmalısınız. Bu, genelde kayıt kümesi nesnesinin oluşturucusunda yapılır:

MultiRowSet::MultiRowSet( CDatabase* pDB )
   : CRecordset( pDB )
{
   m_rgID = NULL;
   m_rgName = NULL;
   m_rgIDLengths = NULL;
   m_rgNameLengths = NULL;
   m_strNameParam = "";

   m_nFields = 2;
   m_nParams = 1;

   .
   .
   .
}

Son olarak, DoBulkFieldExchange üye işlevinin üzerine yazabilirsiniz. Alan veri üyeleri için, Bulk RFX işlevlerini; herhangi bir parametre veri üyesi için, RFX işlevlerini çağırın. Kayıt kümesini bir SQL deyimi geçirerek veya saklı bir yordamı Açık olarak geçirerek açtıysanız, Toplu RFX çağrısı yaptığınız sıra kayıt kümesindeki sütunların sırası ile eşleşmelidir. Benzer şekilde, parametrelere yapılan RFX çağrılarının sırası SQL deyiminin veya saklı yordamın parametrelerinin sırasına eşleşmelidir.

void MultiRowSet::DoBulkFieldExchange( CFieldExchange* pFX )
{
   // call the Bulk RFX functions
   // for field data members
   pFX->SetFieldType( CFieldExchange::outputColumn );
   RFX_Long_Bulk( pFX, _T( "[colRecID]" ),
                  &m_rgID, &m_rgIDLengths );
   RFX_Text_Bulk( pFX, _T( "[colName]" ),
                  &m_rgName, &m_rgNameLengths, 30 );


   // call the RFX functions for
   // for parameter data members
   pFX->SetFieldType( CFieldExchange::inputParam );
   RFX_Text( pFX, "NameParam", m_strNameParam );
}

Not

Türetilmiş CRecordset sınıfınız kapsam dışına çıkmadan önce Kapat üye işlevini çağırmanız gerekir. Bu, çerçeve tarafından ayrılan herhangi bir belleğin serbest bırakılabilmesini sağlar. Toplu satır getirmeyi uyguluyor olsanız daKapat'ı açıkça çağırmak iyi bir alışkanlıktır.

Kayıt alanı değişimi (RFX) hakkında daha fazla bilgi için bkz. Kayıt Alanı Değişimi: RFX Nasıl Çalışır. Parametreleri kullanma hakkında daha fazla bilgi için bkz. CFieldExchange::SetFieldType ve Kayıt Kümesi: Bir Kayıt Kümesini Parametreleştirme (ODBC).

Ayrıca bkz.

Başvuru

CRecordset::m_nFields

CRecordset::m_nParams

Kavramlar

Kayıt Kümesi (ODBC)