Zestaw rekordów: deklarowanie klasy dla wstępnie zdefiniowanego zapytania (ODBC)

Ten temat dotyczy klas MFC ODBC.

W tym temacie wyjaśniono, jak utworzyć klasę zestawu rekordów dla wstępnie zdefiniowanej kwerendy (czasami nazywany procedurę przechowywaną, tak jak w programie Microsoft SQL Server).

[!UWAGA]

Ten temat dotyczy obiekty pochodzące z CRecordset w wiersz, który luzem pobieranie nie została zaimplementowana.Jeśli pobieranie wiersza zbiorczego jest zaimplementowany, proces jest bardzo podobne.Aby poznać różnice między zestawami rekordów, który implementuje pobieranie wiersza zbiorczego 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łać ją z programów takich jak funkcja.Kwerenda o nazwie, może zająć parametry i może zwrócić rekordów.W procedurze w tym temacie opisano sposób wywoływania wstępnie zdefiniowanej kwerendy, która zwraca rekordy (i być może 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

Nie trzeba zestaw rekordów do wywołania wstępnie zdefiniowanej kwerendy, która nie zwraca rekordów.Przygotować instrukcję SQL, jak opisano poniżej, ale ją wykonać poprzez wywołanie CDatabase funkcji składowej ExecuteSQL.

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

Aby utworzyć klasę do wywoływania wstępnie zdefiniowanej kwerendy (procedura składowana)

  1. Użycie Kreatora konsumenta ODBC MFC z Add Class Aby utworzyć klasę zestawu rekordów do tabeli, który przyczynia się najbardziej kolumn zwracanych przez kwerendę.Dzięki temu można utworzyć.

  2. Ręcznie dodać pola danych członków dla wszystkich tabel, zwracanych przez kwerendę, ale że Kreator nie utworzyło dla Ciebie żadnych kolumn.

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

  3. Ręcznie dodać RFX funkcja wywołuje DoFieldExchange funkcji składowej klasy, odpowiadające typ danych każdego dodany element członkowski danych pola.

    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 zestaw.Wzywa rząd funkcji RFX w DoFieldExchange musi odpowiadać kolejności kolumn zestawu wyników.

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

    Należy również zwiększyć wartość inicjowania dla m_nFields element członkowski danych.Kreator zapisuje inicjowania, ale obejmuje tylko 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, Dodaj element członkowski 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 parametru, tak jak Ty m_nFields dla dodano 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 w następującej postaci:

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

    gdzie CALL jest kluczowym ODBC Nazwa proc jest nazwą kwerendy, jak to jest znane w źródle danych i "?" elementy są symbolami zastępczymi dla wartości parametrów podanych z zestawem rekordów w czasie wykonywania (jeśli istnieje).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 zestawu rekordów danych członków, a następnie wywołać Otwórz funkcji składowej, przekazywanie ciągu SQL dla lpszSQL parametru.Czy jednak zamienić ciąg zwracany przez GetDefaultSQL funkcji składowej w swojej klasie.

Następujące przykłady przedstawiają procedurę do 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 dane elementów pola kolumny zwracane przez kwerendy i parametru dla sprzedaży Dystrykt numer zgłoszony w czasie wykonywania.

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

Jest to deklaracja klasy, jak Kreator zapisuje je, z wyjątkiem m_lDistParam Członkowskie dodane ręcznie.Inni członkowie nie są wyświetlane w tym miejscu.

W następnym przykładzie pokazano inicjalizacje dla elementów danych w CDelinquents Konstruktor.

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

Należy zauważyć, inicjalizacje dla m_nFields i m_nParams.Kreator inicjuje m_nFields; należy zainicjować m_nParams.

W następnym przykładzie pokazano 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łania RFX dla trzech kolumn zwracanych, ten kod zarządza, wiązanie parametru przebiegu w czasie wykonywania.Parametr jest ustawiony tak, by Dist_No kolumny (Numer okręgu).

Następny przykład pokazuje, jak ustawić 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.Podczas wykonywania kwerendy, zwraca rekordy określonego Okręg sprzedaży.Każdy rekord zawiera kolumny Nazwisko odbiorcy, numeru konta i numeru telefonu klienta.

PoradaPorada

Można obsługiwać (parametr wyjściowy) wartość zwrócona przez procedurę składowaną.Aby uzyskać więcej informacji i zobaczyć przykład, zobacz CFieldExchange::SetFieldType.

Zobacz też

Koncepcje

Zestaw rekordów (ODBC)

Zestaw rekordów: ponowne wysyłanie zapytania do zestawu rekordów (ODBC)

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

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