Aracılığıyla paylaş


Kayıt Kümesi: Veri Sütunlarını Dinamik Olarak Bağlama (ODBC)

Bu konu MFC ODBC sınıfları için geçerlidir.

Kayıt kümeleri, tasarım sırasında belirttiğiniz bağlama tablosu sütunlarını yönetir ancak tasarım sırasında bilinmeyen sütunları bağlamak isteyebileceğiniz bazı durumlarla karşılaşabilirsiniz. Bu konu şunları açıklar:

  • sütunları dinamik olarak bir kayıt kümesine bağlamak istediğinizde.

  • Sütunlar dinamik olarak çalışma zamanında nasıl bağlanır.

Not

Bu konu toplu satır yakalamanın uygulanmadığı CRecordset'ten türetilen nesnelere uygulanır. Toplu satır getirme kullanıyorsanız, genellikle tanımlanan teknikler tavsiye edilmez. Toplu satır yakalama hakkında daha fazla bilgi için bkz. Kayıt Kümesi: Kayıtları Toplu Yakalama (ODBC).

Sütunları Dinamik Olarak Birleştirdiğinizde

Tasarım zamanında, MFC Uygulama Sihirbazı ya da MFC ODBC Tüketici Sihirbazı (Sınıf Ekle'den) veri kaynağınızdaki bilinen tabloları ve sütunları temel alan kayıt kümesi sınıfları oluşturur. Veritabanları, onları tasarladığınız zaman ve ardından uygulamanız söz konusu tabloları ve sütunları çalışma zamanı içerisinde kullandığı zaman arasında değişebilir. Siz veya başka bir kullanıcı tablo ekleyip çıkarabilir veya uygulamanızın kayıt setinin dayalı olduğu bir tablodan sütunlar ekleyip çıkarabilir. Bu muhtemelen her veri erişimi uygulamasının sorunu değildir, fakat sizin sorununuzsa, veri tabanı şemasındaki değişikliklerle tekrar tasarlamadan ve tekrar derlemeden nasıl başa çıkabilirsiniz? Bu konunun amacı bu soruyu cevaplamaktır.

Bu konu sütunları dinamik olarak bağlayabileceğiniz en sık karşılaşılan durumu anlatmaktadır - bilinen bir veritabanı şemasına dayanan bir kayıt kümesiyle başlamışsınızdır ve çalışma zamanında ek sütunlar da işlemek istiyorsunuzdur. En yaygın durumda diğer veri türlerini yönetmenize yardım edecek öneriler sağlasa da konu ek sütunların CString alanı veri üyelerine eşleme yaptığını var sayar.

Birkaç ek kod ile şunları yapabilirsiniz:

  • Çalıştırma zamanında hangi sütunların kullanılabilir olduğunu belirleyin.

  • Çalışma zamanında ek sütunları kayıt kümenize dinamik olarak bağlayın.

Kayıt kümeniz tasarım zamanı sırasında tanıdığınız sütunlar için hala veri üyeleri içeriyor. Hedef tablonuza yeni sütunların eklenip eklenmediğini dinamik olarak belirleyen, küçük miktarda fazladan kod içerir ve eğer eklenmişse bu yeni sütunları dinamik olarak ayıklanmış depolamaya bağlar (kayıt kümesi veri üyelerine bağlamak yerine).

Bu konu kaldırılan tablolar ve sütunlar gibi diğer dinamik bağlama durumlarını açıklamamaktadır. Bu gibi durumlarda ODBC API çağrılarını doğrudan kullanmanız gerekir. Daha fazla bilgi için, MSDN Kitaplığı CD'sinde ODBC SDK Programcısının Başvuru Kaynağı konusuna bakın.

Sütunlar Dinamik Olarak Nasıl Bağlanır

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 yeri ayırmalı, adlarını ve türlerini ve eklediğiniz sütun sayısını belirtmelisiniz.

Aşağıdaki tartışma iki farklı kayıt kümesinden bahseder. İlk olan, hedef tablodan kayıtları seçen ana kayıt kümesidir. İkincisi hedef tabloda 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ı izleyin:

  1. Ana kayıt kümesi nesnenizi oluşturun.

    İsteğe bağlı olarak, açık CDatabase nesnesine işaretçi geçirir ve başka bir yolla sütun kayıt kümesine ilişkin bağlantı bilgilerini sağlar.

  2. Dinamik olarak sütun ekleme adımlarını uygulayın.

    Aşağıdaki Sütunları Ekleme kısmında açıklanan işleme bakın.

  3. Ana kayıt kümenizi açın.

    Kayıt kümesi, kayıtları seçer ve hem statik sütunları (kayıt kümesi alanı veri üyeleriyle eşleşenler) hem dinamik sütunları (tahsis ettiğiniz fazladan depolamayla eşleşenler) bağlamak için kayıt alanı değişimini (RFX) kullanır.

Sütun Ekleme

Çalışma zamanında dinamik olarak bağlama eklenmiş sütunlar aşağıdaki adımları gerektirir:

  1. Hangi sütunların hedef tablosunda bulunduğunu çalıştırma zamanı sırasında belirleyin. Bu bilgiden kayıt kümesi sınıfınız tasarlandığından beri eklenmiş olan sütunların listesini çıkarın.

    Hedef tablodaki (örneğin, sütun adı ve veri türü) sütun bilgileri için veri kaynağını sorgulamak üzere tasarlanmış sütun kayıt kümesi sınıfını kullanmak iyi bir yaklaşımdır.

  2. Yeni alan verisi ü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ığı için, isimleri, sonuç değerlerini ve muhtemelen veri türü bilgilerini (sütunlar farklı veri türleriyse) depolamak için bir yer sağlamalısınız.

    Uygulanabilecek yöntemlerden biri ise, biri yeni sütun adları, diğeri sonuç değerleri ve üçüncüsü ise veri türleri için olacak şekilde bir veya daha fazla dinamik liste oluşturmaktır (gerekliyse). Bu listeler, özellikle değer listesi, bilgileri ve bağlamaya ilişkin gerekli depolamayı sağlar. Aşağıdaki şekil liste oluşturmayı gösterir.

    Dinamik Olarak Bağlanan Sütunların Listesini Oluşturma

    Dinamik Olarak Bağlanan Yapı Listesi Sütunları

  3. Ana kayıt kümenizin DoFieldExchange işlevine, eklenmiş her sütun için bir RFX işlev çağrısı ekleyin. Bu RFX çağrıları, ek sütunları içeren bir kaydı getirme işini yapar ve sütunları kayıt kümesi veri üyelerine veya onlar için dinamik olarak sağlanan depolama ortamına bağlar.

    Uygulanabilecek yöntemlerden biri, listedeki her bir sütun için uygun RFX işlevini çağırarak ana kayıt kümenizin yeni sütunlar listeniz aracılığıyla döngü oluşturan DoFieldExchange işlevine döngü eklemektir. Her RFX çağrısında, sütun adı listesinden bir sütun adı ve sonuç değeri listesinin ilgili üyesinde bir depolama konumu geçirin.

Sütunların Listesi

Çalışmanız için gereken dört liste aşağıdaki tabloda gösterilmiştir.

  • Geçerli Tablo Sütunları (Resim üzerinde Liste 1)
    Halen veri kaynağı üzerindeki tabloda yer alan sütunların bir listesi. Bu liste, kayıt kümenize bağlı olan sütunların listesiyle eşleşebilir.

  • Bağlı Kayıt Kümesi Sütunları (şekildeki Liste 2)
    Kayıt kümenize bağlı olan sütunların bir listesi. Bu sütunlar önceden DoFieldExchange işlevinde RFX deyimleri içerir.

  • Dinamik Bağlanan Sütunlar (Çizim üzerinde Liste 3)
    Tabloda yer alan ancak kayıt kümenizde bulunmayan sütunların bir listesi. Bunlar dinamik olarak bağlamak istediğiniz sütunlardır.

  • Dinamik Sütun Değerleri (Çizimde Liste 4)
    Dinamik olarak bağladığınız sütunlardan alınmış değerler için depolama alanı içeren bir liste. Bu listenin öğeleri, birebir olarak, Dinamik Bağlanan Sütunlar üzerindekiler ile uyumludur.

Listelerinizi Oluşturma

Genel bir strateji ile ayrıntılara başvurabilirsiniz. Bu konunun geri kalanına ilişkin yordamlar Sütun Listeleri öğesinde gösterilen listeleri nasıl oluşturacağınızı gösterir. Yordamları izleyerek:

  • Kayıt kümesi içinde olmayan sütun adlarını belirleyin.

  • Tabloya yeni eklenen sütunlar için dinamik depolama sağlama.

  • Yeni sütunlar için RFX çağrılarını dinamik olarak ekleme.

Hangi Tablo Sütunlarının Kayıt Kümenizde Olmadığını Belirleme

Ana kayıt kümenize halen bağlı olan sütunların bir listesini içeren bir liste (illustration'deki Liste 2'de olduğu gibi, Bağlı Kayıt Kümesi Sütunları) oluşturun. Sonra, veri kaynağındaki tabloda bulunan ancak ana kayıt kümesinde bulunmayan sütun adlarını içeren bir liste (Bağlı Kayıt Kümesi Sütunlarından ve Geçerli tablo Sütunlarından alınan Dinamik Bağlanan Sütunlar) oluşturun.

Kayıt kümesinde bulunmayan sütunların (Dinamik Bağlanan Sütunlar) adlarını belirlemek için

  1. Ana kayıt kümenize halen bağlı olan sütunların bir listesini (Bağlı Kayıt Kümesi Sütunları) oluşturun.

    Uygulanabilecek yöntemlerden biri, tasarım zamanında Bağlı Kayıt Kümesi Sütunları oluşturmaktır. Bu adları almak için kayıt kümesinin DoFieldExchange işlevinde RFX işlev çağrılarını görsel olarak inceleyebilirsiniz. Sonra listenizi adlar ile başlatılan bir dizi olarak ayarlayın.

    Örneğin, Çizimi üç öğeye sahip Bağlı Kayıt Kümesi Sütunlarını (Liste 2) gösterir. Geçerli Tablo Sütunları'nda (Liste 1) gösterilen Telefon sütunu Bağlı Kayıt Kümesi Sütunlarında yok.

  2. Ana kayıt kümeniz içerisinde henüz bağlı olmayan sütunların bir listesini oluşturmak için (Dinamik Bağlanan Sütunlar) Geçerli Tablo Sütunlarını ve Bağlı Kayıt kümesi Sütunlarını karşılaştırın.

    Uygulanabilecek yöntemlerden biri, çalışma zamanında tablodaki sütunlar listeniz (Geçerli Tablo Sütunları) ve paralel olarak kayıt kümenize zaten bağlı sütunlar listeniz (Bağlı Kayıt Kümesi Sütunları) aracılığıyla döngü oluşturmaktır. Dinamik Bağlanan Sütunlar'a Bağlı Kayıt Kümesi Sütunları'nda görünmeyen Geçerli Tablo Sütunları'ndaki adların tümünü koyun.

    Örneğin, çizimi bir öğe ile Dinamik Olarak Bağlanacak Sütunları (Liste 3) gösterir: Telefon sütunu Geçerli Tablo Sütunlarında (Liste 1) bulunur ancak Bağlı Kayıt Kümesi Sütunlarında (Liste 2) görüntülenmez.

  3. Dinamik olarak bağlanacak sütunlar (Dinamik Olarak Bağlanacak Sütunlar) listenizde depolanan her sütun adına (sütunlar-için-Bind-dinamik) karşılık gelen veri değerlerinin depolanacağı Dinamik Sütun Değerleri'nin bir listesini (şeklindeki Liste 4'te olduğu gibi) oluşturun.

    Bu liste öğ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 tanımları için bkz. Sütunlar Listesi.

