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 son kullanıcınızdan hesapladığınız veya aldığınız bilgileri kullanarak çalışma zamanında kayıtları seçebilmek isteyebilirsiniz. Kayıt kümesi parametreleri bu hedefi gerçekleştirmenize olanak sağlar.

Bu konu başlığı altında açıklanmaktadır:

Parametreli Kayıt Kümeleri

Parametreli kayıt kümesi, çalışma zamanında parametre bilgilerini geçirmenizi sağlar. Bunun iki değerli etkisi vardır:

  • Daha iyi yürütme hızına neden olabilir.

  • Kullanıcınızdan alınan veya çalışma zamanında hesaplanan bilgiler gibi tasarım zamanında sizin için kullanılamayan bilgilere dayalı olarak çalışma zamanında bir sorgu oluşturmanıza olanak tanır.

Sorguyu çalıştırmak için çağırdığınızda Open kayıt kümesi, SQL SELECT deyimini tamamlamak için parametre bilgilerini kullanır. Herhangi bir kayıt kümesini parametreleştirebilirsiniz.

Parametrelerin Ne Zaman Kullanılacağı

Parametreler için tipik kullanımlar şunlardır:

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

    Parametreleri saklı yordama geçirmek için, çağırdığınızda Openkayıt kümesinin varsayılan SQL deyimini geçersiz kılarak parametre yer tutucularıyla birlikte eksiksiz bir özel ODBC CALL deyimi belirtmeniz gerekir. Daha fazla bilgi için bkz. Sınıf Kitaplığı Başvurusunda CRecordset::Open ve SQL: Kayıt Kümenizin SQL Deyimini Özelleştirme (ODBC) ve Kayıt Kümesi: Önceden Tanımlanmış Sorgu (ODBC) için Sınıf Bildirme.

  • Farklı parametre bilgileriyle çok sayıda yeniden sorgulamayı verimli bir şekilde gerçekleştirme.

    Örneğin, son kullanıcınız öğrenci kayıt veritabanında belirli bir öğrencinin bilgilerini her ararken, öğrenci adını veya kimliğini kullanıcıdan alınan bir parametre olarak belirtebilirsiniz. Ardından kayıt kümenizin Requery üye işlevini çağırdığınızda sorgu yalnızca o öğrencinin kaydını seçer.

    kayıt kümenizin içinde m_strFilterdepolanan filtre dizesi şöyle görünebilir:

    "StudentID = ?"
    

    değişkeninde strInputIDöğrenci kimliğini aldığınızı varsayalım. Bir parametreyi strInputID (örneğin, öğrenci kimliği 100) ayarladığınızda, değişkenin değeri filtre dizesindeki "?" ile temsil edilen parametre yer tutucusunun değerine bağlıdır.

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

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

    Filtre dizesini 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 ilişkin bir tartışma için bkz . Kayıt Kümesi: Kayıtları Filtreleme (ODBC).

    Yeni bir öğrenci kimliği için kayıt kümesini her yeniden sorguladığınızda parametre değeri farklıdır.

    Bahşiş

    Parametre kullanmak, filtreden daha verimlidir. Parametreli kayıt kümesi için veritabanının bir SQL SELECT deyimini yalnızca bir kez işlemesi gerekir. Parametresiz filtrelenmiş bir kayıt kümesi için, her yeni filtre değeriyle her seferinde Requery SELECT deyiminin işlenmesi gerekir.

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ı Parametreleştirme

Dekont

Bu bölüm, toplu satır getirmenin uygulanmadığı türetilmiş CRecordset nesneler için geçerlidir. Toplu satır getirme kullanıyorsanız, parametreleri uygulamak benzer bir işlemdir. Daha fazla bilgi için bkz . Kayıt Kümesi: Kayıtları Toplu Getirme (ODBC).

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

Kayıt kümesi sınıfını parametreleştirmek için

Dekont

MFC ODBC Tüketici sihirbazı Visual Studio 2019 ve sonraki sürümlerde kullanılamaz. Yine de bu işlevi el ile oluşturabilirsiniz.

  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 parametre veri üyesini el ile ekleyin. Ekleme aşağıdaki örneğe benzer olabilir. Anlık görüntü sınıfının "Son sınıfta hangi öğrenciler var?" sorgusunu yanıtlamak için tasarlanmış bir bölümü

    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. Kural, kullanıcı tanımlı her parametre adına "Param" sözcüğünü eklemektir.

  4. .cpp dosyasındaki DoFieldExchange üye işlev tanımını değiştirin. Sınıfına eklediğiniz her parametre veri üyesi için bir RFX işlev çağrısı ekleyin. RFX işlevlerinizi yazma hakkında bilgi için bkz . Kayıt Alanı Değişimi: RFX Nasıl Çalışır? Parametreler 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 oluşturucusunda parametre m_nParamssayısını artırın.

    Bilgi için bkz . Kayıt Alanı Değişimi: Sihirbaz Koduyla Çalışma.

  6. Bu sınıfın kayıt kümesi nesnesini oluşturan kodu yazdığınızda bir "?" (soru işareti) simgesi, SQL deyimi dizelerinizde bir parametrenin değiştirileceği her yerde.

    Çalışma zamanında, "?" yer tutucuları geçirdiğiniz parametre değerlerine göre sırayla doldurulur. SetFieldType çağrısından sonraki ilk parametre veri üyesi kümesi SQL dizesindeki ilk "?" öğesini, ikinci parametre veri üyesi ikinci "?" öğesinin yerini alır ve bu şekilde devam eder.

Dekont

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

Bahşiş

Çalışmak için en olası dize, sınıfın m_strFilter veri üyesi için belirttiğiniz dizedir (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

Çağırmadan Open önce (yeni bir kayıt kümesi nesnesi için) veya Requery (var olan bir nesne için) parametre değerlerini belirtmeniz gerekir.

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

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

  2. SQL deyimini veya bir bölümünü içeren dize veya dize gibi m_strFilter dizeleri hazırlayın. Parametre bilgilerinin gideceği yere "?" yer tutucuları yerleştirin.

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

  4. Open Üye işlevini (veya Requeryvar olan bir kayıt kümesi için ) çağırın.

Örneğin, çalışma zamanında elde edilen bilgileri kullanarak kayıt kümeniz için bir filtre dizesi belirtmek istediğinizi varsayalım. Daha önce rsStudents sınıfın CStudentSet adlı bir kayıt kümesini oluşturduğunuzu ve şimdi bunu belirli bir öğrenci bilgisi türü için yeniden sorgulamak istediğinizi varsayalım.

// 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ı parametrelerinden oluşan filtre tarafından belirtilen koşullara uyan öğrencilerin kayıtlarını içerir. Bu durumda kayıt kümesi tüm son sınıf öğrencilerine yönelik kayıtları içerir.

Dekont

Gerekirse, SetParamNull kullanarak parametre veri üyesinin değerini Null olarak ayarlayabilirsiniz. Aynı şekilde IsFieldNull kullanarak parametre veri üyesinin Null olup olmadığını de kontrol edebilirsiniz.

Ayrıca bkz.

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ümelerinin Kayıtları Seçme Biçimi (ODBC)