Aracılığıyla paylaş


Kayıt Kümesi: Bir Kayıt Kümesini Parametreleştirme (ODBC)

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

Bazen hesapladığınız veya son kullanıcıdan aldığınız bilgiyi kullanarak çalışma zamanında kayıtları seçebilmeyi istersiniz. Kayıt kümesi parametreleri bu hedefe ulaşmanızı sağlar.

Bu konu şunları açıklar:

  • Parametreli kayıt kümesinin amacı.

  • Ne zaman ve neden parametreli kayıt kümesi isteyebileceğiniz.

  • Kayıt kümesi sınıfınızda parametre veri üyelerini nasıl bildirme.

  • Çalışma zamanında parametre bilgisini kayıt kümesi nesnesine nasıl geçirme.

Parametreli Kayıt Kümeleri

Parametreli kayıt kümesi çalışma zamanında parametre bilgisini geçirmenize izin verir. Bunun önemli iki etkisi vardır:

  • Daha iyi yürütme hızıyla sonuçlanabilir.

  • Kullanıcınızdan alınan veya çalışma zamanında hesaplanan bilgiler gibi tasarım zamanında kullanılabilir olmayan bilgilere dayanarak çalışma zamanında sorgu oluşturmanıza izin verir.

Sorguyu çalıştırmak için Open'ı çağırdığınızda, kayıt kümesi SQL SELECT deyimini tamamlamak için parametre bilgisini kullanır. Her kayıt kümesini parametreleyebilirsiniz.

Ne Zaman Parametre Kullanmalı

Parametrelerin tipik kullanımları şunları içerir:

  • Çalışma zamanı bağımsız değişkenlerini önceden tanımlanmş sorgulara geçirme.

    Parametreleri saklı yordamlara geçirmek için, Open çağırdığınızda kayıt kümesinin varsayılan SQL deyimini geçersi kılan tamamen özel, parametre yer tutucularıyla birlikte, ODBC CALL deyimi belirtmelisiniz. Daha fazla bilgi için, Sınıf Kitaplığı Başvurusu'nda CRecordset::Open ve SQL: Kayıt Kümenizin SQL Deyimini Özelleştirme (ODBC) ve Kayıt Kümesi: Önceden Tanımlanmış Sorgu için Sınıf Bildirme (ODBC) konularına bakın.

  • Farklı parametre bilgileriyle çeşitli tekrar sorgulamaları verimli bir şekilde gerçekleştirme.

    Örneğin, son kullanıcınızın öğrenci kayıt veritabanında belirli bir öğrenci için her bilgi arayışında, öğrencinin adını veya kimliğini parametre olarak kullanıcıdan alabilirsiniz. Sonra, kayıt kümenizin Requery üye işlevini çağırdığınızda, sorgu sadece bu öğrencinin kaydını seçer.

    Kayıt kümenizin m_strFilter'da saklanan filtre dizgisi şuna benzeyebilir:

    "StudentID = ?"
    

    Öğrenci kimliğini strInputID değişkenine aldığınızı düşünün. strInputID'ye bir parametre ayarladığınızda (örneğin, öğrenci kimliği 100) değişkenin değeri filtre dizgisindeki "?" ile gösterilen parametre yer tutucusuna bağlanır.

    Parametre değerini aşağıdaki gibi atayın:

    strInputID = "100";
    ...
    m_strParam = strInputID;
    

    Filtre dizgisini bu şekilde ayarlamak istemezsiniz:

    m_strFilter = "StudentID = 100";   // 100 is incorrectly quoted
                                       // for some drivers
    

    Filtre dizeleri için tırnak işaretlerinin doğru şekilde nasıl kullanılacağına yönelik açıklamalar için bkz. Kayıt kümesi: Kayıtları Filtreleme (ODBC).

    Parametre değeri kayıt kümesini yeni öğrenci kimliği için her tekrar sorgulayışınızda farklıdır.

    İpucuİpucu

    Parametre kullanma sadece bir filtre kullanmaktan daha verimlidir. Parametreli kayıt kümesi için, veritabanı SQL SELECT deyimini sadece bir kere işlemelidir. Parametresi olmayan filtreli kayıt kümeleri için, SELECT deyimi yeni bir filtre değeri ile her Requery yapısınıda işlenmelidir.

Filtreler hakkında daha fazla bilgi için bkz. Kayıt Kümesi: Kayıtları Filtreleme (ODBC).

Kayıt Kümesi Sınıfınızı Parametrize Etme

Not

Bu bölüm toplu satır yakalamanın uygulanmadığı CRecordset'ten türetilen nesnelere uygulanır. Toplu satır yakalama kullanıyorsanız, parametreleri uygulamak benzer bir işlemdir. Daha fazla bilgi için bkz. Kayıt Kümesi: Kayıtları Toplu Yakalama (ODBC).

Kayıt kümesi sınıfınızı oluşturmadan önce, hangi parametrelere ihtiyacınız olduğunu, bunların türlerini ve kayıt kümesinin bunları nasıl kullanacağını belirleyin.

