Udostępnij za pośrednictwem


CRecordset::Open

Otwiera zestaw rekordów przez pobieranie tabeli lub wykonywanie kwerendy, która reprezentuje zestaw rekordów.

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 rekordów z przewijania dwukierunkowa.Członkostwa i porządkowanie rekordów są określane podczas otwarcia zestawu rekordów, ale zmiany wprowadzone przez innych użytkowników do wartości danych są widoczne, po operacji pobierania.Zestawy dynamiczne są również nazywane zestawami rekordów kursora.

    • CRecordset::snapshot statycznych rekordów z przewijania dwukierunkowa.Członkostwa i porządkowanie rekordów są określane podczas otwierania 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ęciu i ponownym otwarciu.

    • CRecordset::dynamic rekordów z przewijania dwukierunkowa.Zmiany wprowadzone przez innych użytkowników do członkostwa, porządkowanie i dane wartości są widoczne, po operacji pobierania.Uwaga wiele sterowników ODBC nie obsługują ten typ zestawu rekordów.

    • CRecordset::forwardOnly tylko do odczytu zestawu rekordów z przewijanie tylko do przodu.

      Dla CRecordset, wartością domyślną jest CRecordset::snapshot.Mechanizm wartość domyślna pozwala 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 na temat tych typów rekordów, zobacz artykuł Zestaw rekordów (ODBC).Pokrewne informacje, zobacz artykuł "Przy użyciu bloku i przewijana kursorów" w Windows SDK.

    Informacje dotyczące przestrogiPrzestroga

    Jeśli żądany typ nie jest obsługiwana, w ramach zgłasza wyjątek.

  • lpszSQL
    Wskaźnik ciąg zawierający jeden z następujących:

    • A NULL wskaźnik.

    • Nazwa tabeli.

    • SQL Zaznacz instrukcji (opcjonalnie z SQL gdzie lub ORDER BY klauzuli).

    • A WYWOŁANIA oświadczenie określające nazwę wstępnie zdefiniowanej kwerendy (procedury przechowywane).Należy zachować ostrożność, nie należy wstawiać spacji między nawias klamrowy i WYWOŁANIA słowa kluczowego.

    Aby uzyskać więcej informacji na temat tego ciągu zobacz tabelę i roli ClassWizard na mocy uwagi dyskusji.

    [!UWAGA]

    Kolejność kolumn w zestawie wyników, musi odpowiadać kolejności RFX lub wywołuje funkcję RFX luzem w sieci DoFieldExchange lub DoBulkFieldExchange działać override.

  • dwOptions
    Maski, w którym 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 zestaw opcji.Wartość tego parametru jest wzajemnie z innych wartości.Domyślnie, można zaktualizować zestaw rekordów z Edytuj lub usunąć i umożliwia dołączanie nowych rekordów z AddNew.Aktualizacji zależy od źródła danych, jak również na nOpenType można określić opcji.Optymalizacja dla uzupełnienia luzem nie jest dostępna.Pobieranie wierszy luzem nie będą zaimplementowane.Usunięte rekordy nie zostaną pominięte podczas nawigacji zestawu rekordów.Zakładki nie są dostępne.Pole dirty automatyczne sprawdzanie jest zaimplementowana.

    • CRecordset::appendOnly nie zezwalaj na Edytuj lub usunąć na zestawie rekordów.Zezwalaj na AddNew tylko.Ta opcja jest wzajemnie z CRecordset::readOnly.

    • CRecordset::readOnly Otwórz recordset jako tylko do odczytu.Ta opcja jest wzajemnie z CRecordset::appendOnly.

    • CRecordset::optimizeBulkAdd umożliwia optymalizowanie dodawania wielu rekordów jednocześnie przygotowanych instrukcji SQL.Stosuje się tylko, jeśli nie używasz funkcji interfejsu API ODBC SQLSetPos do aktualizacji rekordów.Pierwsza aktualizacja określa pola, które są oznaczone dirty.Ta opcja jest wzajemnie z CRecordset::useMultiRowFetch.

    • CRecordset::useMultiRowFetchWdrożenie luzem wiersz pobieranie umożliwia wielu wierszy do pobrania w operacji pobierania pojedynczej.Jest to zaawansowana funkcja, mające na celu poprawę wydajności; luzem w polu rekordu exchange nie jest jednak obsługiwane przez ClassWizard.Ta opcja jest wzajemnie z CRecordset::optimizeBulkAdd.Należy zauważyć, że jeśli określisz CRecordset::useMultiRowFetch, następnie opcję CRecordset::noDirtyFieldCheck zostanie włączony automatycznie (podwójne buforowanie nie będą dostępne); na tylko zestawy rekordów, opcja CRecordset::useExtendedFetch zostanie włączony automatycznie.Aby uzyskać więcej informacji na temat Pobieranie wiersza luzem, zobacz artykuł rekordów: pobieranie rekordów luzem (ODBC).

    • CRecordset::skipDeletedRecords Pomiń wszystkie rekordy usunięte podczas nawigowania w zestawie rekordów.Spowoduje to spowolnienie działania w niektórych względne pobiera.Ta opcja nie jest prawidłowy w zestawy rekordów tylko do przodu.Jeśli zadzwonisz przenieść z nRows parametru ustawiona na 0 i CRecordset::skipDeletedRecords zestaw opcji przenieść będzie potwierdzenia.Należy zauważyć, że CRecordset::skipDeletedRecords jest podobny do dostawy sterownika, co oznacza, że usunięte wiersze są usuwane z zestawu rekordów.Jednakże jeśli sterownik pakiety rekordów, następnie ją pominie tylko te rekordy, które można usunąć; nie będzie to pominąć rekordy usunięte przez innych użytkowników, gdy zestaw rekordów jest otwarty.CRecordset::skipDeletedRecords pominie wierszy usunięte przez innych użytkowników.

    • CRecordset::useBookmarks może używać zakładek na zestawie rekordów, jeśli obsługiwany.Zakładki powolne pobieranie danych, ale zwiększyć wydajność dla danych nawigacji.Nie jest prawidłowy w zestawy rekordów tylko do przodu.Aby uzyskać więcej informacji, zobacz artykuł 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, musisz ręcznie oznaczyć pól jak dirty, wywołując SetFieldDirty i SetFieldNull funkcji elementów członkowskich.Należy zauważyć, że podwójne buforowanie w klasie CRecordset jest podobna do podwójnego buforowania w klasie CDaoRecordset.Jednakże w CRecordset, nie można włączyć buforowanie podwójne na poszczególnych pól; Możesz ją włączyć dla wszystkich pól albo wyłączyć go dla wszystkich pól.Należy zauważyć, że jeżeli określono opcję CRecordset::useMultiRowFetch, następnie CRecordset::noDirtyFieldCheck zostanie włączony automatycznie. Jednakże SetFieldDirty i SetFieldNull nie można używać na zestawy rekordów, który implementuje pobieranie wiersza luzem.

    • CRecordset::executeDirect należy używać przygotowanych instrukcji SQL.Wydajność, określić tę opcję, jeśli Requery Członkowskich funkcja nigdy nie będzie wywoływana.

    • CRecordset::useExtendedFetch wdrożenie SQLExtendedFetch zamiast SQLFetch.To jest przeznaczony do wykonywania masowych wiersz pobieranie na tylko zestawy rekordów.Jeżeli określono opcję CRecordset::useMultiRowFetch na rekordów, następnie CRecordset::useExtendedFetch zostanie włączony automatycznie.

    • CRecordset::userAllocMultiRowBuffers użytkownik przydzieli buforów magazynu danych.Opcja ta w połączeniu z CRecordset::useMultiRowFetch , jeśli chcesz przydzielić magazynie; w przeciwnym razie ramach automatycznie przydzielić niezbędne magazynu.Aby uzyskać więcej informacji, zobacz artykuł 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

