Udostępnij za pośrednictwem


Zestaw rekordów: Deklarowanie klasy dla wstępnie zdefiniowanej kwerendy (ODBC)

Ten temat dotyczy klas MFC ODBC.

W tym temacie wyjaśniono, jak utworzyć klasę zestaw rekordów dla wstępnie zdefiniowanej kwerendy (czasami nazywany procedury przechowywanej, jak w Microsoft SQL Server).

[!UWAGA]

Ten temat dotyczy obiekty pochodzące z CRecordset w którym wiersz luzem pobieranie nie została zaimplementowana.Jeśli jest zaimplementowana pobieranie wiersza luzem, proces jest bardzo podobne.Aby poznać różnice między zestawy rekordów, który implementuje pobieranie wiersza luzem i tych, które nie, zobacz zestaw rekordów: pobieranie rekordów luzem (ODBC).

Niektóre systemy zarządzania bazami danych (DBMS) pozwalają na tworzenie wstępnie zdefiniowanej kwerendy i wywołania z programów takich jak funkcja.Kwerenda ma nazwę, może zająć parametry i mogą zwracać rekordy.Procedury w tym temacie opisano wywołania wstępnie kwerendę, która zwraca rekordy (i prawdopodobnie pobiera parametry).

Klasy bazy danych nie obsługują aktualizacji wstępnie zdefiniowanych kwerend.Różnica między wstępnie zdefiniowanej kwerendy migawki i dynamiczny wstępnie zdefiniowanej kwerendy nie jest updateability, ale czy zmiany wprowadzone przez innych użytkowników (lub inne zestawy rekordów w programie) są widoczne w twoim zestawie rekordów.

PoradaPorada

Zestaw rekordów do wywołania wstępnie zdefiniowanej kwerendy, która nie zwraca rekordów nie jest konieczne.Przygotować instrukcję SQL, jak opisano poniżej, ale jej wykonanie przez wywołanie CDatabase Członkowskich funkcji ExecuteSQL.

Można utworzyć klasy pojedynczego zestawu rekordów do zarządzania wywoływania wstępnie zdefiniowanej kwerendy, ale należy wykonać część pracy samodzielnie.Kreatorzy nie obsługują tworzenia klasy specjalnie do tego celu.

Aby utworzyć klasę do wywoływania wstępnie zdefiniowanej kwerendy (procedury przechowywane)

  1. Wykorzystanie Kreatora konsumenta ODBC MFC z Add Class utworzyć klasy zestawu rekordów do tabeli, która przyczynia się do najbardziej kolumn zwracanych przez kwerendę.Umożliwia rozpoczęcie.

  2. Ręcznie dodać pola danych członków dla kolumn z tabelami, które kwerenda zwraca jednak, że Kreator nie zostały utworzone dla Ciebie.

    Na przykład jeśli kwerenda zwraca trzy kolumny z dwóch dodatkowych tabel, należy dodać sześciu członków dane pole (z typów danych) do klasy.

  3. Dodaj ręcznie RFX wywołuje funkcję w DoFieldExchange funkcji składowej klasy, jeden odpowiadające typowi danych każdego dodane pole elementu danych.

    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 );
    

    [!UWAGA]

    Należy znać typy danych i kolejność kolumn zwracanych w wyniku Ustaw.Wywołuje kolejność funkcji RFX w DoFieldExchange musi odpowiadać kolejności kolumn zestawu wyników.

  4. Ręcznie dodać inicjowania dla nowych członków danych pola w konstruktorze klasy zestawu rekordów.

    Należy również zwiększyć wartość inicjowania dla m_nFields elementu danych.Kreator zapisuje inicjowania, ale obejmuje wyłącznie składniki danych pole, które dodaje dla Ciebie.Na przykład:

    m_nFields += 6;
    

    Niektóre typy danych powinna nie można zainicjować tutaj, na przykład, CLongBinary lub tablice bajtów.

  5. Jeśli kwerenda pobiera parametry, należy dodać członka danych parametru dla każdego parametru, wywołanie funkcji RFX dla każdego i inicjowania dla każdego.

  6. Należy zwiększyć m_nParams dla poszczególnych dodanych parametr, jak została m_nFields dla dodane pola w kroku 4 tej procedury.Aby uzyskać więcej informacji, zobacz zestaw rekordów: parametryzacja zestaw rekordów (ODBC).

  7. Ręcznie napisać ciąg instrukcji SQL z następującą postać:

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

    gdzie WYWOŁANIA jest kluczowym ODBC Nazwa proc jest nazwą kwerendy jest znana w źródle danych i "?" elementy są symbolami zastępczymi dla wartości parametrów podanych do zestawu rekordów w czasie wykonywania (jeśli ma zastosowanie).Poniższy przykład przygotowuje symbolu zastępczego dla jednego parametru:

    CString mySQL = "{CALL Delinquent_Accts (?)}";
    
  8. W kodzie, który otwiera zestaw rekordów, ustaw wartości parametru w zestawie rekordów danych członków, a następnie wywołać Otwórz funkcji składowej, przekazując ciągu SQL dla lpszSQL parametru.Lub zamiast zastąpić ciąg zwracany przez GetDefaultSQL Członkowskich funkcji w klasie.

Następujące przykłady przedstawiają procedurę wywoływania wstępnie zdefiniowanej kwerendy o nazwie Delinquent_Accts, która przyjmuje jeden parametr dla numeru okręgu sprzedaży.Ta kwerenda zwraca trzy kolumny: Acct_No, L_Name, Phone.Wszystkie kolumny są z tabeli Klienci.

Następujący zestaw rekordów określa pola danych członków w kolumnach zwraca kwerendę i parametr sprzedaży dystryktu numer żądana w czasie wykonywania.

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

Deklaracja ta klasa jest jak Kreator zapisuje je, z wyjątkiem m_lDistParam Członkowskie dodane ręcznie.Inni członkowie nie są pokazane tutaj.

W kolejnym przykładzie inicjowania dla elementów danych w CDelinquents konstruktora.

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;
}

Uwaga inicjowania dla m_nFields i m_nParams.Na zainicjowanie kreatora m_nFields; należy zainicjować m_nParams.

W kolejnym przykładzie funkcji RFX w CDelinquents::DoFieldExchange:

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);
}

Oprócz wywołań RFX w trzech kolumnach zwracane, ten kod zarządza wiążące parametr przebiegu w czasie wykonywania.Parametr jest ustawiony tak, by Dist_No kolumny (Numer okręgu).

W następnym przykładzie pokazano, jak skonfigurować ciąg SQL i jak go używać, aby otworzyć zestaw rekordów.

// 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 ...

Ten kod tworzy migawkę, przekazuje on parametr otrzymanych wcześniej przez użytkownika i wywołuje wstępnie zdefiniowanej kwerendy.Po uruchomieniu kwerendy, zwraca rekordy określonym okręgu sprzedaży.Każdy rekord zawiera kolumny nazwiska, numeru konta i numer telefonu nabywcy.

PoradaPorada

Można obsługiwać wartości zwracanej (parametr wyjściowy) z procedury przechowywanej.Aby uzyskać więcej informacji i przykładem, zobacz CFieldExchange::SetFieldType.

Zobacz też

Koncepcje

Zestaw rekordów (ODBC)

Zestaw rekordów: Ponawiać kwerendę rekordów (ODBC)

Zestaw rekordów: Deklarowanie klasy dla tabeli (ODBC)

Zestaw rekordów: Wykonywanie sprzężenia (ODBC)