Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konu MFC ODBC sınıfları için geçerlidir.
Kayıt kümeleri, tasarım zamanında belirttiğiniz bağlama tablosu sütunlarını yönetir, ancak tasarım zamanında sizin için bilinmeyen sütunları bağlamak isteyebileceğiniz durumlar vardır. Bu konu açıklar:
Sütunları bir kayıt kümesine dinamik olarak bağlamak isteyebileceğiniz durumlarda.
Çalışma zamanında sütunları dinamik olarak bağlama.
Not
CRecordset'den türetilmiş ve toplu satır getirmenin uygulanmadığı nesneler için bu konu geçerlidir. Genel olarak açıklanan teknikler, toplu satır getirme kullanıyorsanız önerilmez. Toplu satır getirme hakkında daha fazla bilgi için bkz: Kayıt Kümesi: Kayıtları Toplu Getirme (ODBC).
Sütunları dinamik olarak bağlayabileceğiniz durumlarda
Not
MFC ODBC Tüketici sihirbazı Visual Studio 2019 ve sonraki sürümlerde kullanılamaz. Yine de manuel olarak bir tüketici oluşturabilirsiniz.
Tasarım zamanında, MFC Uygulama Sihirbazı veya MFC ODBC Tüketici Sihirbazı (Sınıf Ekle'den) veri kaynağınızdaki bilinen tablo ve sütunları temel alan kayıt kümesi sınıfları oluşturur. Veritabanları, bunları tasarlarken ve daha sonra uygulamanızın çalışma zamanında bu tablo ve sütunları kullanması arasında değişebilir. Siz veya başka bir kullanıcı, bir tablo ekleyebilir veya bırakabilir ya da uygulamanızın kayıt kümesinin bağlı olduğu bir tablodan sütun ekleyebilir veya bırakabilirsiniz. Bu, büyük olasılıkla tüm veri erişim uygulamaları için bir sorun değildir, ancak sizin içinse, yeniden tasarlama ve yeniden derleme dışında veritabanı şemasındaki değişikliklerle nasıl başa çıkabilirsiniz? Bu konunun amacı bu soruyu yanıtlamaktır.
Bu konu başlığında, sütunları dinamik olarak bağlayabileceğiniz en yaygın durum açıklanmaktadır. Bilinen bir veritabanı şemasını temel alan bir kayıt kümesiyle başladıktan sonra, çalışma zamanında ek sütunları işlemek istiyorsunuz. Diğer veri türlerini yönetmenize yardımcı olacak öneriler sağlansa da, konunun ek sütunların CString alan verisi üyeleriyle eşlemesi varsayılır.
Az miktarda ek kodla şunları yapabilirsiniz:
Çalışma zamanında hangi sütunların kullanılabilir olduğunu belirleyin.
Çalışma zamanında kayıt kümenize dinamik olarak ek sütunlar bağlayın.
Kayıt kümeniz, tasarım zamanında tanımlanan sütunların veri üyelerini içermeye devam eder. Ayrıca, hedef tablonuza yeni sütun eklenip eklenmediğini dinamik olarak belirleyen ve ekleniyorsa bu yeni sütunları dinamik olarak ayrılmış depolamaya (kayıt kümesi veri üyeleri yerine) bağlayan az miktarda ek kod içerir.
Bu konu, bırakılan tablolar veya sütunlar gibi diğer dinamik bağlama durumlarını kapsamaz. Bu gibi durumlarda ODBC API çağrılarını daha doğrudan kullanmanız gerekir. Daha fazla bilgi için bkz . ODBC Programcı Başvurusu.
Sütunları Dinamik Olarak Bağlama
Sütunları dinamik olarak bağlamak için ek sütunların adlarını bilmeniz (veya belirleyebilmeniz) gerekir. Ayrıca ek alan veri üyeleri için depolama alanı ayırmanız, adlarını ve türlerini belirtmeniz ve eklediğiniz sütun sayısını belirtmeniz gerekir.
Aşağıdaki tartışmada iki farklı kayıt kümesinden bahsediliyor. Birincisi, hedef tablodan kayıtları seçen ana kayıt kümesidir. İkincisi, hedef tablonuzdaki sütunlar hakkında bilgi almak için kullanılan özel bir sütun kayıt kümesidir.
Genel İşlem
En genel düzeyde şu adımları izlersiniz:
Ana kayıt kümesi nesnenizi oluşturma.
İsteğe bağlı olarak, açık
CDatabasenesnesine bir işaretçi geçebilir veya sütun kayıt kümesine başka şekilde bağlantı detayları sağlayabilirsiniz.Dinamik olarak sütun ekleme adımlarını izleyin.
Aşağıdaki Sütunları Ekleme bölümünde açıklanan işleme bakın.
Ana kayıt kümenizi açın.
Kayıt kümesi kayıtları seçer ve kayıt alanı değişimini (RFX) kullanarak hem statik sütunları (kayıt kümesi alan veri üyelerine eşlenenler) hem de dinamik sütunları (ayırdığınız ek depolama alanına eşlenir) bağlar.
Sütunları Ekleme
Çalışma zamanında eklenen sütunları dinamik olarak bağlamak için aşağıdaki adımlar gerekir:
Çalışma zamanında hedef tabloda hangi sütunların olduğunu belirleyin. Bu bilgiden, kayıt kümesi sınıfınız tasarlandıktan sonra tabloya eklenmiş olan sütunların listesini ayıklayın.
İyi bir yaklaşım, hedef tablonun (sütun adı ve veri türü gibi) sütun bilgileri için veri kaynağını sorgulamak üzere tasarlanmış bir sütun kayıt kümesi sınıfı kullanmaktır.
Yeni alan veri üyeleri için depolama alanı sağlayın. Ana kayıt kümesi sınıfınızda bilinmeyen sütunlar için alan veri üyeleri olmadığından, adları, sonuç değerlerini ve büyük olasılıkla veri türü bilgilerini depolamak için bir yer sağlamanız gerekir (sütunlar farklı veri türleriyse).
Bir yaklaşım, biri yeni sütunların adları, diğeri sonuç değerleri ve üçüncüsü de veri türleri (gerekirse) için olmak üzere bir veya daha fazla dinamik liste oluşturmaktır. Bu listeler, özellikle değer listesi, bağlama için gerekli bilgileri ve gerekli depolama alanını sağlar. Aşağıdaki şekilde listelerin oluşturulması gösterilmektedir.
Dinamik Olarak Bağlanacak Sütun Listeleri OluşturmaEklenen her sütun için ana kayıt kümenizin
DoFieldExchangeişlevine bir RFX işlev çağrısı ekleyin. Bu RFX çağrıları, ek sütunlar da dahil olmak üzere bir kaydı getirme ve sütunları kayıt kümesi veri üyelerine veya bunlar için dinamik olarak sağlanan depolama alanına bağlama işini yapar.Bir yaklaşım, ana kayıt kümenizin
DoFieldExchangeişlevine yeni sütunlar listenizde döngü yapan ve listedeki her sütun için uygun RFX işlevini çağıran bir döngü eklemektir. Her RFX çağrısında, sütun adı listesinden bir sütun adı ve sonuç değeri listesinin ilgili üyesine bir depolama konumu aktarın.
Sütun Listeleri
Birlikte çalışmanız gereken dört liste aşağıdaki tabloda gösterilmiştir.
| Liste | Açıklama |
|---|---|
| Geçerli Tablo Sütunları | (Çizimde Liste 1) Veri kaynağındaki tabloda bulunan sütunların listesi. Bu liste, kayıt kümenizde şu anda bağlı olan sütunların listesiyle eşleşebilir. |
| Bound-Recordset-Columns (Bağlı Kayıt Kümesi Sütunları) | (Çizimde Liste 2) Kayıt kümenizde ilişkili sütunların listesi. Zaten işlevinizdeki DoFieldExchange bu sütunlarda RFX deyimleri var. |
| Dinamik Olarak Bağlanacak Sütunlar | (Çizimde Liste 3) Tablodaki sütunların listesidir ancak kayıt kümenizde yer almaz. Bunlar dinamik olarak bağlamak istediğiniz sütunlardır. |
| Dinamik-Sütun-Değerler | (Çizimde liste 4) Dinamik olarak bağladığınız sütunlardan alınan değerler için depolama alanı içeren liste. Bu listenin öğeleri, Dinamik Olarak Bağlanacak Sütunlar listesindeki öğelerle bire bir eşleşir. |
Listelerinizi Oluşturma
Genel bir stratejiyi göz önünde bulundurarak ayrıntılara dönebilirsiniz. Bu konunun geri kalanındaki yordamlar, Sütun Listelerinde gösterilen listeleri nasıl oluşturabileceğinizi gösterir. Yordamlar size şu yollarda yol gösterir:
Kayıt kümenizde bulunmayan sütunların adlarını belirleme.
Tabloya yeni eklenen sütunlar için dinamik depolama alanı sağlama.
Yeni sütunlar için RFX çağrılarını dinamik olarak ekleme.
Kayıt Kümenizde Hangi Tablo Sütunlarının Olmadığını Belirleme
Ana kayıt kümenizde zaten bağlı olan sütunların listesini içeren bir liste (çizimdeki Liste 2'de olduğu gibi Bound-Recordset-Columns) oluşturun. Ardından, Current-Table-Columns ve Bound-Recordset-Columns'dan türetilmiş olan ve veri kaynağındaki tabloda bulunan, ancak ana kayıt kümenizde yer almayan sütun adlarını içeren Dinamik Olarak Bağlanacak-Sütunlar listesini oluşturun.
Kayıt kümesinde olmayan sütunların adlarını belirlemek için (Sütunlar Arası-Bağlama-Dinamik)
Ana kayıt kümenizde zaten bağlı olan sütunların listesini (Bound-Recordset-Columns) oluşturun.
Yaklaşımlardan biri, tasarım zamanında Bound-Recordset-Columns oluşturmaktır. Bu adları almak için kayıt kümesinin
DoFieldExchangeişlevindeki RFX işlev çağrılarını görsel olarak inceleyebilirsiniz. Ardından, listenizi adlarla başlatılan bir dizi olarak ayarlayın.Örneğin, çizimde Bound-Recordset-Columns (Liste 2) üç öğe ile gösterilmektedir. Bound-Recordset-Columns dosyasında Current-Table-Columns (Liste 1) içinde gösterilen Telefon sütunu eksik.
Ana kayıt kümenizde henüz bağlı olmayan sütunların listesini (Dinamik Olarak Bağlanacak Sütunlar) oluşturmak için Current-Table-Columns ve Bound-Recordset-Columns'ı karşılaştırın.
Yaklaşımlardan biri, çalışma zamanında tablodaki sütun listenizde (Current-Table-Columns) ve zaten kayıt kümenizde (Bound-Recordset-Columns) bağlı olan sütun listenizde paralel olarak döngü yapmaktır. Dinamik Olarak Bağlanacak Sütunlar'a, Bound-Recordset-Sütunları içinde görünmeyen adları Mevcut Tablo Sütunlarına ekleyin.
Örneğin, çizimde Dinamik Olarak Bağlanacak Sütunlar (Liste 3), sadece bir öğe içeren şeklinde gösterilmektedir: Current-Table-Columns (Liste 1) içerisinde bulunan ancak İlişkili Kayıt Kümesi Sütunları'nda (Liste 2) bulunmayan Telefon sütunu.
Dinamik olarak bağlamak için sütun listenizde depolanan her sütun adına karşılık gelen veri değerlerinin depolandığı Dinamik Sütun-Değerler listesini (çizimdeki Liste 4'te olduğu gibi) oluşturun (Sütunlar-Bağlama-Dinamik).
Bu listenin öğeleri, yeni kayıt kümesi alanı veri üyelerinin rolünü oynar. Bunlar, dinamik sütunların bağlı olduğu depolama konumlarıdır. Listelerin açıklamaları için bkz . Sütun Listeleri.
Yeni Sütunlar için Depolama Sağlama
Ardından, dinamik olarak bağlanacak sütunlar için depolama konumları ayarlayın. Fikir, her sütunun değerinin depolandığı bir liste öğesi sağlamaktır. Bu depolama konumları, normalde bağlı sütunları depolayan kayıt kümesi üye değişkenlerine paraleldir.
Yeni sütunlar için dinamik depolama sağlamak amacıyla (Dinamik Sütun Değerler)
Her sütundaki verilerin değerlerini içeren Dinamik Sütun Değerleri oluşturun ve bunları Dinamik Olarak Bağlanacak Sütunlar ile uyumlu hale getirin.
Örneğin, görselde bir öğe içeren Dinamik Sütun-Değerler (Liste 4) gösterilmektedir: geçerli kaydın gerçek telefon numarasını içeren bir
CStringnesnesi: "555-1212".En yaygın durumda, Dynamic-Column-Values türünde
CStringöğelere sahiptir. Değişen veri türlerine sahip sütunlarla ilgileniyorsanız, çeşitli türlerdeki öğeleri içerebilen bir listeye ihtiyacınız vardır.
Yukarıdaki yordamların sonucu iki ana listedir: Sütunları Dinamik Olarak Bağlama için sütun adlarını içeren liste ve Geçerli Kayıt için Dinamik Sütun Değerlerini içeren liste.
İpucu
Yeni sütunların tümü aynı veri türünde değilse, sütun listesindeki ilgili her öğenin türünü bir şekilde tanımlayan öğeleri içeren ek bir paralel liste isteyebilirsiniz. (İsterseniz bunun için AFX_RFX_BOOL, AFX_RFX_BYTE vb. değerleri kullanabilirsiniz. Bu sabitler AFXDB.H.) içinde tanımlanır. Sütun veri türlerini nasıl temsil ettiğinize bağlı olarak bir liste türü seçin.
Sütunları Bağlamak için RFX Çağrıları Ekleme
Son olarak, işlevinizdeki DoFieldExchange yeni sütunlar için RFX çağrıları yerleştirerek dinamik bağlamanın gerçekleşmesini düzenleyin.
Yeni sütunlara yönelik RFX çağrılarını dinamik olarak eklemek için
- Ana kayıt kümenizin
DoFieldExchangeüye işlevinde, yeni sütun listenizde döngüye geçen kod ekleyin (Sütunlar arası-Bağlama-Dinamik). Her döngüde, Dinamik Olarak Bağlanacak Sütunlar'dan bir sütun adı ve Dinamik-Sütun-Değerler'den sütun için bir sonuç değeri ayıklayın. Bu öğeleri sütunun veri türüne uygun bir RFX işlev çağrısına geçirin. Listelerin açıklamaları için bkz . Sütun Listeleri.
Yaygın durumda, aşağıdaki kod satırlarında olduğu gibi işlev çağrılarınızda listelerden nesneler ayıklarsınız RFX_TextCString; burada Sütunlar-Dinamik-Olarak-Bağlanacak olan'a CStringListm_listName ve Dinamik-Sütun-Değerleri'ne CStringListm_listValue denir.
RFX_Text( pFX,
m_listName.GetNext( posName ),
m_listValue.GetNext( posValue ));
RFX işlevleri hakkında daha fazla bilgi için Makrolar ve GeneleSınıf Kitaplığı Referansı'na bakın.
İpucu
Yeni sütunlar farklı veri türleriyse, her tür için uygun RFX işlevini çağırmak için döngünüzde bir switch deyimi kullanın.
Çerçeve, kayıt kümesine sütun bağlama işlemi sırasında DoFieldExchange çağırdığındaOpen, statik sütunlar için RFX çağrıları bu sütunları bağlar. Ardından döngünüz dinamik sütunlar için RFX işlevlerini tekrar tekrar çağırır.
Ayrıca bkz.
Kayıt Kümesi (ODBC)
Kayıt kümesi: Büyük Veri Öğeleri ile Çalışma (ODBC)