CDaoRecordset::Open

Sie müssen diese Memberfunktion aufrufen, um die Datensätze für das Recordset abzurufen.

virtual void Open(
   int nOpenType = AFX_DAO_USE_DEFAULT_TYPE,
   LPCTSTR lpszSQL = NULL,
   int nOptions = 0 
);
virtual void Open(
   CDaoTableDef* pTableDef,
   int nOpenType = dbOpenTable,
   int nOptions = 0 
);
virtual void Open(
   CDaoQueryDef* pQueryDef,
   int nOpenType = dbOpenDynaset,
   int nOptions = 0 
);

Parameter

  • nOpenType
    Einer der folgenden Werte:

    • Recordset dbOpenDynaset A vom Typ Dynaset mit bidirektionalem Bildlauf.Dies ist die Standardeinstellung.

    • Recordset vom Typ Tabelle dbOpenTable A mit bidirektionalem Bildlauf.

    • Recordset dbOpenSnapshot A vom Typ Momentaufnahme mit bidirektionalem Bildlauf.

  • lpszSQL
    Ein Zeichenfolgenzeiger, der einen der folgenden enthält:

    • Ein NULL Zeiger.

    • Der Name einer oder mehrerer tabledefs und/oder Querydef (durch Trennzeichen getrennt).

    • Eine Anweisung SQL SELECT (optional mit einem SQL WHERE oder Klausel ORDERBY ).

    • Eine Pass-Through-Abfrage.

  • nOptions
    Mindestens eine der unten aufgeführten Optionen.Der Standardwert ist 0.Folgende Werte sind möglich:

    • dbAppendOnly können Sie neue Datensätze (Recordset nur vom Typ Dynaset) nur anfügen.Diese Option buchstäblich bedeutet, dass Datensätze nur angefügt werden.Die MFC-ODBC-Datenbankklassen haben eine Option Nur erweiterbar, die abgerufen werden kann und angefügt wurden die Datensätze.

    • dbForwardOnly das Recordset ist eine vorwärts Bildlaufmomentaufnahme.

    • dbSeeChanges generieren eine Ausnahme, wenn ein anderer Benutzer Daten ändern, die Sie bearbeiten.

    • dbDenyWrite, das andere Benutzer Datensätze nicht ändern oder hinzufügen können.

    • dbDenyRead andere Benutzer kann Datensätze (nur Recordset vom Typ Tabelle) nicht anzeigen.

    • dbReadOnly können Sie Datensätze nur anzeigen; andere Benutzer können sie ändern.

    • inkonsistente Updates dbInconsistent sind zulässig (Recordset nur vom Typ Dynaset).

    • konsistente Updates dbConsistent nur sind zulässig (Recordset nur vom Typ Dynaset).

    HinweisHinweis

    Die Konstanten dbConsistent und dbInconsistent schließen sich gegenseitig aus.Sie können einen der Parameter, jedoch nicht beide in einer angegebenen Instanz von Öffnen verwenden.

  • pTableDef
    Ein Zeiger auf ein Objekt CDaoTableDef.Diese Version ist nur für Recordsets vom Typ Tabellen gültig.Wenn Sie diese Option verwendet, wird der CDaoDatabase Zeiger, der verwendet wird, um CDaoRecordset zu erstellen, nicht verwendet; Sie wird die Datenbank, in der sich befindet, tabledef- verwendet.

  • pQueryDef
    Ein Zeiger auf ein Objekt CDaoQueryDef.Diese Version ist nur für und die Recordsets vom Typ Dynaset vom Typ Momentaufnahme gültig.Wenn Sie diese Option verwendet, wird der CDaoDatabase Zeiger, der verwendet wird, um CDaoRecordset zu erstellen, nicht verwendet; Sie wird die Datenbank, in der die Querydef sich befindet, verwendet.

Hinweise

