CDaoRecordset-Klasse

Stellt eine Gruppe von Datensätzen dar, die aus einer Datenquelle ausgewählt wurden.

Hinweis

Das Datenzugriffsobjekt (Data Access Object, DAO) wird über Office 2013 unterstützt. DAO 3.6 ist die endgültige Version und veraltet.

Syntax

class CDaoRecordset : public CObject

Member

Öffentliche Konstruktoren

Name Beschreibung
CDaoRecordset::CDaoRecordset Erstellt ein CDaoRecordset-Objekt.

Öffentliche Methoden

Name Beschreibung
CDaoRecordset::AddNew Bereitet sich auf das Hinzufügen eines neuen Datensatzes vor. Rufen Sie "Update" auf, um die Ergänzung abzuschließen.
CDaoRecordset::CanAppend Gibt "nonzero" zurück, wenn dem Recordset neue Datensätze über die AddNew-Memberfunktion hinzugefügt werden können.
CDaoRecordset::CanBookmark Gibt "nonzero" zurück, wenn das Recordset Lesezeichen unterstützt.
CDaoRecordset::CancelUpdate Bricht alle ausstehenden Updates aufgrund eines Bearbeitungs - oder AddNew-Vorgangs ab.
CDaoRecordset::CanRestart Gibt "nonzero" zurück, wenn Requery aufgerufen werden kann, um die Abfrage des Recordsets erneut auszuführen.
CDaoRecordset::CanScroll Gibt nonzero zurück, wenn Sie durch die Datensätze scrollen können.
CDaoRecordset::CanTransact Gibt "nonzero" zurück, wenn die Datenquelle Transaktionen unterstützt.
CDaoRecordset::CanUpdate Gibt "nonzero" zurück, wenn das Recordset aktualisiert werden kann (Sie können Datensätze hinzufügen, aktualisieren oder löschen).
CDaoRecordset::Close Schließt das Recordset.
CDaoRecordset::D elete Löscht den aktuellen Datensatz aus dem Recordset. Sie müssen nach dem Löschen explizit zu einem anderen Datensatz scrollen.
CDaoRecordset::D oFieldExchange Wird aufgerufen, um Daten (in beide Richtungen) zwischen den Felddatenelementen des Recordsets und dem entsprechenden Datensatz in der Datenquelle auszutauschen. Implementiert DEN DAO-Datensatzfeldaustausch (DFX).
CDaoRecordset::Edit Bereitet die Änderungen am aktuellen Datensatz vor. Rufen Sie Update auf, um die Bearbeitung abzuschließen.
CDaoRecordset::FillCache Füllt den gesamten oder einen Teil eines lokalen Caches für ein Recordsetobjekt aus, das Daten aus einer ODBC-Datenquelle enthält.
CDaoRecordset::Find Sucht den ersten, nächsten, vorherigen oder letzten Speicherort einer bestimmten Zeichenfolge in einem Recordset vom Typ Dynaset, der den angegebenen Kriterien entspricht, und macht diesen Datensatz zum aktuellen Datensatz.
CDaoRecordset::FindFirst Sucht den ersten Datensatz in einem Recordset vom Typ "dynaset" oder "snapshot", der den angegebenen Kriterien entspricht, und macht diesen Datensatz zum aktuellen Datensatz.
CDaoRecordset::FindLast Sucht den letzten Datensatz in einem Recordset vom Typ "dynaset" oder "snapshot", der den angegebenen Kriterien entspricht, und macht diesen Datensatz zum aktuellen Datensatz.
CDaoRecordset::FindNext Sucht den nächsten Datensatz in einem Recordset vom Typ "dynaset" oder "snapshot", der den angegebenen Kriterien entspricht, und macht diesen Datensatz zum aktuellen Datensatz.
CDaoRecordset::FindPrev Sucht den vorherigen Datensatz in einem Recordset vom Typ "dynaset" oder "snapshot", das den angegebenen Kriterien entspricht, und macht diesen Datensatz zum aktuellen Datensatz.
CDaoRecordset::GetAbsolutePosition Gibt die Datensatznummer des aktuellen Datensatzes eines Recordset-Objekts zurück.
CDaoRecordset::GetBookmark Gibt einen Wert zurück, der die Textmarke eines Datensatzes darstellt.
CDaoRecordset::GetCacheSize Gibt einen Wert zurück, der die Anzahl der Datensätze in einem Recordset vom Typ Dynaset angibt, die Daten enthalten, die aus einer ODBC-Datenquelle lokal zwischengespeichert werden sollen.
CDaoRecordset::GetCacheStart Gibt einen Wert zurück, der die Textmarke des ersten Datensatzes im Recordset angibt, der zwischengespeichert werden soll.
CDaoRecordset::GetCurrentIndex Gibt einen CString Wert zurück, der den Namen des Indexes enthält, der zuletzt für einen indizierten Tabellentyp CDaoRecordsetverwendet wird.
CDaoRecordset::GetDateCreated Gibt das Datum und die Uhrzeit der Basistabelle zurück, die einem CDaoRecordset Objekt zugrunde liegt.
CDaoRecordset::GetDateLastUpdated Gibt das Datum und die Uhrzeit der letzten Änderung zurück, die am Entwurf einer Basistabelle vorgenommen wurde, die einem CDaoRecordset Objekt zugrunde liegt.
CDaoRecordset::GetDefaultDBName Gibt den Namen der Standarddatenquelle zurück.
CDaoRecordset::GetDefaultSQL Wird aufgerufen, um die sql-Standardzeichenfolge abzurufen, die ausgeführt werden soll.
CDaoRecordset::GetEditMode Gibt einen Wert zurück, der den Bearbeitungsstatus für den aktuellen Datensatz angibt.
CDaoRecordset::GetFieldCount Gibt einen Wert zurück, der die Anzahl der Felder in einem Recordset darstellt.
CDaoRecordset::GetFieldInfo Gibt bestimmte Arten von Informationen zu den Feldern im Recordset zurück.
CDaoRecordset::GetFieldValue Gibt den Wert eines Felds in einem Recordset zurück.
CDaoRecordset::GetIndexCount Ruft die Anzahl der Indizes in einer Tabelle ab, die einem Recordset zugrunde liegt.
CDaoRecordset::GetIndexInfo Gibt verschiedene Arten von Informationen zu einem Index zurück.
CDaoRecordset::GetLastModifiedBookmark Wird verwendet, um den zuletzt hinzugefügten oder aktualisierten Datensatz zu ermitteln.
CDaoRecordset::GetLockingMode Gibt einen Wert zurück, der den Typ der Sperre angibt, die während der Bearbeitung wirksam ist.
CDaoRecordset::GetName Gibt einen CString Wert zurück, der den Namen des Recordsets enthält.
CDaoRecordset::GetParamValue Ruft den aktuellen Wert des angegebenen Parameters ab, der im zugrunde liegenden DAOParameter -Objekt gespeichert ist.
CDaoRecordset::GetPercentPosition Gibt die Position des aktuellen Datensatzes als Prozentsatz der Gesamtzahl der Datensätze zurück.
CDaoRecordset::GetRecordCount Gibt die Anzahl der Datensätze zurück, auf die in einem Recordset -Objekt zugegriffen wird.
CDaoRecordset::GetSQL Ruft die SQL-Zeichenfolge ab, die zum Auswählen von Datensätzen für das Recordset verwendet wird.
CDaoRecordset::GetType Wird aufgerufen, um den Typ eines Recordsets zu bestimmen: Table-Type, dynaset-type, or snapshot-type.
CDaoRecordset::GetValidationRule Gibt einen CString Wert zurück, der daten überprüft, während er in ein Feld eingegeben wird.
CDaoRecordset::GetValidationText Ruft den Text ab, der angezeigt wird, wenn eine Gültigkeitsprüfungsregel nicht erfüllt ist.
CDaoRecordset::IsBOF Gibt "nonzero" zurück, wenn das Recordset vor dem ersten Datensatz positioniert wurde. Es gibt keinen aktuellen Datensatz.
CDaoRecordset::IsDeleted Gibt "nonzero" zurück, wenn das Recordset in einem gelöschten Datensatz positioniert ist.
CDaoRecordset::IsEOF Gibt "nonzero" zurück, wenn das Recordset nach dem letzten Datensatz positioniert wurde. Es gibt keinen aktuellen Datensatz.
CDaoRecordset::IsFieldDirty Gibt "nonzero" zurück, wenn das angegebene Feld im aktuellen Datensatz geändert wurde.
CDaoRecordset::IsFieldNull Gibt "nonzero" zurück, wenn das angegebene Feld im aktuellen Datensatz Null ist (ohne Wert).
CDaoRecordset::IsFieldNullable Gibt "nonzero" zurück, wenn das angegebene Feld im aktuellen Datensatz auf Null festgelegt werden kann (ohne Wert).
CDaoRecordset::IsOpen Gibt "nonzero" zurück, wenn Open zuvor aufgerufen wurde.
CDaoRecordset::Move Positioniert das Recordset in eine angegebene Anzahl von Datensätzen aus dem aktuellen Datensatz in beide Richtungen.
CDaoRecordset::MoveFirst Positioniert den aktuellen Datensatz für den ersten Datensatz im Recordset.
CDaoRecordset::MoveLast Positioniert den aktuellen Datensatz am letzten Datensatz im Recordset.
CDaoRecordset::MoveNext Positioniert den aktuellen Datensatz im nächsten Datensatz im Recordset.
CDaoRecordset::MovePrev Positioniert den aktuellen Datensatz im vorherigen Datensatz im Recordset.
CDaoRecordset::Open Erstellt ein neues Recordset aus einer Tabelle, einem Dynaset oder einer Momentaufnahme.
CDaoRecordset::Requery Führt die Abfrage des Recordsets erneut aus, um die ausgewählten Datensätze zu aktualisieren.
CDaoRecordset::Seek Sucht den Datensatz in einem indizierten Recordsetobjekt vom Typ Tabelle, das den angegebenen Kriterien für den aktuellen Index entspricht und diesen Datensatz zum aktuellen Datensatz macht.
CDaoRecordset::SetAbsolutePosition Legt die Datensatznummer des aktuellen Datensatzes eines Recordsetobjekts fest.
CDaoRecordset::SetBookmark Positioniert das Recordset auf einem Datensatz, der die angegebene Textmarke enthält.
CDaoRecordset::SetCacheSize Legt einen Wert fest, der die Anzahl von Datensätzen in einem Recordset vom Typ Dynaset angibt, das Daten enthält, die lokal aus einer ODBC-Datenquelle zwischengespeichert werden sollen.
CDaoRecordset::SetCacheStart Legt einen Wert fest, der die Textmarke des ersten Datensatzes im Recordset angibt, der zwischengespeichert werden soll.
CDaoRecordset::SetCurrentIndex Wird aufgerufen, um einen Index für ein Recordset vom Typ Tabelle festzulegen.
CDaoRecordset::SetFieldDirty Markiert das angegebene Feld im aktuellen Datensatz als geändert.
CDaoRecordset::SetFieldNull Legt den Wert des angegebenen Felds im aktuellen Datensatz auf Null fest (ohne Wert).
CDaoRecordset::SetFieldValue Legt den Wert eines Felds in einem Recordset fest.
CDaoRecordset::SetFieldValueNull Legt den Wert eines Felds in einem Recordset auf Null fest. (ohne Wert).
CDaoRecordset::SetLockingMode Legt einen Wert fest, der den Sperrtyp angibt, der während der Bearbeitung wirksam werden soll.
CDaoRecordset::SetParamValue Legt den aktuellen Wert des angegebenen Parameters fest, der im zugrunde liegenden DAOParameter-Objekt gespeichert ist.
CDaoRecordset::SetParamValueNull Legt den aktuellen Wert des angegebenen Parameters auf Null fest (ohne Wert).
CDaoRecordset::SetPercentPosition Legt die Position des aktuellen Datensatzes auf eine Position fest, die einem Prozentsatz der Gesamtzahl der Datensätze in einem Recordset entspricht.
CDaoRecordset::Update Schließt einen AddNew Vorgang Edit ab, indem die neuen oder bearbeiteten Daten in der Datenquelle gespeichert werden.

Öffentliche Datenmember

Name Beschreibung
CDaoRecordset::m_bCheckCacheForDirtyFields Enthält ein Kennzeichen, das angibt, ob Felder automatisch als geändert markiert werden.
CDaoRecordset::m_nFields Enthält die Anzahl der Felddatenmember in der Recordsetklasse und die Anzahl der Spalten, die vom Recordset aus der Datenquelle ausgewählt wurden.
CDaoRecordset::m_nParams Enthält die Anzahl der Parameterdatenelemente in der Recordsetklasse – die Anzahl der Parameter, die mit der Abfrage des Recordsets übergeben werden.
CDaoRecordset::m_pDAORecordset Ein Zeiger auf die DAO-Schnittstelle, die dem Recordsetobjekt zugrunde liegt.
CDaoRecordset::m_pDatabase Quelldatenbank für diesen Resultset. Enthält einen Zeiger auf ein CDaoDatabase -Objekt.
CDaoRecordset::m_strFilter Enthält eine Zeichenfolge, die zum Erstellen einer SQL WHERE-Anweisung verwendet wird.
CDaoRecordset::m_strSort Enthält eine Zeichenfolge, die zum Erstellen einer SQL ORDER BY -Anweisung verwendet wird.

Hinweise

Als "Recordsets" bezeichnete CDaoRecordset Objekte stehen in den folgenden drei Formen zur Verfügung:

  • Recordsets vom Typ "Tabelle" stellen eine Basistabelle dar, die Sie zum Untersuchen, Hinzufügen, Ändern oder Löschen von Datensätzen aus einer einzelnen Datenbanktabelle verwenden können.

  • Recordsets vom Typ "Dynaset" sind das Ergebnis einer Abfrage, die aktualisierbare Datensätze enthalten kann. Diese Recordsets sind eine Reihe von Datensätzen, mit denen Sie Datensätze aus einer zugrunde liegenden Datenbanktabelle oder -tabellen untersuchen, hinzufügen, ändern oder löschen können. Recordsets vom Typ "Dynaset" können Felder aus einer oder mehreren Tabellen in einer Datenbank enthalten.

  • Recordsets vom Typ Snapshot sind eine statische Kopie einer Gruppe von Datensätzen, die Sie verwenden können, um Daten zu suchen oder Berichte zu generieren. Diese Recordsets können Felder aus einer oder mehreren Tabellen in einer Datenbank enthalten, aber nicht aktualisiert werden.

Jede Form des Recordsets stellt eine Gruppe von Datensätzen dar, die zum Zeitpunkt des Öffnens des Recordsets festgelegt wurden. Wenn Sie einen Bildlauf zu einem Datensatz in einem Recordset vom Typ "Tabelle" oder einem Recordset vom Typ "dynaset" durchführen, werden Änderungen am Datensatz angezeigt, die nach dem Öffnen des Recordsets entweder von anderen Benutzern oder von anderen Recordsets in Ihrer Anwendung vorgenommen wurden. (Ein Recordset vom Typ "Snapshot" kann nicht aktualisiert werden.) Sie können eine anwendungsspezifische Recordset-Klasse direkt verwenden CDaoRecordset oder von CDaoRecordsetdieser ableiten. Anschließend können Sie folgende Aktionen ausführen:

  • Scrollen Sie durch die Datensätze.

  • Legen Sie einen Index fest, und suchen Sie schnell nach Datensätzen mithilfe von Seek (nur Recordsets vom Typ Tabelle).

  • Suchen Sie Datensätze basierend auf einem Zeichenfolgenvergleich: "<", "<=", "=", ">=" oder ">" (dynaset-type and snapshot-type recordsets).

  • Aktualisieren Sie die Datensätze, und geben Sie einen Sperrmodus an (mit Ausnahme von Recordsets vom Typ Snapshot).

  • Filtern Sie das Recordset, um zu beschränken, welche Datensätze sie aus den Datensätzen einschränken, die in der Datenquelle verfügbar sind.

  • Sortieren Sie das Recordset.

  • Parametrisieren Sie das Recordset, um die Auswahl mit Informationen anzupassen, die erst zur Laufzeit bekannt sind.

Klasse CDaoRecordset stellt eine Schnittstelle bereit, die der Klasse CRecordsetähnelt. Der Hauptunterschied besteht darin, dass die Klasse CDaoRecordset auf Daten über ein Datenzugriffsobjekt (Data Access Object, DAO) basierend auf OLE zugreift. Die Klasse CRecordset greift über Open Database Connectivity (ODBC) und einen ODBC-Treiber für dieses DBMS auf dbMS zu.

Hinweis

Die DAO-Datenbankklassen unterscheiden sich von den MFC-Datenbankklassen basierend auf Open Database Connectivity (ODBC). Alle DAO-Datenbankklassennamen weisen das Präfix "CDao" auf. Sie können weiterhin auf ODBC-Datenquellen mit den DAO-Klassen zugreifen. Die DAO-Klassen bieten im Allgemeinen überlegene Funktionen, da sie spezifisch für das Microsoft Jet-Datenbankmodul sind.

Sie können eine Klasse entweder direkt verwenden CDaoRecordset oder von CDaoRecordsetdieser ableiten. Wenn Sie eine Recordset-Klasse in beiden Fällen verwenden möchten, öffnen Sie eine Datenbank, und erstellen Sie ein Recordset-Objekt, und übergeben Sie den Konstruktor über einen Zeiger auf das CDaoDatabase Objekt. Sie können auch ein CDaoRecordset Objekt erstellen und MFC das Erstellen eines temporären CDaoDatabase Objekts für Sie ermöglichen. Rufen Sie dann die Open-Memberfunktion des Recordsets auf, und geben Sie an, ob es sich bei dem Objekt um ein Recordset vom Typ "tabelle", ein Recordset vom Typ "dynaset" oder ein Recordset vom Typ "Snapshot" handelt. Durch Aufrufen Open werden Daten aus der Datenbank ausgewählt und der erste Datensatz abgerufen.

Verwenden Sie die Memberfunktionen und Datenmember des Objekts, um durch die Datensätze zu scrollen und sie zu bearbeiten. Die verfügbaren Vorgänge hängen davon ab, ob es sich bei dem Objekt um ein Recordset vom Typ "table", ein Recordset vom Typ "dynaset" oder ein Recordset vom Typ "Snapshot" handelt und ob es sich um ein aktualisierbares oder schreibgeschütztes Objekt handelt. Dies hängt von der Funktion der Datenbank oder der ODBC-Datenquelle (Open Database Connectivity) ab. Um Datensätze zu aktualisieren, die seit dem Open Aufruf möglicherweise geändert oder hinzugefügt wurden, rufen Sie die Requery-Memberfunktion des Objekts auf. Rufen Sie die Memberfunktion des Close Objekts auf, und zerstören Sie das Objekt, wenn Sie damit fertig sind.

CDaoRecordset verwendet DAO-Datensatzfeldaustausch (DFX), um das Lesen und Aktualisieren von Datensatzfeldern über typsichere C++-Member Ihrer CDaoRecordset oder CDaoRecordsetabgeleiteten Klasse zu unterstützen. Sie können auch dynamische Bindung von Spalten in einer Datenbank implementieren, ohne den DFX-Mechanismus mit GetFieldValue und SetFieldValue zu verwenden.

Verwandte Informationen finden Sie im Thema "Recordset-Objekt" in der DAO-Hilfe.

Vererbungshierarchie

CObject

CDaoRecordset

Anforderungen

Header: afxdao.h

CDaoRecordset::AddNew

Rufen Sie diese Memberfunktion auf, um einem Recordset vom Typ Tabelle oder Dynaset einen neuen Datensatz hinzuzufügen.

virtual void AddNew();

Hinweise

Die Felder des Datensatzes sind anfangs Null. (In der Datenbankterminologie bedeutet Null "keinen Wert" und ist nicht mit NULL in C++ identisch.) Um den Vorgang abzuschließen, müssen Sie die Update-Memberfunktion aufrufen. Update speichert Ihre Änderungen an der Datenquelle.

Achtung

Wenn Sie einen Datensatz bearbeiten und dann ohne Aufruf Updatezu einem anderen Datensatz scrollen, gehen Die Änderungen ohne Warnung verloren.

Wenn Sie einem Recordset vom Typ "dynaset" einen Datensatz hinzufügen, indem Sie AddNew aufrufen, wird der Datensatz im Recordset sichtbar und in der zugrunde liegenden Tabelle enthalten, in der er für alle neuen CDaoRecordset Objekte sichtbar wird.

Die Position des neuen Datensatzes hängt vom Typ des Recordsets ab:

  • In einem Recordset vom Typ Dynaset, bei dem der neue Datensatz eingefügt wird, ist nicht garantiert. Dieses Verhalten änderte sich mit Microsoft Jet 3.0 aus Gründen der Leistung und Parallelität. Wenn Sie den neu hinzugefügten Datensatz zum aktuellen Datensatz machen möchten, rufen Sie die Textmarke des letzten geänderten Datensatzes ab, und wechseln Sie zu dieser Textmarke:
rs.SetBookmark(rs.GetLastModifiedBookmark());
  • In einem Tabellentyp-Recordset, für das ein Index angegeben wurde, werden Datensätze an ihrer richtigen Stelle in der Sortierreihenfolge zurückgegeben. Wenn kein Index angegeben wurde, werden neue Datensätze am Ende des Recordsets zurückgegeben.