Yeni Sütunlar İçin Depolama Sağlama

Ardından, dinamik olarak bağlanacak sütunlar için depolama konumları ayarlayın. Amaç içinde her sütunun değerinin saklanacağı bir liste öğesi sağlamaktır. Bu depolama konumları, normal ilişkili sütunlara depolayan kayıt kümesi üye değişkenlerine paralel.

Yeni sütunlara (Dinamik-Sütun-Değerleri) dinamik depolama sağlamak için

  • Dinamik Olarak Bağlanacak Sütunlar'a paralel olarak her sütundaki verilerin değerini içerecek şekilde Dinamik Sütun Değerleri oluşturun.

    Örneğin, çizimi bir öğeye sahip Dinamik Sütun Değerlerini (Liste 4) gösterir: CString nesnesi geçerli kaydın geçerli telefon numarasını içerir: "555-1212".

    En genel durumda, Dinamik Sütun Değerleri CString türü öğeler barındırır. Farklı veri türleri içeren sütunlarla uğraşıyorsanız, size çeşitli türdeki öğeleri içerebilen bir liste gerekir.

Önceki yordamların sonuçları iki ana listedir: sütunların adlarını içeren Dinamik-Bağlanan-Sütunlar ve geçerli kayıt için sütunlardaki değerleri içeren Dinamik-Sütun-Değerleri.

