Bu teknik not dao kayıt alanını exchange (dfx) mekanizması açıklanmaktadır. dfx rutinleri içinde neler olduğunu anlamanıza yardımcı olmak için DFX_Text işlevini ayrıntılı olarak örnek olarak açıklanacaktır. Bu teknik not bilgi ek kaynağı, sadece kod diğer bireysel dfx işlevleri inceleyebilirsiniz.Muhtemelen özel bir dfx rutin sen-ebilmek lüzum (odbc veritabanı sınıflarıyla kullanılır) özel rfx rutin bir sıklıkta gerekmez.
Bu teknik notu içeren:
Dfx genel bakış
Dao kayıt alanı Döviz mekanizması (dfx) alma ve CDaoRecordset sınıfını kullanarak veri güncelleştirme yordamı kolaylaştırmak için kullanılır. İşlem veri üyeleri CDaoRecordset sınıfı kullanılarak kolaylaştırılmıştır. CDaoRecordsetya tarafından türetilmiş bir sınıf gösteren bir tablo veya sorgudaki her alan için veri üyeleri ekleyebilirsiniz. Bu "statik bağlama" mekanizması basittir, ancak tüm uygulamalar için veri getirme/update yöntemini tercih olmayabilir. dfx, geçerli kaydın her değiştiğinde her ilişkili alan alır. Para değiştiğinde her alanda getiriliyor gerektirmeyen bir performans duyarlı uygulaması geliştiriyorsanız, "CDaoRecordset::GetFieldValue ve CDaoRecordset::SetFieldValue ile dinamik bağlama" olabilir veri erişim yöntemi tercih.
&Notnbsp; Statik ve dinamik bağlayıcı bir hibrid kullanımı kullanılacak şekilde dfx ve dinamik bağlama, dışlamayan.
Örnek 1 - dao kaydın alan değiş tokuşu sadece kullanımı
( CDaoRecordset - türetilmiş sınıf varsayar CMySet açık)
/ / Müşteriler tablosuna yeni kayıt Ekle
myset.AddNew();
myset.m_strCustID = _t("msft");
myset.m_strCustName = _T("Microsoft");
myset.Update()
Örnek 2 - kullanımı yalnızca dinamik bağlama
( CDaoRecordset sınıfını kullanarak varsayar rs , ve zaten açıktır)
/ / Müşteriler tablosuna yeni kayıt Ekle
COleVariantnbsp; varFieldValue1 (_t("msft"), vt_bstrt);
/ / &Not: vt_bstrt bayrakları dize türünün ANSI, UNICODE varsayılan yerine
COleVariant varFieldValue2 (_T("Microsoft"), vt_bstrt);
RS.AddNew();
RS.SetFieldValue(_T("Customer_ID"), varFieldValue1);
RS.SetFieldValue(_T("Customer_Name"), varFieldValue2);
RS.Update()
Örnek 3 - dao kaydın alan değiş tokuşu ve dinamik bağlama
(tarama çalışan verileri ile CDaoRecordsetvarsayar-türetilmiş sınıf emp )
/ / O-ebilmek var olmak göstermek çalışanın veri almak
Emp.MoveNext();
/ / Kullanıcı çalışanın fotoğrafı görmek istiyorsa
/ / Bu getir
COleVariant varPhoto;
Eğer (bSeePicture)
Emp.GetFieldValue(_T("photo"), varPhoto);
/ / Verileri görüntülemek
PopUpEmployeeData (emp.m_strFirstName,
Emp.m_strLastName, varPhoto)
Dfx mekanizması mfc odbc sınıfları tarafından kullanılan kayıt alanını exchange (rfx) mekanizması benzer biçimde çalışır. dfx ve rfx şebekelerinde aynı ama sayısız iç farklar vardır. Öyle ki neredeyse tüm kodu bireysel dfx rutinleri tarafından paylaşılır dfx işlevleri tasarımı oldu. En yüksek düzeyde dfx sadece bir kaç şey yok.
Dfx kalbinde CDaoRecordset türetilen sınıfın DoFieldExchange işlevi mekanizmasıdır. Bu işlev çağrıları bireysel dfx işlevlerine uygun işlem türü gönderir. İç mfc DoFieldExchange çağrılmadan önce işlevler, işlem türü ayarlayın. Aşağıdaki liste, çeşitli işlem türleri ve kısa bir açıklama gösterir.
| İşlem | Açıklama |
| AddToParameterList | Parameters yan tümcesi oluşturur |
| AddToSelectList | Select yan tümcesi oluşturur |
| BindField | Bağlama yapısı ayarlar |
| BindParam | Parametre değerlerini ayarlar |
| Hata düzeltme | BOŞ durumunu ayarlar |
| AllocCache | Kirli denetleme önbellek ayırır |
| StoreField | Geçerli kayıt önbelleğine kaydeder |
| LoadField | Geri yükleme önbelleğine üye değerleri |
| FreeCache | Önbelleği boşaltır |
| SetFieldNull | Kümeleri durumu & alan; NULL değeri |
| MarkForAddNew | İşaretleri alanların kirli değilse sahte null |
| MarkForEdit | İşaretleri alanların kirli Eğer önbellek eşleşmiyor |
| SetDirtyField | Kirli olarak işaretli değerleri kümesi alan |
Sonraki bölümde, her bir işlem daha ayrıntılı DFX_Text için açıkladı.
Dao kayıt alan değişimi süreci hakkında anlamak için en önemli özelliği, GetRows işlevi ICDaoRecordset nesnesinin kullanmasıdır. dao GetRows işlevi, çeşitli şekillerde çalışabilirsiniz. Bu teknik not kapsamı dışında olduğu gibi bu teknik not GetRows sadece kısaca açıklanmıştır.
Dao GetRows çeşitli şekillerde çalışabilirsiniz.
Bir dfx işlevinde uygulanan en önemli operasyon başarıyla GetRowsçağırmak için gerekli veri yapılarına kadar ayarlama yeteneği olması gereken bu tartışmayı belirgindir. dfx işlevi de desteklemesi gereken diğer işlemleri vardır, ama hiçbiri olarak önemli ya da doğru şekilde hazırlanması için GetRows karmaşık arama.
Dfx kullanımı çevrimiçi belgelerinde açıklanmıştır. Esasen, 2 gereksinimleri vardır. İlk üyeleri, her ilişkili alan ve parametre CDaoRecordset türetilmiş sınıf eklenmelidir. Bu CDaoRecordset::DoFieldExchange ardından kılınması. Not veri türü önemlidir. Bu veritabanı alanında verilerin eşleşmesi veya en azından bu tür convertable gerekir. Örneğin sayısal alana uzun tamsayı gibi veritabanı her zaman metne dönüştürülür ve CString üye bağlı, ancak veritabanı metin alanında mutlaka uzun tamsayı gibi sayısal gösterime dönüştürülmüş olabilir ve uzun tamsayı üye bağlı. dao ve Microsoft Jet veritabanı altyapısı dönüşüm (yerine mfc) sorumlu.
Daha önce belirtildiği gibi sadece bir örnek üzerinde çalışmak için muhtemelen dfx nasıl çalıştığını açıklamak için en iyi yol olduğunu. Bu amaçla DFX_Text iç yapıları gidiş gayet iyi dfx en az bir temel anlayış sağlamak için çalışması gerektiğini.
AddToParameterList
Bu işlem sql PARAMETRELERİ yan tümcesi oluşturur (" Parameters lt;param name>, <param type> ... ; ") Jet tarafından gerekli. Her parametre adını ve (belirtildiği gibi rfx çağrı) yazdınız. Fonksiyonu tek tip adlarını görmek için CDaoFieldExchange::AppendParamType bakın. DFX_Textdurumunda, kullanılan türüdürtext.
AddToSelectList
Sql seçin yan tümcesi oluşturur. Bu oldukça yalındır dfx çağrı tarafından belirtilen sütun adı sadece olduğu gibi eklenir (" SELECT lt;column name>, ... ").
BindField
-Çok en karmaşık işlemleri. Bu nerede GetRows tarafından kullanılan dao bağlayıcı yapısını kurmak olduğunu daha önce belirtildiği gibi. Dan DFX_Text kodda görüldüğü gibi kullanılan dao türü (dao_char ya da dao_wchar , DFX_Text) yapısında bilgi türlerini içerir. Kullanılan bağlama türü Ayrıca de ayarlanır. GetRows sadece kısa bir süre bir önceki bölümde açıklanan, ama mfc tarafından kullanılan bağlantı türünü her zaman doğrudan adres bağlamasını (DAOBINDING_DIRECT) olduğunu açıklamak için yeterli oldu. mfc Bellek ayırma kontrol edebilir ve doğru uzunlukta bir adresi belirtmek için ek değişken uzunlukta sütun bağlama ( DFX_Textgibi) geri bağlama kullanılır. Anlamı bu mfc hep dao "nerede" böylece üye değişkenleri doğrudan bağlamaya izin veri koymak söyleyebilirsiniz. (Sütun adı tarafından bağlama) sütunu bağlama türünü ve bellek ayırma işlev adresi gibi şeyler olarak bağlayıcı yapısını geri kalanını girilir.
BindParam
Bu, parametre üye belirtilen parametre değeri ile SetParamValue çağırır, basit bir işlemdir.
Hata düzeltme
Her alan için null durumu doldurur.
SetFieldNull
Bu işlem yalnızca null olarak her alanda durumu işaretler ve üye değişkenin değeri pseudo_null için ayarlar.
SetDirtyField
Çağrı SetFieldValue her alan için kirli olarak işaretlenmiş.
Tüm kalan işlemlerini yalnızca veri önbelleğini kullanmak ile ilgilidir. Veri bazı şeyler daha basit yapmak için kullanılan geçerli kayıttaki verileri ilave bir arabellek önbelleğidir. Örneğin "kirli" alanları otomatik olarak algılanabilir. Çevrimiçi belgelerinde açıklandığı gibi bu tamamen veya alan düzeyinde devre dışı bırakılabilir. Tampon uygulaması bir harita kullanır. Bu harita kadar verileri dinamik olarak ayrılan kopyalarını "ilişkili" alan (ya da CDaoRecordset derieved veri üyesi) adresiyle eşleştirmek için kullanılır.
AllocCache
Dinamik olarak önbelleğe alan değeri ayırır ve harita ekler.
FreeCache
Önbelleğe alınmış alan değeri siler ve haritadan kaldırır.
StoreField
Geçerli alanın değerinin veri önbelleğine kopyalar.
LoadField
Alan üye önbellekli değeri kopyalar.
MarkForAddNew
Geçerli alan değeri olmayan diye bakar-null ve gerekirse o kirli işaretleri.
MarkForEdit
Geçerli alanın değerini veri önbelleği ile karşılaştırır ve gerekirse kirli işaretler.
İpucu Varolan dfx yordamlar standart veri türleri üzerinde özel dfx rutinleri modeli.
Teknik notlar numarasına göre |nbsp; Teknik notlar kategorisine göre