Jeżeli niezerową CRecordset obiekt został pomyślnie otwarty; w przeciwnym razie 0, jeśli CDatabase::Open (jeśli jest to nazywane) zwraca wartość 0.

Uwagi

Trzeba wywołać tę funkcję Członkowskich, aby uruchomić kwerendę zdefiniowany przez zestaw rekordów.Przed wywoływaniem Otwórz, należy utworzyć obiektu recordset.

Ten zestaw rekordów połączenie ze źródłem danych zależy od sposobu konstruowania zestawu rekordów przed wywoływaniem Otwórz.Jeśli przekaże CDatabase obiektu konstruktora zestawu rekordów, który nie został podłączony do źródła danych, to funkcja Członkowskie używa GetDefaultConnect , aby otworzyć obiekt bazy danych.Jeśli przekaże NULL do konstruktora rekordów konstrukcje konstruktora CDatabase obiektu, i Otwórz próbuje się połączyć obiekt bazy danych.Szczegółowe informacje na temat zamykania zestaw rekordów i połączenia w tych okolicznościach różnym zobacz Zamknij.

[!UWAGA]

Dostęp do źródła danych poprzez CRecordset obiekt zawsze jest udostępniony.W odróżnieniu od CDaoRecordset klasy, nie można użyć CRecordset obiekt, aby otworzyć dostępu wyłącznego źródła danych.