İpucuİpucu

Yeni sütunların hepsi aynı veri türünde değilse sütun listesindeki ilgili öğelerin her birinin türünü tanımlayan öğeler içeren ek bir paralel liste hazırlamak isteyebilirsiniz. (Bunun için istiyorsanız AFX_RFX_BOOL, AFX_RFX_BYTE vb. değerleri kullanabilirsiniz. Bu sabitler AFXDB.H içinde tanımlanır.) Sütun veri türlerini temsil etme biçiminize göre bir liste türü seçin.

Sütunları Bağlamak İçin RFX Çağrıları Ekleme

Son olarak, DoFieldExchange işleviniz üzerindeki yeni sütunlar için RFX çağrılarını yerleştirerek dinamik bağlamanın oluşması için düzenleyin.

Yeni sütunlar için RFX çağrılarını dinamik olarak eklemek için

  • Ana kayıt kümenizin DoFieldExchange üye işlevine, yeni sütun listeniz içinde döngü yapan (Dinamik Bağlanan Sütunlar) kodu ekleyin. Her döngüde, Dinamik Bağlanan Sütunlar'dan bir sütun adı çıkarın ve Dinamik Sütun Değerlerinden o sütunun sonuç değerini sıfırlayın. Bu öğeleri, sütunun veri türüne uygun bir RFX işlev çağrısına geçirin. Listelerin tanımları için bkz. Sütunlar Listesi.

Yaygın durumda RFX_Text işlev çağrılarında, listelerden Dinamik Olarak Bağlanacak Sütunlar m_listName adlı CStringList öğesidir ve Dinamik Sütun Değerleri bir m_listValue adlı CStringList öğesi olduğunda aşağıdaki kod satırlarındaki gibi CString nesnelerini çıkartırsınız :

RFX_Text( pFX, 
            m_listName.GetNext( posName ), 
            m_listValue.GetNext( posValue ));

RFX işlevleri hakkında daha fazla bilgi için bkz. Sınıf Kitaplığı Başvurusu'ndaki Makrolar ve Geneller.

İpucuİpucu

Yeni sütunlar farklı veri türleri ise, her bir tür için uygun RFX işlevini çağırmak için döngünüzde switch ifadesi kullanın.

Framework sütunları kayıt kümesine bağlamak için sırasında DoFieldExchange öğesini çağırdığında statik sütunlar için RFX çağrıları o sütunları bağlar. Daha sonra döngü dinamik sütunlar için RFX işlevlerini defalarca çağırır.

Ayrıca bkz.

Kavramlar

Kayıt Kümesi (ODBC)

Kayıt kümesi: Büyük Veri Öğeleri ile Çalışma (ODBC)