Aracılığıyla paylaş


Kayıt Alanı Değişimi: Sihirbaz Kodu ile Çalışma

Bu konu MFC Uygulama Sihirbazı'nın ve Sınıf Ekle (Bir MFC ODBC Tüketici Eklemek konusunda bahsedildiği gibi) komutunun RFX'i desteklemek için yazdığı kodu ve bu kodu nasıl değiştirmek isteyebileceğinizi anlatmaktadır.

Not

Bu konu toplu satır yakalamanın uygulanmadığı CRecordset'ten türetilen sınıflara uygulanır. toplu satır yakalama kullanıyorsanız, toplu kayıt alanı değişimi (Toplu RFX) gerçekleştirilir. Toplu RFX, RFX'e benzer. Farklılıkları anlamak için bkz. Kayıt Kümesi: Kayıtları Toplu Olarak Yakalama (ODBC).

MFC Uygulama Sihirbazı veyaSınıf Ekle öğesi ile bir kayıt kümesi sınıfı oluşturduğunuzda, sihirbaz, sihirbazın içinde yaptığınız veri kaynağı, tablo ve sütun seçimlerine dayanarak sizin için aşağıdaki RFX-ilgili elemanlarını yazar:

  • Kayıt kümesi sınıfı içerisindeki kayıt kümesi alan verisi üyelerinin bildirimleri

  • CRecordset::DoFieldExchange başvurusunu geçersiz kılma işlemi.

  • Kayıt kümesi sınıfı oluşturucusu içerisindeki kayıt kümesi alan verisi başlatmaları

Alan Veri Üye Bildirimleri

Sihirbazlar CSections sınıfına ilişkin aşağıdakine benzeyen bir .h dosyasında kayıt kümesi sınıfı yazar:

class CSections : public CRecordset
{
public:
   CSections(CDatabase* pDatabase = NULL);
   DECLARE_DYNAMIC(CSections)

// Field/Param Data
   CString   m_strCourseID;
   CString   m_strInstructorID;
   CString   m_strRoomNo;
   CString   m_strSchedule;
   CString   m_strSectionNo;

// Overrides
   // Wizard generated virtual function overrides
   protected:
   virtual CString GetDefaultConnect();  // Default connection string
   virtual CString GetDefaultSQL();      // Default SQL for Recordset
   virtual void DoFieldExchange(CFieldExchange* pFX);  // RFX support

// Implementation
#ifdef _DEBUG
   virtual void AssertValid() const;
   virtual void Dump(CDumpContext& dc) const;
#endif

};

Kendi bağladığınız yeni alan veri üyelerini veya parametre veri üyelerini eklerseniz, bunları sihirbaz tarafından oluşturulmuş olanlardan sonra ekleyin.

Ayrıca, sihirbazın CRecordset sınıfının DoFieldExchange üye işlevini geçersiz kılmasına dikkat edin.

DoFieldExchange üye işlevini Geçersiz Kılma

DoFieldExchange RFX'in merkezidir. Çerçevenin veri kaynağından kayıt kümesine ya da kayıt kümesinden veri kaynağına her veri taşıması gerektiğinde DoFieldExchange öğesini çağırır. DoFieldExchange aynı zamanda IsFieldDirty ve IsFieldNull üye işlevleri üzerinden alan verisi üyeleri hakkında bilgi alımını da destekler.

Aşağıdaki DoFieldExchange geçersiz kılma CSections sınıfı içindir. Sihirbaz kayıt kümesi sınıfı için .cpp dosyasına işlevi yazar.

void CSections::DoFieldExchange(CFieldExchange* pFX)
{
   pFX->SetFieldType(CFieldExchange::outputColumn);
   RFX_Text(pFX, "CourseID", m_strCourseID);
   RFX_Text(pFX, "InstructorID", m_strInstructorID);
   RFX_Text(pFX, "RoomNo", m_strRoomNo);
   RFX_Text(pFX, "Schedule", m_strSchedule);
   RFX_Text(pFX, "SectionNo", m_strSectionNo);
}

İşlevin aşağıdaki temel özelliklerine dikkat edin:

  • İşlevin bu bölümü alan eşleştirmesi olarak adlandırılır.

  • pFX işaretçisinden CFieldExchange::SetFieldType öğesine yapılan çağrı. Bu çağrı tüm RFX işlevinin DoFieldExchange öğesinin sonuna getirtildiğini belirtir veya SetFieldType öğesine yapılan sonraki çağrı çıktı sütunlarıdır. Daha fazla bilgi için bkz. CFieldExchange::SetFieldType.

  • RFX_Text genel işlevini birkaç çağrı — alan veri üyesi başına bir tane (örnektekilerin tümü CString değişkenleridir). Bu aramalar, veri kaynağında bulunan bir sütun adıyla alan veri üyesi arasındaki ilişkiyi belirler. RFX işlevleri gerçek veri aktarımını yapar. Sınıf kitaplığı bütün ortak veri türleri için RFX işlevleri sağlar. RFX işlevleri hakkında daha fazla bilgi için bkz. Kayıt Alanı Değişimi: RFX İşlevlerini Kullanma.

    Not

    Sonuç kümenizdeki sütunların sırası DoFieldExchange öğesindeki RFX işlevinin çağrılarının sırasıyla eşleşmelidir.

  • DoFieldExchange öğesini çağırdığında çerçevenin geçtiği CFieldExchange nesnesine pFX işaretçisi. CFieldExchange nesnesi, DoFieldExchange'nin yapacağı işlemi, aktarmanın yönünü ve diğer içerik bilgisini belirtir.

Kayıt Kümesi Oluşturucu

Sihirbazların yazdığı kayıt kümesi oluşturucusu RFX ile ilgili iki şeyi içerir:

  • Her alanın veri üyesi için bir başlatma

  • Alan verisi üyelerinin sayısını içeren m_nFields veri üyesi için bir başlatma.

CSections kayıt kümesi örneği oluşturucusu aşağıdaki gibi görünür:

CSections::CSections(CDatabase* pdb)
   : CRecordset(pdb)
{
   m_strCourseID = "";
   m_strInstructorID = "";
   m_strRoomNo = "";
   m_strSchedule = "";
   m_strSectionNo = "";
   m_nFields = 5;
}

Not

El ile alan veri üyesi eklerseniz, yeni sütunları dinamik olarak bağlarsanız yapabileceğiniz gibi, m_nFields öğesini arttırmanız gerekir. Bunu kodun bir diğer satırını ekleyerek yapın, örneğin:

m_nFields += 3;

Üç yeni alan eklemek gereken için kod budur. Herhangi bir parametre veri üyesi eklerseniz, parametre veri üye sayısını içeren m_nParams veri üyesini başlatmanız gerekir. m_nParams başlatmayı köşeli ayraçların dışına yazın.

Ayrıca bkz.

Kavramlar

Kayıt Alanı Değişimi (RFX)