Zestaw rekordów: Parametryzacja zestaw rekordów (ODBC)
Ten temat dotyczy klas MFC ODBC.
Czasami warto mieć możliwość wybierania rekordów w czasie wykonywania przy użyciu informacji mają obliczonych lub otrzymanych od użytkowników końcowych.Parametry rekordów pozwalają osiągnąć ten cel.
W tym temacie wyjaśniono:
Celem sparametryzowana rekordów.
Kiedy i dlaczego warto parameterize zestaw rekordów.
Jak deklarować parametrów danych członków w klasie rekordów.
Jak przekazać informacje o parametrach do obiektu recordset w czasie wykonywania.
Sparametryzowana zestawy rekordów
Sparametryzowana rekordów pozwala przekazywać informacje o parametrach, w czasie wykonywania.Ma dwa efekty cenne:
Może to spowodować lepsze wykonanie prędkości.
Umożliwia utworzenie kwerendy w czasie wykonywania na podstawie informacji nie dostępne w czasie projektowania, takie jak informacje uzyskane od użytkownika lub obliczone w czasie wykonywania.
Po wywołaniu Otwórz uruchomić kwerendę, zestawu rekordów używa informacji parametru do wykonania jego SQL SELECT instrukcji.Można parameterize żadnych rekordów.
Kiedy używać parametrów
Typowe zastosowania parametrów należą:
Przekazywanie argumentów run-time do wstępnie zdefiniowanej kwerendy.
Do przekazania parametrów do procedury przechowywanej, należy określić pełną niestandardowe ODBC WYWOŁANIA instrukcji — z symbolami zastępczymi parametr — po wywołaniu Otwórz, przesłanianie instrukcji SQL domyślnego zestawu rekordów.Aby uzyskać więcej informacji, zobacz CRecordset::Open w Odwołanie do biblioteki klas i SQL: Dostosowywanie Your w zestawie rekordów instrukcji SQL (ODBC) i zestaw rekordów: deklarowanie klasy dla wstępnie zdefiniowanych kwerend (ODBC).
Efektywne wykonywanie liczne requeries z informacji o różnych parametrach.
Na przykład po każdym użytkowników końcowych wyszukuje informacje dotyczące danego słuchacza w bazie danych rejestracji dla użytkowników domowych, 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 uzyskać identyfikator studenta w zmiennej strInputID.Po ustawieniu parametru strInputID (na przykład student ID 100) wartość zmiennej jest powiązany reprezentowany przez symbol zastępczy parametru "?" w ciągu filtru.
Przypisz wartość parametru w następujący sposób:
strInputID = "100"; ... m_strParam = strInputID;
Czy chcesz ustawić ciąg filtru w ten sposób:
m_strFilter = "StudentID = 100"; // 100 is incorrectly quoted // for some drivers
Omówienie sposobu poprawnie użyć cudzysłowów dla ciągów filtru, zobacz zestaw rekordów: filtrowanie rekordów (ODBC).
Wartość parametru jest różnych przy każdym requery zestaw rekordów dla nowego identyfikatora dla użytkowników domowych.
Porada Za pomocą parametru jest bardziej wydajny niż po prostu filtru.Dla rekordów sparametryzowana, baza danych musi przetworzyć SQL Zaznacz instrukcji tylko raz.Dla filtrowanych rekordów bez parametrów Zaznacz muszą być przetwarzane instrukcji każdorazowej Requery z nową wartość filtru.
Aby uzyskać więcej informacji dotyczących filtrów, zobacz zestaw rekordów: filtrowanie rekordów (ODBC).
Parametryzacja klasa zestawu rekordów
[!UWAGA]
Ta sekcja dotyczy obiekty pochodzące z CRecordset w którym wiersz luzem pobieranie nie została zaimplementowana.Jeśli używasz wiersza luzem, pobieranie, implementacji parametrów jest podobny proces.Aby uzyskać więcej informacji, zobacz zestaw rekordów: pobieranie rekordów luzem (ODBC).
Przed utworzeniem zestawu rekordów klasy określają parametry, jakiego potrzebujesz, ich typy danych są i jak zestawu rekordów używa ich.
Aby parameterize klasy zestawu rekordów
Uruchom Kreatora konsumenta ODBC MFC z Add Class do utworzenia klasy.
Określ pola danych członków dla kolumn w zestawie rekordów.
Po kreator zapisuje plik w projekcie klasy, przejdź do pliku .h i ręcznie dodać jeden lub więcej członków danych parametru w deklaracji klasy.Dodanie może wyglądać jak w następującym przykładzie, część klasy migawki zaprojektowane do odpowiedzi na kwerendy "będące uczniów w klasie wyższych?"
class CStudentSet : public CRecordset { // Field/Param Data CString m_strFirstName; CString m_strLastName; CString m_strStudentID; CString m_strGradYear; CString m_strGradYrParam; };
Dodaj członkom danych parametru po członków dane wygenerowane przez kreatora do pola.Konwencji są dołączane słowo "Param" do nazwy każdego parametru zdefiniowany przez użytkownika.
Modyfikowanie DoFieldExchange Członkowskich definicji funkcji w pliku .cpp.Dodać wywołanie funkcji RFX dla każdego członka danych parametru, dodane do tej klasy.Informacje na temat pisania funkcje RFX, zobacz wymiany pola rekordu: jak działa RFX.Poprzedź wywołania 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 wartość Liczba parametrów, m_nParams.
Aby uzyskać informacje, zobacz wymiany pola rekordu: Praca z kodu Kreator.
Podczas pisania kodu, który tworzy obiekt recordset tej klasy należy umieścić "?" symbol (znak zapytania) w każdym miejscu na ciągi znaków instrukcji SQL, w którym ma zostać zastąpiony parametrem.
W czasie wykonywania "?" symbole zastępcze są wypełnione w porządku, według wartości parametru przekazać.Pierwszy członek danych parametru ustawiona po SetFieldType wywołanie zastępuje pierwszego "?"w ciągu SQL drugiego członka danych parametru zastępuje drugi"?", i tak dalej.
[!UWAGA]
Ważna jest kolejność parametr: wymaga parametrów w kolejności RFX your DoFieldExchange funkcja musi odpowiadać kolejności parametrów symboli zastępczych w ciągu SQL.
Porada |
---|
Najprawdopodobniej ciąg do pracy z jest ciąg znaków, należy określić (jeśli istnieje) dla tej klasy m_strFilter członka danych, ale niektóre sterowniki ODBC może umożliwić parametrów w innych klauzul SQL. |
Przekazywanie wartości parametrów w czasie wykonywania
Zanim zadzwonisz, należy określić wartości parametrów Otwórz (dla nowego obiektu recordset) lub Requery (na podstawie istniejącego).
Aby przekazać wartości parametrów do obiektu recordset w czasie wykonywania
Konstruowanie obiektu recordset.
Przygotować ciąg lub ciągów znaków, takich jak m_strFilter ciąg zawierający instrukcję SQL lub jej części.Umieścić "?" symbole zastępcze, gdzie informacje parametru jest go.
Każdy członek danych parametru obiektu należy przypisać wartość parametru run-time.
Wywołanie Otwórz funkcji składowej (lub Requery, dla istniejących rekordów).
Załóżmy na przykład, aby określić ciąg filtru w twoim zestawie rekordów przy użyciu informacji uzyskanych w czasie wykonywania.Założono zostały skonstruowane rekordów klasy CStudentSet wcześniej — nazywane rsStudents — i teraz ma zostać ponowiona dla określonego rodzaju informacji dla użytkowników domowych.
// 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 tych studentów, którego rekordy spełniają warunki określone przez filtr, który został zbudowany 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 danych parametru na wartość Null, za pomocą SetParamNull.Podobnie można sprawdzić, czy członek danych parametru jest Null, za pomocą IsFieldNull.
Zobacz też
Koncepcje
Zestaw rekordów: Dodawanie, aktualizowanie i usuwanie rekordów (ODBC)
Zestaw rekordów: Jak zestawy rekordów wybierz rekordy (ODBC)