TN055: MFC ODBC Veritabanı Sınıfı Uygulamalarını MFC DAO Sınıflarına Geçirme
Dekont
DAO, Access veritabanlarıyla birlikte kullanılır ve Office 2013 aracılığıyla desteklenir. DAO 3.6 son sürümdür ve eski olarak kabul edilir. Visual C++ ortamı ve sihirbazları DAO'yu desteklemez (DAO sınıfları dahil olsa da ve bunları kullanmaya devam edebilirsiniz). Microsoft, yeni projeler için OLE DB Şablonları veya ODBC ve MFC kullanmanızı önerir. DAO'yu yalnızca mevcut uygulamaları korumak için kullanmanız gerekir.
Genel Bakış
Birçok durumda MFC'nin ODBC veritabanı sınıflarını kullanan uygulamaların MFC'nin DAO veritabanı sınıflarına geçirilmesi istenebilir. Bu teknik not, MFC ODBC ve DAO sınıfları arasındaki farkların çoğunu ayrıntılı olarak açıklar. Farkları göz önünde bulundurarak, isterseniz uygulamaları ODBC sınıflarından MFC sınıflarına geçirmek aşırı zor olmamalıdır.
ODBC'den DAO'ya Neden Geçiş Yapılır?
Uygulamaları ODBC Veritabanı Sınıflarından DAO Veritabanı Sınıflarına geçirmek istemenin çeşitli nedenleri vardır, ancak karar basit veya belirgin olmayabilir. DaO tarafından kullanılan Microsoft Jet veritabanı altyapısının, ODBC sürücüsüne sahip olduğunuz herhangi bir ODBC veri kaynağını okuyabilmesini göz önünde bulundurmanız gerekir. ODBC Veritabanı Sınıflarını kullanmak veya ODBC'yi doğrudan kendiniz çağırmak daha verimli olabilir, ancak Microsoft Jet veritabanı altyapısı ODBC verilerini okuyabilir.
ODBC/DAO kararını kolaylaştıran bazı basit durumlar. Örneğin, verilere yalnızca Microsoft Jet altyapısının doğrudan okuyabileceği bir biçimde (Erişim biçimi, Excel biçimi vb.) erişmeniz gerektiğinde, en belirgin seçenek DAO Veritabanı Sınıflarını kullanmaktır.
Verileriniz bir sunucuda veya çeşitli sunucularda mevcut olduğunda daha karmaşık durumlar ortaya çıkar. Bu durumda, ODBC Veritabanı sınıflarını veya DAO Veritabanı sınıflarını kullanma kararı zor bir karardır. Heterojen birleşimler (SQL Server ve Oracle gibi birden çok biçimdeki sunuculardaki verileri birleştirme) gibi işlemler yapmak istiyorsanız, ODBC Veritabanı Sınıflarını kullandıysanız veya ODBC'yi doğrudan çağırdıysanız gerekli işi yapmanıza zorlamak yerine Microsoft Jet veritabanı altyapısı birleştirmeyi sizin için gerçekleştirir. Sürücü imleçlerini destekleyen bir ODBC sürücüsü kullanıyorsanız, en iyi seçeneğiniz ODBC Veritabanı sınıfları olabilir.
Seçim karmaşık olabilir, bu nedenle özel gereksinimlerinize göre çeşitli yöntemlerin performansını test etmek için bazı örnek kodlar yazmak isteyebilirsiniz. Bu teknik not, ODBC Veritabanı Sınıflarından DAO Veritabanı sınıflarına geçiş kararı aldığınızı varsayar.
ODBC Veritabanı Sınıfları ile MFC DAO Veritabanı Sınıfları Arasındaki Benzerlikler
MFC ODBC sınıflarının özgün tasarımı, Microsoft Access ve Microsoft Visual Basic'te kullanılmakta olan DAO nesne modelini temel almıştır. Bu, ODBC ve DAO MFC sınıflarının birçok ortak özelliği olduğu anlamına gelir ve bu özelliklerin tümü bu bölümde listelenmez. Genel olarak, programlama modelleri aynıdır.
Birkaç benzerliği vurgulamak için:
Hem ODBC hem de DAO sınıfları, temel alınan veritabanı yönetim sistemini (DBMS) kullanarak yöneten veritabanı nesnelerine sahiptir.
Her ikisinde de bu DBMS'den döndürülen bir sonuç kümesini temsil eden kayıt kümesi nesneleri vardır.
DAO veritabanı ve kayıt kümesi nesneleri, ODBC sınıflarına neredeyse benzer üyelere sahiptir.
Her iki sınıf kümesinde de, bazı nesne ve üye adı değişiklikleri dışında veri alma kodu aynıdır. Değişiklikler gerekli olacaktır, ancak ODBC sınıflarından DAO sınıflarına geçiş yaparken genellikle işlem basit bir ad değişikliğidir.
Örneğin, her iki modelde de veri alma yordamı bir veritabanı nesnesi oluşturup açmak, kayıt kümesi nesnesi oluşturup açmak ve veriler bazı işlemler gerçekleştirse de gezinmek (taşımak) şeklindedir.
ODBC ve DAO MFC Sınıfları Arasındaki Farklar
DAO sınıfları daha fazla nesne ve daha zengin bir yöntem kümesi içerir, ancak bu bölüm yalnızca benzer sınıflardaki ve işlevlerdeki farkları ayrıntılı olarak açıklar.
Büyük olasılıkla sınıflar arasındaki en belirgin farklar, benzer sınıflar ve genel işlevler için ad değişiklikleridir. Aşağıdaki listede veritabanı sınıflarıyla ilişkili nesnelerin, yöntemlerin ve genel işlevlerin ad değişiklikleri gösterilmektedir:
Sınıf veya işlev | MFC DAO sınıflarındaki eşdeğer |
---|---|
CDatabase |
CDaoDatabase |
CDatabase::ExecuteSQL |
CDaoDatabase::Execute |
CRecordset |
CDaoRecordset |
CRecordset::GetDefaultConnect |
CDaoRecordset::GetDefaultDBName |
CFieldExchange |
CDaoFieldExchange |
RFX_Bool |
DFX_Bool |
RFX_Byte |
DFX_Byte |
RFX_Int |
DFX_Short |
RFX_Long |
DFX_Long |
DFX_Currency |
|
RFX_Single |
DFX_Single |
RFX_Double |
DFX_Double |
RFX_Date 1 |
DFX_Date (COleDateTime tabanlı) |
RFX_Text |
DFX_Text |
RFX_Binary |
DFX_Binary |
RFX_LongBinary |
DFX_LongBinary |
1 İşlev RFX_Date
ve TIMESTAMP_STRUCT
tabanlıdırCTime
.
Uygulamanızı etkileyebilecek ve basit ad değişikliklerinden fazlasını gerektirebilecek işlevlerde yapılan önemli değişiklikler aşağıda listelenmiştir.
Kayıt kümesi açma türü ve kayıt kümesi açma seçenekleri gibi öğeleri belirtmek için kullanılan sabitler ve makrolar değiştirildi.
ODBC sınıfları ile MFC' nin bu seçenekleri makrolar veya numaralandırılmış türler aracılığıyla tanımlaması gerekiyordu.
DAO sınıfları ile DAO, bu seçeneklerin tanımını bir üst bilgi dosyasında (DBDAOINT) sağlar. H). Bu nedenle kayıt kümesi türü, öğesinin
CRecordset
numaralandırılmış bir üyesidir, ancak DAO ile bunun yerine sabittir. Örneğin, ODBC'de türünüCRecordset
belirtirken anlık görüntü kullanırsınız ancak türünü belirtirkenCDaoRecordset
DB_OPEN_SNAPSHOT.için
CRecordset
varsayılan kayıt kümesi türü anlık görüntüyken varsayılan kayıt kümesi türüCDaoRecordset
dinamik kümedir (ODBC sınıfı anlık görüntüleri hakkında ek bir sorun için aşağıdaki Nota bakın).ODBC
CRecordset
sınıfının yalnızca ileriye doğru kayıt kümesi türü oluşturma seçeneği vardır.CDaoRecordset
sınıfında, yalnızca iletme bir kayıt kümesi türü değil, belirli kayıt kümesi türlerinin özelliği (veya seçeneği).Nesneyi açarken
CRecordset
yalnızca ekleme kayıt kümesi, kayıt kümesinin verilerinin okunabileceği ve eklenebileceği anlamına geliyordu.CDaoRecordset
nesnesinde, yalnızca ekleme seçeneği tam anlamıyla kayıt kümesinin verilerinin yalnızca eklenebileceği (okunmadığı) anlamına gelir.ODBC sınıflarının işlem üyesi işlevleri, veritabanı düzeyinde üyesi
CDatabase
ve eylemidir. DAO sınıflarında, işlem üyesi işlevleri daha üst düzey bir sınıfın (CDaoWorkspace
) üyeleridir ve bu nedenle aynı çalışma alanını (işlem alanı) paylaşan birden çokCDaoDatabase
nesneyi etkileyebilir.Özel durum sınıfı değiştirildi.
CDBExceptions
ODBC sınıflarında veCDaoExceptions
DAO sınıflarında oluşturulur.RFX_Date
kullanırkenCTime
veTIMESTAMP_STRUCT
nesneleriniDFX_Date
kullanırCOleDateTime
.COleDateTime
neredeyse ileCTime
aynıdır, ancak 4 baytlık bir time_t yerine 8 baytlık OLE DATE'i temel alır, bu nedenle çok daha büyük bir veri aralığını barındırabilir.Dekont
DAO (
CDaoRecordset
) anlık görüntüleri salt okunur durumdayken, ODBC anlıkCRecordset
görüntüleri sürücüye ve ODBC imleç kitaplığının kullanımına bağlı olarak güncelleştirilebilir. İmleç kitaplığını kullanıyorsanız anlıkCRecordset
görüntüler güncelleştirilebilir. ODBC imleç kitaplığı olmadan Masaüstü Sürücü Paketi 3.0'dan microsoft sürücülerinden herhangi birini kullanıyorsanız,CRecordset
anlık görüntüler salt okunur olur. Başka bir sürücü kullanıyorsanız, anlık görüntülerin (STATIC_CURSORS
) salt okunur olup olmadığını görmek için sürücünün belgelerine bakın.