TN043: rfx yordamları

Bu notu kayıt alanını exchange (rfx) mimarisini açıklar. Ayrıca, nasıl bir rfx_ yordamı yazma açıklar.

Kaydı alan Exchange genel bakış

Tüm recordset alanı işlevleri c++ kodu ile yapılır. Özel kaynaklar veya sihirli makrolar yoktur. Mekanizmanın kalbinde her recordset türetilmiş sınıfta geçersiz kılınması gereken sanal bir işlevdir. Her zaman bu formda bulunur:

void CMySet::DoFieldExchange (CFieldExchange * pFX)
{
  //{{AFX_FIELD_MAP(CMySet)
  lt; recordset Döviz alan türü arama >
  < recordset Döviz işlev çağrısı >
  //}}AFX_FIELD_MAP
}

Özel biçim afx Yorumlar ClassWizard bulun ve bu işlev içindeki kod düzenlemek izin verir. ClassWizard ile uyumlu olmayan kod dışında özel biçim Yorumlar yer almalıdır.

Yukarıdaki örnekte, lt; recordset_exchange_field_type_call > biçimindedir:

pFX->SetFieldType(CFieldExchange::outputColumn)

ve lt; recordset_exchange_function_call > biçimindedir:

RFX_Custom (pFX, "Col2", m_Col2)

rfx_ işlevlerin çoğu üç var yukarıda gösterildiği gibi bağımsız, ama bazı ( RFX_Text ve RFX_Binarygibi) sahip ek isteğe bağlı bağımsız değişkenler.

Birden fazla rfx_ her DoDataExchange işlevinde eklenebilir.

'Afxdb.h' mfc ile sağlanan tüm recordset alanı Döviz rutinleri listesi için bkz.

Recordset alanı çağrı CMySet sınıfı için alan verileri depolamak için bellek konumları (genellikle veri üyeleri) kayıt bir yoldur.

Notlar

Recordset alanı işlevleri, yalnızca CRecordset sınıfları ile çalışacak şekilde tasarlanmıştır. Bunlar genellikle diğer bir mfc sınıfları tarafından kullanılabilir değildir.

İlk değerleri veri standart c++ Oluşturucu, genellikle bir blok ayarlanır //{{AFX_FIELD_INIT(CMylSet) ve //}}AFX_FIELD_INIT Yorumlar.

Her rfx_ işlevi alan kirli durumunu geri hazırlama alanı düzenlemek için alan arşivleme için arasında değişen çeşitli işlemleri desteklemesi gerekir.

DoFieldExchange (örneğin SetFieldNull, IsFieldDirty), çağıran her fonksiyon mu DoFieldExchange için arama etrafında kendi başlatma.

Nasıl çalışır?

Aşağıdaki kayıt alan değiş tokuşu kullanmak için anlamanız gerekmez. Ancak, arka planda nasyl çaly?ty?yny yardımcı olacak bir anlayış yazmak kendi Satım prosedürü.

DoFieldExchange üye işlevi çok Serialize üye işlevi gibi - alma veya veri / / üye veri sınıfı ayarını formundan bir dış (odbc sorgusu sonucu bu durumda sütunları) sorumludur. PFX parametresi veri alışverişi yapmak için bağlam ve CObject::Serialize CArchive parametresi benzer. PFX ( CFieldExchange nesnesi), hangi benzer, ancak bir genelleme CArchive yön bayrağı bir işlem göstergesi vardır. rfx işlevi aşağıdaki işlemleri desteklemek gerekebilir

Kullanıcı Uzantıları

Varsayılan rfx mekanizması uzatmak için çeşitli yolları vardır. Şunları yapabilirsiniz

&Notnbsp;  Bu kod ClassWizard tarafından düzenlenemez ve yalnızca özel biçim yorumlar dışında kullanılmalıdır.

Rfx özel yazma

Kendi özel rfx fonksiyonu yazmak için varolan bir rfx işlev kopyalamak ve onu kendi amaçları için değişiklik önerilmektedir. Kopyalamak için doğru rfx seçerek işiniz çok daha kolay yapabilirsiniz. Bazı rfx işlevleri kopyalamak için karar verirken dikkate almalıdır bazı benzersiz özellikleri vardır.

RFX_Long ve RFX_Int:

Bu basit rfx işlevleri vardır. Veri değeri herhangi bir özel yorumu gerektirmez ve veri boyutu sabittir.

RFX_Single ve RFX_Double:

RFX_Long ve RFX_Int yukarıda, bu işlevler basit ve yapabilirsiniz varsayılan uygulanması yoğun kullanın. Dbflt.cpp dbrfx.cpp, yerine ancak yalnızca açıkça referans olduklarında noktası kitaplığı kayan çalışma yükleme etkinleştirmek için depolandıkları.

RFX_Text ve RFX_Binary:

Bu iki işlev dize/ikili bilgileri tutm&ak için statik bir arabellek erişinceye ve bu arabellekleri kaydetme yerine odbc SQLBindCol ile kaydetmelisiniz amp; değer. Bu nedenle, bu iki işlevi özel durum kodu var.

RFX_Date:

Odbc, kendi TIMESTAMP_STRUCT veri yapısı için Tarih ve saat bilgilerini döndürür. Bu işlev, göndermek ve Tarih Saat verileri almak için bir "vekil" bir TIMESTAMP_STRUCT dinamik olarak ayırır. Çeşitli işlemler, c++ CTime nesne ve TIMESTAMP_STRUCT proxy arasında Tarih ve saat bilgilerini aktarmanız gerekir. Söylemeye gerek yok, bu işlev önemli ölçüde zorlaştırmaktadır, ama nasıl veri aktarımı için bir proxy sunucu kullanmak iyi bir örnek olduğunu.

RFX_LongBinary:

Sadece sınıf kitaplığı sütunu bağlama veri gönderip kullanmaz rfx işlevi budur. Bu işlev BindFieldToColumn işlem yoksayar yerine, hata düzeltme işlemi sırasında gelen sql_longvarchar veya SQL_LONGVARBINARY veri depolamak için alanı ayırır ve ayrılan depoya değerini almak için bir SQLGetData çağrısı yapar. Veri değerleri veri kaynağına (yani NameValue ve değer işlemleri) geri göndermeye hazırlanırken, bu işlev ODBC'ın data_at_exec işlevini kullanır. Teknik Not 45 SQL_LONGVARBINARY ve SQL_LONGVARCHARs ile çalışma hakkında daha fazla bilgi için bkz:.

Kendi rfx_ işlevi yazarken, genellikle belirli bir işlemi uygulamak için CFieldExchange::Default kullanmak mümkün olacaktır. Varsayılan uygulanması söz konusu işlem için bak. Eğer yazılı rfx_ işlevinde işlemi gerçekleştiren için temsilci seçebilirsiniz CFieldExchange::Default. Sen-ebilmek görmek içinde dbrfx.cpp CFieldExchange::Default arama örnekleri

Rfx işlevinizin başlangıcında IsFieldType arayın ve hemen o false döndürür dönmek önemlidir. Bu mekanizma, parametre outputColumnsve tersi ( BindParam bir outputColumnüzerinde arama gibi) gerçekleştirilen işlemlerin tutar. Buna ek olarak, IsFieldType otomatik olarak outputColumns (m_nFields) ve params (m_nParams) sayısını izler.

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

Index