Der Datensatz, der aktuell war, bevor Sie sie verwendet haben AddNew , bleibt aktuell. Wenn Sie den neuen Datensatz aktuell machen möchten und das Recordset Lesezeichen unterstützt, rufen Sie SetBookmark auf die Textmarke auf, die durch die Einstellung der lastModified-Eigenschaft des zugrunde liegenden DAO-Recordsetobjekts identifiziert wird. Dies ist nützlich, um den Wert für Zählerfelder (automatische Inkrementierung) in einem hinzugefügten Datensatz zu ermitteln. Weitere Informationen finden Sie unter GetLastModifiedBookmark.

Wenn die Datenbank Transaktionen unterstützt, können Sie Ihren AddNew Aufruf teil einer Transaktion tätigen. Weitere Informationen zu Transaktionen finden Sie unter " CDaoWorkspace". Sie sollten CDaoWorkspace::BeginTrans vor dem Aufrufen aufrufen.AddNew

Es ist unzulässig, ein Recordset aufzurufen AddNew , dessen Open Memberfunktion nicht aufgerufen wurde. Ein CDaoException Fehler wird ausgelöst, wenn Sie ein Recordset aufrufen AddNew , das nicht angefügt werden kann. Sie können ermitteln, ob das Recordset aktualisiert werden kann, indem Sie CanAppend aufrufen.

Das Framework kennzeichnet geänderte Felddatenmber, um sicherzustellen, dass sie vom DAO-Datensatzfeldaustauschmechanismus (DFX) in den Datensatz in die Datenquelle geschrieben werden. Wenn Sie den Wert eines Felds ändern, wird das Feld in der Regel automatisch geändert, sodass Sie "SetFieldDirty" nur selten selbst aufrufen müssen. Es kann jedoch vorkommen, dass Spalten explizit aktualisiert oder eingefügt werden, unabhängig davon, welcher Wert sich im Felddatenmemm befindet. Der DFX-Mechanismus verwendet auch die Verwendung von PSEUDO NULL. Weitere Informationen finden Sie unter CDaoFieldExchange::m_nOperation.

Wenn der Mechanismus zum Doppeltpuffern nicht verwendet wird, wird beim Ändern des Feldwerts das Feld nicht automatisch als geändert festgelegt. In diesem Fall muss das Feld explizit geändert werden. Das in m_bCheckCacheForDirtyFields enthaltene Kennzeichen steuert diese automatische Feldüberprüfung.

Hinweis

Wenn Datensätze doppelt gepuffert sind (d. h. die automatische Feldüberprüfung ist aktiviert), stellt der Aufruf CancelUpdate die Membervariablen auf die Werte wieder her, die sie zuvor AddNew hatten oder Edit aufgerufen wurden.

Verwandte Informationen finden Sie in den Themen "AddNew-Methode", "CancelUpdate-Methode", "LastModified Property" und "EditMode Property" in der DAO-Hilfe.

CDaoRecordset::CanAppend

Rufen Sie diese Memberfunktion auf, um zu bestimmen, ob das zuvor geöffnete Recordset neue Datensätze hinzufügen kann, indem Sie die AddNew-Memberfunktion aufrufen.

BOOL CanAppend() const;

Rückgabewert

Nonzero, wenn das Recordset das Hinzufügen neuer Datensätze zulässt; andernfalls 0. CanAppend gibt 0 zurück, wenn Sie das Recordset als schreibgeschützt geöffnet haben.

Hinweise

Verwandte Informationen finden Sie im Thema "Append-Methode" in der DAO-Hilfe.

CDaoRecordset::CanBookmark

Rufen Sie diese Memberfunktion auf, um zu bestimmen, ob mit dem zuvor geöffneten Recordset Datensätze mithilfe von Lesezeichen einzeln markiert werden können.

BOOL CanBookmark();

Rückgabewert

Nonzero, wenn das Recordset Lesezeichen unterstützt, andernfalls 0.

Hinweise

Wenn Sie Recordsets verwenden, die vollständig auf Tabellen des Microsoft Jet-Datenbankmoduls basieren, können Lesezeichen verwendet werden, mit Ausnahme von Recordsets vom Typ "Snapshot", die als "Vorwärts scrollende Recordsets" gekennzeichnet sind. Andere Datenbankprodukte (externe ODBC-Datenquellen) unterstützen möglicherweise keine Lesezeichen.

Verwandte Informationen finden Sie im Thema "Bookmarkable Property" in der DAO-Hilfe.

CDaoRecordset::CancelUpdate

Die CancelUpdate Memberfunktion bricht alle ausstehenden Aktualisierungen aufgrund eines Bearbeitungs- oder AddNew-Vorgangs ab.

virtual void CancelUpdate();

Hinweise

Wenn beispielsweise eine Anwendung die Edit Funktion oder AddNew Memberfunktion aufruft und nicht aufgerufen Updatewurde, werden alle Änderungen abgebrochen, CancelUpdate die nach oder AddNew nach Edit dem Aufruf vorgenommen wurden.

Hinweis

Wenn Datensätze doppelt gepuffert sind (d. h. die automatische Feldüberprüfung ist aktiviert), stellt der Aufruf CancelUpdate die Membervariablen auf die Werte wieder her, die sie zuvor AddNew hatten oder Edit aufgerufen wurden.

Wenn kein Edit AddNew Vorgang aussteht, CancelUpdate löst MFC eine Ausnahme aus. Rufen Sie die GetEditMode-Memberfunktion auf, um festzustellen, ob ein ausstehender Vorgang vorhanden ist, der abgebrochen werden kann.

Verwandte Informationen finden Sie im Thema "CancelUpdate-Methode" in der DAO-Hilfe.

CDaoRecordset::CanRestart

Rufen Sie diese Memberfunktion auf, um zu bestimmen, ob das Recordset das Neustarten der Abfrage (zum Aktualisieren der Datensätze) durch Aufrufen der Requery Memberfunktion zulässt.

BOOL CanRestart();

Rückgabewert

Nonzero, wenn Requery aufgerufen werden kann, um die Abfrage des Recordsets erneut auszuführen, andernfalls 0.

Hinweise

Recordsets vom Tabellentyp unterstützen Requerynicht.

Wenn Requery dies nicht unterstützt wird, rufen Sie Schließen auf, und öffnen Sie dann "Öffnen", um die Daten zu aktualisieren. Sie können aufrufen Requery , um die zugrunde liegende Parameterabfrage eines Recordset-Objekts zu aktualisieren, nachdem die Parameterwerte geändert wurden.

Verwandte Informationen finden Sie im Thema "Restartable Property" in der DAO-Hilfe.

CDaoRecordset::CanScroll

Rufen Sie diese Memberfunktion auf, um zu bestimmen, ob das Recordset Bildlauf zulässt.

BOOL CanScroll() const;

Rückgabewert

Nonzero, wenn Sie durch die Datensätze scrollen können, andernfalls 0.

Hinweise

Wenn Sie "Öffnen mitdbForwardOnly" aufrufen, kann das Recordset nur vorwärts scrollen.

Verwandte Informationen finden Sie im Thema "Positionieren des aktuellen Datensatzzeigers mit DAO" in der DAO-Hilfe.

CDaoRecordset::CanTransact

Rufen Sie diese Memberfunktion auf, um zu bestimmen, ob das Recordset Transaktionen zulässt.

BOOL CanTransact();

Rückgabewert

Nonzero, wenn die zugrunde liegende Datenquelle Transaktionen unterstützt, andernfalls 0.

Hinweise

Verwandte Informationen finden Sie im Thema "Transactions Property" in der DAO-Hilfe.

CDaoRecordset::CanUpdate

Rufen Sie diese Memberfunktion auf, um zu bestimmen, ob das Recordset aktualisiert werden kann.

BOOL CanUpdate() const;

Rückgabewert

Nonzero, wenn das Recordset aktualisiert werden kann (Datensätze hinzufügen, aktualisieren und löschen), andernfalls 0.

Hinweise

Ein Recordset kann schreibgeschützt sein, wenn die zugrunde liegende Datenquelle schreibgeschützt ist oder wenn Sie für "nOptions" angegeben dbReadOnly haben, wenn Sie "Open" für das Recordset aufgerufen haben.

Verwandte Informationen finden Sie in den Themen "AddNew Method", "Edit Method", "Delete Method", "Update Method" und "Updatable Property" in der DAO-Hilfe.

CDaoRecordset::CDaoRecordset

Erstellt ein CDaoRecordset-Objekt.

CDaoRecordset(CDaoDatabase* pDatabase = NULL);

Parameter

pDatabase
Enthält einen Zeiger auf ein CDaoDatabase -Objekt oder den Wert NULL. Wenn nicht NULL und die Memberfunktion des Open CDaoDatabase Objekts nicht aufgerufen wurde, um sie mit der Datenquelle zu verbinden, versucht das Recordset, sie während des eigenen Open-Aufrufs für Sie zu öffnen. Wenn Sie NULL übergeben, wird ein CDaoDatabase Objekt für Sie mithilfe der von Ihnen angegebenen Datenquelleninformationen erstellt und verbunden, wenn Sie die Recordset-Klasse abgeleitet haben CDaoRecordset.

Hinweise

Sie können eine anwendungsspezifische Klasse entweder direkt verwenden CDaoRecordset oder von CDaoRecordsetdieser ableiten. Sie können ClassWizard verwenden, um Ihre Recordsetklassen abzuleiten.

Hinweis

Wenn Sie eine CDaoRecordset Klasse ableiten, muss ihre abgeleitete Klasse einen eigenen Konstruktor bereitstellen. Rufen Sie im Konstruktor der abgeleiteten Klasse den Konstruktor CDaoRecordset::CDaoRecordsetauf, und übergeben Sie die entsprechenden Parameter daran.

Übergeben Sie NULL an den Recordset-Konstruktor, damit automatisch ein CDaoDatabase Objekt erstellt und verbunden wird. Dies ist eine nützliche Verknüpfung, die es nicht erfordert, ein CDaoDatabase Objekt zu erstellen und zu verbinden, bevor Sie das Recordset erstellen. Wenn das CDaoDatabase Objekt nicht geöffnet ist, wird auch ein CDaoWorkspace-Objekt für Sie erstellt, das den Standardarbeitsbereich verwendet. Weitere Informationen finden Sie unter CDaoDatabase::CDaoDatabase.

CDaoRecordset::Close

Durch das Schließen eines CDaoRecordset Objekts wird es aus der Auflistung geöffneter Recordsets in der zugehörigen Datenbank entfernt.

virtual void Close();

Hinweise

Da Close das CDaoRecordset Objekt nicht zerstört wird, können Sie das Objekt wiederverwenden, indem Sie dieselbe Datenquelle oder eine andere Datenquelle aufrufen Open .

Alle ausstehenden AddNew - oder Edit-Anweisungen werden abgebrochen, und alle ausstehenden Transaktionen werden zurückgesetzt. Wenn Sie ausstehende Ergänzungen oder Bearbeitungen beibehalten möchten, rufen Sie "Aktualisieren" auf, bevor Sie für jedes Recordset-Objekt anrufen Close .

Sie können nach dem Anruf Closeerneut anrufenOpen. Auf diese Weise können Sie das Recordset-Objekt wiederverwenden. Eine bessere Alternative besteht darin, requery aufzurufen, falls möglich.

Verwandte Informationen finden Sie im Thema "Close Method" in der DAO-Hilfe.

CDaoRecordset::D elete

Rufen Sie diese Memberfunktion auf, um den aktuellen Datensatz in einem geöffneten Recordset-Objekt vom Typ "dynaset" oder "table-type" zu löschen.

virtual void Delete();

Hinweise

Nach einem erfolgreichen Löschen werden die Felddatenmember des Recordsets auf einen Null-Wert festgelegt, und Sie müssen explizit eine der Recordset-Navigationsmemberfunktionen ( Verschieben, Suchen, SetBookmark usw.) aufrufen, um den gelöschten Datensatz zu deaktivieren. Wenn Sie Datensätze aus einem Recordset löschen, muss es einen aktuellen Datensatz im Recordset geben, bevor Sie aufrufen Delete. Andernfalls löst MFC eine Ausnahme aus.

Delete entfernt den aktuellen Datensatz und macht ihn unzugänglich. Obwohl Sie den gelöschten Datensatz nicht bearbeiten oder verwenden können, bleibt er aktuell. Sobald Sie zu einem anderen Datensatz wechseln, können Sie den gelöschten Datensatz jedoch nicht erneut aktuell machen.

Achtung

Das Recordset muss aktualisierbar sein, und es muss beim Aufrufen Deleteein gültiger Datensatz im Recordset vorhanden sein. Wenn Sie z. B. einen Datensatz löschen, aber nicht zu einem neuen Datensatz scrollen, bevor Sie erneut aufrufen Delete , Delete wird eine CDaoException ausgelöst.

Sie können einen Datensatz rückgängigmachen, wenn Sie Transaktionen verwenden und die CDaoWorkspace::Rollback-Memberfunktion aufrufen. Wenn es sich bei der Basistabelle um die Primäre Tabelle in einer Löschweitergabebeziehung handelt, kann das Löschen des aktuellen Datensatzes auch einen oder mehrere Datensätze in einer Fremdtabelle löschen. Weitere Informationen finden Sie in der DAO-Hilfe zur Definition "Löschweitergabe".

Im Gegensatz zu AddNew und Edit, wird ein Anruf Delete nicht gefolgt von einem Anruf an Update.

Verwandte Informationen finden Sie in den Themen "AddNew Method", "Edit Method", "Delete Method", "Update Method" und "Updatable Property" in der DAO-Hilfe.

CDaoRecordset::D oFieldExchange

Das Framework ruft diese Memberfunktion auf, um automatisch Daten zwischen den Felddatenmembern des Recordset-Objekts und den entsprechenden Spalten des aktuellen Datensatzes in der Datenquelle auszutauschen.

virtual void DoFieldExchange(CDaoFieldExchange* pFX);

Parameter

Pfx
Enthält einen Zeiger auf ein CDaoFieldExchange Objekt. Das Framework hat dieses Objekt bereits eingerichtet, um einen Kontext für den Feldaustauschvorgang anzugeben.

Hinweise

Außerdem werden die Parameterdatenmber (sofern vorhanden) an Parameterplatzhalter in der SQL-Anweisungszeichenfolge für die Auswahl des Recordsets gebunden. Der Austausch von Felddaten, der als DAO-Datensatzfeldaustausch (DFX) bezeichnet wird, funktioniert in beide Richtungen: von den Felddatenelementen des Recordset-Objekts bis zu den Feldern des Datensatzes in der Datenquelle und vom Datensatz in der Datenquelle bis zum Recordset-Objekt. Wenn Sie Spalten dynamisch binden, müssen Sie sie nicht implementieren DoFieldExchange.

Die einzige Aktion, die Sie normalerweise ausführen müssen, um die abgeleitete Recordsetklasse zu implementieren DoFieldExchange , besteht darin, die Klasse mit ClassWizard zu erstellen und die Namen und Datentypen der Felddatenmber anzugeben. Sie können auch Code hinzufügen, den ClassWizard schreibt, um Parameterdatenmmber anzugeben. Wenn alle Felder dynamisch gebunden werden sollen, ist diese Funktion inaktiv, es sei denn, Sie geben Parameterdatenmmber an.

Wenn Sie die abgeleitete Recordset-Klasse mit ClassWizard deklarieren, schreibt der Assistent eine Außerkraftsetzung DoFieldExchange für Sie, die dem folgenden Beispiel ähnelt:

void CCustSet::DoFieldExchange(CDaoFieldExchange *pFX)
{
   pFX->SetFieldType(CDaoFieldExchange::param);
   DFX_Text(pFX, _T("Param"), m_strParam);
   pFX->SetFieldType(CDaoFieldExchange::outputColumn);
   DFX_Short(pFX, _T("EmployeeID"), m_EmployeeID);
   DFX_Text(pFX, _T("LastName"), m_LastName);
   DFX_Short(pFX, _T("Age"), m_Age);
   DFX_DateTime(pFX, _T("hire_date"), m_hire_date);
   DFX_DateTime(pFX, _T("termination_date"), m_termination_date);

   CDaoRecordset::DoFieldExchange(pFX);
}

CDaoRecordset::Edit

Rufen Sie diese Memberfunktion auf, um Änderungen am aktuellen Datensatz zuzulassen.

virtual void Edit();

Hinweise

Nachdem Sie die Edit Memberfunktion aufgerufen haben, werden Änderungen, die an den Feldern des aktuellen Datensatzes vorgenommen wurden, in den Kopierpuffer kopiert. Nachdem Sie die gewünschten Änderungen am Datensatz vorgenommen haben, rufen Update Sie auf, um Ihre Änderungen zu speichern. Edit speichert die Werte der Datenmber des Recordsets. Wenn Sie aufrufen Edit, nehmen Sie Änderungen vor, und rufen Edit Sie dann erneut auf, die Werte des Datensatzes werden wiederhergestellt, was sie vor dem ersten Edit Aufruf waren.

Achtung

Wenn Sie einen Datensatz bearbeiten und dann einen Vorgang ausführen, der ohne den ersten Aufruf Updatezu einem anderen Datensatz wechselt, gehen Die Änderungen ohne Warnung verloren. Wenn Sie das Recordset oder die übergeordnete Datenbank schließen, wird der bearbeitete Datensatz ohne Warnung verworfen.

In einigen Fällen möchten Sie möglicherweise eine Spalte aktualisieren, indem Sie sie null machen (ohne Daten enthalten). Rufen Sie SetFieldNull dazu einen Parameter von TRUE auf, um das Feld NULL zu markieren. Dadurch wird auch die Spalte aktualisiert. Wenn ein Feld in die Datenquelle geschrieben werden soll, obwohl sein Wert nicht geändert wurde, rufen SetFieldDirty Sie mit einem Parameter von TRUE auf. Dies funktioniert auch, wenn das Feld den Wert Null hatte.

Das Framework kennzeichnet geänderte Felddatenmber, um sicherzustellen, dass sie vom DAO-Datensatzfeldaustauschmechanismus (DFX) in den Datensatz in die Datenquelle geschrieben werden. Wenn Sie den Wert eines Felds ändern, wird das Feld in der Regel automatisch geändert, sodass Sie "SetFieldDirty" nur selten selbst aufrufen müssen. Es kann jedoch vorkommen, dass Spalten explizit aktualisiert oder eingefügt werden, unabhängig davon, welcher Wert sich im Felddatenmemm befindet. Der DFX-Mechanismus verwendet auch die Verwendung von PSEUDO NULL. Weitere Informationen finden Sie unter CDaoFieldExchange::m_nOperation.

Wenn der Mechanismus zum Doppeltpuffern nicht verwendet wird, wird beim Ändern des Feldwerts das Feld nicht automatisch als geändert festgelegt. In diesem Fall muss das Feld explizit geändert werden. Das in m_bCheckCacheForDirtyFields enthaltene Kennzeichen steuert diese automatische Feldüberprüfung.

Wenn das Recordset-Objekt pessimistisch in einer Mehrbenutzerumgebung gesperrt ist, bleibt der Datensatz bis Edit zum Abschluss der Aktualisierung gesperrt. Wenn das Recordset optimistisch gesperrt ist, wird der Datensatz gesperrt und mit dem vorab bearbeiteten Datensatz verglichen, bevor es in der Datenbank aktualisiert wird. Wenn sich der Datensatz seit dem Aufruf Editgeändert hat, schlägt der Update Vorgang fehl, und MFC löst eine Ausnahme aus. Sie können den Sperrmodus mit SetLockingMode.

Hinweis

Optimistische Sperrung wird immer in externen Datenbankformaten verwendet, z. B. ODBC und installierbares ISAM.

Der aktuelle Datensatz bleibt nach dem Aufruf Editaktuell. Zum Aufrufen Editmuss ein aktueller Datensatz vorhanden sein. Wenn kein aktueller Datensatz vorhanden ist oder sich das Recordset nicht auf ein geöffnetes Recordset-Objekt vom Typ "Table" oder "dynaset" bezieht, tritt eine Ausnahme auf. Das Aufrufen Edit bewirkt, dass ein CDaoException Aufruf unter den folgenden Bedingungen ausgelöst wird:

  • Es gibt keinen aktuellen Datensatz.

  • Die Datenbank oder das Recordset-Objekt ist schreibgeschützt.

  • Es sind keine Felder im Datensatz aktualisierbar.

  • Die Datenbank oder das Recordset wurde für die exklusive Verwendung durch einen anderen Benutzer geöffnet.

  • Ein anderer Benutzer hat die Seite gesperrt, die Ihren Datensatz enthält.

Wenn die Datenquelle Transaktionen unterstützt, können Sie den Edit Aufrufteil einer Transaktion vornehmen. Sie sollten vor dem Aufrufen Edit und nach dem Öffnen des Recordsets anrufenCDaoWorkspace::BeginTrans. Anrufe CDaoWorkspace::CommitTrans sind kein Ersatz für anrufe Update , um den Edit Vorgang abzuschließen. Weitere Informationen zu Transaktionen finden Sie unter Klasse CDaoWorkspace.

