Zestaw rekordów: parametryzacja zestawu rekordów (ODBC)
Ten temat dotyczy klas MFC ODBC.
Czasami można móc wybrać rekordy w czasie wykonywania przy użyciu informacji mają obliczonych lub otrzymanych od sieci użytkownika końcowego.Parametry zestawu rekordów pozwalają osiągnąć ten cel.
Ten temat tłumaczy:
Celem sparametryzowana zestaw rekordów.
Kiedy i dlaczego warto Definiowanie parametrów z zestawem rekordów.
Jak zadeklarować parametr danych członków w klasie rekordów.
Jak przekazywać informacje na temat parametrów do obiektu recordset w czasie wykonywania.
Sparametryzowana zestawy rekordów
Zestaw rekordów sparametryzowana pozwala przekazywać informacje o parametrach w czasie wykonywania.Ma dwa efekty cenne:
Może to spowodować lepszą szybkość realizacji.
To pozwala skonstruować kwerendę w czasie wykonywania na podstawie informacji nie są dostępne dla użytkownika w czasie projektowania, takich jak informacje uzyskane z użytkownikiem lub obliczane w czasie wykonywania.
Pod numerem Otwórz Aby uruchomić kwerendę, zestawu rekordów używa informacje na temat parametrów do ukończenia jej SQL SELECT instrukcji.Można parameterize dowolnym zestawie rekordów.
Kiedy należy używać parametrów
Typowe zastosowania parametrów należą:
Przekazywanie argumentów w czasie wykonywania do wstępnie zdefiniowanej kwerendy.
Do przekazywania parametrów procedury przechowywanej, należy określić pełną ODBC niestandardowe CALL instrukcja — symbolami zastępczymi parametr — pod numerem Otwórz, przesłanianie instrukcji SQL domyślnego zestawu rekordów.Aby uzyskać więcej informacji, zobacz CRecordset::Open w Informacje dotyczące biblioteki klas i SQL: dostosowywanie swój zestaw rekordów w instrukcji SQL (ODBC) i zestaw rekordów: deklarowanie klasy dla wstępnie zdefiniowanych kwerend (ODBC).
Efektywne wykonywanie liczne requeries o informacje na temat różnych parametrów.
Na przykład każdorazowo Twoich użytkowników wyszukuje informacje dotyczące danego słuchacza w bazie danych rejestracji studentów, można określić nazwę lub identyfikator Studenta jako parametr uzyskane od użytkownika.Następnie, gdy wywołanie w zestawie rekordów Requery funkcji składowej, kwerenda wybiera tylko Studenta dla tego rekordu.
Ciąg filtru w zestawie rekordów, przechowywane w m_strFilter, może wyglądać następująco:
"StudentID = ?"
Załóżmy, że uzyskanie ID studenta w zmiennej strInputID.Po ustawieniu parametru strInputID (na przykład student ID 100) wartość zmiennej powiązany jest reprezentowany przez symbol zastępczy parametru "?" w ciąg filtru.
Przypisz wartość parametru w następujący sposób:
strInputID = "100"; ... m_strParam = strInputID;
Nie chcesz skonfigurować w ten sposób ciąg filtru:
m_strFilter = "StudentID = 100"; // 100 is incorrectly quoted // for some drivers
Omówienie sposobu używania ofert poprawnie dla ciągów filtru, zobacz zestaw rekordów: filtrowanie rekordów (ODBC).
Wartość parametru różni się każdorazowo requery zestaw rekordów dla nowego identyfikatora studenta.
Porada Za pomocą parametru jest bardziej wydajne niż zwykłe filtru.Dla rekordów sparametryzowana, baza danych musi przetworzyć SQL Wybierz instrukcja tylko raz.Przefiltrowany zestaw rekordów bez parametrów, aby uzyskać Wybierz instrukcji muszą być przetwarzane każdorazowe Requery nową wartość filtru.
Aby uzyskać więcej informacji o filtrach, zobacz zestaw rekordów: filtrowanie rekordów (ODBC).
Parametryzacja klasy zestawu rekordów
[!UWAGA]
Ta sekcja dotyczy obiekty pochodzące z CRecordset w wiersz, który luzem pobieranie nie została zaimplementowana.Jeśli używasz wiersza zbiorczego pobierania, implementacji parametrów przebiega w podobny sposób.Aby uzyskać więcej informacji, zobacz zestaw rekordów: pobieranie rekordów luzem (ODBC).
Przed utworzeniem swojej klasy zestawu rekordów, określić jakie parametry konieczne, jakie są ich typy danych i jak wykorzystuje je zestaw rekordów.
Definiowanie parametrów klasy zestawu rekordów
Uruchom Kreatora konsumenta ODBC MFC z Add Class do utworzenia klasy.
Określ pole dane elementów członkowskich dla kolumn w zestawie rekordów.
Po kreator zapisuje w pliku w projekcie klasy, przejdź do pliku .h i ręcznie dodać jeden lub więcej członków danych parametru do deklaracji klasy.Dodanie może wyglądać jak w następującym przykładzie, część klasy migawka przeznaczone do odpowiedzi na zapytanie "będące uczniów w klasie starszy?"
class CStudentSet : public CRecordset { // Field/Param Data CString m_strFirstName; CString m_strLastName; CString m_strStudentID; CString m_strGradYear; CString m_strGradYrParam; };
Dodaj swoje parametr danych członków po wygenerowany przez Kreatora pola danych członków.Konwencji są dołączane słowo "Param" do każdej nazwy parametru zdefiniowanej przez użytkownika.
Modyfikowanie DoFieldExchange definicja funkcji składowej w pliku CPP.Dodać wywołanie funkcji RFX dla każdego elementu członkowskiego danych parametru, dodane do tej klasy.Aby uzyskać informacje o pisaniu swoje funkcje RFX, zobacz wymiany pól rekordu: jak działa RFX.Należy poprzedzić wywołań RFX dla parametrów z pojedyncze wywołanie:
pFX->SetFieldType( CFieldExchange::param ); // RFX calls for parameter data members
W konstruktorze klasy zestawu rekordów, zwiększ liczbę parametrów, m_nParams.
Aby uzyskać informacje, zobacz wymiany pól rekordu: Praca z kodem kreatora.
Podczas pisania kodu, który tworzy obiekt recordset tej klasy, umieścić "?" symbol (znak zapytania) w każdym miejscu z ciągów instrukcji SQL, w którym ma zostać zastąpiony parametrem.
W czasie wykonywania "?" symbole zastępcze zostaną wypełnione, w kolejności, według wartości parametru należy przekazać.Pierwszy element danych parametru ustawiona po SetFieldType wywołanie zastępuje pierwszy "?"w ciągu SQL drugiego członka danych parametru zastępuje drugi"?" i tak dalej.
[!UWAGA]
Ważna jest kolejność parametrów: kolejność RFX wymaga parametrów w swojej DoFieldExchange funkcja musi odpowiadać kolejności parametru symboli zastępczych w ciągu SQL.
Porada |
---|
Najprawdopodobniej ciąg do pracy z jest ciąg określisz (jeśli istnieje) dla danej klasy m_strFilter członka danych, ale niektóre sterowniki ODBC może zezwolić na parametry inne klauzule języka SQL. |
Przekazywanie wartości parametru w czasie wykonywania
Zanim zadzwonisz, należy określić wartości parametrów Otwórz (dla nowego obiektu recordset) lub Requery (dla istniejącej).
Aby przekazać wartość parametru do obiektu recordset w czasie wykonywania
Konstruowania obiektu recordset.
Przygotować ciąg lub ciągi znaków, takich jak m_strFilter ciąg znaków, zawierające instrukcję SQL lub jego części.Umieścić "?" symbole zastępcze, gdzie informacje na temat parametrów jest aby przejść.
Każdemu członkowi danych parametru obiektu, należy przypisać wartość parametru w czasie wykonywania.
Wywołanie Otwórz funkcji składowej (lub Requery, dla istniejącego zestawu rekordów).
Na przykład załóżmy, że chcesz określić ciąg filtru dla swój zestaw rekordów przy użyciu informacji uzyskanych w czasie wykonywania.Założono zbudowania zestaw rekordów klasy CStudentSet wcześniej — o nazwie rsStudents — i teraz kwerenda ma zostać ponowiona dla określonego rodzaju informacje o studentach.
// 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;
Zestaw rekordów zawiera rekordy dla osób, których rekordy spełniają warunki określone przez filtr, który została zbudowana z parametrów w czasie wykonywania.W tym przypadku zestaw rekordów zawiera rekordy dla wszystkich studentów wyższych.
[!UWAGA]
W razie potrzeby można ustawić wartość elementu członkowskiego danych parametru na wartość Null, za pomocą SetParamNull.Można również sprawdzić, czy element członkowski danych parametr ma wartość Null, za pomocą IsFieldNull.
Zobacz też
Koncepcje
Zestaw rekordów: dodawanie, aktualizowanie i usuwanie rekordów (ODBC)
Zestaw rekordów: jak zestawy rekordów pobierają rekordy (ODBC)