Bevor Sie Öffnen aufrufen, müssen Sie das Recordset-Objekt erstellen.Dafür stehen verschiedene Möglichkeiten zur Verfügung:

  • Wenn Sie das Recordset-Objekt erstellen, führen Sie einen Zeiger auf ein Objekt, das CDaoDatabase bereits geöffnet ist.

  • Wenn Sie das Recordset-Objekt erstellen, führen Sie einen Zeiger auf einen CDaoDatabase-Objekt, das nicht geöffnet ist.Das Recordset öffnet ein CDaoDatabase-Objekt, aber es wird nicht schließen, wenn das Recordset-Objekt enthält.

  • Wenn Sie das Recordset-Objekt erstellen, führen Sie einen NULL Zeiger.Das Recordset-Objekt GetDefaultDBName ruft auf, um den Namen der Microsoft Access-MDB-Datei abzurufen, um zu öffnen.Das Recordset dann öffnet ein CDaoDatabase-Objekt und hält es geöffnet, solange das Recordset geöffnet ist.Wenn Sie Schließen auf dem Recordset aufrufen, wird das CDaoDatabase-Objekt ebenfalls geschlossen.

    HinweisHinweis

    Wenn das Recordset CDaoDatabase-Objekt öffnet, wird es die Datenquelle mit nicht exklusiven Zugriff.

Für die Version von Öffnen, die den lpszSQL-Parameter verwendet, sobald das Recordset geöffnet ist, können Sie Datensätze in einer von mehreren Methoden abrufen.Die erste Option ist, DFX-Funktionen im DoFieldExchange verfügen.Die zweite Option ist, dynamische Bindung verwendet, indem sie die GetFieldValue-Memberfunktion aufruft.Diese Optionen können in Kombination separat oder implementiert werden.Wenn sie kombiniert werden, müssen Sie in die SQL-Anweisung auf dem Aufruf von Öffnen übergeben.

Wenn Sie die zweite Version von Öffnen verwenden, wo Sie in ein Objekt übergeben, CDaoTableDef sind die resultierenden Spalten verfügbar, damit Sie über DoFieldExchange und den DFX-Mechanismus binden und/oder dynamisch zu binden GetFieldValue.

HinweisHinweis

Sie können Öffnen mithilfe eines Objekts CDaoTableDef für Recordsets vom Typ Tabellen nur aufrufen.

Wenn Sie die dritte Version von Öffnen verwenden, wo Sie CDaoQueryDef in ein Objekt übergeben, wird diese Abfrage ausgeführt, und die erhaltenen Spalten sind verfügbar, damit Sie über DoFieldExchange und den DFX-Mechanismus binden und/oder dynamisch zu binden GetFieldValue.

HinweisHinweis

Sie können Öffnen mithilfe eines Objekts CDaoQueryDef für Recordsets aufrufen und nur die vom Typ Dynaset vom Typ Momentaufnahme.

Für die erste Version von Öffnen, die den lpszSQL-Parameter verwendet, werden Datensätze auf Grundlage der Kriterien ausgewählt, die in der folgenden Tabelle.

Wert des lpszSQL-Parameters

Die ausgewählten Datensätze werden bestimmt durch

Beispiel

NULL

Die zurückgegebene Zeichenfolge durch GetDefaultSQL.

 

Eine durch Trennzeichen getrennte Liste mit einer oder mehreren tabledefs und/oder Querydefnamen.

Alle Spalten in DoFieldExchange dargestellt.

"Customer"

SELECT SpalteListe FROM TabelleListe

Die angegebenen Spalten von angegebenen tabledef- und/oder den Querydef.

"SELECT CustId, CustName

FROM Customer"

Die übliche Vorgehensweise ist, NULL zu Öffnen zu übergeben; in diesem Fall ruft ÖffnenGetDefaultSQL, eine überschreibbare - Memberfunktion auf, die Klassen-Assistent generiert, wenn es CDaoRecordset von abgeleitete Klasse erstellt.Dieser Wert gibt die Tabledef- und/oder Querydefnamen, die Sie in Klassen-Assistent angegeben haben.Sie können andere Informationen im lpszSQL-Parameter stattdessen angeben.

