TN053: Özel dfx yordamları dao veritabanı sınıfı
[!NOT]
Visual C++ .NET gibi, Visual C++ ortamı ve sihirbazları artık DAO'yu desteklemez (ancak DAO sınıfları dahil edilmiştir ve hala bunları kullanabilirsiniz).Microsoft, kullanmanızı önerir ole db şablon veya odbc ve mfc yeni projeler için.DAO'yu sadece var olan uygulamaları sürdürmek için kullanmalısınız.
Bu teknik Not dao Kayıt alanını exchange (dfx) mekanizması açıklanmaktadır.dfx yordamları neler olduğunu anlamanıza yardımcı olmak için DFX_Text işlevi açıklandığı örnek olarak ayrıntılı.Bu teknik notu bilgilerinin ek bir kaynak olarak, kod diğer bireysel dfx işlevleri inceleyebilirsiniz.Büyük bir olasılıkla özel dfx yordamı (odbc veritabanı sınıflarıyla kullanılır) özel bir rfx yordamına duyduğunuz sıklıkta değiştirmeniz gerekmez.
Bu teknik Not içerir:
dfx genel bakış
Örnek dao kaydın alan değiş tokuşu ve dinamik bağlama
dfx nasıl çalışır?
Özel dfx alışkanlık ne yapar
DFX_Text ayrıntıları
dfx genel bakış
Bir dao Kayıt alanını exchange mekanizma (dfx) alırken ve kullanırken verileri güncelleştirme yordamı kolaylaştırmak için kullanılan CDaoRecordset sınıfı.Veri üyeleri kullanarak işlemi Basitleştirilmiş CDaoRecordset sınıfı.Dan türeyen tarafından CDaoRecordset, veri üyeleri gösteren bir tablo veya sorgudaki her alan türetilmiş sınıf ekleyebilirsiniz.Bu "statik bağlama" mekanizması basittir, ancak tüm uygulamalar için seçtiğiniz veri alımı/update yöntemi olamaz.dfx ilişkili her alan geçerli kaydın değişip her zaman alır.Para birimini değiştirdiğinizde, her alanı getiriliyor gerektirmeyen bir performans duyarlı uygulaması geliştiriyorsanız "dinamik bağlama" yoluyla CDaoRecordset::GetFieldValue ve CDaoRecordset::SetFieldValue istediği veri erişim yöntemi olabilir.
[!NOT]
Statik ve dinamik bağlama karma kullanımını kullanılacak şekilde dfx ve dinamik bağlama dışlayan, değildir.
Örnek 1 — Kullanımını dao kaydın alanı yalnızca Exchange
(varsayar CDaoRecordset — türetilmiş sınıf CMySet zaten açık)
// Add a new record to the customers table
myset.AddNew();
myset.m_strCustID = _T("MSFT");
myset.m_strCustName = _T("Microsoft");
myset.Update();
Örnek 2 — yalnızca dinamik bağlama kullanın
(kullanarak varsayar CDaoRecordset sınıfı rs, ve açık durumda)
// Add a new record to the customers table
COleVariant varFieldValue1 ( _T("MSFT"), VT_BSTRT );
//Note: VT_BSTRT flags string type as ANSI, instead of UNICODE default
COleVariant varFieldValue2 (_T("Microsoft"), VT_BSTRT );
rs.AddNew();
rs.SetFieldValue(_T("Customer_ID"), varFieldValue1);
rs.SetFieldValue(_T("Customer_Name"), varFieldValue2);
rs.Update();
Örnek 3 — Kullanımı dao kaydın alan değişimi ve dinamik bağlama
(tarama çalışan verilerle varsayar CDaoRecordset-türetilmiş sınıf emp)
// Get the employee's data so that it can be displayed
emp.MoveNext();
// If user wants to see employee's photograph,
// fetch it
COleVariant varPhoto;
if (bSeePicture)
emp.GetFieldValue(_T("photo"), varPhoto);
// Display the data
PopUpEmployeeData(emp.m_strFirstName,
emp.m_strLastName, varPhoto);
dfx nasıl çalışır?
dfx mekanizması mfc odbc sınıfları tarafından kullanılan kayıt alanını exchange (rfx) mekanizması benzer bir şekilde çalışır.dfx ve rfx prensipleri aynıdır, ancak çok sayıda iç farklar vardır.Neredeyse tüm kod, tek tek dfx yordamları tarafından paylaşılan, tasarım dfx işlevlerin idi.En yüksek düzeyi dfx at yalnızca birkaç açıdan önemlidir.
dfx yapıları sql seçin yan tümcesi ve sql PARAMETRELERİ gerekirse yan tümcesi.
dfx yapıları dao tarafından 's kullanılan bağlama yapı GetRows (daha fazla daha sonra bu) işlevi.
dfx (çift ara bellekleme kullanılıyorsa) kirli alanlar algılamak için kullanılan veri arabelleği yönetir.
dfx yöneten null ve DIRTY durum diziler ve güncelleştirmeleri gerekirse değerlerini ayarlar.
dfx Kalp mekanizmadır CDaoRecordset türetilmiş sınıf'ın DoFieldExchange işlevi.Bu işlev çağrıları ayrı ayrı dfx işlevlerine uygun işlem türü gönderir.Önce arama DoFieldExchange işlem türü iç mfc işlevleri kümesi.Aşağıdaki listede, çeşitli işlem türleri ve kısa bir açıklama gösterilir.
İşlem |
Description |
---|---|
AddToParameterList |
parameters yan oluşturur |
AddToSelectList |
select yan tümcesi yapılar |
BindField |
Bağlama yapısını belirler. |
BindParam |
Parametre değerlerini ayarlar. |
Hata düzeltme |
null durumunu ayarlar |
AllocCache |
Önbellek kirli onay için ayırır. |
StoreField |
Geçerli kaydın önbelleğine kaydeder. |
LoadField |
Üye değerleri önbelleğine geri yükler |
FreeCache |
Önbelleği boşaltır. |
SetFieldNull |
Ayarlar alanına durum & NULL değeri |
MarkForAddNew |
Kirli alanları yoksa null sahte işaretler |
MarkForEdit |
Kirli alanlar ise, işaretler, önbellek eşleşmiyor |
SetDirtyField |
Kirli olarak işaretlenmiş bir değerler kümesi alan |
Sonraki bölümde, her işlem için daha ayrıntılı açıklanması DFX_Text.
dao Kayıt alanını değişim işlemi hakkında bilmek en önemli özelliği, kullanmasıdır GetRows işlevini CDaoRecordset nesnesi.dao GetRows işlevi, çeşitli yollarla çalışabilir.Bu teknik Not yalnızca kısaca açıklayan GetRows Bu teknik Not kapsamı dışında olduğu gibi.
dao GetRows çeşitli şekillerde çalışabilirsiniz.
Bu birden çok kayıt ve birden çok veri alanı aynı anda getirmek.Bu büyük veri yapısı ve her alan için uygun uzaklıklar postalarla karmaşıklıklar ile daha hızlı veri erişimi ve veri yapısı içindeki her kayıt için sağlar.mfc mekanizması getiriliyor bu birden fazla kayıt yararlanmak değil.
Başka bir yol GetRows için çalışmadır programcılar her alan için bir veri kaydı alınan verileri bağlama adreslerini belirtmek izin vermek.
dao de "Geri arayan için değişken uzunlukta sütun halinde arayan bellek ayırmaya izin vermek için arama" olur.Bu ikinci özellik veri kopyalarının sayısını en aza indirme yanı sınıfın üyeleri doğrudan veri depolanmasını sağlayarak yararı vardır ( CDaoRecordset türetilmiş sınıf).Bu ikinci mekanizma mfc kullanan veri üyeleri bağlamak yöntemdir CDaoRecordset türetilmiş sınıfları.
Özel dfx alışkanlık ne yapar
Herhangi bir dfx işlevinde uygulanan en önemli işlem başarıyla çağırmak için gerekli veri yapılarını ayarlama yeteneği olması gereken Bu tartışmayı belirgin GetRows.dfx işlevi de desteklemesi gereken diğer işlemleri, ancak hiçbiri önemli ya da doğru hazırlama gibi karmaşık bir dizi vardır GetRows çağırın.
dfx kullanımı çevrimiçi belgelerinde açıklanmıştır.Aslında iki gereksinim vardır.İlk olarak, üyelerin eklenmesi gereken CDaoRecordset türetilmiş sınıf her ilişkili alan ve parametre.Bunu izleyen CDaoRecordset::DoFieldExchange kılınması.Üye veri türü önemli olduğunu unutmayın.Veritabanında yer alan verilerden eşleşmesi veya en azından bu tür dönüştürülebilir.Örneğin sayısal alana bir uzun tamsayı gibi veritabanı her zaman metne dönüştürülür ve bağlı bir CString üye ancak bir metin alanı veritabanında gerekmez uzun tamsayı sayısal bir gösterimi için dönüştürülür ve uzun tamsayı üyesi bağlı.dao ve Microsoft Jet veritabanı altyapısı, dönüştürme (yerine mfc) sorumludur.
DFX_Text ayrıntıları
Önceden de belirtildiği gibi dfx nasıl çalıştığını açıklamak için iyi bir örnek üzerinde çalışmak için yoludur.Bu amaçla iç yapıları giderek DFX_Text dfx en az bir temel anlayış sağlamak için oldukça iyi iş görür.
AddToParameterList
Bu işlem sql oluşturur PARAMETRELERİ yan tümcesi ("Parameters <param name>, <param type> ... ;") Jet tarafından gerekli.Her parametre adlı ve (belirtildiği gibi rfx çağrısı) yazdınız.Fonksiyonuna bakın CDaoFieldExchange::AppendParamType işlev bağımsız türlerinin adlarını görmek için.Durumunda, DFX_Text, kullanılan türü text.AddToSelectList
sql oluşturur seçin yan tümcesi.Bu basitçe dfx çağrı tarafından belirtilen sütun adı olduğu gibi oldukça düz İleri eklenir ("SELECT <column name>, ...").BindField
En karmaşık işlemleri.Bu, dao bağlama yapısı tarafından kullanıldığı daha önce belirtildiği gibi GetRows ayarlanır.Kodda görebileceðiniz gibi DFX_Text yapısında bilgi türleri kullanılan dao türünü içerir (dao_char veya dao_wchar durumunda, DFX_Text).Ayrıca, kullanılan bağlama türünü de ayarlanır.Bir önceki bölümde GetRows yalnızca kısaca açıklanan ancak mfc tarafından kullanılan bağlama türü her zaman doğrudan adres bağlamasını olduğunu açıklamak için yeterli (DAOBINDING_DIRECT).Değişken uzunlukta sütun bağlama için ayrıca (gibi DFX_Text) mfc Bellek ayırma denetlemek ve doğru uzunlukta bir adresi belirtmek için geri arama bağlama kullanılır.Bu, mfc anlamı her zaman dao böylece üye değişkenleri doğrudan bağlanma verinin koymak "burada" söyleyebilir.Kalan bağlama yapısının bellek ayırma geri çağrı işlevi (sütun adı bağlama) sütun bağlama türü ve adresi gibi şeyleri girilir.BindParam
Bu çağıran, basit bir işlemdir SetParamValue parametresi üyelik belirtilen parametre değerine sahip.Hata düzeltme
Doldurur null durum her alan için.SetFieldNull
Bu işlem yalnızca her alanı durumu olarak işaretler null ve üye değişkenin değerini ayarlar pseudo_null.SetDirtyField
Çağrı SetFieldValue kirli olarak işaretlenmiş her alan için.
Kalan tüm işlemler, yalnızca veri önbelleğini kullanmak ile ilgilidir.Veriler, bazı şeyleri daha kolay hale getirmek için kullanılan geçerli kayıttaki verileri fazladan bir arabellek önbelleğidir.Örneğin, "kirli" alanları otomatik olarak algılanabilir.Çevrimiçi belgelerinde açıklandığı gibi ya da tamamen alan düzeyinde kapatılabilir.Harita uygulaması arabelleği kullanır.Bu harita, dinamik olarak atanan veri kopyalarını adresi "bağımlı" alanı ile eşleştirmeye kullanılır (ya da CDaoRecordset türetilen veri üyesi).
AllocCache
Dinamik olarak önbelleğe alan değeri ayırır ve eşleme ekler.FreeCache
Önbelleğe alınmış bir alan değeri siler ve haritadaki kaldırır.StoreField
Geçerli alanın değerinin veri önbelleğine kopyalar.LoadField
Önbelleğe alınan değer alan üye kopyalar.MarkForAddNew
Geçerli alan değeri olmayan olup olmadığını kontrol-null ve gerekirse kirli işaretler.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 için kendi özel dfx yordamlar model. |