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.
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 açıklar:
Parametreli kayıt kümesinin amacı.
Bir kayıt kümesini ne zaman ve neden parametreleştirmek isteyebilirsiniz.
Kayıt kümesi sınıfınızda parametre veri üyelerini bildirme.
Çalışma zamanında parametre bilgilerini bir kayıt kümesi nesnesine geçirme.
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.
Çalışma zamanında kullanıcıdan alınan veya çalışma esnasında hesaplanan bilgiler gibi tasarım zamanında mevcut olmayan bilgilere dayalı olarak 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 bir saklı yordama geçirmek için, parametre yer tutucularıyla birlikte eksiksiz bir özel ODBC CALL ifadesi belirtmeniz gerekir —
Opençağrıldığında, kayıt kümesinin varsayılan SQL ifadesinin yerine geçecektir. Daha fazla bilgi için Sınıf Kitaplığı Referansından 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 Bildirilmesi başlıklarına bakın.Farklı parametre bilgileriyle birçok sorguyu verimli bir şekilde yeniden 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 parametreyistrInputID(ö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 driversFiltre 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.
İpucu
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 seferinde yeni bir filtre değeri ile 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
Not
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
Not
MFC ODBC Tüketici sihirbazı Visual Studio 2019 ve sonraki sürümlerde kullanılamaz. Yine de bu işlevi el ile oluşturabilirsiniz.
MFC ODBC Tüketici Sihirbazı'nıSınıf Ekle'den çalıştırarak sınıfı oluşturun.
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 parametre veri üyesini el ile ekleyin. Ekleme, "Son sınıfta hangi öğrenciler var?" sorgusunu yanıtlamak için tasarlanmış bir anlık görüntü sınıfının parçası olan aşağıdaki örneğe benzer olabilir.
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.
.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 bilgiyi Kayıt Alanı Değişimi: RFX Nasıl Çalışır bölümünde bulabilirsiniz. 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 membersKayıt kümesi sınıfınızın oluşturucusunda parametre
m_nParamssayısını artırın.Bilgi için, Kayıt Alanı Değişimi: Sihirbaz Kodu ile Çalışma bölümüne bakın.
Bu sınıfın kayıt kümesi nesnesini oluşturan kodu yazarken, bir parametrenin yerini alması gereken SQL deyimi dizelerinizdeki her yere "?" (soru işareti) simgesi yerleştirin.
Ç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.
Not
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.
İpucu
Ç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
Kayıt kümesi nesnesini oluşturma.
SQL deyimini veya bir bölümünü içeren,
m_strFiltergibi bir dize veya dizeler hazırlayın. Parametre bilgilerinin gideceği yere "?" yer tutucuları yerleştirin.Nesnenin her parametre veri üyesine bir çalışma zamanı parametre değeri atayın.
OpenÜye işlevini (veyaRequeryvar 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 CStudentSet sınıfın rsStudents 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.
Not
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)