Was Sie auch übergeben wird, wird Öffnen Konstrukte eine abschließende SQL-Anweisung für die Abfrage (die Zeichenfolge möglicherweise ist SQL WHERE und Klauseln ORDERBY, die zu lpszSQL angefügt werden, verbinden Sie haben) auf und dann die Abfrage aus.Sie können die erstellte Zeichenfolge überprüfen, indem Sie GetSQL aufrufen, nachdem Sie Öffnen aufgerufen haben.

Die Felddatenmember der Recordset-Klasse werden den Spalten der ausgewählten Daten gebunden.Wenn eine werden Datensätze, der erste Datensatz wird der aktuelle Datensatz zurückgegeben.

Wenn Sie Optionen für das Recordset, wie einen Filter oder eine Sortierung festlegen möchten, legen Sie m_strSort oder m_strFilter fest, nachdem Sie das Recordset-Objekt konstruiert haben, aber bevor Sie Öffnen aufrufen.Wenn Sie die Datensätze im Recordset aktualisieren möchten, nachdem das Recordset bereits geöffnet ist, rufen Sie Requery auf.

Wenn Sie Öffnen auf einem Recordset oder vom Typ Dynaset vom Typ Momentaufnahme aufrufen oder, wenn die Datenquelle eine SQL-Anweisung oder tabledef- verweist, die eine umschlossene Tabelle darstellt, können Sie dbOpenTable für das Typargument nicht verwenden; Wenn Sie ausführen, MFC löst eine Ausnahme aus.Um nach gewünschtem ein Tabledef-Objekt eine umschlossene Tabelle darstellt, erstellen Sie ein CDaoTableDef-Objekt und Aufrufen ihrer GetConnect-Memberfunktion auf.

Verwenden Sie das dbSeeChanges-Flag, wenn Sie die Änderungen erfasst möchten, die von einem anderen Benutzer oder ein anderes Programm auf dem Computer vorgenommen werden, wenn Sie sind, Bearbeiten oder Löschen denselben Datensatz.Wenn beispielsweise zwei Benutzer das Bearbeiten desselben Datensatzes starten, folgt der erste Benutzer, der der Update-Memberfunktion aufzurufen.Wenn Update aus dem zweiten Benutzer aufgerufen wird, wird CDaoException ausgelöst.Auch wenn der zweite Benutzer versucht, Löschen aufzurufen, um den Datensatz zu löschen, und es ist bereits vom ersten Benutzer, CDaoException auftritt geändert.

Normalerweise werden der Benutzer dieses CDaoException beim Abrufen, Aktualisieren, muss der Code den Inhalt der Felder aktualisieren und die gerade geänderten Werte abrufen.Wenn die Ausnahme bei dem Löschen auftritt, kann der Code die Daten des neuen Datensatzes, die dem Benutzer eine Meldung anzeigen und angeben, dass die Daten vor kurzem geändert haben.An diesem Punkt kann der Code eine Bestätigung erforderlich, dass der Benutzer weiterhin den Datensatz löschen möchte.

TippTipp

Verwenden Sie die Vorwärts- Bildlaufoption (dbForwardOnly) die Leistung zu verbessern, wenn die Anwendung einen einzelnen Durchlauf durch ein Recordset macht, das aus einer ODBC-Datenquelle geöffnet ist.

Weitere Informationen finden Sie im Thema "OpenRecordset-Methode" in der DAO-Hilfe.

Anforderungen

Header: afxdao.h

Siehe auch

Referenz

CDaoRecordset-Klasse

Hierarchien-Diagramm

CDaoRecordset::Close

CDaoRecordset::CDaoRecordset