Aracılığıyla paylaş


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_Date1 DFX_Date (COleDateTimetabanlı)
RFX_Text DFX_Text
RFX_Binary DFX_Binary
RFX_LongBinary DFX_LongBinary

1 İşlev RFX_Date ve TIMESTAMP_STRUCTtabanlı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 CRecordsetnumaralandı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ü belirtirken CDaoRecordsetDB_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 çok CDaoDatabase nesneyi etkileyebilir.

  • Özel durum sınıfı değiştirildi. CDBExceptions ODBC sınıflarında ve CDaoExceptions DAO sınıflarında oluşturulur.

  • RFX_Date kullanırken CTime ve TIMESTAMP_STRUCT nesnelerini DFX_Date kullanır COleDateTime. COleDateTime neredeyse ile CTimeaynı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ık CRecordset 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.

Ayrıca bkz.

Sayıya Göre Teknik Notlar
Kategoriye Göre Teknik Notlar