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 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
Sınıf oluşturmak için Sınıf Ekle'den MFC ODBC Tüketici Sihirbazı'nı çalıştırın.
Kayıt kümesinin sütunları için alan veri üyelerini belirtin.
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.
.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
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.
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 |
---|
Ç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) Aç'ı 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
Kayıt kümesi nesnesini oluşturun.
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.
Nesnenin her parametre veri üyesine çalışma zamanı parametre değeri atayın.
Aç ü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: Kayıtları Ekleme, Güncelleştirme ve Silme (ODBC)