Verwandte Informationen finden Sie in den Themen "AddNew Method", "Edit Method", "Delete Method", "Update Method" und "Updatable Property" in der DAO-Hilfe.

CDaoRecordset::FillCache

Rufen Sie diese Memberfunktion auf, um eine angegebene Anzahl von Datensätzen aus dem Recordset zwischenzuspeichern.

void FillCache(
    long* pSize = NULL,
    COleVariant* pBookmark = NULL);

Parameter

pSize
Gibt die Anzahl der Zeilen an, die im Cache ausgefüllt werden sollen. Wenn Sie diesen Parameter weglassen, wird der Wert durch die Einstellung der CacheSize-Eigenschaft des zugrunde liegenden DAO-Objekts bestimmt.

pBookmark
Ein COleVariant , der eine Textmarke angibt. Der Cache wird beginnend mit dem datensatz gefüllt, der durch diese Textmarke angegeben ist. Wenn Sie diesen Parameter weglassen, wird der Cache beginnend mit dem Datensatz gefüllt, der durch die CacheStart-Eigenschaft des zugrunde liegenden DAO-Objekts angegeben ist.

Hinweise

Das Zwischenspeichern verbessert die Leistung einer Anwendung, die Daten von einem Remoteserver abruft oder abruft. Ein Cache ist Speicherplatz im lokalen Speicher, der die Daten enthält, die zuletzt vom Server abgerufen wurden, wobei davon ausgegangen wird, dass die Daten wahrscheinlich erneut angefordert werden, während die Anwendung ausgeführt wird. Wenn Daten angefordert werden, überprüft das Microsoft Jet-Datenbankmodul zuerst den Cache für die Daten, anstatt sie vom Server abzurufen, was mehr Zeit in Anspruch nimmt. Die Verwendung der Datenzwischenspeicherung in Nicht-ODBC-Datenquellen hat keine Auswirkungen, da die Daten nicht im Cache gespeichert werden.

Anstatt zu warten, dass der Cache beim Abrufen mit Datensätzen gefüllt wird, können Sie den Cache jederzeit explizit ausfüllen, indem Sie die FillCache Memberfunktion aufrufen. Dies ist eine schnellere Möglichkeit, den Cache auszufüllen, da FillCache mehrere Datensätze gleichzeitig statt gleichzeitig abgerufen werden. Während beispielsweise jeder Bildschirm mit Datensätzen angezeigt wird, können Sie ihren Anwendungsaufruf FillCache zum Abrufen des nächsten Bildschirms mit Datensätzen verwenden.

Jede ODBC-Datenbank, auf die mit Recordsetobjekten zugegriffen wird, kann über einen lokalen Cache verfügen. Um den Cache zu erstellen, öffnen Sie ein Recordset-Objekt aus der Remotedatenquelle, und rufen Sie dann die SetCacheSize Funktionen und SetCacheStart Memberfunktionen des Recordsets auf. Wenn "lSize " und "lBookmark " einen Bereich erstellen, der sich teilweise oder vollständig außerhalb des angegebenen SetCacheSize Bereichs befindet, SetCacheStartwird der Teil des Recordsets außerhalb dieses Bereichs ignoriert und nicht in den Cache geladen. Wenn FillCache mehr Datensätze als in der Remotedatenquelle verbleiben, werden nur die verbleibenden Datensätze abgerufen, und es wird keine Ausnahme ausgelöst.

Datensätze, die aus dem Cache abgerufen werden, spiegeln keine Änderungen wider, die gleichzeitig an den Quelldaten von anderen Benutzern vorgenommen wurden.

FillCache Ruft nur Datensätze ab, die noch nicht zwischengespeichert wurden. Um eine Aktualisierung aller zwischengespeicherten Daten zu erzwingen, rufen Sie die SetCacheSize Memberfunktion mit einem lSize-Parameter gleich 0 auf, rufen Sie SetCacheSize erneut den lSize-Parameter auf, der der Größe des ursprünglich angeforderten Caches entspricht, und rufen Sie dann aufFillCache.

Verwandte Informationen finden Sie im Thema "FillCache-Methode" in der DAO-Hilfe.

CDaoRecordset::Find

Rufen Sie diese Memberfunktion auf, um eine bestimmte Zeichenfolge in einem Recordset vom Typ Dynaset oder Snapshot mithilfe eines Vergleichsoperators zu suchen.

virtual BOOL Find(
    long lFindType,
    LPCTSTR lpszFilter);

Parameter

lFindType
Ein Wert, der den Gewünschten Suchvorgangstyp angibt. Mögliche Werte sind:

  • AFX_DAO_NEXT Suchen sie den nächsten Speicherort einer übereinstimmenden Zeichenfolge.

  • AFX_DAO_PREV Suchen der vorherigen Position einer übereinstimmenden Zeichenfolge.

  • AFX_DAO_FIRST Suchen Der erste Speicherort einer übereinstimmenden Zeichenfolge.

  • AFX_DAO_LAST Suchen der letzten Position einer übereinstimmenden Zeichenfolge.

lpszFilter
Ein Zeichenfolgenausdruck (wie die WHERE-Klausel in einer SQL-Anweisung ohne das Wort WHERE), der zum Suchen des Datensatzes verwendet wird. Zum Beispiel:

rs.Find(AFX_DAO_FIRST, _T("EmployeeID = 7"));
rs.Find(AFX_DAO_NEXT, _T("LastName = 'Jones'"));

Rückgabewert

Nonzero, wenn übereinstimmende Datensätze gefunden werden, andernfalls 0.

Hinweise

Sie finden die erste, nächste, vorherige oder letzte Instanz der Zeichenfolge. Find ist eine virtuelle Funktion, sodass Sie sie außer Kraft setzen und Ihre eigene Implementierung hinzufügen können. Die FindFirstFunktionen , FindLast, FindNextund FindPrev Member -Funktionen rufen die Find Memberfunktion auf, sodass Sie das Verhalten aller Suchvorgänge steuern können Find .

Rufen Sie die Seek-Memberfunktion auf, um einen Datensatz in einem Recordset vom Typ "Tabelle" zu suchen.

Tipp

Je kleiner die Menge von Datensätzen, die Sie haben, desto effektiver Find ist. Im Allgemeinen und insbesondere bei ODBC-Daten ist es besser, eine neue Abfrage zu erstellen, die nur die gewünschten Datensätze abruft.

Verwandte Informationen finden Sie im Thema "FindFirst, FindLast, FindNext, FindPrevious Methods" in der DAO-Hilfe.

CDaoRecordset::FindFirst

Rufen Sie diese Memberfunktion auf, um den ersten Datensatz zu finden, der einer angegebenen Bedingung entspricht.

BOOL FindFirst(LPCTSTR lpszFilter);

Parameter

lpszFilter
Ein Zeichenfolgenausdruck (wie die WHERE-Klausel in einer SQL-Anweisung ohne das Wort WHERE), der zum Suchen des Datensatzes verwendet wird.

Rückgabewert

Nonzero, wenn übereinstimmende Datensätze gefunden werden, andernfalls 0.

Hinweise

Die FindFirst Memberfunktion beginnt die Suche vom Anfang des Recordsets und sucht bis zum Ende des Recordsets.

Wenn Sie alle Datensätze in die Suche einschließen möchten (nicht nur diejenigen, die eine bestimmte Bedingung erfüllen), verwenden Sie einen der Move-Vorgänge, um von Datensatz zu Datensatz zu wechseln. Rufen Sie die Seek Memberfunktion auf, um einen Datensatz in einem Recordset vom Typ "Tabelle" zu suchen.

Wenn sich ein Datensatz, der den Kriterien entspricht, nicht befindet, ist der aktuelle Datensatzzeiger nicht bestimmt und FindFirst gibt Null zurück. Wenn das Recordset mehr als einen Datensatz enthält, der die Kriterien erfüllt, FindFirst sucht das erste Vorkommen, FindNext sucht das nächste Vorkommen usw.

Achtung

Wenn Sie den aktuellen Datensatz bearbeiten, müssen Sie die Änderungen speichern, indem Sie die Update Memberfunktion aufrufen, bevor Sie zu einem anderen Datensatz wechseln. Wenn Sie ohne Aktualisierung zu einem anderen Datensatz wechseln, gehen Die Änderungen ohne Warnung verloren.

Die Find Memberfunktionen suchen von der Position und in der in der folgenden Tabelle angegebenen Richtung:

Suchen von Vorgängen Starten Suchrichtung
FindFirst Beginn des Recordsets Ende des Recordsets
FindLast Ende des Recordsets Beginn des Recordsets
FindNext Aktueller Datensatz Ende des Recordsets
FindPrevious Aktueller Datensatz Beginn des Recordsets

Hinweis

Wenn Sie aufrufen FindLast, füllt das Microsoft Jet-Datenbankmodul Ihr Recordset vollständig auf, bevor Sie die Suche beginnen, sofern dies noch nicht geschehen ist. Die erste Suche kann länger dauern als nachfolgende Suchvorgänge.

Die Verwendung eines der Find-Vorgänge entspricht nicht dem Aufrufen MoveFirst oder MoveNext, was jedoch einfach den ersten oder nächsten Datensatz aktuell macht, ohne eine Bedingung anzugeben. Sie können einem Suchvorgang mit einem Verschiebungsvorgang folgen.

Beachten Sie bei der Verwendung der Suchvorgänge Folgendes:

  • Wenn Find "nonzero" zurückgegeben wird, wird der aktuelle Datensatz nicht definiert. In diesem Fall müssen Sie den aktuellen Datensatzzeiger wieder auf einen gültigen Datensatz positionieren.

  • Sie können einen Suchvorgang nicht mit einem vorwärts scrollenden Recordset vom Typ Snapshot verwenden.

  • Sie sollten das US-Datumsformat (Monat-Tag-Jahr) verwenden, wenn Sie nach Feldern suchen, die Datumsangaben enthalten, auch wenn Sie nicht die US-Version des Microsoft Jet-Datenbankmoduls verwenden; andernfalls werden übereinstimmende Datensätze möglicherweise nicht gefunden.

  • Wenn Sie mit ODBC-Datenbanken und großen Dynasets arbeiten, können Sie feststellen, dass die Verwendung der Suchvorgänge langsam ist, insbesondere beim Arbeiten mit großen Recordsets. Sie können die Leistung verbessern, indem Sie SQL-Abfragen mit angepassten ORDERBY - oder WHERE-Klauseln , Parameterabfragen oder CDaoQuerydef Objekten verwenden, die bestimmte indizierte Datensätze abrufen.

Verwandte Informationen finden Sie im Thema "FindFirst, FindLast, FindNext, FindPrevious Methods" in der DAO-Hilfe.

CDaoRecordset::FindLast

Rufen Sie diese Memberfunktion auf, um den letzten Datensatz zu finden, der einer angegebenen Bedingung entspricht.

BOOL FindLast(LPCTSTR lpszFilter);

Parameter

lpszFilter
Ein Zeichenfolgenausdruck (wie die WHERE-Klausel in einer SQL-Anweisung ohne das Wort WHERE), der zum Suchen des Datensatzes verwendet wird.

Rückgabewert

Nonzero, wenn übereinstimmende Datensätze gefunden werden, andernfalls 0.

Hinweise

Die FindLast Memberfunktion beginnt mit der Suche am Ende des Recordsets und sucht rückwärts zum Anfang des Recordsets.

Wenn Sie alle Datensätze in die Suche einschließen möchten (nicht nur diejenigen, die eine bestimmte Bedingung erfüllen), verwenden Sie einen der Move-Vorgänge, um von Datensatz zu Datensatz zu wechseln. Rufen Sie die Seek Memberfunktion auf, um einen Datensatz in einem Recordset vom Typ "Tabelle" zu suchen.

Wenn sich ein Datensatz, der den Kriterien entspricht, nicht befindet, ist der aktuelle Datensatzzeiger nicht bestimmt und FindLast gibt Null zurück. Wenn das Recordset mehrere Datensätze enthält, die den Kriterien entsprechen, FindFirst sucht das erste Vorkommen, FindNext sucht das nächste Vorkommen nach dem ersten Vorkommen usw.

Achtung

Wenn Sie den aktuellen Datensatz bearbeiten, müssen Sie die Änderungen speichern, indem Sie die Update Memberfunktion aufrufen, bevor Sie zu einem anderen Datensatz wechseln. Wenn Sie ohne Aktualisierung zu einem anderen Datensatz wechseln, gehen Die Änderungen ohne Warnung verloren.

Die Verwendung eines der Find-Vorgänge entspricht nicht dem Aufrufen MoveFirst oder MoveNext, was jedoch einfach den ersten oder nächsten Datensatz aktuell macht, ohne eine Bedingung anzugeben. Sie können einem Suchvorgang mit einem Verschiebungsvorgang folgen.

Beachten Sie bei der Verwendung der Suchvorgänge Folgendes:

  • Wenn Find "nonzero" zurückgegeben wird, wird der aktuelle Datensatz nicht definiert. In diesem Fall müssen Sie den aktuellen Datensatzzeiger wieder auf einen gültigen Datensatz positionieren.

  • Sie können einen Suchvorgang nicht mit einem vorwärts scrollenden Recordset vom Typ Snapshot verwenden.

  • Sie sollten das US-Datumsformat (Monat-Tag-Jahr) verwenden, wenn Sie nach Feldern suchen, die Datumsangaben enthalten, auch wenn Sie nicht die US-Version des Microsoft Jet-Datenbankmoduls verwenden; andernfalls werden übereinstimmende Datensätze möglicherweise nicht gefunden.

  • Wenn Sie mit ODBC-Datenbanken und großen Dynasets arbeiten, können Sie feststellen, dass die Verwendung der Suchvorgänge langsam ist, insbesondere beim Arbeiten mit großen Recordsets. Sie können die Leistung verbessern, indem Sie SQL-Abfragen mit angepassten ORDERBY - oder WHERE-Klauseln , Parameterabfragen oder CDaoQuerydef Objekten verwenden, die bestimmte indizierte Datensätze abrufen.

Verwandte Informationen finden Sie im Thema "FindFirst, FindLast, FindNext, FindPrevious Methods" in der DAO-Hilfe.

CDaoRecordset::FindNext

Rufen Sie diese Memberfunktion auf, um den nächsten Datensatz zu finden, der einer angegebenen Bedingung entspricht.

BOOL FindNext(LPCTSTR lpszFilter);

Parameter

lpszFilter
Ein Zeichenfolgenausdruck (wie die WHERE-Klausel in einer SQL-Anweisung ohne das Wort WHERE), der zum Suchen des Datensatzes verwendet wird.

Rückgabewert

Nonzero, wenn übereinstimmende Datensätze gefunden werden, andernfalls 0.

Hinweise

Die FindNext Memberfunktion beginnt mit der Suche am aktuellen Datensatz und sucht bis zum Ende des Recordsets.

Wenn Sie alle Datensätze in die Suche einschließen möchten (nicht nur diejenigen, die eine bestimmte Bedingung erfüllen), verwenden Sie einen der Move-Vorgänge, um von Datensatz zu Datensatz zu wechseln. Rufen Sie die Seek Memberfunktion auf, um einen Datensatz in einem Recordset vom Typ "Tabelle" zu suchen.

Wenn sich ein Datensatz, der den Kriterien entspricht, nicht befindet, ist der aktuelle Datensatzzeiger nicht bestimmt und FindNext gibt Null zurück. Wenn das Recordset mehr als einen Datensatz enthält, der die Kriterien erfüllt, FindFirst sucht das erste Vorkommen, FindNext sucht das nächste Vorkommen usw.

Achtung

Wenn Sie den aktuellen Datensatz bearbeiten, müssen Sie die Änderungen speichern, indem Sie die Update Memberfunktion aufrufen, bevor Sie zu einem anderen Datensatz wechseln. Wenn Sie ohne Aktualisierung zu einem anderen Datensatz wechseln, gehen Die Änderungen ohne Warnung verloren.

Die Verwendung eines der Find-Vorgänge entspricht nicht dem Aufrufen MoveFirst oder MoveNext, was jedoch einfach den ersten oder nächsten Datensatz aktuell macht, ohne eine Bedingung anzugeben. Sie können einem Suchvorgang mit einem Verschiebungsvorgang folgen.

Beachten Sie bei der Verwendung der Suchvorgänge Folgendes:

  • Wenn Find "nonzero" zurückgegeben wird, wird der aktuelle Datensatz nicht definiert. In diesem Fall müssen Sie den aktuellen Datensatzzeiger wieder auf einen gültigen Datensatz positionieren.

  • Sie können einen Suchvorgang nicht mit einem vorwärts scrollenden Recordset vom Typ Snapshot verwenden.

  • Sie sollten das US-Datumsformat (Monat-Tag-Jahr) verwenden, wenn Sie nach Feldern suchen, die Datumsangaben enthalten, auch wenn Sie nicht die US-Version des Microsoft Jet-Datenbankmoduls verwenden; andernfalls werden übereinstimmende Datensätze möglicherweise nicht gefunden.

  • Wenn Sie mit ODBC-Datenbanken und großen Dynasets arbeiten, können Sie feststellen, dass die Verwendung der Suchvorgänge langsam ist, insbesondere beim Arbeiten mit großen Recordsets. Sie können die Leistung verbessern, indem Sie SQL-Abfragen mit angepassten ORDERBY - oder WHERE-Klauseln , Parameterabfragen oder CDaoQuerydef Objekten verwenden, die bestimmte indizierte Datensätze abrufen.

Verwandte Informationen finden Sie im Thema "FindFirst, FindLast, FindNext, FindPrevious Methods" in der DAO-Hilfe.

CDaoRecordset::FindPrev

Rufen Sie diese Memberfunktion auf, um den vorherigen Datensatz zu finden, der einer angegebenen Bedingung entspricht.

BOOL FindPrev(LPCTSTR lpszFilter);

Parameter

lpszFilter
Ein Zeichenfolgenausdruck (wie die WHERE-Klausel in einer SQL-Anweisung ohne das Wort WHERE), der zum Suchen des Datensatzes verwendet wird.

Rückgabewert

Nonzero, wenn übereinstimmende Datensätze gefunden werden, andernfalls 0.

Hinweise

Die FindPrev Memberfunktion beginnt mit der Suche am aktuellen Datensatz und sucht rückwärts zum Anfang des Recordsets.

Wenn Sie alle Datensätze in die Suche einschließen möchten (nicht nur diejenigen, die eine bestimmte Bedingung erfüllen), verwenden Sie einen der Move-Vorgänge, um von Datensatz zu Datensatz zu wechseln. Rufen Sie die Seek Memberfunktion auf, um einen Datensatz in einem Recordset vom Typ "Tabelle" zu suchen.

Wenn sich ein Datensatz, der den Kriterien entspricht, nicht befindet, ist der aktuelle Datensatzzeiger nicht bestimmt und FindPrev gibt Null zurück. Wenn das Recordset mehr als einen Datensatz enthält, der die Kriterien erfüllt, FindFirst sucht das erste Vorkommen, FindNext sucht das nächste Vorkommen usw.

Achtung

Wenn Sie den aktuellen Datensatz bearbeiten, müssen Sie die Änderungen speichern, indem Sie die Update Memberfunktion aufrufen, bevor Sie zu einem anderen Datensatz wechseln. Wenn Sie ohne Aktualisierung zu einem anderen Datensatz wechseln, gehen Die Änderungen ohne Warnung verloren.

Die Verwendung eines der Find-Vorgänge entspricht nicht dem Aufrufen MoveFirst oder MoveNext, was jedoch einfach den ersten oder nächsten Datensatz aktuell macht, ohne eine Bedingung anzugeben. Sie können einem Suchvorgang mit einem Verschiebungsvorgang folgen.

Beachten Sie bei der Verwendung der Suchvorgänge Folgendes:

  • Wenn Find "nonzero" zurückgegeben wird, wird der aktuelle Datensatz nicht definiert. In diesem Fall müssen Sie den aktuellen Datensatzzeiger wieder auf einen gültigen Datensatz positionieren.

  • Sie können einen Suchvorgang nicht mit einem vorwärts scrollenden Recordset vom Typ Snapshot verwenden.

  • Sie sollten das US-Datumsformat (Monat-Tag-Jahr) verwenden, wenn Sie nach Feldern suchen, die Datumsangaben enthalten, auch wenn Sie nicht die US-Version des Microsoft Jet-Datenbankmoduls verwenden; andernfalls werden übereinstimmende Datensätze möglicherweise nicht gefunden.

  • Wenn Sie mit ODBC-Datenbanken und großen Dynasets arbeiten, können Sie feststellen, dass die Verwendung der Suchvorgänge langsam ist, insbesondere beim Arbeiten mit großen Recordsets. Sie können die Leistung verbessern, indem Sie SQL-Abfragen mit angepassten ORDERBY - oder WHERE-Klauseln , Parameterabfragen oder CDaoQuerydef Objekten verwenden, die bestimmte indizierte Datensätze abrufen.

Verwandte Informationen finden Sie im Thema "FindFirst, FindLast, FindNext, FindPrevious Methods" in der DAO-Hilfe.

CDaoRecordset::GetAbsolutePosition

