CRecordset::Open
Otwiera zestaw rekordów przez pobieranie tabeli lub wykonywanie kwerendy, która reprezentuje zestaw rekordów.
Składnia
virtual BOOL Open(
UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE,
LPCTSTR lpszSQL = NULL,
DWORD dwOptions = none
);
Parametry
nOpenType
Zaakceptuj wartość domyślną AFX_DB_USE_DEFAULT_TYPE, lub użyj jednej z następujących wartości z enum OpenType:CRecordset::dynaset zestaw rekordów z przewijania dwukierunkowy. Członkostwo i kolejność rekordów są określane, gdy zestaw rekordów jest otwarty, ale zmiany wprowadzone przez innych użytkowników do wartości danych są widoczne po operacji pobierania. Zestawy dynamiczne są również znane jako sterowanych zestawy rekordów.
CRecordset::snapshot statyczny zestaw rekordów z przewijania dwukierunkowy. Członkostwo i kolejność rekordów są ustalane po otwarciu zestawu rekordów; wartości danych są określane, gdy rekordy są pobierane. Zmiany wprowadzone przez innych użytkowników nie są widoczne, dopóki zestaw rekordów jest zamknięcia i ponownego otwarcia.
CRecordset::dynamic zestaw rekordów z przewijania dwukierunkowy. Zmiany wprowadzone przez innych użytkowników do członkostwa, zamawiania oraz dane wartości są widoczne, po operacji pobierania. Należy zauważyć, że wiele sterowników ODBC nie obsługują tego typu zestawu rekordów.
CRecordset::forwardOnly tylko do odczytu rekordów z przewijania tylko do przodu.
Dla CRecordset, wartością domyślną jest CRecordset::snapshot. Mechanizm wartość domyślna umożliwia kreatorów Visual C++ do interakcji z obu ODBC CRecordset i DAO CDaoRecordset, które mają różne ustawienia domyślne.
Aby uzyskać więcej informacji o tych typach rekordów, zobacz artykuł Zestawu rekordów (ODBC). Aby uzyskać pokrewne informacje, zobacz artykuł "Przy użyciu bloku i kursory przewijaną" w Windows SDK.
Ostrzeżenie
Jeśli żądany typ nie jest obsługiwany, w ramach zgłasza wyjątek.
lpszSQL
Wskaźnik ciąg zawierające jedną z następujących czynności:A wartości NULL wskaźnik.
Nazwa tabeli.
SQL Wybierz instrukcji (opcjonalnie z SQL gdzie lub ORDER BY klauzuli).
A CALL instrukcji, określając nazwę wstępnie zdefiniowanej kwerendy (procedura składowana). Należy zachować ostrożność, aby nie należy wstawiać spacji między nawias klamrowy i CALL słowa kluczowego.
Aby uzyskać więcej informacji na temat tego ciągu zobacz tabelę i dyskusji ClassWizard's rolę w ramach uwagi.
Uwaga
Kolejność kolumn w zestawie wyników, musi odpowiadać kolejności RFX lub wywołuje funkcję RFX luzem w swojej DoFieldExchange lub DoBulkFieldExchange funkcja zastępowania.
dwOptions
Maska bitów, które można określić kombinacji wartości wymienionych poniżej. Niektóre z nich są wzajemnie się wykluczają. Wartością domyślną jest Brak.CRecordset::none nie ustawiono opcji. Wartość tego parametru jest wzajemnie się wykluczają z innych wartości. Domyślnie zestaw rekordów mogą być aktualizowane z edytować lub usunąć i umożliwia dołączanie nowych rekordów z AddNew. Aktualizacji zależy od źródła danych, jak i nOpenType można określić opcję. Optymalizacja dla uzupełnienia luzem nie jest dostępna. Pobieranie wierszy zbiorczej nie będą realizowane. Usuniętych rekordów nie zostaną pominięte podczas nawigacji zestawu rekordów. Zakładki nie są dostępne. Automatyczne dirty pole Sprawdzanie jest zaimplementowana.
CRecordset::appendOnly nie zezwalaj na edytować lub usunąć na zestaw rekordów. Zezwalaj na AddNew tylko. Ta opcja jest wzajemnie się wykluczają z CRecordset::readOnly.
CRecordset::readOnly Otwórz zestaw rekordów jako tylko do odczytu. Ta opcja jest wzajemnie się wykluczają z CRecordset::appendOnly.
CRecordset::optimizeBulkAdd stosowana gotowa instrukcja SQL do optymalizacji, dodając wiele rekordów w jednym czasie. Stosuje się tylko wtedy, gdy nie używasz funkcji interfejsu API ODBC SQLSetPos do aktualizacji zestawu rekordów. Pierwsza aktualizacja określa pola, które jest oznaczony jako zanieczyszczony. Ta opcja jest wzajemnie się wykluczają z CRecordset::useMultiRowFetch.
CRecordset::useMultiRowFetchWdrożenie luzem wiersza pobierania zezwalająca na wiele wierszy mają być pobrane w operacji pobierania pojedynczej. Jest to zaawansowana funkcja, mające na celu poprawę wydajności; Wymiana pole rekordu luzem nie jest jednak obsługiwane przez ClassWizard. Ta opcja jest wzajemnie się wykluczają z CRecordset::optimizeBulkAdd. Należy zauważyć, że jeśli określisz CRecordset::useMultiRowFetch, następnie w opcji CRecordset::noDirtyFieldCheck zostaną automatycznie włączone z (podwójne buforowanie nie będą dostępne); na Progresywne zestawy rekordów, opcja CRecordset::useExtendedFetch zostanie włączony automatycznie. Aby uzyskać więcej informacji dotyczących pobierania wierszy zbiorczej, zobacz artykuł zestaw rekordów: pobieranie rekordów luzem (ODBC).
CRecordset::skipDeletedRecords podczas nawigacji w obiekcie recordset pominąć wszystkie usunięte rekordy. Spowoduje to spowolnienie działania w niektórych względne pobiera. Ta opcja nie jest prawidłowy w Progresywne zestawy rekordów. Jeśli zadzwonisz przenieść z nRows parametru ustawiona na 0, a CRecordset::skipDeletedRecords opcji set, przenieść będzie dochodzić. Należy zauważyć, że CRecordset::skipDeletedRecords jest podobny do pakowania sterownika, co oznacza, że usunięte wiersze są usuwane z tego zestawu rekordów. Jednak jeśli sterownik pakiety rekordy, a następnie zostanie pominięta tylko te rekordy, które należy usunąć; nie zostanie pominięta rekordów usuniętych przez innych użytkowników, gdy zestaw rekordów jest otwarty. CRecordset::skipDeletedRecords pominie wierszy usunięta przez innych użytkowników.
CRecordset::useBookmarks mogą używać zakładek w zestawie rekordów, jeśli obsługiwany. Zakładki powolne pobieranie danych, ale zwiększyć wydajność dla danych nawigacji. Nie jest prawidłowy w Progresywne zestawy rekordów. Aby uzyskać więcej informacji, zobacz artykuł zestaw rekordów: zakładki i pozycje bezwzględne (ODBC).
CRecordset::noDirtyFieldCheck wyłączyć automatyczne dirty pole Sprawdzanie (podwójne buforowanie). Poprawi to wydajność; Jednakże, należy je ręcznie oznaczyć pól jako brudne przez wywołanie SetFieldDirty i SetFieldNull funkcji elementów członkowskich.Należy zauważyć, że podwójne buforowanie w klasie CRecordset jest podobny do podwójnego buforowania w klasie CDaoRecordset. Jednakże, w CRecordset, nie można włączyć podwójnego buforowania dla poszczególnych pól; można ją włączyć dla wszystkich pól albo wyłączyć ją dla wszystkich pól. Należy zauważyć, że jeśli określono opcję CRecordset::useMultiRowFetch, następnie CRecordset::noDirtyFieldCheck zostanie włączona automatycznie; Jednakże SetFieldDirty i SetFieldNull nie można używać na zestawy rekordów, które implementuje pobieranie wiersza zbiorczego.
CRecordset::executeDirect należy używać przygotowaną instrukcję SQL. Aby poprawić wydajność, określić tę opcję, jeśli Requery funkcji składowej nigdy nie zostanie wywołana.
CRecordset::useExtendedFetch realizacji procedury SQLExtendedFetch zamiast SQLFetch. To jest przeznaczony do realizacji, pobieranie wiersza zbiorczego na Progresywne zestawy rekordów. Jeśli określono opcję CRecordset::useMultiRowFetch na rekordów, a następnie CRecordset::useExtendedFetch zostanie włączony automatycznie.
CRecordset::userAllocMultiRowBuffers użytkownik będzie przydzielić buforów pamięci masowej dla danych. Użyj tej opcji w połączeniu z CRecordset::useMultiRowFetch Jeśli chcesz przydzielić własne składowania; w przeciwnym razie ramach automatycznie przeznaczy niezbędne magazynu. Aby uzyskać więcej informacji, zobacz artykuł zestaw rekordów: pobieranie rekordów luzem (ODBC). Należy zauważyć, że określanie CRecordset::userAllocMultiRowBuffers bez określania CRecordset::useMultiRowFetch spowoduje potwierdzenia nie powiodło się.
Wartość zwracana
Różna od zera jeśli CRecordset obiektu zostało pomyślnie otwarte; w przeciwnym razie 0, jeśli CDatabase::Open (jeśli jest nazywany) zwraca wartość 0.
Uwagi
Należy wywołać funkcję tego członka do uruchamiania kwerendy zdefiniowanej przez zestaw rekordów. Przed wywołaniem funkcji Otwórz, należy tworzyć obiektu recordset.
Ten zestaw rekordów połączenie ze źródłem danych zależy od tego, jak skonstruować zestaw rekordów przed wywołaniem funkcji Otwórz. W przypadku przekazania CDatabase sprzeciw w stosunku do Konstruktora zestawu rekordów, który nie został podłączony do źródła danych używa tej funkcji członka GetDefaultConnect do próby otwarcia obiektu bazy danych. W przypadku przekazania wartości NULL do Konstruktora zestawu rekordów, konstrukcje konstruktora CDatabase obiektu dla Ciebie, i Otwórz próbuje połączyć obiekt bazy danych. Szczegółowe informacje na temat zamykania zestawu rekordów i połączenia tych różnych okolicznościach, Zamknij.
Uwaga
Dostęp do źródła danych poprzez CRecordset obiekt zawsze jest współużytkowany. W przeciwieństwie do CDaoRecordset klasy, nie można użyć CRecordset obiekt, aby otworzyć źródło danych w trybie dostępu wyłącznego.
Gdy wywołanie Otwórz, kwerendę zazwyczaj SQL Wybierz instrukcja, wybiera rekordy w oparciu o kryteria przedstawione w poniższej tabeli.
Wartość parametru lpszSQL |
Wybrane rekordy są określane przez |
Przykład |
---|---|---|
NULL |
Ciąg zwracany przez GetDefaultSQL. |
|
Nazwa SQL tabeli |
Wszystkie kolumny listy tabeli w DoFieldExchange lub DoBulkFieldExchange. |
"Customer" |
Nazwa wstępnie zdefiniowanej kwerendy (procedura składowana) |
Kolumny, które zdefiniowano zapytanie zwraca. |
"{call OverDueAccts}" |
Wybierz listy kolumn FROM listy tabeli |
Określonych kolumn z określonych tabel. |
"SELECT CustId, CustName FROM Customer" |
Ostrzeżenie
Należy zachować ostrożność, aby nie należy wstawiać dodatkowe spacje w ciągu SQL. Na przykład po wstawieniu spacji między nawias klamrowy i CALL słowa kluczowego, MFC będzie błędnie interpretuje ciąg SQL jako nazwę tabeli i dołączyć go do Wybierz instrukcję, która spowoduje wyjątek. Podobnie, jeśli wstępnie zdefiniowanej kwerendy używa parametru wyjściowego, nie należy wstawiać spacji między nawias klamrowy a '?' symbol. Wreszcie, nie należy umieszczać spacji przed nawias klamrowy w CALL instrukcji lub przed Wybierz słowa kluczowego w Wybierz instrukcji.
Regułą jest, aby przekazać wartości NULL do Otwórz; w tym przypadku Otwórz wywołania GetDefaultSQL. Jeśli używasz pochodnego CRecordset klasy, GetDefaultSQL daje nazwy tabel określonych w ClassWizard. Zamiast tego można określić inne informacje w lpszSQL parametru.
Co możesz przejść, Otwórz konstrukcje końcowego ciąg SQL dla kwerendy (ciąg może być SQL gdzie i ORDER BY klauzule dołączane do lpszSQL ciąg zostanie przekazany), a następnie wykonuje kwerendę. Ciąg konstruowanej można zbadać poprzez wywołanie GetSQL po wywołaniu Otwórz. Aby uzyskać dodatkowe szczegóły dotyczące sposobu zestaw rekordów konstrukcje instrukcji SQL i wybiera rekordy, zobacz artykuł zestaw rekordów: jak zestawy rekordów wybierz rekordy (ODBC).
Członkowie danych pole klasy zestaw rekordów są powiązane z kolumny wybranych danych. Zwracane są wszystkie rekordy, pierwszy rekord staje się bieżącym rekordzie.
Jeśli chcesz ustawić opcje dla rekordów, takie jak filtrowanie lub sortowanie, określić po konstruowania obiektu recordset, ale przed wywołaniem Otwórz. Aby odświeżyć rekordy w zestawie rekordów po zestawie rekordów jest już otwarty, call Requery.
Aby uzyskać więcej informacji, w tym dodatkowe przykłady, zobacz artykuły Zestawu rekordów (ODBC), zestaw rekordów: jak zestawy rekordów wybierz rekordy (ODBC), i zestaw rekordów: tworzenie i zamykanie zestawy rekordów (ODBC).
Wyjątki
Exception
Condition
Tej metody można generują wyjątki typu CDBException * i CMemoryException*.
Przykład
Następujące przykłady kodu przedstawiają różne formy Otwórz zadzwonić.
// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived
// objects
// Open rs using the default SQL statement, implement bookmarks, and turn
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks |
CRecordset::noDirtyFieldCheck);
// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));
// Accept all defaults
rsDefault.Open();
Wymagania
Nagłówek: afxdb.h
Zobacz też
Klasa CRecordset
Diagram hierarchii
CRecordset::CRecordset
CRecordset::Close
CRecordset::GetDefaultSQL
CRecordset::GetSQL
CRecordset::m_strFilter
CRecordset::m_strSort
CRecordset::Requery