Aracılığıyla paylaş


Kayıt Kümesi: Önceden Tanımlanmış Sorgu için Sınıf Bildirme (ODBC)

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

Bu konu önceden belirlenmiş bir sorgu için (Microsoft SQL Sunucusu'nda olduğu gibi bazen depolanmış yordam olarak anılır) bir kayır kümesi sınıfının nasıl oluşturulacağını anlatmaktadır.

[!NOT]

Bu konu toplu satır yakalamanın uygulanmadığı CRecordset'ten türetilen nesnelere uygulanır.Toplu satır getirme uygulanmışsa, işlem çok benzerdir.Toplu satır alma uygulayan kayıt kümeleriyle bunu yapmayanlar arasındaki farkları anlamak için bakınız: Kayıt Kümesi: Kayıtları Toplu Halde Almak (ODBC).

Bazı veritabanı yönetimi sistemleri (DBMS'ler) önceden tanımlanmış bir sorgu oluşturup bunu bir işlev gibi programlarınızdan çağırmanıza izin verir.Sorgunun, bir adı vardır, parametreler alabilir ve kayıtları döndürebilir.Bu konudaki yordam, kayıtlara geri dönen (ve belki de parametreleri alan) önceden tanımlanmış bir sorgunun nasıl çağrılacağını açıklar.

Veritabanı sınıfları önceden tanımlanmış sorguları güncelleştirmeyi desteklemez.Bir anlık görüntü öntanımlı sorgu ile bir dinamik küme öntanımlı sorgusu arasındaki fark güncellenebilirlik değil başkaları tarafından yapılan değişikliklerin (ya da programınızdaki diğer kayıt kümelerinin) kayıt kümenizde görünür olup olmadığıdır.

İpucuİpucu

Kayıtlar döndürmeyen önceden tanımlanmış bir sorguyu çağırmak için bir kayıt gerekmez.SQL deyimini aşağıda açıklandığı şekilde hazırlayın ancak söz konusu deyimi, CDatabase üye işlevini ExecuteSQL çağırarak yürütün.

Önceden tanımlı bir sorgunun çağrılmasını yönetmek için tek bir kayıt kümesi sınıfı oluşturabilirsiniz, fakat işin bir kısmını sizin yapmalısınız.Sihirbazlar özellikle bu amaç için oluşturulan bir sınıfı desteklemez.

Önceden tanımlanmış bir sorguyu (saklı yordam) çağırmak için bir sınıf oluşturmak için

  1. Sorgu tarafından döndürülmüş en fazla sütuna katkıda bulunan tablo için bir kayıt kümesi sınıfı oluşturmak için Sınıf Ekle'den MFC ODBC Tüketici Sihirbazı'nı kullanın.Bu bir başlangıç sağlar.

  2. Sorgu sonucunda bulunan ancak sihirbaz tarafından oluşturulmamış herhangi bir tablodaki bir sütuna ait alan veri üyelerini el ile ekleyin.

    Örneğin, sorgu her biri ek iki tablodan olmak üzere üç sütun döndürürse, sınıfa altı veri üyesi (uygun veri türlerinden) ekleyin.

  3. Sınıfın eklenen her bir alan veri üyesine karşılık gelen DoFieldExchange üye işlevinde RFX işlev aramalarını el ile ekleyin.

    Immediately before these RFX calls, call <MSHelp:link keywords="_mfc_CFieldExchange.3a3a.SetFieldType" TABINDEX="0">SetFieldType</MSHelp:link>, as shown here: 
    pFX->SetFieldType( CFieldExchange::outputColumn );
    

    [!NOT]

    Sonuç kümenizdeki döndürülen veri türlerini ve sütunların sırasını bilmelisiniz.DoFieldExchange öğesindeki RFX işlevi çağrılarının sırası sonuç kümesi sütunlarının sırasıyla eşleşmelidir.

  4. Kayıt kümesi sınıf oluşturucusunda yeni alan veri üyeleri için başlatmaları el ile ekleyin.

    Ayrıca, m_nFields veri üyesi için başlatma değerini artırmalısınız.Sihirbazı başlatmayı yazar, ancak yalnızca sizin için eklediği alan veri üyelerini kapsar.Örne?in:

    m_nFields += 6;
    

    CLongBinary veya bayt dizileri gibi bazı veri türleri burada başlatılmamalıdır.

  5. Sorgu, parametreler alıyorsa, her bir parametre için bir parametre veri üyesi, bir RFX işlev çağrısı ve bir başlatıcı ekleyin.

  6. Bu yordamın 4. adımında, eklenen alanlar için m_nFields yaptığınız gibi, her eklenen parametre için m_nParams artırılmalıdır.Daha fazla bilgi için bkz. Kayıt Kümesi: Bir Kayıt Kümesini Parametreleştirme (ODBC).

  7. Bir SQL deyim dizesini aşağıdaki şekilde el ile yazma:

    {CALL proc-name [(? [, ?]...)]}
    

    ARAMA bir ODBC anahtarı olduğunda, yordam adı veri kaynağında bilindiği gibi sorgunun adıdır ve "?" öğeleri, kayıt kümesine çalışma zamanında sağladığınız (varsa) parametre değerleri için yer tutucularıdır.Aşağıdaki örnek bir parametre için bir yer tutucu hazırlar:

    CString mySQL = "{CALL Delinquent_Accts (?)}";
    
  8. Kayıt kümesini açan kodda, kayıt kümesinin parametre veri üyelerinin değerlerini ayarlayın ve ardından Açık üye işlevini lpszSQL parametresi için SQL dizesini geçirmesi için çağırın.Veya bunun yerine, sınıfınızdaki GetDefaultSQL üye işlevi tarafından döndürülen diziyi değiştirin.

Aşağıdaki örnekler bir satış bölgesi numarası için bir parametre alan Delinquent_Accts adlı önceden tanımlanmış bir sorguyu çağırmak için yordamı gösterir.Bu sorgu üç sütun getirir: Acct_No, L_Name, Phone.Tüm sütunlar Müşteriler tablosundandır.

Aşağıdaki kayıt kümesi sorgunun döndürdüğü satırlar için alan veri üyelerini ve çalışma zamanında istenen satış bölge numarası için bir parametreyi belirtir.

class CDelinquents : public CRecordset
{
// Field/Param Data
    LONG m_lAcct_No;
    CString m_strL_Name;
    CString m_strPhone;
    LONG m_lDistParam;
    // ...
};

Sihirbazın yazdığı gibi bu sınıf bildirimi, m_lDistParam öğesi dışında el ile eklenir.Diğer üyeler burada gösterilmez.

Sonraki örnek, CDelinquents oluşturucusundaki veri üyeleri için başlatmaları gösterir.

CDelinquents::CDelinquents(CDatabase* pdb)
   : CRecordset(pdb)
{
    // Wizard-generated params:
    m_lAcct_No = 0;
    m_strL_Name = "";
    m_strPhone = "";
    m_nFields = 3;
    // User-defined params:
    m_nParams = 1;
    m_lDistParam = 0;
}

m_nFields ve m_nParams başlatmalarına dikkat edin.Sihirbaz m_nFields öğesini başlatır; siz m_nParams öğesini başlatırsınız.

Sonraki örnek CDelinquents::DoFieldExchange öğesindeki RFX işlevlerini gösterir:

void CDelinquents::DoFieldExchange(CFieldExchange* pFX)
{
    pFX->SetFieldType(CFieldExchange::outputColumn);
    RFX_Long(pFX, "Acct_No", m_lAcct_No);
    RFX_Text(pFX, "L_Name", m_strL_Name);
    RFX_Text(pFX, "Phone", m_strPhone);
    pFX->SetFieldType(CFieldExchange::param);
    RFX_Long(pFX, "Dist_No", m_lDistParam);
}

Bu kod döndürülen üç sütun için RFX aramalarını yapma yanı sıra çalışma zamanında geçirdiğiniz parametrenin bağlanmasını yönetir.Parametre Dist_No (bölge numarası) sütununa anahtarlanır.

Sonraki örnek SQL dizesinin nasıl kurulduğunu ve kayıt kümesini açmak için nasıl kullanıldığını gösterir.

// Construct a CDelinquents recordset object
CDelinquents rsDel( NULL );
CString strSQL = "{CALL Delinquent_Accts (?)}"
// Specify a parameter value (obtained earlier from the user)
rsDel.m_lDistParam = lDistrict;
// Open the recordset and run the query
if( rsDel.Open( CRecordset::snapshot, strSQL ) )
    // Use the recordset ...

Bu kod bir anlık görüntü oluşturur, daha önce kullanıcıdan edindiği bir parametreye geçirir ve ön tanımlı sorguyu çağırır.Sorgu çalıştırıldığında, belirtilen satış bölgesi kayıtlarını döndürür.Her kayıt, hesap numarası için sütunlar, müşterinin soyadı ve müşterinin telefon numarasını içerir.

İpucuİpucu

Bir saklı yordamdan gelen bir dönüş değeri (çıktı parametresi) işlemek isteyebilirsiniz.Daha fazla bilgi ve örnek için bkz. CFieldExchange::SetFieldType.

Ayrıca bkz.

Kavramlar

Kayıt Kümesi (ODBC)

Kayıt kümesi: Bir Kayıt Kümesinde Yeniden Sorgulama (ODBC)

Kayıt Kümesi: Tablo için Sınıf Bildirme (ODBC)

Kayıt Kümesi: Birleşim Gerçekleştirme (ODBC)