Gibt die Datensatznummer des aktuellen Datensatzes eines Recordset-Objekts zurück.

long GetAbsolutePosition();

Rückgabewert

Eine ganze Zahl zwischen 0 und der Anzahl der Datensätze im Recordset. Entspricht der Ordnungsposition des aktuellen Datensatzes im Recordset.

Hinweise

Der AbsolutePosition-Eigenschaftswert des zugrunde liegenden DAO-Objekts ist nullbasiert; Eine Einstellung von 0 bezieht sich auf den ersten Datensatz im Recordset. Sie können die Anzahl der aufgefüllten Datensätze im Recordset ermitteln, indem Sie GetRecordCount aufrufen. Der Aufruf GetRecordCount kann einige Zeit dauern, da er auf alle Datensätze zugreifen muss, um die Anzahl zu ermitteln.

Wenn kein aktueller Datensatz vorhanden ist, wird – 1 zurückgegeben, wenn keine Datensätze im Recordset vorhanden sind. Wenn der aktuelle Datensatz gelöscht wird, wird der AbsolutePosition-Eigenschaftswert nicht definiert, und MFC löst eine Ausnahme aus, wenn darauf verwiesen wird. Bei Recordsets vom Typ "dynaset" werden neue Datensätze am Ende der Sequenz hinzugefügt.

Hinweis

Diese Eigenschaft soll nicht als Ersatzdatensatznummer verwendet werden. Lesezeichen sind weiterhin die empfohlene Methode zum Aufbewahren und Zurückgeben an eine bestimmte Position und sind die einzige Möglichkeit, den aktuellen Datensatz über alle Arten von Recordsetobjekten hinweg zu positionieren. Insbesondere ändert sich die Position eines bestimmten Datensatzes, wenn Datensätze, die ihm vorangehen, gelöscht werden. Es gibt auch keine Gewissheit, dass ein bestimmter Datensatz dieselbe absolute Position hat, wenn das Recordset erneut erstellt wird, da die Reihenfolge einzelner Datensätze innerhalb eines Recordsets nicht garantiert ist, es sei denn, er wird mit einer SQL-Anweisung mit einer ORDERBY-Klausel erstellt.

Hinweis

Diese Memberfunktion ist nur für Recordsets vom Typ "dynaset" und "snapshot" gültig.

Verwandte Informationen finden Sie im Thema "AbsolutePosition-Eigenschaft" in der DAO-Hilfe.

CDaoRecordset::GetBookmark

Rufen Sie diese Memberfunktion auf, um den Textmarkenwert in einem bestimmten Datensatz abzurufen.

COleVariant GetBookmark();

Rückgabewert

Gibt einen Wert zurück, der die Textmarke für den aktuellen Datensatz darstellt.

Hinweise

Wenn ein Recordset-Objekt erstellt oder geöffnet wird, verfügt jedes seiner Datensätze bereits über eine eindeutige Textmarke, wenn es sie unterstützt. Rufen Sie auf CanBookmark , um zu ermitteln, ob ein Recordset Lesezeichen unterstützt.

Sie können die Textmarke für den aktuellen Datensatz speichern, indem Sie dem Objekt den Wert der Textmarke COleVariant zuweisen. Wenn Sie nach dem Verschieben zu einem anderen Datensatz schnell zu diesem Datensatz zurückkehren möchten, rufen Sie SetBookmark einen Parameter auf, der dem Wert dieses COleVariant Objekts entspricht.

Hinweis

Durch Aufrufen von Requery werden DAO-Textmarken geändert.

Verwandte Informationen finden Sie im Thema "Bookmark Property" in der DAO-Hilfe.

CDaoRecordset::GetCacheSize

Rufen Sie diese Memberfunktion auf, um die Anzahl der zwischengespeicherten Datensätze abzurufen.

long GetCacheSize();

Rückgabewert

Ein Wert, der die Anzahl der Datensätze in einem Recordset vom Typ Dynaset angibt, das Daten enthält, die aus einer ODBC-Datenquelle lokal zwischengespeichert werden sollen.

Hinweise

Die Datenzwischenspeicherung verbessert die Leistung einer Anwendung, die Daten von einem Remoteserver über Recordset-Objekte vom Typ Dynaset abruft. Ein Cache ist ein Speicher im lokalen Speicher, der die Daten enthält, die zuletzt vom Server abgerufen wurden, falls die Daten erneut angefordert werden, während die Anwendung ausgeführt wird. Wenn Daten angefordert werden, überprüft das Microsoft Jet-Datenbankmodul zuerst den Cache für die angeforderten Daten, anstatt sie vom Server abzurufen, was mehr Zeit in Anspruch nimmt. Daten, die nicht aus einer ODBC-Datenquelle stammen, werden nicht im Cache gespeichert.

Jede ODBC-Datenquelle, z. B. eine angefügte Tabelle, kann über einen lokalen Cache verfügen.

Verwandte Informationen finden Sie im Thema "CacheSize, CacheStart Properties" in der DAO-Hilfe.

CDaoRecordset::GetCacheStart

Rufen Sie diese Memberfunktion auf, um den Textmarkenwert des ersten Datensatzes im Recordset abzurufen, der zwischengespeichert werden soll.

COleVariant GetCacheStart();

Rückgabewert

Ein COleVariant Wert, der die Textmarke des ersten Datensatzes im Recordset angibt, der zwischengespeichert werden soll.

Hinweise

Das Microsoft Jet-Datenbankmodul fordert Datensätze innerhalb des Cachebereichs vom Cache an und fordert Datensätze außerhalb des Cachebereichs vom Server an.

Hinweis

Datensätze, die aus dem Cache abgerufen werden, spiegeln keine Änderungen wider, die gleichzeitig an den Quelldaten von anderen Benutzern vorgenommen wurden.

Verwandte Informationen finden Sie im Thema "CacheSize, CacheStart Properties" in der DAO-Hilfe.

CDaoRecordset::GetCurrentIndex

Rufen Sie diese Memberfunktion auf, um den Index zu ermitteln, der derzeit in einem indizierten Tabellentypobjekt CDaoRecordset verwendet wird.

CString GetCurrentIndex();

Rückgabewert

A CString containing the name of the index currently in use with a table-type recordset. Gibt eine leere Zeichenfolge zurück, wenn kein Index festgelegt wurde.

Hinweise

Dieser Index ist die Grundlage für die Sortierung von Datensätzen in einem Recordset vom Typ "Tabelle" und wird von der Seek-Memberfunktion verwendet, um Datensätze zu suchen.

Ein CDaoRecordset Objekt kann mehrere Indexe aufweisen, kann jedoch jeweils nur einen Index verwenden (obwohl ein CDaoTableDef-Objekt möglicherweise mehrere Indizes definiert hat).

Verwandte Informationen finden Sie im Thema "Index-Objekt" und der Definition "aktueller Index" in der DAO-Hilfe.

CDaoRecordset::GetDateCreated

Rufen Sie diese Memberfunktion auf, um das Datum und die Uhrzeit der Erstellung einer Basistabelle abzurufen.

COleDateTime GetDateCreated();

Rückgabewert

Ein COleDateTime-Objekt , das das Datum und die Uhrzeit der Erstellung der Basistabelle enthält.

Hinweise

Datums- und Uhrzeiteinstellungen werden vom Computer abgeleitet, auf dem die Basistabelle erstellt wurde.

Verwandte Informationen finden Sie im Thema "DateCreated, LastUpdated Properties" in der DAO-Hilfe.

CDaoRecordset::GetDateLastUpdated

Rufen Sie diese Memberfunktion auf, um das Datum und die Uhrzeit der letzten Aktualisierung des Schemas abzurufen.

COleDateTime GetDateLastUpdated();

Rückgabewert

Ein COleDateTime-Objekt , das das Datum und die Uhrzeit der letzten Aktualisierung der Basistabellenstruktur (Schema) enthält.

Hinweise

Datums- und Uhrzeiteinstellungen werden vom Computer abgeleitet, auf dem die Basistabellenstruktur (Schema) zuletzt aktualisiert wurde.

Verwandte Informationen finden Sie im Thema "DateCreated, LastUpdated Properties" in der DAO-Hilfe.

CDaoRecordset::GetDefaultDBName

Rufen Sie diese Memberfunktion auf, um den Namen der Datenbank für dieses Recordset zu bestimmen.

virtual CString GetDefaultDBName();

Rückgabewert

A CString , das den Pfad und den Namen der Datenbank enthält, von der dieses Recordset abgeleitet wird.

Hinweise

Wenn ein Recordset ohne Zeiger auf eine CDaoDatabase erstellt wird, wird dieser Pfad vom Recordset verwendet, um die Standarddatenbank zu öffnen. Standardmäßig gibt diese Funktion eine leere Zeichenfolge zurück. Wenn ClassWizard ein neues Recordset ableiten CDaoRecordset, wird diese Funktion für Sie erstellt.

Das folgende Beispiel veranschaulicht die Verwendung des doppelten umgekehrten Schrägstrichs (\\) in der Zeichenfolge, wie für die ordnungsgemäße Interpretation der Zeichenfolge erforderlich ist.

CString CCustSet::GetDefaultDBName()
{
   return _T("c:\\mydir\\datasrc.mdb");
}

CDaoRecordset::GetDefaultSQL

Das Framework ruft diese Memberfunktion auf, um die SQL-Standardanweisung abzurufen, auf der das Recordset basiert.

virtual CString GetDefaultSQL();

Rückgabewert

A CString that contains the default SQL statement.

Hinweise

Dies kann ein Tabellenname oder eine SQL SELECT-Anweisung sein.

Sie definieren indirekt die STANDARD-SQL-Anweisung, indem Sie die Recordset-Klasse mit ClassWizard deklarieren, und ClassWizard führt diese Aufgabe für Sie aus.

Wenn Sie eine NULL-SQL-Zeichenfolge an Open übergeben, wird diese Funktion aufgerufen, um den Tabellennamen oder SQL für Das Recordset zu bestimmen.

CDaoRecordset::GetEditMode

Rufen Sie diese Memberfunktion auf, um den Bearbeitungsstatus zu bestimmen, der einer der folgenden Werte ist:

short GetEditMode();

Rückgabewert

Gibt einen Wert zurück, der den Bearbeitungsstatus für den aktuellen Datensatz angibt.

Hinweise

Wert Beschreibung
dbEditNone Es wird kein Bearbeitungsvorgang ausgeführt.
dbEditInProgress Edit wurde aufgerufen.
dbEditAdd AddNew wurde aufgerufen.

Verwandte Informationen finden Sie im Thema "EditMode Property" in der DAO-Hilfe.

CDaoRecordset::GetFieldCount

Rufen Sie diese Memberfunktion auf, um die Anzahl der im Recordset definierten Felder (Spalten) abzurufen.

short GetFieldCount();

Rückgabewert

Die Anzahl der Felder im Recordset.

Hinweise

Verwandte Informationen finden Sie im Thema "Count Property" in der DAO-Hilfe.

CDaoRecordset::GetFieldInfo

Rufen Sie diese Memberfunktion auf, um Informationen zu den Feldern in einem Recordset abzurufen.