Kayıt kümesi sınıfını parametrize etmek için

  1. Sınıf oluşturmak için Sınıf Ekle'den MFC ODBC Tüketici Sihirbazı'nı çalıştırın.

  2. Kayıt kümesinin sütunları için alan veri üyelerini belirtin.

  3. Sihirbaz sınıfı projenizdeki bir dosyaya yazdıktan sonra, .h dosyasına gidin ve sınıf bildirimine bir veya daha fazla veri üyesini el ile ekleyin. Ekleme aşağıdaki örneğe benzer bir şey olabilir, anlık sınıfın bir parçası "Hangi öğrenciler son sınıfta?" sorgusunu cevaplamak için tasarlandı

    class CStudentSet : public CRecordset
    {
    // Field/Param Data
        CString m_strFirstName;
        CString m_strLastName;
        CString m_strStudentID;
        CString m_strGradYear;
    
        CString m_strGradYrParam;
    };
    

    Sihirbaz tarafından oluşturulan alan veri üyelerinden sonra parametre veri üyelerinizi ekleyin. Her kullanıcı tanımlı parametre isminin sonuna "Param" sözcüğü eklemek kuraldır.

  4. .cpp dosyasındaki DoFieldExchange üye işlev tanımını değiştirin. Sınıfa eklediğiniz her parametre veri üyesi için RFX işlev çağrısı ekleyin. RFX işlevlerinizi yazmayla ilgili bilgi için bkz. Kayıt Alanı Değişimi: RFX'in Çalışma Şekli. Parametre için RFX çağrılarının önüne şu tek çağrıyı koyun:

    pFX->SetFieldType( CFieldExchange::param );
    // RFX calls for parameter data members
    
  5. Kayıt kümesi sınıfınızın yapıcısında, parametre sayısını artırın, m_nParams.

    Daha fazla bilgi için bkz. Kayıt Alanı Değişimi: Sihirbaz Kodu ile Çalışma.

  6. Bu sınıfın kayıt kümesi nesnesini oluşturan kodu yazığınızda, "?" (soru işareti) simgesini SQL deyimi dizgilerinde parametre ile değiştirilecek olan yerlere koyun.

    Çalışma zamanında, sırayla, "?" yer tutucuları geçirdiğiniz parametre değerleri ile doldurulur. SetFieldType çağrısından sonra, ilk parametre veri üye kümesi ilk "?" ile değiştirilir, ikinci parametre veri üyesi ikinci "?" ile değiştirilir ve böyle devam eder.

Not

Parametre sırası önemlidir: DoFieldExchange işlevinizdeki parametreler için olan RFX çağrılarının sırası SQL dizginizdeki parametre yer tutucularının sırasıyla eşleşmelidir.

İpucuİpucu

Çalışmak için en uygun dizgi sınıfın m_strFilter veri üyesi için belirttiğini dizgidir (eğer varsa), ancak bazı ODBC sürücüleri diğer SQL yan tümcelerinde parametrelere izin verebilir.

Çalışma Zamanında Parametre Değerlerini Geçirme

Parametre değerlerini (yeni kayıt kümesi nesnesi için) 'ı veya (var olanlar için) Yeniden Sorgula'yı çağırmadan önce belirtmelisiniz.

Çalışma zamanında parametre değerlerini kayıt kümesi nesnesine geçirmek için

  1. Kayıt kümesi nesnesini oluşturun.

  2. SQL deyimi veya bunun parçalarını içeren, m_strFilter dizgisi gibi dizgiyi veya dizgileri hazırlayın. Parametre bilgilerinin geleceği yerlere "?" yer tutucularını koyun.

  3. Nesnenin her parametre veri üyesine çalışma zamanı parametre değeri atayın.

  4. üye işlevini (veya Yeniden Sorgula, var olan kayıt kümesi için) çağırın.

Örneğin, çalışma zamanında alınan bilgiyi kullanarak kayıt kümeniz için filtre dizgisi belirtmek istediğinizi düşünün. Daha önceden, rsStudents denen, CStudentSet sınıfının kayıt kümesini oluşturduğunuzu ve şimdi belirli bir öğrenci bilgisi türü için tekrar sorgulamak istediğinizi varsayın.

// Set up a filter string with 
// parameter placeholders
rsStudents.m_strFilter = "GradYear <= ?";

// Obtain or calculate parameter values 
// to pass--simply assigned here 
CString strGradYear = GetCurrentAcademicYear( );

// Assign the values to parameter data members
rsStudents.m_strGradYrParam = strGradYear;

// Run the query
if( !rsStudents.Requery( ) )
    return FALSE;

Kayıt kümesi, kayıtları çalışma zamanında oluşturulan filtre tarafından belirtilen koşullarla örtüşen öğrencilerin kayıtlarını içerir. Bu durumda, kayıt kümesi bütün son sınıf öğrencilerinin kayıtlarını içerir.

Not

Eğer gerekliyse, SetParamNull kullanarak, parametre veri üyesinin değerini Null olarak ayarlayabilirsiniz. Benzer şekilde, IsFieldNull kullanarak, parametre veri üyesinin Null olup olmadığını denetleyebilirsiniz.

Ayrıca bkz.

Kavramlar

Kayıt Kümesi (ODBC)

Kayıt kümesi: Kayıtları Ekleme, Güncelleştirme ve Silme (ODBC)

Kayıt Kümesi: Kayıt Kümeleri Kayıtları Nasıl Seçer (ODBC)?