Po wywołaniu Otwórz, kwerendy, zwykle w SQL Zaznacz instrukcja, wybiera rekordy w oparciu o kryteria przedstawione w poniższej tabeli.

Wartość parametru lpszSQL

Wybrane rekordy są określane przez

Przykład

WARTOŚĆ NULL

Ciąg zwracany przez GetDefaultSQL.

 

Nazwa tabeli SQL

Wszystkie kolumny listy w tabeli DoFieldExchange lub DoBulkFieldExchange.

"Customer"

Nazwa wstępnie zdefiniowanej kwerendy (procedury przechowywane)

Kolumny zdefiniowane kwerendy, aby powrócić.

"{call OverDueAccts}"

Wybierz kolumny listy od lista tabel

Określonej kolumny z określonych tabel.

"SELECT CustId, CustName FROM

Customer"

Informacje dotyczące przestrogiPrzestroga

Uważaj, aby nie wstawiać dodatkowych odstępów w ciągu SQL.Na przykład wstawić odstęp między nawias klamrowy i WYWOŁANIA kluczowe MFC będzie postrzeganego ciąg SQL jako nazwę tabeli i dołączyć go do Zaznacz instrukcja, która spowoduje wyjątek jest.Podobnie, jeśli wstępnie zdefiniowane kwerenda używa parametru wyjściowego, należy wstawiać odstępy między nawias klamrowy i '?' symbol.Wreszcie, nie należy wstawić odstęp przed nawias klamrowy w WYWOŁANIA instrukcji lub przed Zaznacz słowa kluczowego w Zaznacz instrukcji.

Jest przekazanie zwykłą procedurę NULL do Otwórz; w przypadku Otwórz wywołania GetDefaultSQL.Jeśli używasz pochodnych CRecordset klasy GetDefualtSQL daje nazwy tabel określonych w ClassWizard.Zamiast tego można określić inne informacje w lpszSQL parametru.

Niezależnie od przekazuje, Otwórz konstrukcje końcowego ciąg SQL dla kwerendy (ciąg może być SQL gdzie i ORDER BY klauzul dołączane do lpszSQL ciąg zostanie przekazany), a następnie wykonuje kwerendę.Można zbadać ciąg zbudowane przez wywołanie GetSQL po wywołaniu Otwórz.Aby dodatkowe szczegóły dotyczące sposobu rekordów tworzy instrukcję SQL i wybiera rekordy, zobacz artykuł rekordów: jak zestawy rekordów wybierz rekordy (ODBC).

Pole danych członków klasy rekordów są powiązane z kolumn danych zaznaczone.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śl te po konstruowania obiektu recordset, ale przed wywołaniem Otwórz.Jeśli chcesz odświeżyć rekordów w zestawie rekordów po zestawie rekordów jest już otwarty, call Requery.

Aby uzyskać więcej informacji, łącznie z przykładami, zobacz artykuły Zestaw rekordów (ODBC), rekordów: jak zestawy rekordów wybierz rekordy (ODBC), i rekordów: tworzenie i zamykanie zestawy rekordów (ODBC).

Wyjątki

Tej metody można zgłosić wyjątków typu CDBException * i CMemoryException*.

Przykład

Następujące przykłady kodu przedstawiają różne formy Otwórz wywołania.

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

Informacje

Klasa CRecordset

Wykres hierarchii

CRecordset::CRecordset

CRecordset::Close

CRecordset::GetDefaultSQL

CRecordset::GetSQL

CRecordset::m_strFilter

CRecordset::m_strSort

CRecordset::Requery