void GetFieldInfo(
    int nIndex,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetFieldInfo(
    LPCTSTR lpszName,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Parameter

nIndex
Der nullbasierte Index des vordefinierten Felds in der Fields-Auflistung des Recordsets für die Suche nach Index.

Fieldinfo
Ein Verweis auf eine CDaoFieldInfo-Struktur .

dwInfoOptions
Optionen, die angeben, welche Informationen über das abzurufende Recordset-Objekt enthalten. Die verfügbaren Optionen werden hier zusammen mit dem aufgeführt, was dazu führt, dass die Funktion zurückgegeben wird. Um eine optimale Leistung zu erzielen, rufen Sie nur die benötigten Informationen ab:

  • AFX_DAO_PRIMARY_INFO (Standard) Name, Typ, Größe, Attribute

  • AFX_DAO_SECONDARY_INFO Primäre Informationen plus: Ordnungsposition, Erforderlich, Leere Länge zulassen, Sortierreihenfolge, Fremdname, Quellfeld, Quelltabelle

  • AFX_DAO_ALL_INFO Primäre und sekundäre Informationen sowie: Standardwert, Gültigkeitsprüfungsregel, Gültigkeitsprüfungstext

lpszName
Der Name des Felds.

Hinweise

Mit einer Version der Funktion können Sie ein Feld nach Index nachschlagen. Mit der anderen Version können Sie ein Feld anhand des Namens nachschlagen.

Eine Beschreibung der zurückgegebenen Informationen finden Sie in der CDaoFieldInfo-Struktur . Diese Struktur enthält Elemente, die den oben aufgeführten Informationselementen in der Beschreibung von dwInfoOptions entsprechen. Wenn Sie Informationen auf einer Ebene anfordern, erhalten Sie auch Informationen für alle vorherigen Ebenen.

Verwandte Informationen finden Sie im Thema "Attributes Property" in der DAO-Hilfe.

CDaoRecordset::GetFieldValue

Rufen Sie diese Memberfunktion auf, um Daten in einem Recordset abzurufen.

virtual void GetFieldValue(
    LPCTSTR lpszName,
    COleVariant& varValue);

virtual void GetFieldValue(
    int nIndex,
    COleVariant& varValue);

virtual COleVariant GetFieldValue(LPCTSTR lpszName);
virtual COleVariant GetFieldValue(int nIndex);

Parameter

lpszName
Ein Zeiger auf eine Zeichenfolge, die den Namen eines Felds enthält.

varValue
Ein Verweis auf ein COleVariant Objekt, das den Wert eines Felds speichert.

nIndex
Ein nullbasierter Index des Felds in der Fields-Auflistung des Recordsets für die Suche nach Index.

Rückgabewert

In den beiden Versionen dieses GetFieldValue Werts wird ein COleVariant-Objekt zurückgegeben, das den Wert eines Felds enthält.

Hinweise

Sie können ein Feld nach Namen oder nach Ordnungsposition nachschlagen.

Hinweis

Es ist effizienter, eine der Versionen dieser Memberfunktion aufzurufen, die einen COleVariant Objektverweis als Parameter verwendet, anstatt eine Version aufzurufen, die ein COleVariant Objekt zurückgibt. Die letzteren Versionen dieser Funktion werden aus Gründen der Abwärtskompatibilität beibehalten.

Verwenden Sie GetFieldValue Und SetFieldValue , um Felder zur Laufzeit dynamisch zu binden, anstatt statisch Spalten mithilfe des DoFieldExchange-Mechanismus zu binden.

GetFieldValue und der DoFieldExchange Mechanismus kann kombiniert werden, um die Leistung zu verbessern. Verwenden Sie GetFieldValue z. B. zum Abrufen eines Werts, den Sie nur bei Bedarf benötigen, und weisen Sie diesen Aufruf einer Schaltfläche "Weitere Informationen" in der Schnittstelle zu.

Verwandte Informationen finden Sie in den Themen "Field Object" und "Value Property" in der DAO-Hilfe.

CDaoRecordset::GetIndexCount

Rufen Sie diese Memberfunktion auf, um die Anzahl der Indizes zu ermitteln, die für das Recordset vom Typ Tabelle verfügbar sind.

short GetIndexCount();

Rückgabewert

Die Anzahl der Indizes im Recordset vom Typ Tabelle.

Hinweise

GetIndexCount ist nützlich für das Durchlaufen aller Indizes im Recordset. Zu diesem Zweck verwenden Sie GetIndexCount es mit GetIndexInfo. Wenn Sie diese Memberfunktion für Recordsets vom Typ "dynaset" oder "snapshot" aufrufen, löst MFC eine Ausnahme aus.

Verwandte Informationen finden Sie im Thema "Attributes Property" in der DAO-Hilfe.

CDaoRecordset::GetIndexInfo

Rufen Sie diese Memberfunktion auf, um verschiedene Arten von Informationen zu einem in der Basistabelle definierten Index abzurufen, der einem Recordset zugrunde liegt.

void GetIndexInfo(
    int nIndex,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetIndexInfo(
    LPCTSTR lpszName,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Parameter

nIndex
Der nullbasierte Index in der Indexes-Auflistung der Tabelle für die Suche nach numerischer Position.

indexinfo
Ein Verweis auf eine CDaoIndexInfo-Struktur .

dwInfoOptions
Optionen, die angeben, welche Informationen zum abzurufenden Index enthalten sind. Die verfügbaren Optionen werden hier zusammen mit dem aufgeführt, was dazu führt, dass die Funktion zurückgegeben wird. Um eine optimale Leistung zu erzielen, rufen Sie nur die benötigten Informationen ab:

  • AFX_DAO_PRIMARY_INFO (Standard) Name, Feldinformationen, Felder

  • AFX_DAO_SECONDARY_INFO Primäre Informationen plus: Primary, Unique, Clustered, IgnoreNulls, Required, Foreign

  • AFX_DAO_ALL_INFO Primäre und sekundäre Informationen plus: Distinct Count

lpszName
Ein Zeiger auf den Namen des Indexobjekts, um nach Namen nachzuschlagen.

Hinweise

Mit einer Version der Funktion können Sie einen Index anhand seiner Position in der Auflistung nachschlagen. Mit der anderen Version können Sie einen Index anhand des Namens nachschlagen.

Eine Beschreibung der zurückgegebenen Informationen finden Sie in der CDaoIndexInfo-Struktur . Diese Struktur enthält Elemente, die den oben aufgeführten Informationselementen in der Beschreibung von dwInfoOptions entsprechen. Wenn Sie Informationen auf einer Ebene anfordern, erhalten Sie auch Informationen für alle vorherigen Ebenen.

Verwandte Informationen finden Sie im Thema "Attributes Property" in der DAO-Hilfe.

CDaoRecordset::GetLastModifiedBookmark

Rufen Sie diese Memberfunktion auf, um die Textmarke des zuletzt hinzugefügten oder aktualisierten Datensatzes abzurufen.

COleVariant GetLastModifiedBookmark();

Rückgabewert

Eine COleVariant Textmarke, die den zuletzt hinzugefügten oder geänderten Datensatz angibt.

Hinweise

Wenn ein Recordset-Objekt erstellt oder geöffnet wird, verfügt jedes seiner Datensätze bereits über eine eindeutige Textmarke, wenn es sie unterstützt. Rufen Sie GetBookmark auf, um zu ermitteln, ob das Recordset Lesezeichen unterstützt. Wenn das Recordset lesezeichen nicht unterstützt, wird ein CDaoException Fehler ausgelöst.

Wenn Sie einen Datensatz hinzufügen, wird er am Ende des Recordsets angezeigt und ist nicht der aktuelle Datensatz. Um den neuen Datensatz aktuell zu machen, rufen Sie GetLastModifiedBookmark auf, und rufen Sie dann auf SetBookmark , um zum neu hinzugefügten Datensatz zurückzukehren.

Verwandte Informationen finden Sie im Thema "LastModified Property" in der DAO-Hilfe.

CDaoRecordset::GetLockingMode

Rufen Sie diese Memberfunktion auf, um den Typ der Sperre für das Recordset zu bestimmen.

BOOL GetLockingMode();

Rückgabewert

Nonzero, wenn der Sperrtyp pessimistisch ist, andernfalls 0 für optimistische Datensatzsperrung.

Hinweise

Wenn die pessimistische Sperre wirksam ist, wird die Datenseite, die den von Ihnen bearbeiteten Datensatz enthält, gesperrt, sobald Sie die Edit-Memberfunktion aufrufen. Die Seite wird entsperrt, wenn Sie die Funktion "Aktualisieren " oder "Schließen " oder eines der Vorgänge "Verschieben" oder "Suchen" aufrufen.

Wenn die optimistische Sperre wirksam ist, wird die Datenseite, die den Datensatz enthält, nur gesperrt, während der Datensatz mit der Update Memberfunktion aktualisiert wird.

Beim Arbeiten mit ODBC-Datenquellen ist der Sperrmodus immer optimistisch.

Verwandte Informationen finden Sie in der DAO-Hilfe unter "LockEdits Property" und "Locking Behavior in Multiuser Applications".

CDaoRecordset::GetName

Rufen Sie diese Memberfunktion auf, um den Namen des Recordsets abzurufen.

CString GetName();

Rückgabewert

A CString mit dem Namen des Recordsets.

Hinweise

Der Name des Recordsets muss mit einem Buchstaben beginnen und kann maximal 40 Zeichen enthalten. Sie kann Zahlen und Unterstriche enthalten, aber keine Interpunktion oder Leerzeichen enthalten.

Verwandte Informationen finden Sie im Thema "Name Property" in der DAO-Hilfe.

CDaoRecordset::GetParamValue

Rufen Sie diese Memberfunktion auf, um den aktuellen Wert des angegebenen Parameters abzurufen, der im zugrunde liegenden DAOParameter-Objekt gespeichert ist.

virtual COleVariant GetParamValue(int nIndex);
virtual COleVariant GetParamValue(LPCTSTR lpszName);

Parameter

nIndex
Die numerische Position des Parameters im zugrunde liegenden DAOParameter-Objekt.

lpszName
Der Name des Parameters, dessen Wert Sie verwenden möchten.

Rückgabewert

Ein Objekt der Klasse COleVariant , das den Wert des Parameters enthält.

Hinweise

Sie können auf den Parameter entweder anhand des Namens oder der numerischen Position in der Auflistung zugreifen.

Verwandte Informationen finden Sie im Thema "Parameterobjekt" in der DAO-Hilfe.

CDaoRecordset::GetPercentPosition

Beim Arbeiten mit einem Recordset vom Typ "dynaset" oder "snapshot", wenn Sie vor dem vollständigen Auffüllen des Recordsets aufrufen GetPercentPosition , ist die Menge der Verschiebung relativ zur Anzahl der Datensätze, auf die durch Aufrufen von GetRecordCount hingewiesen wird.

float GetPercentPosition();

Rückgabewert

Eine Zahl zwischen 0 und 100, die die ungefähre Position des aktuellen Datensatzes im Recordsetobjekt basierend auf einem Prozentsatz der Datensätze im Recordset angibt.

Hinweise

Sie können zum letzten Datensatz wechseln, indem Sie MoveLast aufrufen, um die Population aller Recordsets abzuschließen, dies kann jedoch eine erhebliche Zeit in Anspruch nehmen.

Sie können alle drei Typen von Recordsetobjekten aufrufen GetPercentPosition , einschließlich Tabellen ohne Indizes. Sie können jedoch keine Vorwärtslaufmomentaufnahmen oder ein Recordset aufrufen GetPercentPosition , das aus einer Pass-Through-Abfrage für eine externe Datenbank geöffnet wurde. Wenn kein aktueller Datensatz vorhanden ist oder der aktuelle Datensatz gelöscht wurde, wird ein CDaoException Fehler ausgelöst.

Verwandte Informationen finden Sie im Thema "PercentPosition Property" in der DAO-Hilfe.

CDaoRecordset::GetRecordCount

Rufen Sie diese Memberfunktion auf, um herauszufinden, auf wie viele Datensätze in einem Recordset zugegriffen wurde.

long GetRecordCount();

Rückgabewert

Gibt die Anzahl der Datensätze zurück, auf die in einem Recordset -Objekt zugegriffen wird.

Hinweise

GetRecordCount gibt nicht an, wie viele Datensätze in einem Recordset vom Typ "dynaset" oder "Snapshot" enthalten sind, bis auf alle Datensätze zugegriffen wurde. Dieser Memberfunktionsaufruf kann eine erhebliche Zeit in Anspruch nehmen, bis der Vorgang abgeschlossen ist.

Nachdem auf den letzten Datensatz zugegriffen wurde, gibt der Rückgabewert die Gesamtanzahl der nicht geeleteten Datensätze im Recordset an. Um den letzten Zugriff auf den Datensatz zu erzwingen, rufen Sie die MoveLast Funktion oder FindLast Memberfunktion für das Recordset auf. Sie können auch eine SQL-Anzahl verwenden, um die ungefähre Anzahl von Datensätzen zu ermitteln, die Ihre Abfrage zurückgibt.

Wenn Ihre Anwendung Datensätze in einem Recordset vom Typ Dynaset löscht, verringert sich der Rückgabewert GetRecordCount . Datensätze, die von anderen Benutzern gelöscht werden, werden jedoch erst wiedergegeben GetRecordCount , wenn der aktuelle Datensatz in einem gelöschten Datensatz positioniert wird. Wenn Sie eine Transaktion ausführen, die sich auf die Datensatzanzahl auswirkt und anschließend ein Rollback der Transaktion durchgeführt wird, GetRecordCount entspricht die tatsächliche Anzahl der verbleibenden Datensätze nicht.

Der Wert eines GetRecordCount Recordset vom Typ "Snapshot" ist nicht von Änderungen in den zugrunde liegenden Tabellen betroffen.

Der Wert eines GetRecordCount Datensatzes vom Typ "Tabelle" gibt die ungefähre Anzahl von Datensätzen in der Tabelle wieder und wird sofort beeinflusst, wenn Tabellendatensätze hinzugefügt und gelöscht werden.

Ein Recordset ohne Datensätze gibt den Wert 0 zurück. Wenn Sie mit angefügten Tabellen oder ODBC-Datenbanken arbeiten, GetRecordCount wird immer - 1 zurückgegeben. Durch Aufrufen der Requery Memberfunktion für ein Recordset wird der Wert GetRecordCount zurückgesetzt, als ob die Abfrage erneut ausgeführt wurde.

Verwandte Informationen finden Sie im Thema "RecordCount Property" in der DAO-Hilfe.

CDaoRecordset::GetSQL

Rufen Sie diese Memberfunktion auf, um die SQL-Anweisung abzurufen, die zum Auswählen der Datensätze des Recordsets beim Öffnen verwendet wurde.

CString GetSQL() const;

Rückgabewert

Eine CString , die die SQL-Anweisung enthält.

Hinweise

Dies ist in der Regel eine SQL SELECT-Anweisung .

Die von GetSQL ihnen zurückgegebene Zeichenfolge unterscheidet sich in der Regel von jeder Zeichenfolge, die Sie möglicherweise an das Recordset im lpszSQL-Parameter an die Open-Memberfunktion übergeben haben. Dies liegt daran, dass das Recordset eine vollständige SQL-Anweisung erstellt, basierend auf dem, an was Sie übergeben Openhaben, was Sie mit ClassWizard angegeben haben, und was Sie möglicherweise in den m_strFilter - und m_strSort-Datenmember angegeben haben.

Hinweis

Rufen Sie diese Memberfunktion erst nach dem Aufrufen auf Open.

Verwandte Informationen finden Sie im Thema "SQL-Eigenschaft" in der DAO-Hilfe.

CDaoRecordset::GetType

Rufen Sie diese Memberfunktion auf, nachdem Sie das Recordset geöffnet haben, um den Typ des Recordset-Objekts zu bestimmen.

short GetType();

Rückgabewert

Einer der folgenden Werte, der den Typ eines Recordsets angibt:

  • dbOpenTable Recordset vom Typ "Tabelle"

  • dbOpenDynaset Recordset vom Typ Dynaset

  • dbOpenSnapshot Recordset vom Typ Snapshot

Hinweise

Verwandte Informationen finden Sie im Thema "Type Property" in der DAO-Hilfe.

CDaoRecordset::GetValidationRule

Rufen Sie diese Memberfunktion auf, um die Regel zu ermitteln, die zum Überprüfen von Daten verwendet wird.

CString GetValidationRule();

Rückgabewert

Ein CString Objekt, das einen Wert enthält, der die Daten in einem Datensatz überprüft, während es geändert oder einer Tabelle hinzugefügt wird.

Hinweise

Diese Regel ist textbasiert und wird jedes Mal angewendet, wenn die zugrunde liegende Tabelle geändert wird. Wenn die Daten nicht zulässig sind, löst MFC eine Ausnahme aus. Die zurückgegebene Fehlermeldung ist der Text der ValidationText-Eigenschaft des zugrunde liegenden Feldobjekts, sofern angegeben, oder der Text des Ausdrucks, der durch die ValidationRule-Eigenschaft des zugrunde liegenden Feldobjekts angegeben wird. Sie können GetValidationText aufrufen, um den Text der Fehlermeldung abzurufen.

Beispielsweise kann ein Feld in einem Datensatz, das den Tag des Monats erfordert, eine Gültigkeitsprüfungsregel wie "TAG ZWISCHEN 1 UND 31" aufweisen.

Verwandte Informationen finden Sie im Thema "ValidationRule Property" in der DAO-Hilfe.

CDaoRecordset::GetValidationText

Rufen Sie diese Memberfunktion auf, um den Text der ValidationText-Eigenschaft des zugrunde liegenden Feldobjekts abzurufen.

CString GetValidationText();

Rückgabewert

Ein CString Objekt, das den Text der Meldung enthält, die angezeigt wird, wenn der Wert eines Felds nicht der Gültigkeitsprüfungsregel des zugrunde liegenden Feldobjekts entspricht.

Hinweise

Verwandte Informationen finden Sie im Thema "ValidationText Property" in der DAO-Hilfe.

CDaoRecordset::IsBOF

Rufen Sie diese Memberfunktion auf, bevor Sie von Datensatz zu Datensatz scrollen, um zu erfahren, ob Sie vor dem ersten Datensatz des Recordsets gegangen sind.

BOOL IsBOF() const;

Rückgabewert

Nonzero, wenn das Recordset keine Datensätze enthält oder wenn Sie vor dem ersten Datensatz rückwärts gescrollt haben; andernfalls 0.

Hinweise

Sie können auch aufrufen IsBOF IsEOF , um festzustellen, ob das Recordset Datensätze enthält oder leer ist. Wenn das Recordset keine Datensätze enthält, IsBOF gibt das Recordset unmittelbar nach dem Aufruf Openeinen Wert ungleich Null zurück. Wenn Sie ein Recordset öffnen, das mindestens einen Datensatz enthält, ist der erste Datensatz der aktuelle Datensatz und IsBOF gibt "0" zurück.

Wenn der erste Datensatz der aktuelle Datensatz ist und Sie aufrufen MovePrev, IsBOF wird anschließend ein Nonzero zurückgegeben. Wenn IsBOF "nonzero" zurückgegeben wird und Sie aufrufen MovePrev, wird eine Ausnahme ausgelöst. Wenn IsBOF "nonzero" zurückgegeben wird, ist der aktuelle Datensatz nicht definiert, und jede Aktion, die einen aktuellen Datensatz erfordert, führt zu einer Ausnahme.

Auswirkungen bestimmter Methoden auf IsBOF und IsEOF Einstellungen:

  • Intern Open* wird der erste Datensatz im Recordset durch Aufrufen des aktuellen Datensatzes erstellt MoveFirst. Daher führt das Aufrufen Open einer leeren Gruppe von Datensätzen dazu IsBOF , dass IsEOF ein Nichtzero zurückgegeben wird. (In der folgenden Tabelle finden Sie das Verhalten eines Fehlgeschlagens MoveFirst oder MoveLast Eines Anrufs.)

  • Alle Verschiebungsvorgänge, die einen Datensatz erfolgreich finden, verursachen beide IsBOF und IsEOF geben "0" zurück.

  • Ein AddNew Aufruf gefolgt von einem Update Aufruf, der erfolgreich einen neuen Datensatz einfügt, führt IsBOF dazu, dass 0 zurückgegeben wird, aber nur, wenn IsEOF bereits kein Zero vorhanden ist. Der Zustand von "Willen IsEOF " bleibt immer unverändert. Wie vom Microsoft Jet-Datenbankmodul definiert, befindet sich der aktuelle Datensatzzeiger eines leeren Recordsets am Ende einer Datei, sodass nach dem aktuellen Datensatz ein neuer Datensatz eingefügt wird.

  • Jeder Delete Aufruf, auch wenn er den einzigen verbleibenden Datensatz aus einem Recordset entfernt, ändert den Wert von IsBOF oder IsEOF.

In dieser Tabelle wird gezeigt, welche Move-Vorgänge mit unterschiedlichen Kombinationen zulässig IsBOF/ IsEOFsind.

Staat MoveFirst, MoveLast MovePrev,

Move < 0
Move 0 MoveNext,

Move > 0
IsBOF=nonzero,

IsEOF=0
Zulässig Exception Exception Zulässig
IsBOF=0,

IsEOF=nonzero
Zulässig Zulässig Exception Exception
Beide Nonzero Exception Exception Exception Exception
Beide 0 Zulässig Zulässig Zulässig Zulässig

Das Zulassen eines Verschiebungsvorgangs bedeutet nicht, dass der Vorgang einen Datensatz erfolgreich findet. Es gibt lediglich an, dass ein Versuch, den angegebenen Verschiebungsvorgang auszuführen, zulässig ist und keine Ausnahme generiert. Der Wert der IsBOF Funktionen und IsEOF Member kann sich aufgrund der versuchten Verschiebung ändern.

Die Auswirkung von Move-Vorgängen, die keinen Datensatz auf den Wert und IsBOF IsEOF die Einstellungen finden, wird in der folgenden Tabelle angezeigt.

Vorgänge IsBOF IsEOF
MoveFirst, MoveLast Nonzero Nonzero
Move 0 Keine Änderung Keine Änderung
MovePrev, Move< 0 Nonzero Keine Änderung
MoveNext, Move> 0 Keine Änderung Nonzero

Verwandte Informationen finden Sie im Thema "BOF, EOF-Eigenschaften" in der DAO-Hilfe.

CDaoRecordset::IsDeleted

Rufen Sie diese Memberfunktion auf, um zu ermitteln, ob der aktuelle Datensatz gelöscht wurde.

BOOL IsDeleted() const;

Rückgabewert

Nonzero, wenn das Recordset in einem gelöschten Datensatz positioniert ist; andernfalls 0.

Hinweise

Wenn Sie zu einem Datensatz scrollen und IsDeleted TRUE (Nonzero) zurückgeben, müssen Sie zu einem anderen Datensatz scrollen, bevor Sie andere Recordsetvorgänge ausführen können.

Hinweis

Sie müssen den gelöschten Status für Datensätze in einer Momentaufnahme oder einem Recordset vom Typ "Tabelle" nicht überprüfen. Da Datensätze nicht aus einer Momentaufnahme gelöscht werden können, müssen Sie nicht anrufen IsDeleted. Bei Recordsets vom Typ "Tabelle" werden gelöschte Datensätze tatsächlich aus dem Recordset entfernt. Nachdem ein Datensatz von Ihnen, einem anderen Benutzer oder in einem anderen Recordset gelöscht wurde, können Sie nicht wieder zu diesem Datensatz scrollen. Daher muss nicht angerufen werden IsDeleted.

Wenn Sie einen Datensatz aus einem Dynaset löschen, wird er aus dem Recordset entfernt, und Sie können nicht zurück zu diesem Datensatz scrollen. Wenn ein Datensatz in einem Dynaset jedoch entweder von einem anderen Benutzer oder in einem anderen Recordset basierend auf derselben Tabelle gelöscht wird, wird TRUE zurückgegeben, IsDeleted wenn Sie später zu diesem Datensatz scrollen.

Verwandte Informationen finden Sie in den Themen "Delete Method", "LastModified Property" und "EditMode Property" in der DAO-Hilfe.

CDaoRecordset::IsEOF

Rufen Sie diese Memberfunktion auf, während Sie von Datensatz zu Datensatz scrollen, um zu erfahren, ob Sie den letzten Datensatz des Recordsets überschritten haben.

BOOL IsEOF() const;

Rückgabewert

Nonzero, wenn das Recordset keine Datensätze enthält oder wenn Sie einen Bildlauf über den letzten Datensatz hinaus ausgeführt haben; andernfalls 0.

Hinweise

Sie können auch aufrufen IsEOF , um festzustellen, ob das Recordset Datensätze enthält oder leer ist. Wenn das Recordset keine Datensätze enthält, IsEOF gibt das Recordset unmittelbar nach dem Aufruf Openeinen Wert ungleich Null zurück. Wenn Sie ein Recordset öffnen, das mindestens einen Datensatz enthält, ist der erste Datensatz der aktuelle Datensatz und IsEOF gibt "0" zurück.

Wenn der letzte Datensatz der aktuelle Datensatz ist, wenn Sie aufrufen MoveNext, IsEOF wird anschließend nonzero zurückgegeben. Wenn IsEOF "nonzero" zurückgegeben wird und Sie aufrufen MoveNext, wird eine Ausnahme ausgelöst. Wenn IsEOF "nonzero" zurückgegeben wird, ist der aktuelle Datensatz nicht definiert, und jede Aktion, die einen aktuellen Datensatz erfordert, führt zu einer Ausnahme.

Auswirkungen bestimmter Methoden auf IsBOF und IsEOF Einstellungen:

  • Intern Open wird der erste Datensatz im Recordset durch Aufrufen des aktuellen Datensatzes erstellt MoveFirst. Daher führt das Aufrufen Open einer leeren Gruppe von Datensätzen dazu IsBOF , dass IsEOF ein Nichtzero zurückgegeben wird. (In der folgenden Tabelle finden Sie das Verhalten eines fehlgeschlagenen MoveFirst Aufrufs.)

  • Alle Verschiebungsvorgänge, die einen Datensatz erfolgreich finden, verursachen beide IsBOF und IsEOF geben "0" zurück.

  • Ein AddNew Aufruf gefolgt von einem Update Aufruf, der erfolgreich einen neuen Datensatz einfügt, führt IsBOF dazu, dass 0 zurückgegeben wird, aber nur, wenn IsEOF bereits kein Zero vorhanden ist. Der Zustand von "Willen IsEOF " bleibt immer unverändert. Wie vom Microsoft Jet-Datenbankmodul definiert, befindet sich der aktuelle Datensatzzeiger eines leeren Recordsets am Ende einer Datei, sodass nach dem aktuellen Datensatz ein neuer Datensatz eingefügt wird.

  • Jeder Delete Aufruf, auch wenn er den einzigen verbleibenden Datensatz aus einem Recordset entfernt, ändert den Wert von IsBOF oder IsEOF.

In dieser Tabelle wird gezeigt, welche Move-Vorgänge mit unterschiedlichen Kombinationen zulässig IsBOF/ IsEOFsind.

Staat MoveFirst, MoveLast MovePrev,

Move < 0
Move 0 MoveNext,

Move > 0
IsBOF=nonzero,

IsEOF=0
Zulässig Exception Exception Zulässig
IsBOF=0,

IsEOF=nonzero
Zulässig Zulässig Exception Exception
Beide Nonzero Exception Exception Exception Exception
Beide 0 Zulässig Zulässig Zulässig Zulässig

Das Zulassen eines Verschiebungsvorgangs bedeutet nicht, dass der Vorgang einen Datensatz erfolgreich findet. Es gibt lediglich an, dass ein Versuch, den angegebenen Verschiebungsvorgang auszuführen, zulässig ist und keine Ausnahme generiert. Der Wert der IsBOF Funktionen und IsEOF Member kann sich aufgrund der versuchten Verschiebung ändern.

Die Auswirkung von Move-Vorgängen, die keinen Datensatz auf den Wert und IsBOF IsEOF die Einstellungen finden, wird in der folgenden Tabelle angezeigt.

Vorgänge IsBOF IsEOF
MoveFirst, MoveLast Nonzero Nonzero
Move 0 Keine Änderung Keine Änderung
MovePrev, Move< 0 Nonzero Keine Änderung
MoveNext, Move> 0 Keine Änderung Nonzero

Verwandte Informationen finden Sie im Thema "BOF, EOF-Eigenschaften" in der DAO-Hilfe.

CDaoRecordset::IsFieldDirty

Rufen Sie diese Memberfunktion auf, um zu bestimmen, ob das angegebene Felddatenelement eines Dynasets als "geändert" gekennzeichnet wurde.

BOOL IsFieldDirty(void* pv);

Parameter

Pv
Ein Zeiger auf das Felddatenelement, dessen Status Sie überprüfen möchten, oder NULL, um zu bestimmen, ob eines der Felder geändert wurde.

Rückgabewert

Nonzero, wenn das angegebene Felddatenmemm als geändert gekennzeichnet ist; andernfalls 0.

Hinweise

Die Daten in allen Elementen des geänderten Felds werden an den Datensatz in der Datenquelle übertragen, wenn der aktuelle Datensatz durch einen Aufruf der Update Memberfunktion CDaoRecordset (nach einem Aufruf von Edit oder AddNew) aktualisiert wird. Mit diesem Wissen können Sie weitere Schritte ausführen, z. B. das Entflaggen des Felddatenelements, um die Spalte zu markieren, damit sie nicht in die Datenquelle geschrieben wird.

IsFieldDirty wird über DoFieldExchange.

CDaoRecordset::IsFieldNull

Rufen Sie diese Memberfunktion auf, um zu bestimmen, ob das angegebene Felddatenmemm eines Recordsets als Null gekennzeichnet wurde.

BOOL IsFieldNull(void* pv);

Parameter

Pv
Ein Zeiger auf das Felddatenelement, dessen Status Sie überprüfen möchten, oder NULL, um zu bestimmen, ob eines der Felder Null ist.

Rückgabewert

Nonzero, wenn das angegebene Felddatenmemm als Null gekennzeichnet ist; andernfalls 0.

Hinweise

(In der Datenbankterminologie bedeutet Null "keinen Wert" und ist nicht mit NULL in C++ identisch.) Wenn ein Felddatenmemm als Null gekennzeichnet ist, wird es als Spalte des aktuellen Datensatzes interpretiert, für den kein Wert vorhanden ist.

Hinweis

In bestimmten Situationen kann die Verwendung IsFieldNull ineffizient sein, wie das folgende Codebeispiel veranschaulicht:

COleVariant varValue;
void *pField = &(rs.m_Age);
int nField = 2;

// this code is inefficient because data
// must be retrieved for both IsFieldNull
// and GetFieldValue
if (!rs.IsFieldNull(pField))
   rs.GetFieldValue(nField, varValue);

// this code is more efficient
rs.GetFieldValue(nField, varValue);
if (varValue.vt == VT_NULL)
   varValue.Attach(varNewVal); // do something

Hinweis

Wenn Sie dynamische Datensatzbindung verwenden, ohne von CDaoRecordsetdieser abzuleiten, müssen Sie VT_NULL wie im Beispiel gezeigt verwenden.

CDaoRecordset::IsFieldNullable

Rufen Sie diese Memberfunktion auf, um zu bestimmen, ob das angegebene Felddatenmemm "nullable" ist (kann auf einen Nullwert festgelegt werden; C++ NULL ist nicht identisch mit Null, was in der Datenbankterminologie "keinen Wert" bedeutet.

BOOL IsFieldNullable(void* pv);

Parameter

Pv
Ein Zeiger auf das Felddatenelement, dessen Status Sie überprüfen möchten, oder NULL, um zu bestimmen, ob eines der Felder Null ist.

Rückgabewert

Nonzero, wenn das angegebene Felddatenmemm null gemacht werden kann; andernfalls 0.

Hinweise

Ein Feld, das nicht Null sein kann, muss einen Wert aufweisen. Wenn Sie versuchen, ein solches Feld beim Hinzufügen oder Aktualisieren eines Datensatzes auf Null festzulegen, lehnt die Datenquelle das Hinzufügen oder Aktualisieren ab und Update löst eine Ausnahme aus. Die Ausnahme tritt auf, wenn Sie anrufen Update, nicht, wenn Sie anrufen SetFieldNull.

CDaoRecordset::IsOpen

Rufen Sie diese Memberfunktion auf, um zu ermitteln, ob das Recordset geöffnet ist.

BOOL IsOpen() const;

Rückgabewert

Nonzero, wenn die Recordset-Objekt Open - oder Requery Memberfunktion zuvor aufgerufen wurde und das Recordset nicht geschlossen wurde, andernfalls 0.

Hinweise

CDaoRecordset::m_bCheckCacheForDirtyFields

Enthält ein Flag, das angibt, ob zwischengespeicherte Felder automatisch als geändert (geändert) und Null markiert werden.

Hinweise

Das Flag ist standardmäßig AUF TRUE festgelegt. Die Einstellung in diesem Datenmemm steuert den gesamten Doppelpuffermechanismus. Wenn Sie das Kennzeichen auf TRUE festlegen, können Sie die Zwischenspeicherung mithilfe des DFX-Mechanismus auf Feldbasis deaktivieren. Wenn Sie die Kennzeichnung auf FALSE festlegen, müssen Sie sich selbst aufrufen SetFieldDirty SetFieldNull .

Legen Sie dieses Datenelement vor dem Aufrufen Openfest. Dieser Mechanismus dient in erster Linie der benutzerfreundlichen Bedienung. Die Leistung kann aufgrund der doppelten Pufferung von Feldern langsamer sein, wenn Änderungen vorgenommen werden.

CDaoRecordset::m_nFields

Enthält die Anzahl der Felddatenmember in der Recordsetklasse und die Anzahl der Spalten, die vom Recordset aus der Datenquelle ausgewählt wurden.

Hinweise

Der Konstruktor für die Recordset-Klasse muss mit der richtigen Anzahl statisch gebundener Felder initialisiert m_nFields werden. ClassWizard schreibt diese Initialisierung für Sie, wenn Sie sie zum Deklarieren der Recordset-Klasse verwenden. Sie können sie auch manuell schreiben.

Das Framework verwendet diese Zahl, um die Interaktion zwischen den Felddatenelementen und den entsprechenden Spalten des aktuellen Datensatzes in der Datenquelle zu verwalten.

Hinweis

Diese Zahl muss der Anzahl der Ausgabespalten entsprechen, die nach einem Aufruf SetFieldType mit dem Parameter CDaoFieldExchange::outputColumnregistriert DoFieldExchange wurden.

Sie können Spalten dynamisch über CDaoRecordset::GetFieldValue und CDaoRecordset::SetFieldValue. In diesem Zusammenhang müssen Sie die Anzahl m_nFields nicht erhöhen, um die Anzahl der DFX-Funktionsaufrufe in Ihrer DoFieldExchange Memberfunktion widerzuspiegeln.

CDaoRecordset::m_nParams

Enthält die Anzahl der Parameterdatenelemente in der Recordsetklasse – die Anzahl der Parameter, die mit der Abfrage des Recordsets übergeben werden.

Hinweise

Wenn die Recordset-Klasse Parameterdatenmmber enthält, muss der Konstruktor für die Klasse m_nParams mit der richtigen Zahl initialisieren. Der Wert von m_nParams standardwert 0. Wenn Sie Parameterdatenmmber hinzufügen , die Sie manuell ausführen müssen, müssen Sie auch manuell eine Initialisierung im Klassenkonstruktor hinzufügen, um die Anzahl der Parameter widerzuspiegeln (die mindestens so groß sein müssen wie die Anzahl der Platzhalter in Ihrer m_strFilter oder m_strSort Zeichenfolge).

Das Framework verwendet diese Zahl, wenn sie die Abfrage des Recordsets parametrisiert.

Hinweis

Diese Nummer muss der Anzahl von "Params" entsprechen, die nach einem Aufruf SetFieldType mit dem Parameter CFieldExchange::paramregistriert DoFieldExchange sind.

Verwandte Informationen finden Sie im Thema "Parameterobjekt" in der DAO-Hilfe.

CDaoRecordset::m_pDAORecordset

Enthält einen Zeiger auf die OLE-Schnittstelle für das DAO-Recordsetobjekt, das dem CDaoRecordset Objekt zugrunde liegt.

Hinweise

Verwenden Sie diesen Zeiger, wenn Sie direkt auf die DAO-Schnittstelle zugreifen müssen.

Verwandte Informationen finden Sie im Thema "Recordset-Objekt" in der DAO-Hilfe.

CDaoRecordset::m_pDatabase

Enthält einen Zeiger auf das CDaoDatabase Objekt, über das das Recordset mit einer Datenquelle verbunden ist.

Hinweise

Diese Variable wird auf zwei Arten festgelegt. Normalerweise übergeben Sie einen Zeiger an ein bereits geöffnetes CDaoDatabase Objekt, wenn Sie das Recordset-Objekt erstellen. Wenn Sie stattdessen NULL übergeben, CDaoRecordset wird ein CDaoDatabase Objekt für Sie erstellt und geöffnet. In beiden Fällen CDaoRecordset wird der Zeiger in dieser Variablen gespeichert.

Normalerweise müssen Sie den in der Datei gespeicherten m_pDatabaseZeiger nicht direkt verwenden. Wenn Sie jedoch eigene Erweiterungen CDaoRecordsetschreiben, müssen Sie möglicherweise den Zeiger verwenden. Beispielsweise benötigen Sie möglicherweise den Zeiger, wenn Sie ihre eigenen CDaoException(s) auslösen.

Verwandte Informationen finden Sie im Thema "Database Object" in der DAO-Hilfe.

CDaoRecordset::m_strFilter

Enthält eine Zeichenfolge, die zum Erstellen der WHERE-Klausel einer SQL-Anweisung verwendet wird.

Hinweise

Es enthält nicht das reservierte Wort WHERE zum Filtern des Recordsets. Die Verwendung dieses Datenelements gilt nicht für Recordsets vom Typ Tabelle. Die Verwendung hat m_strFilter keine Auswirkung beim Öffnen eines Recordsets mit einem CDaoQueryDef Zeiger.

Verwenden Sie das US-Datumsformat (Monat-Tag-Jahr), wenn Sie Felder mit Datumsangaben filtern, auch wenn Sie die US-Version des Microsoft Jet-Datenbankmoduls nicht verwenden; andernfalls werden die Daten möglicherweise nicht wie erwartet gefiltert.

Verwandte Informationen finden Sie im Thema "Filtereigenschaft" in der DAO-Hilfe.

CDaoRecordset::m_strSort

Enthält eine Zeichenfolge, die die ORDERBY-Klausel einer SQL-Anweisung ohne die reservierten Wörter ORDERBY enthält.

Hinweise

Sie können nach Recordsetobjekten vom Typ "dynaset" und "snapshot" sortieren.

Es ist nicht möglich, Recordsetobjekte vom Typ "Tabelle" zu sortieren. Rufen Sie "SetCurrentIndex" auf, um die Sortierreihenfolge eines Recordsets vom Typ "Tabelle" zu ermitteln.

Die Verwendung von m_strSort hat keine Auswirkung, wenn ein Recordset mit einem CDaoQueryDef Zeiger geöffnet wird.

Verwandte Informationen finden Sie im Thema "Sort Property" in der DAO-Hilfe.

CDaoRecordset::Move

Rufen Sie diese Memberfunktion auf, um die Recordset lRows-Datensätze aus dem aktuellen Datensatz zu positionieren.

virtual void Move(long lRows);

Parameter

lRows
Die Anzahl der Datensätze, die vorwärts oder rückwärts verschoben werden sollen. Positive Werte bewegen sich nach vorne bis zum Ende des Recordsets. Negative Werte bewegen sich rückwärts, zum Anfang.

Hinweise

Sie können vorwärts oder rückwärts wechseln. Move( 1 )MoveNextentspricht dem , und Move( -1 ) entspricht MovePrevdem .

Achtung

Das Aufrufen einer der Move Funktionen löst eine Ausnahme aus, wenn das Recordset keine Datensätze enthält. Rufen Sie im Allgemeinen sowohl als auch IsBOF IsEOF vor einem Move-Vorgang auf, um zu bestimmen, ob das Recordset Datensätze enthält. Rufen Sie nach dem Anruf Open oder Requery, oder rufen Sie entweder IsBOF oder IsEOF.

Hinweis

Wenn Sie einen Bildlauf nach dem Anfang oder Ende des Recordsets ( IsBOF oder IsEOF gibt nonzero ) zurück), wird ein Aufruf ausgelöstMove.CDaoException

Hinweis

Wenn Sie eine der Move Funktionen aufrufen, während der aktuelle Datensatz aktualisiert oder hinzugefügt wird, gehen die Updates ohne Warnung verloren.

Wenn Sie eine Momentaufnahme für einen Vorwärtslauf aufrufen Move , muss der Parameter "lRows " eine positive ganze Zahl sein, und Lesezeichen sind nicht zulässig, sodass Sie nur vorwärts navigieren können.

Um den ersten, letzten, nächsten oder vorherigen Datensatz in einem Recordset zum aktuellen Datensatz zu machen, rufen Sie die MoveFirstFunktion , MoveLast, , MoveNextoder MovePrev Member auf.

Verwandte Informationen finden Sie unter den Themen "Move Method" und "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" in der DAO-Hilfe.

CDaoRecordset::MoveFirst

Rufen Sie diese Memberfunktion auf, um den ersten Datensatz im Recordset (falls vorhanden) zum aktuellen Datensatz zu machen.

void MoveFirst();

Hinweise

Sie müssen nicht sofort anrufen MoveFirst , nachdem Sie das Recordset geöffnet haben. Zu diesem Zeitpunkt ist der erste Datensatz (sofern vorhanden) automatisch der aktuelle Datensatz.

Achtung

Das Aufrufen einer der Move Funktionen löst eine Ausnahme aus, wenn das Recordset keine Datensätze enthält. Rufen Sie im Allgemeinen sowohl als auch IsBOF IsEOF vor einem Move-Vorgang auf, um zu bestimmen, ob das Recordset Datensätze enthält. Rufen Sie nach dem Anruf Open oder Requery, oder rufen Sie entweder IsBOF oder IsEOF.

Hinweis

Wenn Sie eine der Move Funktionen aufrufen, während der aktuelle Datensatz aktualisiert oder hinzugefügt wird, gehen die Updates ohne Warnung verloren.

Verwenden Sie die Move Funktionen, um von Datensatz zu Datensatz zu wechseln, ohne eine Bedingung anzuwenden. Verwenden Sie die Find-Vorgänge, um Datensätze in einem Recordsetobjekt vom Typ "dynaset" oder "snapshot" zu suchen, das eine bestimmte Bedingung erfüllt. Rufen Sie auf, um Seekeinen Datensatz in einem Recordsetobjekt vom Typ Tabelle zu suchen.

Wenn sich das Recordset auf ein Recordset vom Typ Tabelle bezieht, folgt die Bewegung dem aktuellen Index der Tabelle. Sie können den aktuellen Index mithilfe der Index-Eigenschaft des zugrunde liegenden DAO-Objekts festlegen. Wenn Sie den aktuellen Index nicht festlegen, ist die Reihenfolge der zurückgegebenen Datensätze nicht definiert.

Wenn Sie ein Recordset-Objekt aufrufen MoveLast , das auf einer SQL-Abfrage oder abfragedef basiert, wird die Abfrage zum Abschluss gezwungen, und das Recordset-Objekt wird vollständig ausgefüllt.

Sie können die Oder-Member-Funktion MoveFirst MovePrev nicht mit einer Vorwärts-Bildlauf-Momentaufnahme aufrufen.

Zum Verschieben der Position des aktuellen Datensatzes in einem Recordset-Objekt eine bestimmte Anzahl von Datensätzen vorwärts oder rückwärts, rufen Sie auf Move.

Verwandte Informationen finden Sie unter den Themen "Move Method" und "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" in der DAO-Hilfe.

CDaoRecordset::MoveLast

Rufen Sie diese Memberfunktion auf, um den letzten Datensatz (falls vorhanden) im Recordset zum aktuellen Datensatz zu machen.

void MoveLast();

Hinweise

Achtung

Das Aufrufen einer der Move Funktionen löst eine Ausnahme aus, wenn das Recordset keine Datensätze enthält. Rufen Sie im Allgemeinen sowohl als auch IsBOF IsEOF vor einem Move-Vorgang auf, um zu bestimmen, ob das Recordset Datensätze enthält. Rufen Sie nach dem Anruf Open oder Requery, oder rufen Sie entweder IsBOF oder IsEOF.

Hinweis

Wenn Sie eine der Move Funktionen aufrufen, während der aktuelle Datensatz aktualisiert oder hinzugefügt wird, gehen die Updates ohne Warnung verloren.

Verwenden Sie die Move Funktionen, um von Datensatz zu Datensatz zu wechseln, ohne eine Bedingung anzuwenden. Verwenden Sie die Find-Vorgänge, um Datensätze in einem Recordsetobjekt vom Typ "dynaset" oder "snapshot" zu suchen, das eine bestimmte Bedingung erfüllt. Rufen Sie auf, um Seekeinen Datensatz in einem Recordsetobjekt vom Typ Tabelle zu suchen.

Wenn sich das Recordset auf ein Recordset vom Typ Tabelle bezieht, folgt die Bewegung dem aktuellen Index der Tabelle. Sie können den aktuellen Index mithilfe der Index-Eigenschaft des zugrunde liegenden DAO-Objekts festlegen. Wenn Sie den aktuellen Index nicht festlegen, ist die Reihenfolge der zurückgegebenen Datensätze nicht definiert.

Wenn Sie ein Recordset-Objekt aufrufen MoveLast , das auf einer SQL-Abfrage oder abfragedef basiert, wird die Abfrage zum Abschluss gezwungen, und das Recordset-Objekt wird vollständig ausgefüllt.

Zum Verschieben der Position des aktuellen Datensatzes in einem Recordset-Objekt eine bestimmte Anzahl von Datensätzen vorwärts oder rückwärts, rufen Sie auf Move.

Verwandte Informationen finden Sie unter den Themen "Move Method" und "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" in der DAO-Hilfe.

CDaoRecordset::MoveNext

Rufen Sie diese Memberfunktion auf, um den nächsten Datensatz im Recordset zum aktuellen Datensatz zu machen.

void MoveNext();

Hinweise

Es wird empfohlen, dass Sie anrufen IsBOF , bevor Sie versuchen, zum vorherigen Datensatz zu wechseln. Ein Aufruf, der MovePrev einen CDaoException Wenn-Wert zurückgibt, IsBOF der angibt, dass Sie bereits vor dem ersten Datensatz scrollen oder dass vom Recordset keine Datensätze ausgewählt wurden.

Achtung

Das Aufrufen einer der Move Funktionen löst eine Ausnahme aus, wenn das Recordset keine Datensätze enthält. Rufen Sie im Allgemeinen sowohl als auch IsBOF IsEOF vor einem Move-Vorgang auf, um zu bestimmen, ob das Recordset Datensätze enthält. Rufen Sie nach dem Anruf Open oder Requery, oder rufen Sie entweder IsBOF oder IsEOF.

Hinweis

Wenn Sie eine der Move Funktionen aufrufen, während der aktuelle Datensatz aktualisiert oder hinzugefügt wird, gehen die Updates ohne Warnung verloren.

Verwenden Sie die Move Funktionen, um von Datensatz zu Datensatz zu wechseln, ohne eine Bedingung anzuwenden. Verwenden Sie die Find-Vorgänge, um Datensätze in einem Recordsetobjekt vom Typ "dynaset" oder "snapshot" zu suchen, das eine bestimmte Bedingung erfüllt. Rufen Sie auf, um Seekeinen Datensatz in einem Recordsetobjekt vom Typ Tabelle zu suchen.

Wenn sich das Recordset auf ein Recordset vom Typ Tabelle bezieht, folgt die Bewegung dem aktuellen Index der Tabelle. Sie können den aktuellen Index mithilfe der Index-Eigenschaft des zugrunde liegenden DAO-Objekts festlegen. Wenn Sie den aktuellen Index nicht festlegen, ist die Reihenfolge der zurückgegebenen Datensätze nicht definiert.

Zum Verschieben der Position des aktuellen Datensatzes in einem Recordset-Objekt eine bestimmte Anzahl von Datensätzen vorwärts oder rückwärts, rufen Sie auf Move.

Verwandte Informationen finden Sie unter den Themen "Move Method" und "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" in der DAO-Hilfe.

CDaoRecordset::MovePrev

Rufen Sie diese Memberfunktion auf, um den vorherigen Datensatz im Recordset zum aktuellen Datensatz zu machen.

void MovePrev();

Hinweise

Es wird empfohlen, dass Sie anrufen IsBOF , bevor Sie versuchen, zum vorherigen Datensatz zu wechseln. Ein Aufruf, der MovePrev einen CDaoException Wenn-Wert zurückgibt, IsBOF der angibt, dass Sie bereits vor dem ersten Datensatz scrollen oder dass vom Recordset keine Datensätze ausgewählt wurden.

Achtung

Das Aufrufen einer der Move Funktionen löst eine Ausnahme aus, wenn das Recordset keine Datensätze enthält. Rufen Sie im Allgemeinen sowohl als auch IsBOF IsEOF vor einem Move-Vorgang auf, um zu bestimmen, ob das Recordset Datensätze enthält. Rufen Sie nach dem Anruf Open oder Requery, oder rufen Sie entweder IsBOF oder IsEOF.

Hinweis

Wenn Sie eine der Move Funktionen aufrufen, während der aktuelle Datensatz aktualisiert oder hinzugefügt wird, gehen die Updates ohne Warnung verloren.

Verwenden Sie die Move Funktionen, um von Datensatz zu Datensatz zu wechseln, ohne eine Bedingung anzuwenden. Verwenden Sie die Find-Vorgänge, um Datensätze in einem Recordsetobjekt vom Typ "dynaset" oder "snapshot" zu suchen, das eine bestimmte Bedingung erfüllt. Rufen Sie auf, um Seekeinen Datensatz in einem Recordsetobjekt vom Typ Tabelle zu suchen.

Wenn sich das Recordset auf ein Recordset vom Typ Tabelle bezieht, folgt die Bewegung dem aktuellen Index der Tabelle. Sie können den aktuellen Index mithilfe der Index-Eigenschaft des zugrunde liegenden DAO-Objekts festlegen. Wenn Sie den aktuellen Index nicht festlegen, ist die Reihenfolge der zurückgegebenen Datensätze nicht definiert.

Sie können die Oder-Member-Funktion MoveFirst MovePrev nicht mit einer Vorwärts-Bildlauf-Momentaufnahme aufrufen.

Zum Verschieben der Position des aktuellen Datensatzes in einem Recordset-Objekt eine bestimmte Anzahl von Datensätzen vorwärts oder rückwärts, rufen Sie auf Move.

Verwandte Informationen finden Sie unter den Themen "Move Method" und "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" in der DAO-Hilfe.

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:

  • dbOpenDynaset Ein Recordset vom Typ "dynaset" mit bidirektionalem Bildlauf. Dies ist die Standardeinstellung.

  • dbOpenTable Ein Recordset vom Typ Tabelle mit bidirektionalem Bildlauf.

  • dbOpenSnapshot Ein Recordset vom Typ "Snapshot" mit bidirektionalem Bildlauf.

lpszSQL
Eine Zeichenfolge, in der eines der folgenden Elemente enthalten ist:

  • Ein NULL-Zeiger.

  • Der Name einer oder mehrerer Tabledefs und/oder Querydefs (kommagetrennt).

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

  • Eine Pass-Through-Abfrage.

nOptions
Eine oder mehrere der unten aufgeführten Optionen. Der Standardwert ist 0. Verfügbare mögliche Werte:

  • dbAppendOnly Sie können nur neue Datensätze anfügen (nur dynaset-type recordset). Diese Option bedeutet buchstäblich, dass Datensätze nur angefügt werden können. Die MFC ODBC-Datenbankklassen verfügen über eine Option, mit der Datensätze abgerufen und angefügt werden können.

  • dbForwardOnly Das Recordset ist eine Momentaufnahme für einen Vorwärtslauf.

  • dbSeeChanges Generieren Sie eine Ausnahme, wenn ein anderer Benutzer Daten ändert, die Sie bearbeiten.

  • dbDenyWrite Andere Benutzer können Keine Datensätze ändern oder hinzufügen.

  • dbDenyRead Andere Benutzer können Datensätze nicht anzeigen (nur Recordset vom Tabellentyp).

  • dbReadOnly Datensätze können nur angezeigt werden; andere Benutzer können sie ändern.

  • dbInconsistent Inkonsistente Updates sind zulässig (nur recordset vom Dynaset-Typ).

  • dbConsistent Es sind nur konsistente Updates zulässig (nur recordset vom Dynaset-Typ).

Hinweis

Die Konstanten dbConsistent und dbInconsistent schließen sich gegenseitig aus. Sie können eine oder die andere verwenden, aber nicht beide in einer bestimmten Instanz von Open.

pTableDef
Ein Zeiger auf ein CDaoTableDef-Objekt . Diese Version ist nur für Recordsets vom Typ Tabelle gültig. Bei Verwendung dieser Option wird der CDaoDatabase zum Erstellen CDaoRecordset verwendete Zeiger nicht verwendet. Stattdessen wird die Datenbank, in der sich die Tabelle befindet, verwendet.

pQueryDef
Ein Zeiger auf ein CDaoQueryDef-Objekt . Diese Version ist nur für Recordsets vom Typ "dynaset" und "snapshot" gültig. Bei Verwendung dieser Option wird der CDaoDatabase zum Konstruieren CDaoRecordset verwendete Zeiger nicht verwendet. Stattdessen wird die Datenbank verwendet, in der sich die Abfragedef befindet.

Hinweise

Vor dem Aufrufen Openmüssen Sie das Recordset-Objekt erstellen. Dafür stehen verschiedene Möglichkeiten zur Verfügung:

  • Übergeben Sie beim Erstellen des Recordset-Objekts einen Zeiger an ein bereits geöffnetes CDaoDatabase Objekt.

  • Wenn Sie das Recordset-Objekt erstellen, übergeben Sie einen Zeiger auf ein CDaoDatabase objekt, das nicht geöffnet ist. Das Recordset öffnet ein CDaoDatabase Objekt, schließt es jedoch nicht, wenn das Recordset-Objekt geschlossen wird.

  • Wenn Sie das Recordset-Objekt erstellen, übergeben Sie einen NULL-Zeiger. Das Recordset-Objekt ruft GetDefaultDBName den Namen von Microsoft Access ab. Zu öffnende MDB-Datei. Das Recordset öffnet dann ein CDaoDatabase Objekt und hält es geöffnet, solange das Recordset geöffnet ist. Wenn Sie das Recordset aufrufen Close , wird das CDaoDatabase Objekt ebenfalls geschlossen.

    Hinweis

    Wenn das Recordset das CDaoDatabase Objekt öffnet, wird die Datenquelle mit nicht exklusivem Zugriff geöffnet.

Für die Version, die Open den lpszSQL-Parameter verwendet, können Sie Datensätze auf eine von mehreren Arten abrufen, sobald das Recordset geöffnet ist. Die erste Option besteht darin, DFX-Funktionen in Ihrer DoFieldExchange. Die zweite Option besteht darin, die dynamische Bindung durch Aufrufen der GetFieldValue Memberfunktion zu verwenden. Diese Optionen können separat oder in Kombination implementiert werden. Wenn sie kombiniert werden, müssen Sie die SQL-Anweisung selbst an den Aufruf Openübergeben.

Wenn Sie die zweite Version verwenden Open , in der Sie ein CDaoTableDef Objekt übergeben, stehen ihnen die resultierenden Spalten zur Verfügung, die sie über DoFieldExchange den DFX-Mechanismus binden und/oder dynamisch über GetFieldValuebinden können.

Hinweis

Sie können nur ein CDaoTableDef Objekt für Recordsets vom Typ Tabelle aufrufenOpen.

Wenn Sie die dritte Version verwenden Open , in der Sie ein CDaoQueryDef Objekt übergeben, wird diese Abfrage ausgeführt, und die resultierenden Spalten sind für Sie verfügbar, um eine Bindung über DoFieldExchange und den DFX-Mechanismus und/oder eine dynamische Bindung über GetFieldValue.

Hinweis

Sie können nur ein CDaoQueryDef Objekt für Recordsets vom Typ "dynaset" und "snapshot" aufrufenOpen.

Für die erste Version, in Open der der lpszSQL Parameter verwendet wird, werden Datensätze basierend auf den in der folgenden Tabelle gezeigten Kriterien ausgewählt.

Der Wert des Parameters lpszSQL. Die ausgewählten Datensätze werden von folgenden Aspekten bestimmt: Beispiel
NULL Die von GetDefaultSQL zurückgegebene Zeichenfolge.
Eine durch Trennzeichen getrennte Liste mit einem oder mehreren Tabellennamen und/oder Abfragenamen. Alle Spalten, die in der DoFieldExchange. "Customer"
SELECT column-list FROM table-list Die angegebenen Spalten aus den angegebenen Tabledef(n) und/oder querydef(n). "SELECT CustId, CustName

FROM Customer"

Die übliche Prozedur besteht darin, NULL an Open; in diesem Fall ruft GetDefaultSQLeine überschreibbare Memberfunktion auf, Open die ClassWizard generiert, wenn eine CDaoRecordset-abgeleitete Klasse erstellt wird. Dieser Wert gibt die tabellennamen und/oder abfragedef-Namen an, die Sie in ClassWizard angegeben haben. Sie können stattdessen andere Informationen im lpszSQL-Parameter angeben.

Unabhängig davon, was Sie übergeben, Open erstellt eine endgültige SQL-Zeichenfolge für die Abfrage (die Zeichenfolge kann SQL WHERE - und ORDERBY-Klauseln an die von Ihnen übergebene lpszSQL-Zeichenfolge angefügt haben) und führt dann die Abfrage aus. Sie können die konstruierte Zeichenfolge untersuchen, indem Sie nach dem Aufrufen aufrufen GetSQL Open.

Die Felddatenmember der Recordset-Klasse sind an die Spalten der ausgewählten Daten gebunden. Falls Datensätze zurückgegeben werden, wird der erste Datensatz zum aktuellen Datensatz.

Wenn Sie Optionen für das Recordset festlegen möchten, z. B. einen Filter oder eine Sortierung, legen oder m_strFilter nachdem m_strSort Sie das Recordset-Objekt erstellt haben, aber vor dem Aufruf Openfest. Wenn Sie die Datensätze im Recordset aktualisieren möchten, nachdem das Recordset bereits geöffnet ist, rufen Sie auf Requery.

Wenn Sie ein Recordset vom Typ "dynaset" oder "Snapshot" aufrufen Open oder wenn sich die Datenquelle auf eine SQL-Anweisung oder eine Tabledef bezieht, die eine angefügte Tabelle darstellt, können Sie dies nicht für das Typargument verwenden dbOpenTable . Wenn Sie dies tun, löst MFC eine Ausnahme aus. Um festzustellen, ob ein tabledef -Objekt eine angefügte Tabelle darstellt, erstellen Sie ein CDaoTableDef -Objekt, und rufen Sie dessen GetConnect-Memberfunktion auf.

Verwenden Sie das dbSeeChanges Kennzeichen, wenn Sie Änderungen von einem anderen Benutzer oder einem anderen Programm auf Ihrem Computer abfangen möchten, wenn Sie denselben Datensatz bearbeiten oder löschen. Wenn beispielsweise zwei Benutzer mit der Bearbeitung desselben Datensatzes beginnen, wird der erste Benutzer, der die Update Memberfunktion aufruft, erfolgreich ausgeführt. Wenn Update der zweite Benutzer aufgerufen wird, wird ein CDaoException Fehler ausgelöst. Wenn der zweite Benutzer versucht, den Datensatz zu Delete löschen, und er bereits vom ersten Benutzer geändert wurde, tritt ein CDaoException .

Wenn der Benutzer dies CDaoException beim Aktualisieren erhält, sollte der Code den Inhalt der Felder aktualisieren und die neu geänderten Werte abrufen. Wenn die Ausnahme beim Löschen auftritt, kann ihr Code dem Benutzer die neuen Datensatzdaten anzeigen, und eine Meldung, die angibt, dass sich die Daten kürzlich geändert haben. An diesem Punkt kann Ihr Code eine Bestätigung anfordern, dass der Benutzer den Datensatz trotzdem löschen möchte.

Tipp

Verwenden Sie die Option "Vorwärts scrollen" (dbForwardOnly), um die Leistung zu verbessern, wenn Ihre Anwendung einen einzelnen Durchlauf durch ein Recordset durchführt, der aus einer ODBC-Datenquelle geöffnet wird.

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

CDaoRecordset::Requery

Rufen Sie diese Memberfunktion auf, um ein Recordset neu zu erstellen (aktualisieren).

virtual void Requery();

Hinweise

Falls Datensätze zurückgegeben werden, wird der erste Datensatz zum aktuellen Datensatz.

Damit das Recordset die Ergänzungen und Löschungen widerspiegelt, die Sie oder andere Benutzer an der Datenquelle vornehmen, müssen Sie das Recordset durch Aufrufen Requeryneu erstellen. Wenn es sich bei dem Recordset um ein Dynaset handelt, werden automatisch Aktualisierungen angezeigt, die Sie oder andere Benutzer an ihren vorhandenen Datensätzen vornehmen (aber keine Ergänzungen). Wenn das Recordset eine Momentaufnahme ist, müssen Sie aufrufen Requery , um Bearbeitungen anderer Benutzer sowie Ergänzungen und Löschungen widerzuspiegeln.

Rufen Sie für ein Dynaset oder eine Momentaufnahme auf Requery , wenn Sie das Recordset mithilfe von Parameterwerten neu erstellen möchten. Legen Sie den neuen Filter fest oder sortieren Sie nach Einstellung m_strFilter und m_strSort vor dem Aufrufen Requery. Legen Sie neue Parameter fest, indem Sie parametern Datenmmber vor dem Aufrufen Requeryneue Werte zuweisen.

Wenn der Versuch, das Recordset neu zu erstellen, fehlschlägt, wird das Recordset geschlossen. Bevor Sie aufrufen Requery, können Sie ermitteln, ob das Recordset durch Aufrufen der CanRestart Memberfunktion erneut abfragt werden kann. CanRestart garantiert nicht, dass dies Requery erfolgreich ist.

Achtung

Rufen Sie Requery nur an, nachdem Sie angerufen Openhaben.

Hinweis

Das Aufrufen Requery von DAO-Textmarken ändert sich.

Sie können kein Recordset vom Typ "dynaset" oder "snapshot" aufrufen Requery , wenn der Aufruf CanRestart "0" zurückgibt, oder Sie können es auch für ein Recordset vom Typ "table"- verwenden.

Wenn nach dem Aufruf Requerysowohl ein IsBOF IsEOF Nichtzero zurückgegeben wird, hat die Abfrage keine Datensätze zurückgegeben, und das Recordset enthält keine Daten.

Verwandte Informationen finden Sie im Thema "Requery-Methode" in der DAO-Hilfe.

CDaoRecordset::Seek

Rufen Sie diese Memberfunktion auf, um den Datensatz in einem indizierten Recordsetobjekt vom Typ Tabelle zu suchen, das den angegebenen Kriterien für den aktuellen Index entspricht, und diesen Datensatz zum aktuellen Datensatz machen.

BOOL Seek(
    LPCTSTR lpszComparison,
    COleVariant* pKey1,
    COleVariant* pKey2 = NULL,
    COleVariant* pKey3 = NULL);

BOOL Seek(
    LPCTSTR lpszComparison,
    COleVariant* pKeyArray,
    WORD nKeys);

Parameter

lpszComparison
Einer der folgenden Zeichenfolgenausdrücke: "<", "<=", "=", "=", ">=" oder ">".

pKey1
Ein Zeiger auf einen COleVariant-Wert , dessen Wert dem ersten Feld im Index entspricht. Erforderlich.

pKey2
Ein Zeiger auf einen COleVariant , dessen Wert dem zweiten Feld im Index entspricht, falls vorhanden. Standardwert ist NULL.

pKey3
Ein Zeiger auf einen COleVariant , dessen Wert dem dritten Feld im Index entspricht, falls vorhanden. Standardwert ist NULL.

pKeyArray
Ein Zeiger auf ein Array von Varianten. Die Arraygröße entspricht der Anzahl der Felder im Index.

nKeys
Eine ganze Zahl, die der Größe des Arrays entspricht, bei dem es sich um die Anzahl der Felder im Index handelt.

Hinweis

on't specify wildcards in the keys. Mit Wildcards werden Seek keine übereinstimmenden Datensätze zurückgegeben.

Rückgabewert

Nonzero, wenn übereinstimmende Datensätze gefunden werden, andernfalls 0.

Hinweise

Verwenden Sie die zweite (Array)-Version, um Seek Indizes von vier Feldern oder mehr zu behandeln.

Seek ermöglicht die Hochleistungsindexsuche nach Recordsets vom Typ "Tabelle". Sie müssen den aktuellen Index festlegen, indem Sie vor dem Aufrufen aufrufen SetCurrentIndex Seek. Wenn der Index ein nicht eindeutiges Schlüsselfeld oder -felder identifiziert, sucht der erste Datensatz, Seek der die Kriterien erfüllt. Wenn Sie keinen Index festlegen, wird eine Ausnahme ausgelöst.

Wenn Sie kein UNICODE-Recordset erstellen, müssen die COleVariant Objekte explizit ANSI deklariert werden. Dies kann mithilfe der COleVariant::COleVariant( lpszSrc , vtSrc ) Form des Konstruktors mit vtSrc-Set auf VT_BSTRT (ANSI) oder mithilfe der COleVariant Funktion SetString( lpszSrc , vtSrc ) mit vtSrc festgelegt auf .VT_BSTRT

Beim Aufrufen Seekübergeben Sie einen oder mehrere Schlüsselwerte und einen Vergleichsoperator ("<", "=", "<=", "=", ">=" oder ">"). Seek durchsucht die angegebenen Schlüsselfelder und sucht den ersten Datensatz, der die durch lpszComparison und pKey1 angegebenen Kriterien erfüllt. Sobald dieser gefunden wurde, Seek gibt "nonzero" zurück und macht diesen Datensatz auf dem aktuellen Stand. Wenn Seek keine Übereinstimmung gefunden werden kann, Seek wird null zurückgegeben, und der aktuelle Datensatz ist nicht definiert. Wenn Sie DAO direkt verwenden, müssen Sie die NoMatch-Eigenschaft explizit überprüfen.

Wenn lpszComparison "=", ">=" oder ">", Seek beginnt am Anfang des Indexes. Wenn lpszComparison "" oder "<<=" lautet, beginnt am Ende des Indexes und sucht rückwärts, Seek es sei denn, es gibt doppelte Indexeinträge am Ende. In diesem Fall Seek beginnt bei einem beliebigen Eintrag zwischen den doppelten Indexeinträgen am Ende des Indexes.

Es muss kein aktueller Datensatz vorhanden sein, wenn Sie es verwenden Seek.

Verwenden Sie die Suchvorgänge, um einen Datensatz in einem Recordset vom Typ "dynaset" oder "Snapshot", der einer bestimmten Bedingung entspricht, zu suchen. Um alle Datensätze einzuschließen, nicht nur diejenigen, die eine bestimmte Bedingung erfüllen, verwenden Sie die Move-Vorgänge, um von Datensatz zu Datensatz zu wechseln.

Sie können keine angefügte Tabelle eines beliebigen Typs aufrufen Seek , da angefügte Tabellen als Recordsets vom Typ "dynaset" oder "snapshot" geöffnet werden müssen. Wenn Sie jedoch aufrufen CDaoDatabase::Open , eine installierbare ISAM-Datenbank direkt zu öffnen, können Sie Tabellen in dieser Datenbank aufrufen Seek , obwohl die Leistung möglicherweise langsam ist.

Verwandte Informationen finden Sie im Thema "Seek-Methode" in der DAO-Hilfe.

CDaoRecordset::SetAbsolutePosition

Legt die relative Datensatznummer des aktuellen Datensatzes eines Recordsetobjekts fest.

void SetAbsolutePosition(long lPosition);

Parameter

lPosition
Entspricht der Ordnungsposition des aktuellen Datensatzes im Recordset.

Hinweise

Durch Aufrufen SetAbsolutePosition können Sie den aktuellen Datensatzzeiger auf einen bestimmten Datensatz basierend auf seiner Ordnungsposition in einem Recordset vom Typ Dynaset oder Snapshot positionieren. Sie können auch die aktuelle Datensatznummer ermitteln, indem Sie GetAbsolutePosition aufrufen.

Hinweis

Diese Memberfunktion ist nur für Recordsets vom Typ "dynaset" und "snapshot" gültig.

Der AbsolutePosition-Eigenschaftswert des zugrunde liegenden DAO-Objekts ist nullbasiert; Eine Einstellung von 0 bezieht sich auf den ersten Datensatz im Recordset. Wenn Sie einen Wert festlegen, der größer als die Anzahl der aufgefüllten Datensätze ist, löst MFC eine Ausnahme aus. Sie können die Anzahl der aufgefüllten Datensätze im Recordset ermitteln, indem Sie die GetRecordCount Memberfunktion aufrufen.

Wenn der aktuelle Datensatz gelöscht wird, wird der AbsolutePosition-Eigenschaftswert nicht definiert, und MFC löst eine Ausnahme aus, wenn darauf verwiesen wird. Neue Datensätze werden am Ende der Sequenz hinzugefügt.

Hinweis

Diese Eigenschaft soll nicht als Ersatzdatensatznummer verwendet werden. Lesezeichen sind weiterhin die empfohlene Methode zum Aufbewahren und Zurückgeben an eine bestimmte Position und sind die einzige Möglichkeit, den aktuellen Datensatz über alle Arten von Recordsetobjekten zu positionieren, die Lesezeichen unterstützen. Insbesondere ändert sich die Position eines bestimmten Datensatzes, wenn Datensätze, die ihm vorangehen, gelöscht werden. Es gibt auch keine Gewissheit, dass ein bestimmter Datensatz dieselbe absolute Position hat, wenn das Recordset erneut erstellt wird, da die Reihenfolge einzelner Datensätze innerhalb eines Recordsets nicht garantiert ist, es sei denn, er wird mit einer SQL-Anweisung mit einer ORDERBY-Klausel erstellt.

Verwandte Informationen finden Sie im Thema "AbsolutePosition-Eigenschaft" in der DAO-Hilfe.

CDaoRecordset::SetBookmark

Rufen Sie diese Memberfunktion auf, um das Recordset auf dem Datensatz zu positionieren, der die angegebene Textmarke enthält.

void SetBookmark(COleVariant varBookmark);

Parameter

varBookmark
Ein COleVariant -Objekt, das den Textmarkenwert für einen bestimmten Datensatz enthält.

Hinweise

Wenn ein Recordset-Objekt erstellt oder geöffnet wird, verfügt jeder Datensatz bereits über eine eindeutige Textmarke. Sie können die Textmarke für den aktuellen Datensatz abrufen, indem Sie den Wert in einem COleVariant Objekt aufrufen GetBookmark und speichern. Sie können später zu diesem Datensatz zurückkehren, indem Sie den gespeicherten Textmarkenwert aufrufen SetBookmark .

Hinweis

Durch Aufrufen von Requery werden DAO-Textmarken geändert.

Wenn Sie kein UNICODE-Recordset erstellen, muss das COleVariant Objekt explizit ANSI deklariert werden. Dies kann mithilfe der COleVariant::COleVariant( lpszSrc , vtSrc ) Form des Konstruktors mit vtSrc-Set auf VT_BSTRT (ANSI) oder mithilfe der COleVariant Funktion SetString( lpszSrc , vtSrc ) mit vtSrc festgelegt auf .VT_BSTRT

Verwandte Informationen finden Sie in der DAO-Hilfe unter den Themen "Bookmark-Eigenschaft" und "Bookmarkable Property".

CDaoRecordset::SetCacheSize

Rufen Sie diese Memberfunktion auf, um die Anzahl der datensätze festzulegen, die zwischengespeichert werden sollen.

void SetCacheSize(long lSize);

Parameter

lSize
Gibt die Anzahl der Datensätze an. Ein typischer Wert ist 100. Durch eine Einstellung von 0 wird die Zwischenspeicherung deaktiviert. Die Einstellung muss zwischen 5 und 1.200 Datensätzen sein. Der Cache kann einen erheblichen Arbeitsspeicher belegen.

Hinweise

Ein Cache ist ein Speicher im lokalen Speicher, der die Daten enthält, die zuletzt vom Server abgerufen wurden, falls die Daten erneut angefordert werden, während die Anwendung ausgeführt wird. Die Datenzwischenspeicherung verbessert die Leistung einer Anwendung, die Daten von einem Remoteserver über Recordset-Objekte vom Typ Dynaset abruft. Wenn Daten angefordert werden, überprüft das Microsoft Jet-Datenbankmodul zuerst den Cache für die angeforderten Daten, anstatt sie vom Server abzurufen, was mehr Zeit in Anspruch nimmt. Daten, die nicht aus einer ODBC-Datenquelle stammen, werden nicht im Cache gespeichert.

Jede ODBC-Datenquelle, z. B. eine angefügte Tabelle, kann über einen lokalen Cache verfügen. Öffnen Sie zum Erstellen des Caches ein Recordset-Objekt aus der Remotedatenquelle, rufen Sie die SetCacheSize Funktionen und SetCacheStart Member auf, und rufen Sie dann die FillCache Memberfunktion auf, oder durchlaufen Sie die Datensätze mithilfe einer der Move-Vorgänge. Der lSize-Parameter der SetCacheSize Memberfunktion kann auf der Anzahl der Datensätze basieren, mit denen Ihre Anwendung gleichzeitig arbeiten kann. Wenn Sie beispielsweise ein Recordset als Datenquelle verwenden, die auf dem Bildschirm angezeigt werden soll, können Sie den SetCacheSize lSize-Parameter als 20 übergeben, um 20 Datensätze gleichzeitig anzuzeigen.

Verwandte Informationen finden Sie im Thema "CacheSize, CacheStart Properties" in der DAO-Hilfe.

CDaoRecordset::SetCacheStart

Rufen Sie diese Memberfunktion auf, um die Textmarke des ersten Datensatzes im Recordset anzugeben, der zwischengespeichert werden soll.

void SetCacheStart(COleVariant varBookmark);

Parameter

varBookmark
Eine COleVariant , die das Lesezeichen des ersten Datensatzes im Recordset angibt, das zwischengespeichert werden soll.

Hinweise

Sie können den Textmarkenwert eines beliebigen Datensatzes für den VarBookmark-Parameter der SetCacheStart Memberfunktion verwenden. Erstellen Sie den Datensatz, den Sie mit dem aktuellen Datensatz starten möchten, richten Sie mithilfe von SetBookmark eine Textmarke für diesen Datensatz ein, und übergeben Sie den Textmarkenwert als Parameter für die SetCacheStart Memberfunktion.

Das Microsoft Jet-Datenbankmodul fordert Datensätze innerhalb des Cachebereichs vom Cache an und fordert Datensätze außerhalb des Cachebereichs vom Server an.

Datensätze, die aus dem Cache abgerufen werden, spiegeln keine Änderungen wider, die gleichzeitig an den Quelldaten von anderen Benutzern vorgenommen wurden.

Um eine Aktualisierung aller zwischengespeicherten Daten zu erzwingen, übergeben Sie den lSize-Parameter von SetCacheSize "0", rufen Sie SetCacheSize erneut mit der Größe des ursprünglich angeforderten Caches auf, und rufen Sie dann die FillCache Memberfunktion auf.

Wenn Sie kein UNICODE-Recordset erstellen, muss das COleVariant Objekt explizit ANSI deklariert werden. Dies kann mithilfe der COleVariant::COleVariant( lpszSrc , vtSrc ) Form des Konstruktors mit vtSrc-Set auf VT_BSTRT (ANSI) oder mithilfe der COleVariant Funktion SetString( lpszSrc , vtSrc ) mit vtSrc festgelegt auf .VT_BSTRT

Verwandte Informationen finden Sie im Thema "CacheSize, CacheStart Properties" in der DAO-Hilfe.

CDaoRecordset::SetCurrentIndex

Rufen Sie diese Memberfunktion auf, um einen Index für ein Recordset vom Typ Tabelle festzulegen.

void SetCurrentIndex(LPCTSTR lpszIndex);

Parameter

lpszIndex
Ein Zeiger, der den Namen des festzulegenden Indexes enthält.

Hinweise

Datensätze in Basistabellen werden nicht in einer bestimmten Reihenfolge gespeichert. Das Festlegen eines Indexes ändert die Reihenfolge der datensätze, die aus der Datenbank zurückgegeben werden, wirkt sich jedoch nicht auf die Reihenfolge aus, in der die Datensätze gespeichert werden. Der angegebene Index muss bereits definiert sein. Wenn Sie versuchen, ein Indexobjekt zu verwenden, das nicht vorhanden ist, oder wenn der Index beim Aufrufen von Seek nicht festgelegt ist, löst MFC eine Ausnahme aus.

Sie können einen neuen Index für die Tabelle erstellen, indem Sie CDaoTableDef::CreateIndex aufrufen und den neuen Index an die Indexes-Auflistung der zugrunde liegenden Tabledef anfügen, indem Sie CDaoTableDef::Append aufrufen und dann das Recordset erneut öffnen.

Datensätze, die von einem Recordset vom Tabellentyp zurückgegeben werden, können nur von den Indizes sortiert werden, die für die zugrunde liegende Tabelle definiert sind. Zum Sortieren von Datensätzen in einer anderen Reihenfolge können Sie ein Recordset vom Typ "dynaset" oder "snapshot" mithilfe einer SQL ORDERBY-Klausel öffnen, die in CDaoRecordset::m_strSort gespeichert ist.

Verwandte Informationen finden Sie im Thema "Index-Objekt" und der Definition "aktueller Index" in der DAO-Hilfe.

CDaoRecordset::SetFieldDirty

Rufen Sie diese Memberfunktion auf, um ein Felddatenelement des Recordsets als geändert oder unverändert zu kennzeichnen.

void SetFieldDirty(
    void* pv,
    BOOL bDirty = TRUE);

Parameter

Pv
Enthält die Adresse eines Felddatenelements im Recordset oder NULL.Contains the address of a field data member in the recordset or NULL. Wenn NULL, werden alle Felddatenmber im Recordset gekennzeichnet. (C++ NULL ist nicht mit Null in der Datenbankterminologie identisch, was bedeutet, dass "kein Wert vorhanden" ist.)

bDirty
TRUE, wenn das Felddatenmemm als "geändert" gekennzeichnet werden soll. Andernfalls FALSE, wenn das Felddatenmember als "sauber" gekennzeichnet werden soll (unverändert).

Hinweise

Das Markieren von Feldern als unverändert stellt sicher, dass das Feld nicht aktualisiert wird.

Das Framework kennzeichnet geänderte Felddatenmber, um sicherzustellen, dass sie vom DAO-Datensatzfeldaustauschmechanismus (DFX) in den Datensatz in die Datenquelle geschrieben werden. Wenn Sie den Wert eines Felds ändern, wird das Feld in der Regel automatisch geändert, sodass Sie sich selten selbst aufrufen SetFieldDirty müssen, aber Sie möchten manchmal sicherstellen, dass Spalten explizit aktualisiert oder eingefügt werden, unabhängig davon, welcher Wert sich im Felddatenmemm befindet. Der DFX-Mechanismus verwendet auch die Verwendung von PSEUDONULL. Weitere Informationen finden Sie unter CDaoFieldExchange::m_nOperation.

Wenn der Mechanismus zum Doppeltpuffern nicht verwendet wird, wird beim Ändern des Feldwerts das Feld nicht automatisch als geändert festgelegt. In diesem Fall muss das Feld explizit als geändert festgelegt werden. Das in m_bCheckCacheForDirtyFields enthaltene Kennzeichen steuert diese automatische Feldüberprüfung.

Hinweis

Rufen Sie diese Memberfunktion erst auf, nachdem Sie "Bearbeiten" oder "AddNew" aufgerufen haben.

Wenn Sie NULL für das erste Argument der Funktion verwenden, wird die Funktion auf alle outputColumn Felder angewendet, nicht auf Paramfelder in CDaoFieldExchange. Beispielsweise der Anruf

SetFieldDirty(NULL);

legt nur outputColumn Felder auf NULL fest; Param-Felder sind nicht betroffen.

Um an einem Param zu arbeiten, müssen Sie die tatsächliche Adresse des einzelnen Param angeben, an dem Sie arbeiten möchten, z. B.:

SetFieldDirty(&m_strParam);

Dies bedeutet, dass Sie nicht alle Paramfelder auf NULL festlegen können, wie sie mit outputColumn Feldern möglich sind.

SetFieldDirty wird über DoFieldExchange.

CDaoRecordset::SetFieldNull

Rufen Sie diese Memberfunktion auf, um ein Felddatenmemm des Recordsets als Null (insbesondere ohne Wert) oder als Nicht-Null zu kennzeichnen.

void SetFieldNull(
    void* pv,
    BOOL bNull = TRUE);

Parameter

Pv
Enthält die Adresse eines Felddatenelements im Recordset oder NULL.Contains the address of a field data member in the recordset or NULL. Wenn NULL, werden alle Felddatenmber im Recordset gekennzeichnet. (C++ NULL ist nicht mit Null in der Datenbankterminologie identisch, was bedeutet, dass "kein Wert vorhanden" ist.)

bNull
Nonzero, wenn das Felddatenmemm als kein Wert (Null) gekennzeichnet werden soll. Andernfalls 0, wenn das Felddatenmemm als nicht null gekennzeichnet werden soll.

Hinweise

SetFieldNull wird für Felder verwendet, die DoFieldExchange im Mechanismus gebunden sind.

Wenn Sie einem Recordset einen neuen Datensatz hinzufügen, werden zunächst alle Felddatenmember auf einen Null-Wert festgelegt und als "geändert" gekennzeichnet. Wenn Sie einen Datensatz aus einer Datenquelle abrufen, weisen die Spalten entweder bereits Werte auf oder sind Null. Wenn es nicht geeignet ist, ein Feld Null zu machen, wird eine CDaoException ausgelöst.

Wenn Sie z. B. den Mechanismus für die doppelte Pufferung verwenden, wenn Sie ein Feld des aktuellen Datensatzes explizit als keinen Wert festlegen möchten, rufen SetFieldNull Sie mit "bNull " auf TRUE fest, um es als Null zu kennzeichnen. Wenn ein Feld zuvor null markiert wurde und Sie ihm jetzt einen Wert zugeben möchten, legen Sie den neuen Wert fest. Sie müssen das Null-Flag nicht mit SetFieldNull. Um zu ermitteln, ob das Feld Null sein darf, rufen Sie IsFieldNullable auf.

Wenn Sie den Mechanismus für doppelte Pufferung nicht verwenden, wird durch Ändern des Werts des Felds das Feld nicht automatisch als schmutzig und nicht null festgelegt. Sie müssen die Felder explizit festlegen, die geändert wurden und nicht null sind. Das in m_bCheckCacheForDirtyFields enthaltene Kennzeichen steuert diese automatische Feldüberprüfung.

Der DFX-Mechanismus verwendet die Verwendung von PSEUDONULL. Weitere Informationen finden Sie unter CDaoFieldExchange::m_nOperation.

Hinweis

Rufen Sie diese Memberfunktion erst auf, nachdem Sie "Bearbeiten" oder "AddNew" aufgerufen haben.

Wenn Sie NULL für das erste Argument der Funktion verwenden, wird die Funktion nur auf Felder angewendet, nicht auf outputColumn Paramfelder in CDaoFieldExchange. Beispielsweise der Anruf

SetFieldNull(NULL);

legt nur outputColumn Felder auf NULL fest; Param-Felder sind nicht betroffen.

CDaoRecordset::SetFieldValue

Rufen Sie diese Memberfunktion auf, um den Wert eines Felds festzulegen, entweder nach Ordinalposition oder durch Ändern des Werts der Zeichenfolge.

virtual void SetFieldValue(
    LPCTSTR lpszName,
    const COleVariant& varValue);

virtual void SetFieldValue(
    int nIndex,
    const COleVariant& varValue);

void SetFieldValue(
    LPCTSTR lpszName,
    LPCTSTR lpszValue);

void SetFieldValue(
    int nIndex,
    LPCTSTR lpszValue);

Parameter

lpszName
Ein Zeiger auf eine Zeichenfolge, die den Namen eines Felds enthält.

varValue
Ein Verweis auf ein COleVariant -Objekt, das den Wert des Feldinhalts enthält.

nIndex
Eine ganze Zahl, die die Ordnungsposition des Felds in der Fields-Auflistung des Recordsets (nullbasiert) darstellt.

lpszValue
Ein Zeiger auf eine Zeichenfolge, die den Wert des Feldinhalts enthält.

Hinweise

Verwenden Sie SetFieldValue Und GetFieldValue, um Felder zur Laufzeit dynamisch zu binden, anstatt statisch Spalten mithilfe des DoFieldExchange-Mechanismus zu binden.

Wenn Sie kein UNICODE-Recordset erstellen, müssen Sie entweder ein Formular verwenden, das SetFieldValue keinen Parameter enthält COleVariant , oder das COleVariant Objekt muss explizit ANSI deklariert werden. Dies kann mithilfe der COleVariant::COleVariant( lpszSrc , vtSrc ) Form des Konstruktors mit vtSrc-Set auf VT_BSTRT (ANSI) oder mithilfe der COleVariant Funktion SetString( lpszSrc , vtSrc ) mit vtSrc festgelegt auf .VT_BSTRT

Verwandte Informationen finden Sie in den Themen "Field Object" und "Value Property" in der DAO-Hilfe.

CDaoRecordset::SetFieldValueNull

Rufen Sie diese Memberfunktion auf, um das Feld auf einen Nullwert festzulegen.

void SetFieldValueNull(int nIndex);
void SetFieldValueNull(LPCTSTR lpszName);

Parameter

nIndex
Der Index des Felds im Recordset für die Suche nach nullbasiertem Index.

lpszName
Der Name des Felds im Recordset für die Nachschlagefunktion nach Name.

Hinweise

C++ NULL ist nicht identisch mit Null, was in der Datenbankterminologie "keinen Wert" bedeutet.

Verwandte Informationen finden Sie in den Themen "Field Object" und "Value Property" in der DAO-Hilfe.

CDaoRecordset::SetLockingMode

Rufen Sie diese Memberfunktion auf, um den Sperrtyp für das Recordset festzulegen.

void SetLockingMode(BOOL bPessimistic);

Parameter

bPessimistic
Ein Kennzeichen, das den Sperrtyp angibt.

Hinweise

Wenn die pessimistische Sperre wirksam ist, wird die 2K-Seite, die den von Ihnen bearbeiteten Datensatz enthält, gesperrt, sobald Sie die Edit Memberfunktion aufrufen. Die Seite wird entsperrt, wenn Sie die Update Funktion oder Close Memberfunktion oder eines der Move- oder Find-Vorgänge aufrufen.

Wenn die optimistische Sperre wirksam ist, wird die 2K-Seite, die den Datensatz enthält, nur gesperrt, während der Datensatz mit der Update Memberfunktion aktualisiert wird.

Wenn eine Seite gesperrt ist, kann kein anderer Benutzer Datensätze auf derselben Seite bearbeiten. Wenn Sie einen Wert ohne Zero aufrufen SetLockingMode und übergeben, und ein anderer Benutzer hat die Seite bereits gesperrt, wird beim Aufrufen Editeine Ausnahme ausgelöst. Andere Benutzer können Daten von gesperrten Seiten lesen.

Wenn Sie mit einem Nullwert und einem späteren Aufruf anrufen SetLockingMode Update , während die Seite von einem anderen Benutzer gesperrt ist, tritt eine Ausnahme auf. Rufen Sie die Memberfunktion mit dem Textmarkenwert des aktuellen Datensatzes auf SetBookmark , um die Änderungen anzuzeigen, die von einem anderen Benutzer an Ihrem Datensatz vorgenommen wurden (und ihre Änderungen verloren gehen).

Beim Arbeiten mit ODBC-Datenquellen ist der Sperrmodus immer optimistisch.

CDaoRecordset::SetParamValue

Rufen Sie diese Memberfunktion auf, um den Wert eines Parameters im Recordset zur Laufzeit festzulegen.

virtual void SetParamValue(
    int nIndex,
    const COleVariant& varValue);

virtual void SetParamValue(
    LPCTSTR lpszName,
    const COleVariant& varValue);

Parameter

nIndex
Die numerische Position des Parameters in der Parameters-Auflistung der Abfrage.

var
Der festzulegende Wert; siehe Hinweise.

lpszName
Der Name des Parameters, dessen Wert Sie festlegen möchten.

Hinweise

Der Parameter muss bereits als Teil der SQL-Zeichenfolge des Recordsets eingerichtet worden sein. Sie können auf den Parameter entweder anhand des Namens oder der Indexposition in der Auflistung zugreifen.

Geben Sie den Wert an, der als COleVariant Objekt festgelegt werden soll. Informationen zum Festlegen des gewünschten Werts und Typs in Ihrem Objekt finden Sie unter COleVariant.For information about setting the desired value and type in your COleVariant object, see class COleVariant. Wenn Sie kein UNICODE-Recordset erstellen, muss das COleVariant Objekt explizit ANSI deklariert werden. Dies kann mithilfe der COleVariant::COleVariant( lpszSrc , vtSrc ) Form des Konstruktors mit vtSrc-Set auf VT_BSTRT (ANSI) oder mithilfe der COleVariant Funktion SetString( lpszSrc , vtSrc ) mit vtSrc festgelegt auf .VT_BSTRT

CDaoRecordset::SetParamValueNull

Rufen Sie diese Memberfunktion auf, um den Parameter auf einen Nullwert festzulegen.

void SetParamValueNull(int nIndex);
void SetParamValueNull(LPCTSTR lpszName);

Parameter

nIndex
Der Index des Felds im Recordset für die Suche nach nullbasiertem Index.

lpszName
Der Name des Felds im Recordset für die Nachschlagefunktion nach Name.

Hinweise

C++ NULL ist nicht identisch mit Null, was in der Datenbankterminologie "keinen Wert" bedeutet.

CDaoRecordset::SetPercentPosition

Rufen Sie diese Memberfunktion auf, um einen Wert festzulegen, der die ungefähre Position des aktuellen Datensatzes im Recordset-Objekt basierend auf einem Prozentsatz der Datensätze im Recordset ändert.

void SetPercentPosition(float fPosition);

Parameter

fPosition
Eine Zahl zwischen 0 und 100.

Hinweise

Wenn Sie mit einem Recordset vom Typ "dynaset" oder "snapshot" arbeiten, füllen Sie zuerst das Recordset auf, indem Sie zum letzten Datensatz wechseln, bevor Sie den Aufruf ausführen SetPercentPosition. Wenn Sie vor dem vollständigen Auffüllen des Recordsets aufrufen SetPercentPosition , ist die Menge der Verschiebung relativ zur Anzahl der Datensätze, auf die zugegriffen wird, wie durch den Wert von GetRecordCount angegeben. Sie können zum letzten Datensatz wechseln, indem Sie einen Aufruf ausführen MoveLast.

Nach dem Aufrufen SetPercentPositionwird der Datensatz an der ungefähren Position, die diesem Wert entspricht, aktuell.

Hinweis

Das Aufrufen SetPercentPosition , um den aktuellen Datensatz in einen bestimmten Datensatz in einem Recordset zu verschieben, wird nicht empfohlen. Rufen Sie stattdessen die SetBookmark-Memberfunktion auf.

Verwandte Informationen finden Sie im Thema "PercentPosition Property" in der DAO-Hilfe.

CDaoRecordset::Update

Rufen Sie diese Memberfunktion nach einem Aufruf der AddNew Funktion oder Edit Memberfunktion auf.

virtual void Update();

Hinweise

Dieser Aufruf ist erforderlich, um den AddNew Vorgang abzuschließen Edit .

Sowohl als Edit auch AddNew vorbereiten eines Bearbeitungspuffers, in dem die hinzugefügten oder bearbeiteten Daten zum Speichern in der Datenquelle platziert werden. Update speichert die Daten. Nur die Felder, die als geändert markiert oder erkannt wurden, werden aktualisiert.

Wenn die Datenquelle Transaktionen unterstützt, können Sie den Update Anruf (und den entsprechenden oder Edit den entsprechenden AddNew Aufruf) einer Transaktion tätigen.

Achtung

Wenn Sie anrufenUpdate, ohne zuerst entweder oder EditAddNew , Update löst ein CDaoException. Wenn Sie anrufen AddNew oder Edit, müssen Sie vor dem Aufrufen von MoveNext anrufen Update oder entweder das Recordset oder die Datenquellenverbindung schließen. Andernfalls gehen Ihre Änderungen ohne Benachrichtigung verloren.

Wenn das Recordset-Objekt pessimistisch in einer Mehrbenutzerumgebung gesperrt ist, bleibt der Datensatz bis Edit zum Abschluss der Aktualisierung gesperrt. Wenn das Recordset optimistisch gesperrt ist, wird der Datensatz gesperrt und mit dem vorab bearbeiteten Datensatz verglichen, bevor es in der Datenbank aktualisiert wird. Wenn sich der Datensatz seit dem Aufruf Editgeändert hat, schlägt der Update Vorgang fehl, und MFC löst eine Ausnahme aus. Sie können den Sperrmodus mit SetLockingMode.

Hinweis

Optimistische Sperrung wird immer in externen Datenbankformaten verwendet, z. B. ODBC und installierbares ISAM.

Verwandte Informationen finden Sie in den Themen "AddNew-Methode", "CancelUpdate-Methode", "Delete-Methode", "LastModified Property", "Update Method" und "EditMode Property" in der DAO-Hilfe.

Siehe auch

CObject-Klasse
Hierarchiediagramm
CDaoTableDef-Klasse
CDaoWorkspace-Klasse
CDaoDatabase-Klasse
CDaoQueryDef-Klasse