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 CDaoRecordset verwendet 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 CDaoRecordset
dieser 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 CDaoRecordset
dieser 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 CDaoRecordset
abgeleiteten 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
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 Update
zu 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 Update
wurde, 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 Requery
nicht.
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 CDaoRecordset
dieser 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::CDaoRecordset
auf, 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 Close
erneut 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 Delete
ein 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 Update
zu 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 Edit
geä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 Edit
aktuell. Zum Aufrufen Edit
muss 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, SetCacheStart
wird 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 FindFirst
Funktionen , FindLast
, FindNext
und 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, AttributeAFX_DAO_SECONDARY_INFO
Primäre Informationen plus: Ordnungsposition, Erforderlich, Leere Länge zulassen, Sortierreihenfolge, Fremdname, Quellfeld, QuelltabelleAFX_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, FelderAFX_DAO_SECONDARY_INFO
Primäre Informationen plus: Primary, Unique, Clustered, IgnoreNulls, Required, ForeignAFX_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 Open
haben, 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 DynasetdbOpenSnapshot
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 Open
einen 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 erstelltMoveFirst
. Daher führt das AufrufenOpen
einer leeren Gruppe von Datensätzen dazuIsBOF
, dassIsEOF
ein Nichtzero zurückgegeben wird. (In der folgenden Tabelle finden Sie das Verhalten eines FehlgeschlagensMoveFirst
oderMoveLast
Eines Anrufs.)Alle Verschiebungsvorgänge, die einen Datensatz erfolgreich finden, verursachen beide
IsBOF
undIsEOF
geben "0" zurück.Ein
AddNew
Aufruf gefolgt von einemUpdate
Aufruf, der erfolgreich einen neuen Datensatz einfügt, führtIsBOF
dazu, dass 0 zurückgegeben wird, aber nur, wennIsEOF
bereits kein Zero vorhanden ist. Der Zustand von "WillenIsEOF
" 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 vonIsBOF
oderIsEOF
.
In dieser Tabelle wird gezeigt, welche Move-Vorgänge mit unterschiedlichen Kombinationen zulässig IsBOF
/ IsEOF
sind.
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 Open
einen 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 erstelltMoveFirst
. Daher führt das AufrufenOpen
einer leeren Gruppe von Datensätzen dazuIsBOF
, dassIsEOF
ein Nichtzero zurückgegeben wird. (In der folgenden Tabelle finden Sie das Verhalten eines fehlgeschlagenenMoveFirst
Aufrufs.)Alle Verschiebungsvorgänge, die einen Datensatz erfolgreich finden, verursachen beide
IsBOF
undIsEOF
geben "0" zurück.Ein
AddNew
Aufruf gefolgt von einemUpdate
Aufruf, der erfolgreich einen neuen Datensatz einfügt, führtIsBOF
dazu, dass 0 zurückgegeben wird, aber nur, wennIsEOF
bereits kein Zero vorhanden ist. Der Zustand von "WillenIsEOF
" 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 vonIsBOF
oderIsEOF
.
In dieser Tabelle wird gezeigt, welche Move-Vorgänge mit unterschiedlichen Kombinationen zulässig IsBOF
/ IsEOF
sind.
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 CDaoRecordset
dieser 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 Open
fest. 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::outputColumn
registriert 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::param
registriert 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_pDatabase
Zeiger nicht direkt verwenden. Wenn Sie jedoch eigene Erweiterungen CDaoRecordset
schreiben, 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 )
MoveNext
entspricht dem , und Move( -1 )
entspricht MovePrev
dem .
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 MoveFirst
Funktion , MoveLast
, , MoveNext
oder 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 Seek
einen 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 Seek
einen 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 Seek
einen 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 Seek
einen 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 Open
mü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 einCDaoDatabase
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 einCDaoDatabase
Objekt und hält es geöffnet, solange das Recordset geöffnet ist. Wenn Sie das Recordset aufrufenClose
, wird dasCDaoDatabase
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 GetFieldValue
binden 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 GetDefaultSQL
eine ü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 Open
fest. 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 Requery
neu 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 Requery
neue 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 Open
haben.
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 Requery
sowohl 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 Edit
eine 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 SetPercentPosition
wird 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 Edit
AddNew
, 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 Edit
geä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