Copyright: Erstellt am   Sun Nov 03 12:53:48 1996


Datenzugriffsobjekte - Übersicht

Datenzugriffsobjekte (DAO) ermöglichen Ihnen, eine Programmiersprache zu verwenden, um auf Daten von lokalen und Remote-Datenbanken zuzugreifen und diese zu bearbeiten und um Datenbanken, ihre Objekte und ihre Struktur zu verwalten.

Objektmodelle

DAO unterstützt zwei verschiedene Datenbankumgebungen oder "Arbeitsbereiche".

•	Microsoft Jet-Arbeitsbereiche ermöglichen Ihnen den Zugriff auf Daten in Microsoft Jet-Datenbanken, mit Microsoft Jet verbundene ODBC-Datenbanken und auf installierbare ISAM-Datenquellen in anderen Formaten, wie z.B. Paradox oder Lotus 1-2-3.

•	ODBCDirect-Arbeitsbereiche ermöglichen Ihnen den Zugriff auf Datenbank-Server mit Hilfe von ODBC, ohne das Microsoft Jet-Datenbankmodul zu laden.

Verwenden Sie den Microsoft Jet-Arbeitsbereich, wenn Sie eine Microsoft Jet-Datenbank (.mdb-Datei) oder eine andere Desktop-ISAM-Datenbank öffnen, bzw. die Leistungsmerkmale von Microsoft Jet, wie z.B. die Fähigkeit, Daten mit unterschiedlichen Datenbankformaten einzubinden, nutzen möchten.

Der ODBCDirect-Arbeitsbereich stellt eine Alternative dar, wenn Sie nur Abfragen oder gespeicherte Prozeduren auf Back-End-Servern, z.B. Microsoft SQL Server, ausführen möchten oder wenn Ihre Client-Anwendung bestimmte Fähigkeiten von ODBC, wie Stapelaktualisierungen oder Ausführung asynchroner Abfragen benötigt.

DAO-Objekte

Es gibt 17 verschiedene DAO-Objekttypen. Sie können neue Objektvariablen vom Typ DAO für jeden Objekttyp beschreiben.

Der folgende Code für Visual Basic für Applikationen (VBA) erstellt z.B. Objektvariablen für ein Database-Objekt, ein Recordset-Objekt vom Typ Dynaset sowie für ein Field-Objekt:

Dim dbsExample As Database

Dim rstExample As Recordset

Dim fldExample As Field

Set dbsExample = OpenDatabase("Biblio.mdb")

Set rstExample = dbsExample.OpenRecordset("Autoren", _ dbOpenDynaset)

Set fldExample = rstExample.Fields("Au_ID")

DAO-Auflistungen

Jeder DAO-Objekttyp, außer DBEngine, hat auch eine entsprechende Auflistung. Eine Auflistung umfaßt alle vorhandenen Objekte dieses Typs. Die Recordsets-Auflistung enthält z.B. alle geöffneten Recordset-Objekte. Jede Auflistung ist "im Besitz" eines anderen Objekts in der nächsthöheren Ebene der Hierarchie. Ein Database-Objekt "besitzt" eine Recordsets-Auflistung. Mit Ausnahme der Objekte Connection und Error hat jedes DAO-Objekt eine Properties-Auflistung.

Die meisten DAO-Objekte haben voreingestellte Auflistungen und Eigenschaften. Die voreingestellte Auflistung eines Recordset-Objekts ist z.B. die Fields-Auflistung und die voreingestellte Eigenschaft eines Field-Objekts ist die Value-Eigenschaft. Sie können Ihren Code vereinfachen, indem Sie Nutzen aus diesen Voreinstellungen ziehen. Der folgende Code legt z.B. den Wert des PubID-Felds im aktuellen Datensatz fest:

rstExample!PubID=99

DBEngine- und Workspace-Objekte

Alle DAO-Objekte sind abgeleitet vom DBEngine-Objekt. Sie können die DefaultType-Eigenschaft des DBEngine-Objekts setzen, um die Art des Arbeitsbereiches (Microsoft Jet oder ODBCDirect) zu bestimmen, der bei nachfolgenden Aufrufen der CreateWorkspace-Methode erstellt werden soll. Sie können diese Eigenschaft auch mit dem Argument Typ in der CreateWorkspace-Methode selbst überschreiben. Wenn Ihre Anwendung einen Arbeitsbereich erstellt, wird zu diesem Zeitpunkt die entsprechende Bibliothek (das Microsoft Jet-Datenbankmodul oder ODBC) in den Hauptspeicher geladen.

Sie können je nach Bedarf weitere Workspace-Objekte öffnen. Jedes Workspace-Objekt hat eine zugewiesene Benutzer-ID und ein Kennwort.

Verwenden des Microsoft Jet-Arbeitsbereiches

Öffnen einer Datenbank

Sie öffnen eine Datenbank, indem Sie ein vorhandenes Database-Objekt öffnen oder ein neues erstellen. Dieses Objekt kann eine Microsoft Jet-Datenbank (.mdb-Datei), eine ISAM-Datenbank (z.B. Paradox) oder eine ODBC-Datenbank, die über das Microsoft Jet-Datenbankmodul verknüpft ist  (wird auch als "mit Microsoft Jet verbundene ODBC-Datenbank" bezeichnet), darstellen.

Datendefinitionssprache

Sie können Objektvariablen und andere DDL-Leistungsmerkmale verwenden, um die Struktur Ihrer Datenbank zu verändern. Sie können z.B. ein neues Field-Objekt zu einer vorhandenen Tabelle mit folgendem Code hinzufügen:

Dim dbs As Database, tdf As TableDef, fld As Field

' Öffnen einer Datenbank.

Set dbs = OpenDatabase("Biblio.mdb")

' Öffnen eines TableDef-Objekts.

Set tdf = dbs.TableDefs("Autoren")

' Anlegen eines neuen Field-Objekts.

Set fld = tdf.CreateField("Adresse", dbText, 20)

' Anfügen des Feldes an die Fields-Auflistung des TableDef-Objekts.

tdf.Fields.Append fld

Dieser Code erstellt eine neue Objektvariable für ein Field-Objekt und fügt diese mit der Append-Methode einem TableDef-Objekt hinzu. Da ein TableDef-Objekt die Definition einer Tabelle enthält, hat die Tabelle nun ein Feld für die Eingabe von Daten mit dem Namen "Adresse". Ähnlich können Sie neue Tabellen und Indizes erstellen.

Datenbearbeitung

DAO stellt eine Vielzahl an Hilfsmitteln zur Datenberarbeitung zur Verfügung. Sie können ein Recordset-Objekt erstellen, um eine Datenbankabfrage zu erstellen und dann die Ergebnismenge der Datensätze zu bearbeiten. Die OpenRecordset-Methode nimmt eine SQL-Zeichenfolge oder den Namen eines QueryDef-Objekts (gespeicherte Abfrage) als Argument der Datenquelle an. Es kann auch aus einem QueryDef-Objekt oder einem TableDef-Objekt geöffnet werden, wobei dieses Objekt als Datenquelle verwendet wird. Das Ergebnis-Recordset-Objekt enthält eine Vielzahl von Eigenschaften und Methoden, mit denen Daten durchgesehen und verändert werden können.

Das Recordset-Objekt steht in vier verschieden Typen zur Verfügung: Tabelle, Dynaset, Vorwärts und Snapshot.

Transaktionen

Alle Database-Objekte, die zusammen mit einem Workspace-Objekt geöffnet werden, nutzen einen gemeinsamen Gültigkeitsbereich für Transaktionen. Das bedeutet, wenn Sie die BeginTrans-Methode auf ein Workspace-Objekt anwenden, wird es auf alle in diesem Workspace-Objekt geöffneten Datenbanken angewendet. Dies gilt auch, wenn Sie die CommitTrans-Methode mit einem Workspace-Objekt anwenden.

Replikation

Sie können die Datenbankreplikation verwenden, um Replikate einer Microsoft Jet Master-Datenbank zu erstellen und zu verwalten. Mit Hilfe der Synchronize-Methode aktualisieren Sie alle oder Teile der Replikate in regelmäßigen Abständen oder kopieren neue Daten von einem Replikat zu einem anderen. Sie können die Aktualisierung auf ausgewählte Datensätze beschränken, indem Sie die ReplicaFilter-Eigenschaft verwenden und dann die Datensätze mit der PopulatePartial-Methode synchronisieren.

Sicherheit

Sie können den Zugriff auf eine oder mehrere .mdb-Datenbanken oder ihre Tabellen einschränken, indem Sie die Sicherheitseinstellungen verwenden, die vom Microsoft Jet-Datenbankmodul eingerichtet und verwaltet werden. In Ihrem Code können Sie die Objekte Group und User einrichten, um den Gültigkeitsbereich und die Ebene der Berechtigungen einzelner Benutzer auf Objektebene festzulegen. Sie können zum Beispiel Berechtigungen für einen bestimmten Benutzer einrichten, um schreibgeschützten Zugriff auf eine Tabelle und vollen Zugriff auf eine andere festzulegen.

Verwenden des ODBCDirect-Objektmodells

Verbinden mit einer Datenbank

Ein Connection-Objekt ähnelt einem Database-Objekt. Tatsächlich stellen ein Connection-Objekt und ein Database-Objekt verschiedene Verweise auf das gleiche Objekt dar, und die Eigenschaften dieser beiden Objekttypen erlauben Ihnen, einen Verweis auf das andere entsprechende Objekt zu erhalten. Dadurch wird das Konvertieren von ODBC Client-Anwendungen, die anstelle von ODBCDirect Microsoft Jet verwenden, vereinfacht. Verwenden Sie die OpenConnection-Methode, um eine Verbindung zu einer ODBC-Datenquelle herzustellen. Das daraus resultierende Connection-Objekt enthält Informationen über die Verbindung, wie z.B. Name des Servers, Name der Datenquelle usw.

Abfragen

Obwohl DAO keine gespeicherten Abfragen in einem ODBCDirect-Arbeitsbereich unterstützt, kann eine kompilierte Abfrage in Form eines QueryDef-Objekts angelegt werden. Dieses wird verwendet, um Aktionsabfragen auszuführen, und kann auch verwendet werden, um gespeicherte Prozeduren auf dem Server auszuführen. Die Prepare-Eigenschaft läßt Sie entscheiden, ob eine private, temporär gespeicherte Prozedur auf dem Server aus dem QueryDef-Objekt erstellt wird, bevor die Abfrage tatsächlich ausgeführt wird.

Parameterabfragen können ebenfalls dem Server übergeben werden, indem Parameter-Objekte auf das QueryDef-Objekt angewendet werden. Die Direction-Eigenschaft läßt Sie ein Parameter-Objekt als Eingabe, Ausgabe oder beides angeben, oder das ein zurückgegebener Wert einer gespeicherten Prozedur angenommen wird.

Datenbearbeitung

Das Erstellen eines Recordset-Objekts ist ein bequemer Weg, um eine Datenbank abzufragen und die Resultate zu bearbeiten. Die OpenRecordset-Methode nimmt als Argument einer Datenquelle eine SQL-Zeichenfolge oder den Namen eines QueryDef-Objekts (gespeicherte Abfrage) an. Das daraus resultierende Recordset-Objekt enthält eine große Auswahl an Eigenschaften und Methoden, mit denen Daten durchsucht und verändert werden können.

Es gibt vier verschiedene Typen des Recordset-Objekts: Dynamisch, Dynaset, Vorwärts und Snapshot; diese entsprechen den ODBC-Cursor-Typen: Dynamisch, Schlüsselgruppe, Vorwärts und Statisch.

Eine Cursor-Bibliothek für Stapelaktualierungen ist für Client-Anwendungen verfügbar, die mit einem Cursor arbeiten müssen, ohne daß auf dem Server Sperrungen vorhanden sein müssen oder ohne daß Aktualisierungsanforderungen für nur jeweils einen Datensatz ausgegeben werden. Statt dessen speichert der Client die Aktualisierungsinformationen für viele Datensätze in einem lokalen Puffer (oder Stapel) und führt dann eine Stapelaktualisierung durch.

Asynchrones Ausführen von Methoden

Die Methoden Execute, MoveLast, OpenConnection und OpenRecordset enthalten die Option dbRunAsync. Damit können Client-Anwendungen andere Aufgaben (wie z.B. Formulare laden) durchführen, während die Methode ausgeführt wird. Mit der StillExecuting-Eigenschaft wird überprüft, ob die Aufgabe beendet wurde; die Cancel-Methode beendet eine asynchrone Methode.


Datenzugriffsmethoden nach Objekten gruppiert

In dieser Referenz werden alle DAO-Methoden nach Objekten gruppiert. Weitere Informationen dazu, ob eine bestimmte Methode für Microsoft Jet- oder ODBC-Arbeitsbereiche verfügbar ist, finden Sie im entsprechenden Hilfethema.

Connection Container — keine Methoden Database DBEngine Document Error — keine Methoden Field Group Index	Parameter — keine Methoden Property — keine Methoden QueryDef Recordset Relation TableDef User Workspace


Datenzugriffsmethoden für Microsoft Jet-Arbeitsbereiche

In dieser Referenzliste werden alle DAO-Methoden, die in Microsoft Jet-Arbeitsbereichen verfügbar sind, alphabetisch aufgeführt (ISAM-Datenbankdateien).

A-C

AddNew Append AppendChunk BeginTrans CancelUpdate Clone Close CommitTrans CompactDatabase CopyQueryDef	CreateDatabase CreateField CreateGroup CreateIndex CreateProperty CreateQueryDef CreateRelation CreateTableDef CreateUser CreateWorkspace
D-M

Delete Edit Execute FillCache FindFirst FindLast FindNext FindPrevious GetChunk	GetRows Idle MakeReplica Move MoveFirst MoveLast MoveNext MovePrevious
N-Z

NewPassword OpenDatabase OpenRecordset PopulatePartial Refresh RefreshLink RegisterDatabase	RepairDatabase Requery Rollback Seek SetOption Synchronize Update


Datenzugriffsmethoden für ODBCDirect-Arbeitsbereiche

In dieser Referenz werden alle DAO-Methoden alphabetisch aufgeführt, die in ODBCDirect-Arbeitsbereichen verfügbar sind (ISAM-Datenbankdateien).

A-C

AddNew Append AppendChunk BeginTrans Cancel CancelUpdate	Clone Close CommitTrans CreateQueryDef CreateWorkspace
D-M

Delete Edit Execute GetChunk GetRows	Move MoveFirst MoveLast MoveNext MovePrevious
N-Z

NextRecordset OpenConnection OpenDatabase OpenRecordset Refresh	RegisterDatabase Requery Rollback Update


Datenzugriffsobjekt-Modell für Microsoft Jet-Arbeitsbereiche


Datenzugriffobjekt-Modell für ODBCDirect-Arbeitsbereiche


Referenz für Datenzugriffsobjekte und -auflistungen

DAO-Objekte und Auflistungen stellen einen Rahmen zur Verwendung von Code zur Verfügung, mit dem Komponenten Ihres Datenbanksystems erstellt und verändert werden können. Objekte und Auflistungen haben Eigenschaften, die die Merkmale von Datenbankkomponenten beschreiben, und Methoden, mit denen Sie die Komponenten verändern. Zusammen stellen diese Objekte und Auflistungen ein hierarchisches Modell Ihrer Datenbankstruktur dar, die Sie programmgesteuert bearbeiten können.

Objekte und Auflistungen stellen unterschiedliche Arten von Container-Beziehungen zur Verfügung: Objekte enthalten keine, eine oder mehrere Auflistungen, die alle einen anderen Typ haben, und Auflistungen enthalten keine, eines oder mehrere Objekte, die alle denselben Typ haben. Objekte und Auflistungen sind einander zwar ähnlich, aber durch dieses Merkmal unterscheiden sich beide Arten von Beziehungen.

In der folgenden Tabelle enthält die in der ersten Spalte aufgeführte Auflistung die in der zweiten Spalte angegebenen Arten von Objekten. Die dritte Spalte beschreibt, welche Informationen jede Art von Objekt darstellt.

Auflistung	Objekt	Beschreibung
Connections	Connection	Informationen über eine Verbindung mit einer ODBC-Datenquelle (gilt nur für ODBCDirect-Arbeitsbereiche).
Containers	Container	Speicher für Informationen zu einem vordefinierten Objekttyp (gilt nur für Microsoft Jet-Arbeitsbereiche ).
Databases	Database	Eine geöffnete Datenbank
Keine	DBEngine	Das Microsoft Jet-Datenbankmodul.
Documents	Document	Informationen über ein gespeichertes, zuvor definiertes Objekt (gilt nur für Microsoft Jet-Arbeitsbereiche).
Errors	Error	Informationen über alle Fehler, die mit diesem Objekt verbunden sind.
Fields	Field	Spalte, die Teil einer Tabelle, Abfrage, Beziehung, Datensatzgruppe oder eines Indexes ist.
Groups	Group	Gruppe von Benutzerkonten (gilt nur für Microsoft Jet-Arbeitsbereiche).
Indexes	Index	Vordefinierte Sortierung und eindeutige Werte in einer Tabelle (gilt nur für Microsoft Jet-Arbeitsbereiche).
Parameters	Parameter	Parameter für eine Parameterabfrage.
Properties	Property	Integrierte oder benutzerdefinierte Eigenschaft.
QueryDefs	QueryDef	Gespeicherte Abfragedefinition.
Recordsets	Recordset	Datensätze in einer Basistabelle oder Abfrage.
Relations	Relation	Beziehung zwischen Feldern in Tabellen und Abfragen (gilt nur für Microsoft Jet-Arbeitsbereiche).
TableDefs	TableDef	Gespeicherte Tabellendefinition (gilt nur für Microsoft Jet-Arbeitsbereiche).
Users	User	Benutzerkonto (gilt nur für Microsoft Jet-Arbeitsbereiche).
Workspaces	Workspace	Sitzung des Microsoft Jet-Datenbankmoduls.


Datenzugriffseigenschaften nach Objekten gruppiert

Diese Referenz gruppiert alle DAO-Eigenschaften nach deren Objekten oder Auflistungen. Weitere Informationen dazu, ob eine bestimmte Eigenschaft für Microsoft Jet- oder ODBC-Datenbanken verfügbar ist, finden Sie im entsprechenden Hilfethema.

Connection Container Database DBEngine Document Error Field Group Index	Parameter Property QueryDef Recordset Relation TableDef User Workspace


Datenzugriffseigenschaften für Microsoft Jet-Arbeitsbereiche

Diese Referenz führt alle DAO-Eigenschaften alphabetisch auf, die in Microsoft Jet-Arbeitsbereichen verfügbar sind.

A-C

AbsolutePosition AllowZeroLength AllPermissions Attributes  BOF Bookmark Bookmarkable  CacheSize	CacheStart Clustered CollatingOrder ConflictTable Connect Container Count
D-H

DataUpdatable DateCreated DefaultUser DefaultPassword DefaultValue  Description DesignMasterID DistinctCount EditMode	EOF FieldSize Filter Foreign ForeignName ForeignTable HelpContext HelpFile
I-O

IgnoreNulls Index Inherit Inherited IniPath IsolateODBCTrans KeepLocal LastModified LastUpdated LockEdits	LoginTimeout LogMessages MaxRecords Name NoMatch Number ODBCTimeout OrdinalPosition Owner
P-R

PartialReplica Password PercentPosition Permissions PID Primary QueryTimeout RecordCount	RecordsAffected Replicable ReplicableBool ReplicaFilter ReplicaID Required Restartable ReturnsRecords
S-Z

Size Sort Source SourceField SourceTable SourceTableName SQL SystemDB Table Transactions	Type Unique Updatable UserName V1xNullBehavior ValidateOnSet ValidationRule ValidationText Value Version


Datenzugriffseigenschaften für ODBCDirect-Arbeitsbereiche

Diese Referenz führt alle DAO-Eigenschaften alphabetisch auf, die in ODBCDirect-Arbeitsbereichen verfügbar sind.

A-D

AbsolutePosition Attributes BatchCollisionCount BatchCollisions BatchSize BOF  Bookmark Bookmarkable CacheSize	Connect Connection Count  Database DataUpdatable DefaultCursorDriver DefaultType Description Direction
E-Q

EditMode EOF FieldSize HelpContext HelpFile LastModified LockEdits  LoginTimeout LogMessages	MaxRecords Name Number ODBCTimeout OrdinalPosition OriginalValue  PercentPosition Prepare QueryTimeout
R-Z

RecordCount RecordsAffected RecordStatus Restartable  Size Source SourceField SourceTable SQL	StillExecuting Transactions Type Updatable  UpdateOptions UserName Value Version VisibleValue


Neues in DAO

DAO 3.5 unterstützt einen neuen Verbindungsmodus für Client/Server mit dem Namen "ODBCDirect". ODBCDirect stellt eine Verbindung direkt zu einer ODBC-Datenquelle her, ohne das Microsoft Jet-Datenbankmodul in den Speicher zu laden, und ist außerdem hilfreich, wenn spezielle ODBC-Funktionsmerkmale benötigt werden.

Bei Microsoft Jet-Datenbanken gibt es neue Schnittstellen, über die auf die neuen Möglichkeiten der Teilreplikation zugegriffen werden kann.

Anmerkung   Mit ODBCDirect können DAO-Abfragen an viele verschiedenen Datenbank-Server gesendet werden, und viele Server unterstützen leicht unterschiedliche SQL-Dialekte. Deshalb gibt es in Microsoft Jet-SQL keine kontextbezogene Hilfe mehr, aber es kann weiterhing über das Menü ? auf die Hilfe für SQL zugegriffen werden. Überprüfen Sie, welchen SQL-Dialekt der Datenbank-Server versteht, wenn Sie ODBCDirect-Verbindungen oder Pass-Through-Abfragen in mit Microsoft Jet verbundenen Client/Server-Anwendungen verwenden.

Neue DAO 3.5-Schnittstellen für ODBCDirect

•	Connection-Objekt — Eine Verbindung zu einer ODBC-Datenbank.

•	Cancel-Methode (auf Connection-, QueryDef- und Recordset-Objekte) — Bricht die Ausführung einer asynchronen Operation ab.

•	NextRecordset-Methode (auf Recordset-Objekte) — Ruft die nächste Datensatzgruppe ab, sofern eine vorhanden ist, die von einer Abfrage zurückgegeben wurde, die mehrere Datensatzgruppen in einem OpenRecordset-Aufruf zurückgegeben hat und anzeigt, ob eine weitere Datensatzgruppe erfolgreich abgerufen wurde.

•	OpenConnection-Methode (auf Workspace-Objekte) — Öffnet ein Connection-Objekt in einer ODBC-Datenquelle.

•	BatchCollisionCount-Eigenschaft (auf Recordset-Objekte) — Gibt die Anzahl der Datensätze zurück, die während der letzten Stapelaktualisierung nicht beendet wurden.

•	BatchCollisions-Eigenschaft (auf Recordset-Objekte) — Gibt den Bereich der Lesezeichen zurück, der die Zeilen anzeigt, die in der letzten Stapelaktualisierung Kollisionen ausgelöst haben.

•	BatchSize-Eigenschaft (auf Recordset-Objekte) — Legt die Anzahl der Anweisung, die in jedem Stapel vom Server zurückgesendet wurden, fest oder gibt sie zurück.

•	Connection-Eigenschaft (auf Database- und Recordset-Objekte) — Gibt das Connection-Objekt zurück, das dem Database-Objekt entspricht oder Besitzer des Recordset-Objekts ist.

•	Database-Eigenschaft (auf Connection-Objekte) — Gibt den Namen des Database-Objekts zurück, das dem Connection-Objekt entspricht.

•	DefaultCursorDriver-Eigenschaft (auf Workspace-Objekte) — Legt den Typ des Cursor-Treibers für Recordset-Objekte in ODBCDirect fest oder gibt ihn zurück.

•	DefaultType-Eigenschaft (auf DBEngine-Objekt) — Zeigt an, welcher Arbeitsbereichstyp (Microsoft Jet oder ODBCDirect) beim nächsten Aufruf der CreateWorkspace-Methode erstellt wird.

•	Direction-Eigenschaft (auf Parameter-Objekte) — Zeigt an, ob ein Parameter-Objekt einen Eingabeparameter, einen Ausgabeparameter oder beides darstellt, oder ob der Parameter der Rückgabewert einer gespeicherten Prozedur ist.

•	MaxRecords-Eigenschaft (auf QueryDef-Objekte) — Legt die maximale Anzahl der Datensätze, die von einer Abfrage zurückgegeben werden, fest oder gibt sie zurück.

•	OriginalValue-Eigenschaft (auf Field-Objekte) — Gibt den Wert eines Field-Objekts in der Datenbank, die vor der letzten Stapelaktualisierung vorhanden war, zurück.

•	Prepare-Eigenschaft (auf QueryDef-Objekte) — Gibt einen Wert zurück, der anzeigt, ob die Abfrage auf dem Server als temporär gespeicherte Prozedur mit der ODBC-Funktion SQLPrepare vor der Ausführung vorbereitet werden soll, oder ob sie nur mit der ODBC-Funktion SQLExecDirect ausgeführt werden soll.

•	RecordStatus-Eigenschaft (auf Recordset-Objekte) — Gibt einen Wert zurück, der den aktualisierten Status des aktuellen Datensatzes anzeigt, wenn er ein Teil einer Stapelaktualisierung ist.

•	StillExecuting-Eigenschaft (auf Connection-, QueryDef- und Recordset-Objekte ) — Gibt einen Wert zurück, der anzeigt, ob die Ausführung einer asynchronen Operation beendet wurde.

•	UpdateOptions-Eigenschaft (auf Recordset-Objekte) — Gibt einen Wert zurück, der anzeigt, wie der WHERE-Abschnitt für jeden Datensatz während einer Stapelaktualisierung erstellt wird und die Aktualisierung ausgeführt werden soll.

•	VisibleValue-Eigenschaft (auf Recordset-Objekte) — Gibt einen Wert zurück, der momentan in der Datenbank aktueller ist als die OriginalValue-Eigenschaft bei einem Stapelaktualisierungskonflikt bestimmt hat.

Neue Möglichkeiten mit ODBCDirect

Server-Verbindungen

Nur im ODBCDirect-Objektmodell ist das neue Connection-Objekt verfügbar, das Informationen zur Verbindung einer ODBC-Datenquelle, wie z.B. Server-Name, Datenquellenname usw. enthält. Es ähnelt dem Database-Objekt und wird Ihnen bekannt vorkommen, wenn Sie schon einmal ein Database-Objekt auf einer ODBC-Datenquelle geöffnet haben. Eigentlich stellen ein Connection-Objekt und ein Database-Objekt nur verschiedene Verweise auf dasselbe Objekt dar. Mit den neuen Eigenschaften dieser beiden Objekttypen können Sie einen Verweis auf das entsprechende Objekt erhalten und so leichter bestehende ODBC-Client-Anwendungen, die auf Microsoft Jet basieren, in ODBCDirect-Anwendungen konvertieren.

Stapelaktualisierungen

Für Client-Anwendungen, die einen Cursor benötigen, der keine Datensätze auf dem Server sperrt oder Aktualisierungen nicht datensatzweise anfordert, ist ein neuer Stapelaktualisierungs-Cursor verfügbar. Der Client speichert Aktualisierungsinformationen zu mehreren Datensätzen in einem lokalen Zwischenspeicher (oder Stapel) und aktualisiert diese Datensätze im Stapelbetrieb.

Durch die Zeitspanne zwischen dem Öffnen eines Recordset-Objekts und dem Senden einer Stapelaktualisierung von diesem Recordset-Objekt zurück zum Server haben andere Benutzer die Möglichkeit, die Originaldaten zu ändern, bevor Ihre Änderungen zum Server gesendet werden können. Dadurch können bei Änderungen von mehreren Benutzern Kollisionen auftreten. Mit einer Reihe von neuen Funktionen können Sie feststellen, wo diese Kollisionen nach einer Stapelaktualisierung auftreten, die einzelnen Schritte einer Stapelaktualisierung nachvollziehen und eventuelle Probleme beheben.

Ausführen asynchroner Methoden

Die Methoden Execute, MoveLast, OpenConnection und OpenRecordset enthalten die Option dbRunAsync. Damit kann eine Client-Anwendung andere Aufgaben erledigen (wie z.B. Formulare laden), während die Methode ausgeführt wird. Sie können auch überprüfen, ob eine Aufgabe durchgeführt wurde, und asynchrone Aufgaben beenden.

Client-Unterstützung für ODBC-Cursor

Die folgenden Cursor-Typen werden von vier Recordset-Objekttypen unterstützt.

ODBC-Cursor	Recordset-Typ
Dynamisch	dbOpenDynamic (Neu in DAO 3.5)
Dynaset	dbOpenDynaset
Vorwärts	dbOpenForwardOnly (Neu in DAO 3.5)
Statisch	dbOpenSnapshot
Neue DAO 3.5-Schnittstellen für das Microsoft Jet-Datenbankmodul

•	PopulatePartial-Methode (auf Database-Objekte) — Alle Änderungen in einem Teilreplikat werden mit dem vollständigen Replikat synchronisiert, alle Datensätze im Teilreplikat werden gelöscht, und das Teilreplikat wird basierend auf den aktuellen Replikatsfiltern wieder aufgefüllt.

•	SetOption-Methode (auf DBEngine-Objekt) — Überschreibt für die Zeit der aktuellen DAO-Sitzung die Werte des Microsoft Jet-Datenbankmoduls in der Registrierung.

•	FieldSize-Eigenschaft (auf Field-Objekte) — Ersetzt die FieldSize-Methode. Es wird dieselbe Syntax verwendet, so das vorhandener Code nicht verändert werden muß.

•	MaxRecords-Eigenschaft (auf QueryDef-Objekte) — Legt die maximale Anzahl der Datensätze fest, die von einer Abfrage zurückgegeben werden, oder gibt sie zurück.

•	ReplicaFilter-Eigenschaft (auf TableDef-Objekte) — Gibt einen Wert zurück, der anzeigt, welche Untergruppe von Datensätzen in eine Tabelle aus dem vollständigen Replikat repliziert wird.

•	PartialReplica-Eigenschaft (auf Relation-Objekte) — Zeigt an, welches Relation-Objekt wann verwendet werden soll, wenn ein Teilreplikat aus einem vollständigen Replikat aufgefüllt wird.

Neue Möglichkeiten mit dem Microsoft Jet-Datenbankmodul

Teilreplikation

Mit der Version 3.5 des Microsoft Jet-Datenbankmoduls können Benutzer Teile einer Tabelle anstelle der gesamten Tabelle replizieren. (Nur Zeilenbeschränkungen sind möglich, keine Spaltenbeschränkungen.) In Teilreplikaten werden zwei Arten von Filtern verwendet: Boolesch und Beziehung. Boolesche Filter wählen nur Zeilen aus, die bestimmten Kriterien entsprechen, die die Anzahl der replizierten Zeilen in einer Tabelle begrenzen. DAO stellt diesen Filter mit der ReplicaFilter-Eigenschaft auf einem TableDef-Objekt dar. Beziehung-Filter erzwingen eine Beziehung zwischen teilweise replizierten Tabellen, um die Anzahl der replizierten Zeilen in einer Tabelle zu begrenzen. Mit DAO kann die PartialReplica-Eigenschaft auf ein Relation-Objekt festgelegt werden, wodurch das Relation-Objekt in der Teilreplikation verwendet werden kann.

Neuer Typ eines Recordset-Objekts

dbOpenForwardOnly ist ein neuer Wert für das Argument Typ der OpenRecordset-Methode in DAO 3.5. Dieser neue Recordset-Typ verhält sich genauso wie ein Recordset-Objekt vom Typ Snapshot in DAO, Version 3.0, das zusammen mit der Option dbForwardOnly geöffnet wurde.

Überschreiben der Registrierung zur Laufzeit

Mit der neuen SetOption-Methode können Sie Einstellungen der Microsoft Jet-Registrierung zur Laufzeit überschreiben. Dadurch können Sie die Ausführung von Abfragen beschleunigen, die Wartezeitverzögerung einstellen usw.


Überflüssige Funktionen in DAO

Microsoft Access, Version 1.x und 2.0, und Microsoft Visual Basic, Version 3.0, verwenden frühere Versionen von DAO. Diverse Objekte, Methoden, Eigenschaften und Anweisungen in diesen früheren Versionen werden mittlerweile nicht mehr benötigt, aber immer noch für die Abwärtskompatibilität von vorhandenem Benutzer-Code unterstützt.

Im folgenden werden die DAO-Methoden, Eigenschaften, Objekte und Anweisungen aufgelistet, die durch flexiblere, leistungsfähigere und leichter einzusetzende Funktionen ersetzt wurden. Jede überflüssige Funktion in der Liste hat eine entsprechende Ersatzfunktion.

Überflüssige Funktion	Ersatzfunktion
Alle CreateDynaset-Methoden	OpenRecordset-Methode
Alle CreateSnapshot-Methoden	OpenRecordset-Methode
Alle ListFields-Methoden	Fields-Auflistung
Alle ListIndexes-Methoden	Indexes-Auflistung
CompactDatabase-Anweisung	DBEngine.CompactDatabase-Methode
CreateDatabase-Anweisung	DBEngine.CreateDatabase-Methode
DBEngine.FreeLocks-Methode	DBEngine.Idle-Methode
DBEngine.SetDefaultWorkspace- Methode	DBEngine.DefaultUser und DBEngine.Password -Eigenschaften
DBEngine.SetDataAccessOption- Methode	DBEngine.IniPath-Eigenschaft
Database.BeginTrans-Methode	Workspace.BeginTrans-Methode
Database.CommitTrans-Methode	Workspace.CommitTrans-Methode
Database.Rollback-Methode	Workspace.Rollback-Methode
Database.DeleteQuerydef-Methode	Delete-Methode
Database.ExecuteSQL-Methode	Execute-Methode
Database.ListTables-Methode	Tabledefs-Auflistung
Database.OpenQuerydef-Methode	Querydefs-Auflistung
Database.OpenTable-Methode	OpenRecordset-Methode
FieldSize-Methode	FieldSize-Eigenschaft
Index.Fields-Eigenschaft	Index.Fields-Auflistung
OpenDatabase-Anweisung	DBEngine.OpenDatabase-Methode
Querydef.ListParameters-Methode	Parameters-Auflistung
Snapshot-Objekt	Recordset-Objekt
Dynaset-Objekt	Recordset-Objekt
Table-Objekt	Recordset-Objekt


Container-Objekt

Ein Container-Objekt gruppiert ähnliche Typen von Document-Objekten.

Bemerkungen

Jedes Database-Objekt hat eine Containers-Auflistung, die aus integrierten Container-Objekten besteht. Anwendungen können ihre eigenen Dokumtentypen und die entsprechenden Container definieren (nur Microsoft Jet-Datenbanken), die Objekte werden jedoch nicht immer von DAO unterstützt.

Einige dieser Container-Objekte sind durch das Microsoft Jet-Datenbankmodul definiert, während andere durch andere Anwendungen definiert sein können. Die folgende Tabelle enthält eine Liste der Namen aller Container-Objekte, die das Microsoft Jet-Datenbankmodul definiert, und der Art der darin enthaltenen Informationen.

Container-Name	Enthält Informationen zu
Databases	gespeicherten Datenbanken
Tables	gespeicherten Tabellen und Abfragen
Relations	gespeicherten Beziehungen
Anmerkung   Verwechseln Sie die in der vorhergehenden Tabelle aufgeführten Container-Objekte nicht mit den gleichnamigen Auflistungen. Das Container-Objekt "Databases" verweist auf alle gespeicherten Datenbankobjekte, während die Databases-Auflistung nur auf Datenbankobjekte verweist, die innerhalb eines bestimmten Arbeitsbereichs geöffnet sind.

Jedes Container-Objekt hat eine Documents-Auflistung, die Document-Objekte enthält, die wiederum Vorkommen integrierter Objekttypen der vom Container angegeben Typen beschreiben. Normalerweise verwenden Sie ein Container-Objekt als unmittelbare Verknüpfung zu den im Document-Objekt enthaltenen Informationen. Sie können die Containers-Auflistung auch dazu benutzen, um Sicherheitsbeschränkungen für Document-Objekte eines bestimmten Typs festzulegen.

Mit vorhandenen Container-Objekten sind die folgenden Operationen möglich.

•	Verwenden der Name-Eigenschaft, um den vordefinierten Namen von Container-Objekten zurückzugeben.

•	Verwenden der Owner-Eigenschaft, um den Eigentümer eines Container-Objekts festzulegen oder zurückzugeben. Sie benötigen Schreibberechtigung auf das Container-Objekt, um die Owner-Eigenschaft festzulegen, und Sie müssen die Eigenschaft auf den Namen eines vorhandenen User- oder Group-Objekts festlegen.

•	Festlegen der Zugriffsberechtigungen für das Container-Objekt unter Verwendung der Eigenschaften Permissions und UserName. Jedes in der Documents-Auflistung eines Container-Objekts erstellte Document-Objekt übernimmt die Einstellungen der Zugriffsberechtigungen.

Da Container-Objekte integriert sind, können Sie keine neuen Container-Objekte erstellen oder vorhandene löschen.

Sie können auf ein Container-Objekt in einer Auflistung über seine Ordinalposition oder über die Einstellung der zugehörigen Name-Eigenschaft verweisen, indem Sie eine der folgenden Syntaxen verwenden.

Containers(0)

Containers("Name")

Containers![Name]


Containers-Auflistung

Eine Containers-Auflistung enthält alle Container-Objekte, die in einer Datenbank definiert sind (nur Microsoft Jet-Datenbanken).

Bemerkungen

Jedes Database-Objekt hat eine Containers-Auflistung, die aus integrierten Container-Objekten besteht. Einige dieser Container-Objekte werden durch das Microsoft Jet-Datenbankmodul definiert, während andere möglicherweise von anderen Anwendungen definiert werden.


Container-Objekt, Containers-Auflistung - Zusammenfassung

Container-Objekt

Ein Container-Objekt enthält keine Methoden, sondern die folgenden Auflistungen und Eigenschaften.

Auflistungen

Documents (Voreinstellung)

Properties

Eigenschaften

AllPermissions

Inherit

Name

Owner

Permissions

UserName

Containers-Auflistung

Eine Containers-Auflistung erscheint in jedem Database-Objekt einer Microsoft Jet-Datenbank und enthält folgende Methode und Eigenschaft.

Methode

Refresh

Eigenschaft

Count


Database-Objekt

Ein Database-Objekt stellt eine geöffnete Datenbank dar.

Bemerkungen

Mit dem Database-Objekt und dessen Methoden und Eigenschaften können Sie eine geöffnete Datenbank bearbeiten. Sie können mit jeder Art von Datenbank folgende Operationen ausführen.

•	Verwenden der Execute-Methode, um eine Aktionsabfrage auszuführen.

•	Festlegen der Connect-Eigenschaft, damit eine Verbindung zu einer OBDC-Datenquelle hergestellt wird.

•	Festlegen der QueryTimeout-Eigenschaft, damit die Zeit begrenzt ist, in der auf die Antwort auf eine Abfrage, die auf einer ODBC-Datenquelle ausgeführt wird, gewartet wird.

•	Verwenden der RecordsAffected-Eigenschaft, um die Anzahl der Datensätze festzustellen, die in einer Aktionsabfrage geändert wurden.

•	Verwenden der OpenRecordset-Methode, um eine Auswahlabfrage auszuführen und ein Recordset-Objekt zu erstellen.

•	Verwenden der Version-Eigenschaft, um zu bestimmen, mit welcher Version des Datenbankmoduls die Datenbank erstellt wurde.

Mit einer Microsoft Jet-Datenbank (.mdb-Datei) können Sie auch andere Methoden, Eigenschaften und Auflistungen verwenden, um sowohl ein Database-Objekt zu bearbeiten, als auch zugehörige Tabellen, Abfragen und Beziehungen zu erstellen, zu verändern oder Informationen darüber zu erhalten. Ihnen stehen z.B. folgende Möglichkeiten zur Verfügung.

•	Verwenden der CreateTableDef- und CreateRelation-Methoden, um Tabellen oder Beziehungen zu erstellen.

•	Verwenden der CreateProperty-Methode, um neue Database-Eigenschaften zu definieren.

•	Verwenden der CreateQueryDef-Methode, um sowohl ein beständiges Objekt als auch begrenzte Abfragedefinition zu erstellen.

•	Verwenden der MakeReplica-, Synchronize- und PopulatePartial-Methoden, um vollständige oder teilweise Replikate Ihrer Datenbank zu erstellen und zu synchronisieren.

•	Verwenden der CollatingOrder-Eigenschaft, um die alphabetische Sortierreihenfolge zeichenorientierter Felder für verschiedene Sprachen festzulegen.

In einem ODBCDirect-Arbeitsbereich können Sie folgende Operationen ausführen.

•	Verwenden der Connection-Eigenschaft, um einen Verweis auf das Connection-Objekt zu erhalten, welches dem Database-Objekt entspricht.

Anmerkung   Eine vollständige Liste aller verfügbaren Methoden, Eigenschaften und Auflistungen eines Database-Objekts - sowohl für Microsoft Jet-Arbeitsbereiche als auch für ODBCDirect-Arbeitsbereiche - erhalten Sie unter Zusammenfassung.

Mit der CreateDatabase-Methode können Sie ein beständiges Database-Objekt erstellen, das automatisch an die Database-Auflistung angefügt wird und dabei auf der Festplatte gespeichert wird.

Das DBEngine-Objekt muß nicht angegeben werden, wenn Sie die OpenDatabase-Methode verwenden.

Durch Öffnen einer Datenbank mit verknüpften Tabellen werden die Verknüpfungen zu den angegebenen externen Dateien oder den mit Microsoft Jet verbundenen ODBC-Datenquellen nicht automatisch hergestellt. Sie müssen entweder auf die TableDef- oder Field-Objekte der Tabelle verweisen oder ein Recordset-Objekt öffnen. Wenn keine Verknüpfungen zu diesen Tabellen hergestellt werden können, tritt ein auffangbarer Fehler auf. Eventuell benötigen Sie auch eine Zugriffsberechtigung für die Datenbank, oder die Datenbank ist bereits exklusiv von einem anderen Benutzer geöffnet. In diesen Fällen treten auffangbare Fehler auf.

Sie können auch mit der OpenDatabase-Methode eine externe Datenbank (wie z.B. FoxPro, dBASE und Paradox) direkt öffnen, anstatt eine Microsoft Jet-Datenbank zu öffnen, die mit den Tabellen in der externen Datenbank verknüpft ist.

Anmerkung   Das direkte Öffnen eines Database-Objekts auf einer ODBC-Datenquelle, die mit Microsoft Jet verbundenen ist, wie z.B. Microsoft SQL Server, ist nicht empfehlenswert, da die Abfragegeschwindigkeit deutlich langsamer ist als bei der Benutzung von verknüpften Tabellen. Das Leistungsverhalten wird jedoch nicht negativ beeinflußt, wenn ein Database-Objekt direkt auf einer externen ISAM-Datenbank, wie z.B. FoxPro, Paradox usw., geöffnet wird.

Wenn eine Prozedur, die Database-Objekte deklariert, ausgeführt wurde, werden lokale Database-Objekte zusammen mit allen geöffneten Recordset-Objekten geschlossen. Alle noch nicht abgeschlossenen Aktualisierungen gehen verloren, und alle noch nicht abgeschlossenen Transaktionen werden zurückgesetzt, es tritt jedoch kein auffangbarer Fehler auf. Sie sollten alle noch nicht abgeschlossenen Transaktionen oder Änderungen ausführlich zu Ende führen und Recordset-Objekte und Database-Objekte schließen, bevor Sie Prozeduren beenden, die diese Objektvariablen lokal deklarieren.

Wenn Sie eine der Transaktionsmethoden (BeginTrans, CommitTrans, oder Rollback) auf ein Workspace-Objekt verwenden, wird diese Transaktion auf allen im Workspace geöffneten Datenbanken angewandt, die sich im selben Workspace wie das Database-Objekt befinden. Falls unabhängige Transaktionen durchgeführt werden sollen, muß zuerst ein zusätzliches Workspace-Objekt und dann ein weiteres Database-Objekt in diesem Workspace-Objekt geöffnet werden.

Anmerkung   Sie können dieselbe Datenquelle oder Datenbank mehrmals öffnen, indem Sie Namensduplikate in der Database-Auflistung erstellen. Sie sollten Database-Objekte Objektvariablen zuweisen und mit dem Variablennamen auf sie verweisen.


Databases-Auflistung

Eine Databases-Auflistung enthält alle Database-Objekte, die in einem Workspace-Objekt geöffnet oder erstellt wurden.

Bemerkungen

Wenn Sie ein vorhandenes Database-Objekt öffnen oder ein neues aus einem Workspace-Objekt erstellen, wird es automatisch der Databases-Auflistung angefügt. Wenn Sie ein Database-Objekt mit der Close-Methode schließen, wird es aus der Databases-Auflistung entfernt, aber nicht von der Festplatte gelöscht. Sie sollten alle geöffneten Recordset-Objekte schließen, bevor Sie ein Database-Objekt schließen.

In einem Microsoft Jet-Arbeitsbereich ist die Einstellung der Name-Eigenschaft einer Datenbank eine Zeichenfolge, die den Pfad der Datenbankdatei angibt. In einem ODBCDirect-Arbeitsbereich ist die Name-Eigenschaft der Name des entsprechenden Connection-Objekts.

Mit der folgenden Syntax können Sie auf alle Database-Objekte einer Auflistung über die zugehörige Ordinalzahl oder Einstellung der Name-Eigenschaft verweisen.

Databases(0)

Databases("Name")

Databases![Name]

Anmerkung   Sie können dieselbe Datenquelle oder Datenbank mehrmals öffnen, indem Sie Namensduplikate in der Databases-Auflistung verwenden. Sie sollten Databases-Objekte Objektvariablen zuweisen und mit dem Variablennamen auf sie verweisen.


Database-Objekt, Databases-Auflistung - Zusammenfassung

Database-Objekt

Ein Database-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften.

Legende:

Funktionen, die nur in Microsoft Jet-Arbeitsbereichen verfügbar sind.

Funktionen, die nur in ODBCDirect-Arbeitsbereichen verfügbar sind.

Auflistungen

Containers

Properties

QueryDefs

Recordsets (Voreinstellung für [image])

Relations

TableDefs (Voreinstellung für [image])

Methoden

Close

CreateProperty

CreateQueryDef

CreateRelation

CreateTableDef

Execute

MakeReplica

NewPassword

OpenRecordset

PopulatePartial

Synchronize

Eigenschaften

CollatingOrder

Connect

Connection

DesignMasterID

Name

QueryTimeout

RecordsAffected

Replicable (benutzerdefiniert)

ReplicaID

Updatable

V1xNullBehavior

Version

Databases-Auflistung

Eine Databases-Auflistung erscheint in jedem Workspace-Objekt und enthält die folgende Methode und Eigenschaft.

Methode

Refresh

Eigenschaft

Count


DBEngine-Objekt

DBEngine ist das Objekt der obersten Ebene in einem DAO-Objektmodell.

Bemerkungen

Das DBEngine-Objekt enthält und steuert alle anderen Objekte in der DAO-Objekthierarchie. Sie können keine zusätzlichen DBEngine-Objekte erstellen, und das DBEngine-Objekt ist nicht Element einer Auflistung.

Anmerkung   Wenn Sie direkt auf eine ODBC-Datenquelle durch DAO verweisen, wird dies ein "ODBCDirect-Arbeitsbereich" genannt. Dadurch wird sie von einer Datenquelle unterschieden, auf die indirekt durch das Microsoft Jet-Datenbankmodul mit Hilfe eines "Microsoft Jet-Arbeitsbereichs" verwiesen wird. Jede Zugriffsmethode auf ODBC-Daten benötigt ein oder zwei Arten von Workspace-Objekten. Sie können die DefaultType-Eigenschaft festlegen, damit der Standardtyp des Workspace-Objekts ausgewählt wird, den Sie aus dem DBEngine-Objekt erstellen. Der Workspace-Datentyp und die zugeordnete Datenquelle bestimmen, welche DAO-Objekte, DAO -Methoden und DAO-Eigenschaften Ihnen zu Verfügung stehen.

Sie können mit jeder Art von Datenbank oder Verbindung folgende Operationen ausführen.

•	Verwenden Sie die Version-Eigenschaft, um die DAO-Versionsnummer zu erhalten.

•	Verwenden Sie die LoginTimeout-Eigenschaft, um die Zeitüberschreitung beim Anmelden bei ODBC zu erhalten oder festzulegen. Mit der RegisterDatabase-Methode erhält das Microsoft Jet-Datenbankmodul ODBC-Informationen. Diese Funktionen kann immer gleich verwendet werden, unabhängig davon, ob Sie mit der ODBC-Datenquelle über Microsoft Jet oder über einen ODBCDirect-Arbeitsbereich verbunden sind.

•	Verwenden Sie die DefaultType-Eigenschaft, um die Standard-Datenbankverbindung festzulegen, die anschließend erstellte Workspace-Objekte verwenden, also entweder Microsoft Jet oder ODBCDirect.

•	Verwenden Sie die DefaultPassword- und DefaultUser-Eigenschaften, um die Benutzererkennung und das standardmäßige Workspace-Objekt festzulegen.

•	Verwenden Sie die CreateWorkspace-Methode, um ein neues Workspace-Objekt zu erstellen. Sie können mit optionalen Argumenten die Einstellungen der Eigenschaften DefaultType, DefaultPassword und DefaultUser übergehen.

•	Verwenden Sie die OpenDatabase-Methode, um eine Datenbank im standardmäßigen Workspace-Objekt zu öffnen, und steuern Sie mit den BeginTrans-, Commit- und Rollback-Methoden die Transaktionen auf dem standardmäßigen Workspace-Objekt.

•	Verwenden Sie die Workspace-Auflistung, um auf bestimmte Workspace-Objekte zu verweisen.

•	Verwenden Sie die Errors-Auflistung, um Datenzugriffsfehler näher zu untersuchen.

Weitere Eigenschaften und Methoden sind nur verfügbar, wenn Sie DAO mit dem Microsoft Jet-Datenbankmodul verwenden. Mit diesen Methoden können Sie das Jet-Datenbankmodul steuern, die zugehörigen Eigenschaften ändern und Operationen auf temporären Objekten ausführen, die keiner Auflistung angehören. Ihnen stehen zum Beispiel folgende Möglichkeiten zur Verfügung.

•	Verwenden der CreateDatabase-Methode, um ein neues Microsoft Jet Database-Objekt zu erstellen.

•	Verwenden der Idle-Methode, damit das Jet-Datenbankmodul noch nicht abgeschlossene Operationen beenden kann.

•	Verwenden der Methoden CompactDatabase und RepairDatabase, um Datenbankdateien zu komprimieren und zu reparieren.

•	Verwenden der IniPath- und SystemDB-Eigenschaften, um den Pfad zur Windows-Registrierungsinformations von Microsoft Jet beziehungsweise zur Arbeitsgruppeninformationsdatei für Microsoft Jet anzugeben. Mit der SetOption-Methode können Sie die Einstellungen in der Windows-Registrierung für das Microsoft Jet-Datenbankmodul übergehen.

Die geänderten Einstellungen der DefaultType- und der IniPath-Eigenschaft werden nur in nachfolgenden Workspace-Objekte wirksam.

Anmerkung   Eine vollständige Liste aller Methoden, Eigenschaften und Auflistungen über das DBEngine-Objekt erhalten Sie unter Zusammenfassung.

Mit der folgenden Syntax verweisen Sie auf eine Auflistung des DBEngine-Objekts oder auf eine Methode oder Eigenschaft, die dieses Objekt betrifft.

[DBEngine.][Auflistung | Methode | Eigenschaft]


DBEngine-Objekt - Zusammenfassung

Das DBEngine-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften.

Legende:

Funktionen, die nur in Microsoft Jet-Arbeitsbereiche verfügbar sind.

Funktionen, die nur in ODBCDirect-Arbeitsbereiche verfügbar sind.

Auflistungen

Errors

Properties

Workspaces (Voreinstellung)

Methoden

BeginTrans

CommitTrans

CompactDatabase

CreateDatabase

CreateWorkspace

Idle

OpenConnection

OpenDatabase

RegisterDatabase

RepairDatabase

Rollback

SetOption

Eigenschaften

DefaultPassword

DefaultType

DefaultUser

IniPath

LoginTimeout

SystemDB

Version


Document-Objekt

Ein Document-Objekt enthält Informationen zu einer einzelnen Instanz eines Objekts. Bei dem Objekt kann es sich um eine Datenbank, gespeicherte Tabelle, Abfrage oder Beziehung handeln (nur Microsoft Jet-Datenbanken).

Bemerkungen

Jedes Container-Objekt hat eine Documents-Auflistung mit Document-Objekten, die Instanzen integrierter Objekte beschreiben, deren Typ im Container-Objekt angegeben wird. In der folgenden Tabelle sind die Objekttypen, die jedes Document-Objekt beschreibt, der Name des zugehörigen Container-Objekts sowie die Art der im Document-Objekt enthaltenen Informationen beschrieben.

Document	Container	Enthaltene Informationen zur
Database	Databases	Gespeicherten Datenbank
Table oder Query	Tables	Gespeicherten Tabelle oder Abfrage
Relationship	Relationships	Gespeicherten Beziehung
Anmerkung   Verwechseln Sie die in der Tabelle aufgelisteten Container-Objekte nicht mit den Auflistungen desselben Namens. Das Container-Objekt "Databases" verweist auf sämtliche gespeicherten Datenbankobjekte, wohingegen die Databases-Auflistung nur auf Datenbankobjekte, die in einem bestimmten Arbeitsbereich geöffnet sind, verweist.

Mit einem Document-Objekt können Sie folgende Operationen ausführen.

•	Verwenden der Name-Eigenschaft, um den Namen, den ein Benutzer oder das Microsoft Jet-Datenbankmodul einem Objekt beim Erstellen gab, zurückzugeben.

•	Verwenden der Container-Eigenschaft, um den Namen des Container-Objekts, das das Document-Objekt enthält, zurückzugeben.

•	Verwenden der Owner-Eigenschaft, den Eigentümer eines Objekts festzulegen oder zurückzugeben. Sie benötigen Schreibberechtigung für das Document-Objekt, um die Owner-Eigenschaft festzulegen, außerdem muß die Eigenschaft auf den Namen eines vorhandenen User- oder Group-Objekts festgelegt sein.

•	Verwenden der UserName- oder Permissions-Eigenschaften, um die Zugriffsberechtigung auf ein Objekt für einen Benutzer oder eine Gruppe festzulegen oder zurückzugeben. Sie benötigen Schreibzugriff für das Document-Objekt, damit Sie die Eigenschaften festlegen können, und die UserName-Eigenschaft muß auf den Namen eines vorhandenen User- oder Group-Objekts festgelegt sein.

•	Verwenden der DateCreate- und LastUpdated-Eigenschaften, um das Datum und den Zeitpunkt zurückzugeben, an dem das Document-Objekt erstellt und zuletzt verändert wurde.

Da ein Document-Objekt einem vorhandenen Datenbankobjekt entspricht, können Sie Document-Objekte nicht neu erstellen oder löschen. Mit der folgenden Syntax können Sie auf alle Document-Objekte einer Auflistung über die zugehörige Ordinalzahl oder Einstellung der Name-Eigenschaft verweisen.

Documents(0)

Documents("Name")

Documents![Name]


Documents-Auflistung

Eine Documents-Auflistung enthält alle Document-Objekte eines bestimmten Objekttyps (nur Microsoft Jet-Datenbanken).

Bemerkungen

Jedes Container-Objekt hat eine Documents-Auflistung, das Document-Objekte enthält, die wiederum Instanzen integrierter Objekte beschreiben, deren Typ vom Container angegeben wurde..

Sie können in einer Auflistung auf ein Document-Objekt über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft verweisen, indem Sie eine der folgenden Syntaxformen verwenden.

Documents(0)

Documents("Name")

Documents![Name]


Document-Objekt, Documents-Auflistung - Zusammenfassung

Document-Objekt

Ein Document-Objekt enthält die folgende Auflistung und Methode sowie die aufgeführten Eigenschaften.

Auflistung

Properties

Eigenschaften

AllPermissions

Container

DateCreated

KeepLocal (benutzerdefiniert)

LastUpdated

Name

Owner

Permissions

Replicable (benutzerdefiniert)

UserName

Methode

CreateProperty

Documents-Auflistung

Eine Documents-Auflistung erscheint in jedem Container-Objekt und enthält die folgende Methode und Eigenschaft.

Methode

Refresh

Eigenschaft

Count


Recordset-Objekt vom Typ Dynaset

Ein Recordset-Objekt vom Typ Dynaset ist eine dynamische Gruppe von Datensätzen, die Felder aus einer oder mehreren Tabellen oder Abfragen in einer Datenbank enthalten und aktualisiert werden kann. In einer ODBCDirect-Datenbank entspricht ein Recordset-Objekt vom Typ Dynaset einem ODBC-Schlüsselgruppen-Cursor.

Bemerkungen

Mit einem Recordset-Objekt vom Typ Dynaset können Sie Daten in einer oder mehreren zugrundeliegenden Tabellen verändern.

Es unterscheidet sich von einem Recordset-Objekt vom Typ Snapshot dadurch, daß für jeden Datensatz lediglich der Primärschlüssel anstelle der tatsächlichen Daten gespeichert wird. Dadurch wird ein Dynaset den Änderungen entsprechend aktualisiert, die an den Quelldaten vorgenommen wurden, während dies beim Snapshot nicht der Fall ist. Wie beim Recordset-Objekt vom Typ Tabelle wird der vollständige Datensatz eines Dynasets nur abgerufen, wenn dies für Bearbeitungs- oder Anzeigezwecke benötigt wird.

Sie erstellen ein Recordset-Objekt vom Typ Dynaset, indem Sie die OpenRecordset-Methode auf einer geöffneten Datenbank für ein anderes Recordset-Objekt vom Typ Dynaset oder Snapshot verwenden, auf ein QueryDef-Objekt oder auf ein TableDef-Objekt ausführen. (Das Öffnen von Recordset-Objekten über anderen Recordset-Objekten oder TableDef-Objekten ist nur in Microsoft Jet-Arbeitsbereichen möglich.)

Wenn Sie ein Recordset-Objekt vom Typ Dynaset anfordern und das Microsoft Jet-Datenbankmodul keinen Lese- und Schreibzugriff auf die Datensätze erhält, kann das Microsoft Jet-Datenbankmodul ein schreibgeschütztes Recordset-Objekt vom Typ Dynaset erstellen.

Wenn Benutzer Daten aktualisieren, spiegeln sich die darausfolgenden Änderungen in der Basistabelle wider. Demzufolge stehen die aktuellen Daten für Ihre Anwendung zur Verfügung, wenn Sie die Position des aktuellen Datensatzes ändern. In einer Mehrbenutzerdatenbank können mehrere Benutzer ein Recordset-Objekt vom Typ Dynaset öffnen und auf dieselben Datensätze verweisen. Da ein Recordset-Objekt vom Typ Dynaset dynamisch ist, haben andere Benutzer unmittelbar Zugriff auf die geänderten Daten, nachdem ein Datensatz von einem Benutzer geändert wurde. Wenn ein Benutzer dagegen einen Datensatz hinzufügt, werden andere Benutzer den neuen Datensatz erst sehen können, wenn Sie die Requery-Methode für das Recordset-Objekt ausführen. Wenn ein Benutzer einen Datensatz löscht, werden andere Benutzer benachrichtigt, wenn sie versuchen, darauf zuzugreifen.

Zur Datenbank hinzugefügte Datensätze werden nur dann Bestandteil eines Recordset-Objekts vom Typ Dynaset, wenn Sie sie mit den AddNew- und Update-Methoden hinzufügen. Wenn Sie z.B. eine Aktionsabfrage verwenden, die die SQL-Anweisung INSERT INTO enthält, um Datensätze hinzuzufügen, werden die neuen Datensätze nur in das Recordset-Objekt vom Typ Dynaset aufgenommen, wenn Sie die Requery-Methode verwenden oder das Recordset-Objekt mit der OpenRecordset-Methode neu erstellen.

Damit die Datenintegrität gewährleistet bleibt, kann das Microsoft Jet-Datenbankmodul Recordset-Objekte vom Typ Dynaset und Tabelle sperren, während Edit-Operationen (vollständiges Sperren) oder Update-Operationen (eingeschränktes Sperren) durchgeführt werden, so daß jeweils immer nur ein bestimmter Datensatz nur von einem Benutzer aktualisiert werden kann. Wenn das Microsoft Jet-Datenbankmodul einen Datensatz sperrt, wird die gesamte 2 KB große Seite gesperrt, die den Datensatz enthält.

Sie können eingeschränktes und vollständiges Sperren auch bei anderen als ODBC-Tabellen verwenden. Wenn Sie auf externe Tabellen mittels ODBC über einen Microsoft Jet-Arbeitsbereich zugreifen, sollten Sie immer eingeschränktes Sperren verwenden. Die LockEdits-Eigenschaft und der Parameter Bearbeitungssperre der OpenRecordset-Methode legen das jeweils wirksame Sperrverfahren fest.

Nicht alle Felder können in allen Recordset-Objekten vom Typ Dynaset aktualisiert werden. Sie können herausfinden, ob ein bestimmtes Feld aktualisiert werden kann, indem Sie die Einstellung der DataUpdatable-Eigenschaft des Field-Objekts überprüfen.

Die folgende Liste enthält einige Gründe, warum ein Recordset-Objekt vom Typ Dynaset nicht aktualisiert werden kann.

•	Es gibt keinen eindeutigen Index für die ODBC- oder Paradox-Tabelle(n).

•	Die Datenseite ist durch einen anderen Benutzer gesperrt.

•	Der Datensatz wurde seit dem letzten Lesen verändert.

•	Der Benutzer hat keine Berechtigung.

•	Mindestens eine Tabelle oder ein Feld ist schreibgeschützt.

•	Die Datenbank wurde mit Schreibschutz geöffnet.

•	Das Recordset-Objekt wurde aus mehreren Tabellen ohne eine JOIN-Anweisung erstellt, oder die Abfrage war zu komplex.

Die Reihenfolge der Daten eines Recordset-Objekts vom Typ Dynaset oder anderer Recordset-Daten ist nicht genau festgelegt. Wenn Ihre Daten sortiert sein müssen, können Sie eine SQL-Anweisung mit einem ORDER BY-Abschnitt verwenden, um das Recordset-Objekt zu erstellen. Sie können ebenfalls einen WHERE-Abschnit verwenden, um Datensätze filtern, damit nur bestimmte Datensätze zum Recordset-Objekt hinzugefügt werden. Wenn Sie SQL-Anweisungen dafür verwenden, eine Untermenge von Datensätzen auszuwählen und zu sortieren, können Sie in der Regel schneller auf Ihre Daten zugreifen als unter Verwendung der Eigenschaften Filter oder Sort oder durch Testen jedes einzelnen Datensatzes.


Error-Objekt

Ein Error-Objekt enthält Details zu Datenzugriffsfehlern, von denen jeder mit einer einzelnen Operation im Zusammenhang mit DAO verbunden ist.

Bemerkungen

Jede Operation im Zusammenhang mit DAO kann einen oder mehrere Fehler auslösen. Ein Aufruf eines ODBC-Servers kann z.B. einen Fehler vom Datenbank-Server, einen ODBC-Fehler und einen DAO-Fehler verursachen. Beim Auftreten eines solchen Fehlers wird ein Error-Objekt in die Errors-Auflistung des DBEngine-Objekts eingetragen. Ein einzelner Vorfall kann demzufolge dazu führen, daß verschiedene Error-Objekte in der Errors-Auflistung auftauchen.

Wenn eine nachfolgende DAO-Operation einen Fehler auslöst, wird die Errors-Auflistung gelöscht, und ein oder mehrere neue Error-Objekte werden in die Errors-Auflistung eingetragen. DAO-Operationen, die keinen Fehler auslösen, haben auf die Errors-Auflistung keine Auswirkungen.

Alle Error-Objekte in der Errors-Auflistung beschreiben einen Fehler. Das erste Error-Objekt ist der Fehler der niedrigsten Ebene (der verursachende Fehler), das zweite der Fehler auf der nächsthöheren Ebene usw. Wenn z.B. ein ODBC-Fehler auftritt, während versucht wird, ein Recordset-Objekt zu öffnen, enthält das erste Error-Objekt, Errors(0), den ODBC-Fehler auf der niedrigsten Ebene. Nachfolgende Fehler enthalten die ODBC-Fehler, die von den verschiedenen ODBC-Schichten zurückgegeben werden. In diesem Fall geben der Treiber-Manager von OBDC und ggf. der Treiber selbst separate Error-Objekte zurück. Das letzte Error-Objekt, Errors.Count-1, enthält den DAO-Fehler, der anzeigt, welches Objekt nicht geöffnet werden konnte.

Die Aufzählung der speziellen Fehler in der Errors-Auflistung ermöglicht Ihren Fehlerverarbeitungsroutinen, die Ursache und den Ursprung eines Fehlers genauer zu bestimmen und geeignete Maßnahmen zur Fehlerbehandlung zu ergreifen. Sowohl im Microsoft Jet- als auch im ODBCDirect-Arbeitsbereich können Sie die Eigenschaften des Error-Objekts lesen, um genaue Einzelheiten über jeden Fehler zu erhalten, wie z.B.:

•	Die Description-Eigenschaft, welche den Fehlerwarnungstext enthält, der auf dem Bildschirm angezeigt wird, wenn der Fehler nicht behandelt wird.

•	Die Number-Eigenschaft, welche den ganzzahligen Wert der Fehlerkonstanten vom Typ Long, enthält.

•	Die Source-Eigenschaft, die die Objekte ausweist, welche den Fehler verursacht haben. Dies ist besonders nützlich, wenn sich mehrere Error-Objekte in der Error-Auflistung befinden, die einer Anforderung von einer ODBC-Datenquelle folgen.

•	Die HelpFile- und HelpContext-Eigenschaften, welche dem Fehler entsprechend auf die zugehörige Microsoft Windows-Hilfedatei bzw. das geeignete Hilfethema (falls vorhanden) verweisen.

Anmerkung   Wenn Sie während des Programmierens in Microsoft Visual Basic für Applikationen (VBA) das Schlüsselwort New verwenden, um ein Objekt zu erstellen, das einen Fehler auslöst, bevor dieses Objekt an eine Auflistung angefügt wurde, enthält die Errors-Auflistung des DBEngine-Objekts keine Fehlerinformationen zu diesem Objekt, da das neue Objekt nicht mit dem DBEngine-Objekt verknüpft ist. Jedoch ist die Fehlerinformation im Err-Objekt von VBA verfügbar.

Ihr VBA-Fehlerbehandlungscode sollte die Errors-Auflistung immer dann untersuchen, wenn Sie einen Datenzugriffsfehler erwarten. Falls Sie einen zentralen Fehlerbehandler schreiben, überprüfen Sie das Err-Objekt von VBA, um herauszufinden, ob die Fehlerinformationen in der Errors-Auflistung gültig sind. Wenn die Number-Eigenschaft des letzten Elements der Errors-Auflistung (DBEngine.Errors.Count - 1) und der Wert des Err-Objekts übereinstimmen, können Sie eine Reihe von Select Case-Anweisungen verwenden, um den oder die speziellen DAO-Fehler zu ermitteln, die aufgetreten sind. Falls sie sich nicht entsprechen, verwenden Sie die Refresh-Methode in der Errors-Auflistung.


Errors-Auflistung

Eine Errors-Auflistung enthält alle gespeicherten Error-Objekte, von denen jedes mit einer einzelnen Operation im Zusammenhang mit DAO verbunden ist.

Bemerkungen

Jede Operation im Zusammenhang mit DAO-Objekten kann einen oder mehrere Fehler auslösen. Beim Auftreten eines jeden Fehlers werden ein oder mehrere Error-Objekte in die Errors-Auflistung des DBEngine-Objekts eingetragen. Wenn eine andere DAO-Operation einen Fehler auslöst, wird die Errors-Auflistung gelöscht, und die neue Gruppe von Error-Objekten wird in die Errors-Auflistung eingetragen. Das Objekt in der Errors-Auflistung mit der höchsten Nummer (DBEngine.Errors.Count - 1) entspricht dem Fehler, der von dem zu Microsoft Visual Basic für Applikationen (VBA) gehörenden Err-Objekt gemeldet wurde.

DAO-Operationen, die keinen Fehler auslösen, haben auf die Errors-Auflistung keine Auswirkungen.

Elemente der Errors-Auflistung werden anders angefügt als das normalerweise in anderen Auflistungen der Fall ist. Demzufolge werden die Append- und Delete-Methoden von der Errors-Auflistung nicht unterstützt.

Alle Error-Objekte in der Errors-Auflistung beschreiben einen Fehler. Das erste Error-Objekt ist der Fehler der niedrigsten Ebene, das zweite der Fehler auf der nächsthöheren Ebene usw. Wenn z.B. ein ODBC-Fehler auftritt, während versucht wird, ein Recordset-Objekt zu öffnen, enthält das erste Error-Objekt den ODBC-Fehler auf der niedrigsten Ebene. Nachfolgende Fehler enthalten die ODBC-Fehler, die von den verschiedenen ODBC-Schichten zurückgegeben werden. In diesem Fall geben der Treiber-Manager von ODBC und ggf. der Treiber selbst separate Error-Objekte zurück. Das letzte Error-Objekt enthält den DAO-Fehler, der darauf hinweist, daß das Objekt nicht geöffnet werden konnte.

Die Aufzählung der speziellen Fehler ermöglicht Ihren Fehlerverarbeitungsroutinen, die Ursache und den Ursprung eines Fehlers genauer zu bestimmen und geeignete Maßnahmen zur Fehlerbehandlung zu ergreifen.

Anmerkung   Wenn Sie das Schlüsselwort New verwenden, um ein Objekt zu erstellen, das einen Fehler auslöst, bevor oder während der Fehler in die Errors-Auflistung eingetragen wird, enthält die Auflistung keine Fehlerinformationen zu diesem Objekt, da das neue Objekt nicht mit dem DBEngine-Objekt verknüpft ist. Jedoch stehen die Fehlerinformationen im Err-Objekt von VBA zur Verfügung.


Error-Objekt, Errors-Auflistung - Zusammenfassung

Error-Objekt

Ein Error-Objekt enthält keine Methoden und Auflistungen, aber die folgenden Eigenschaften.

Eigenschaften

Description

HelpContext

HelpFile

Number

Source

Errors-Auflistung

Eine Errors-Auflistung erscheint im DBEngine-Objekt und enthält folgende Methode und Eigenschaft.

Methode

Refresh

Eigenschaft

Count


Field-Objekt

Ein Field-Objekt stellt eine Spalte mit Daten dar, die einen gemeinsamen Datentyp und gemeinsame Eigenschaften haben.

Bemerkungen

Die Fields-Auflistungen von Index-, QueryDef-, Relation- und TableDef-Objekten enthalten die Angaben für die Felder, die durch diese Objekte dargestellt werden. Die Fields-Auflistung eines Recordset-Objekts stellt die Field-Objekte in einer Datenzeile oder einem Datensatz dar. Mit den Field-Objekten in einem Recordset-Objekt lesen Sie die Werte für die Felder im aktuellen Datensatz des Recordset-Objekts und legen die Werte fest.

Sowohl in Microsoft Jet- als auch in ODBCDirect-Arbeitsbereichen verändern Sie ein Feld mit einem Field-Objekt und den zugehörigen Methoden und Eigenschaften. Ihnen stehen z.B. folgende Möglichkeiten zur Verfügung.

•	Verwenden der OrdinalPosition-Eigenschaft, um die Darstellungsreihenfolge des Field-Objekts in einer Fields-Auflistung festzulegen oder zurückzugeben. (Diese Eigenschaft ist für ODBCDirect-Datenbanken schreibgeschützt.)

•	Verwenden der Value-Eigenschaft eines Feldes in einem Recordset-Objekt, um gespeicherte Daten festzulegen oder zurückzugeben.

•	Verwenden der Methoden AppendChunk, GetChunk und FieldSize um einen Wert in einem OLE-Objekt - oder Memo-Feld eines Recordset-Objekts abzurufen oder festzulegen.

•	Verwenden der Type-, Size- und Attributes-Eigenschaften, um den Datentyp, der auf dem Feld gespeichert werden kann, festzustellen.

•	Verwenden der Einstellungen der SourceField- und SourceTable-Eigenschaft, um die ursprüngliche Herkunft der Daten zu bestimmen.

In Microsoft Jet-Arbeitsbereichen können Sie folgenden Operationen ausführen.

•	Verwenden der Einstellung der ForeignName-Eigenschaft, um Informationen über ein fremdes Feld in einem Relation-Objekt zu bestimmen oder zurückzugeben.

•	Verwenden der Eigenschaften AllowZeroLength, DefaultValue, Required, ValidateOnSet, ValidationRule oder ValidationText, um Überprüfungskriterien festzulegen oder zurückzugeben.

•	Verwenden der DefaultValue-Eigenschaft eines Feldes auf einem TableDef-Objekt, um den Standardwert für dieses Feld festzustellen, wenn ein neuer Datensatz hinzugefügt wird.

In ODBCDirect-Arbeitsbereichen haben Sie die folgende Möglichkeit.

•	Verwenden der Eigenschaften Value, VisibleValue und OriginalValue zur Bestätigung der erfolgreichen Durchführung einer Stapel-Aktualisierung.

Anmerkung   Eine vollständige Liste aller verfügbaren Methoden, Eigenschaften und Auflistungen eines Field-Objekt für jede Datenbank oder Verbindung finden Sie unter Zusammenfassung.

Sie erstellen ein neues Field-Objekt in einem Index-, TableDef- oder Relation-Objekt mit der CreateField-Methode.

Wenn Sie auf das Field-Objekt als Teil eines Recordset-Objekts zugreifen, sind die Daten aus dem aktuellen Datensatz in der Value-Eigenschaft des Field-Objekts sichtbar. Zum Verändern der Daten im Recordset-Objekt verwenden Sie normalerweise keinen direkten Verweis auf die Fields-Auflistung, sondern verweisen statt dessen indirekt auf die Value-Eigenschaft des Field-Objekts in der Fields-Auflistung des Recordset-Objekts.

Mit der folgenden Syntax können Sie auf Field-Objekte einer Auflistung über die zugehörige Ordinalzahl oder Einstellung der Name-Eigenschaft verweisen.

Fields(0)

Fields("Name")

Fields![Name]

Sie können sich mit der gleichen Syntax auf die Value-Eigenschaft eines Field-Objekts beziehen, das Sie erstellt und an die Fields-Auflistung angefügt haben. Der Kontext des Feldverweises bestimmt, ob Sie auf ein Field-Objekt oder auf eine Value-Eigenschaft eines Field-Objekts verweisen.


Fields-Auflistung

Eine Fields-Auflistung enthält alle gespeicherten Field-Objekte eines Index-, QueryDef-, Recordset-, Relation- oder TableDef-Objekts.

Bemerkungen

Die Fields-Auflistungen von Index-, QueryDef-, Relation- und TableDef-Objekten enthalten die Angaben für die Felder, die durch diese Objekte dargestellt werden. Die Fields-Auflistung eines Recordset-Objekts stellt die Field-Objekte in einer Datenzeile oder einem Datensatz dar. Mit den Field-Objekten in einem Recordset-Objekt lesen Sie die Werte für die Felder im aktuellen Datensatz des Recordset-Objekts und legen die Werte fest.

Mit der folgenden Syntax können Sie auf alle Field-Objekte einer Auflistung über die zugehörige Ordinalzahl oder Einstellung der Name-Eigenschaft verweisen.

Fields(0)

Fields("Name")

Fields![Name]

Sie können sich mit der gleichen Syntax auf die Value-Eigenschaft eines Field-Objekts beziehen, das Sie erstellt und an die Fields-Auflistung angefügt haben. Der Kontext des Feldverweises bestimmt, ob Sie auf ein Field-Objekt oder auf eine Value-Eigenschaft eines Field-Objekts verweisen.


Field-Objekt, Fields-Auflistung - Zusammenfassung

Field-Objekt

Ein Field-Objekt enthält die folgende Auflistung sowie die aufgeführten Methoden und Eigenschaften.

Legende:

Funktionen, die nur in Microsoft Jet-Arbeitsbereichen verfügbar sind.

Funktionen, die nur in ODBCDirect-Arbeitsbereichen verfügbar sind.

Auflistung

Properties

Methoden

Die folgende Tabelle listet alle Methoden des Field-Objekts auf. Der Objekttyp, dessen Fields-Auflistung das Field-Objekt enthält, bestimmt welche Methoden verfügbar sind.

Methode	Index	QueryDef	Recordset	Relation	TableDef
AppendChunk
CreateProperty
GetChunk
Eigenschaften

Die folgende Tabelle listet alle Eigenschaften des Field-Objekts auf. Der Objekttyp, dessen Fields-Auflistung das Field-Objekt enthält, bestimmt, welche Eigenschaften verfügbar sind. Alle Eigenschaften sind für solche Field-Objekte schreibgeschützt, die an Fields-Auflistungen von Index-, Relation- and TableDef-Objekten angefügt sind.

Schreibgeschützt

-Lese-/Schreibzugriff

Eigenschaft	Index	QueryDef	Recordset	Relation	TableDef
AllowZeroLength
Attributes
CollatingOrder
DataUpdatable
DefaultValue
FieldSize
ForeignName
Name
OrdinalPosition
OriginalValue			*
Required
Size
SourceField
SourceTable
Type
ValidateOnSet
ValidationRule
ValidationText
Value
VisibleValue			*
* Diese Eigenschaften sind nur in einem ODBCDirect-Arbeitsbereich, dessen DefaultCursorDriver-Eigenschaft auf dbUseClientBatchCursor festgelegt wurde, verfügbar.

Fields-Auflistung

Eine Fields-Auflistung erscheint in jedem der Objekte TableDef, QueryDef, Recordset, Relation und Index und enthält folgende Methoden sowie die aufgeführte Eigenschaft.

Methode	Index	QueryDef	Datensatz	Beziehung	TableDef
Append
Delete
Refresh
Eigenschaft	Index	QueryDef	Datensatz	Beziehung	TableDef
Count


Group-Objekt

Ein Group-Objekt stellt eine Gruppe von Benutzerkonten dar, für die gemeinsame Zugriffsberechtigungen gelten, wenn ein Workspace-Objekt als geschützte Arbeitsgruppe verwendet wird. (gilt nur für Microsoft Jet-Arbeitsbereiche).

Bemerkungen

Sie erstellen Group-Objekte und verwenden deren Namen, um Zugriffsberechtigungen für Ihre Datenbanken, Tabellen und Abfragen zu erteilen und deren Einhaltung zu erzwingen. Dazu verwenden Sie Document-Objekte, die die Database-, TableDef- und QueryDef-Objekte darstellen, mit denen Sie arbeiten.

Mit den Eigenschaften eines Group-Objekts haben Sie folgende Möglichkeiten.

•	Verwenden der Name-Eigenschaft eines vorhandenen Group-Objekts, um dessen Namen zurückzugeben. Sie können die Einstellung der PID-Eigenschaft eines bestehenden Group-Objekts nicht zurückgeben.

•	Verwenden der Eigenschaften Name und PID eines neu erstellten und noch nicht angefügten Group-Objekts, um die Kennzeichnung dieses Group-Objekts festzulegen.

Sie können ein bestehendes Group-Objekt an die Groups-Auflistung in einem User-Objekt anfügen, um das Benutzerkonto in dieses Group-Objekt aufzunehmen. Alternativ dazu können Sie das User-Objekt an die Users-Auflistung eines Group-Objekts anfügen, um einem Benutzerkonto die globalen Berechtigungen dieser Gruppe zu erteilen. Unter Umständen müssen Sie die Refresh-Methode verwenden, wenn Sie eine andere Users- oder Groups-Auflistung verwenden als die, an die Sie gerade ein Objekt angefügt haben, damit die aktuellen Informationen aus der Datenbank in die Auflistung übernommen werden.

Im Microsoft Jet-Datenbankmodul sind drei Group-Objekte vordefiniert: Admins, Users und Guests. Sie erstellen ein neues Group-Objekt mit der CreateGroup-Methode auf ein User- oder Workspace-Objekt.

Auf ein Group-Objekt in einer Auflistung verweisen Sie über dessen Ordinalzahl oder Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

Groups(0)

Groups("Name")

Groups![Name]


Groups-Auflistung

Eine Groups-Auflistung enthält alle gespeicherten Group-Objekte eines Workspace-Objekts oder Benutzerkontos (gilt nur für Microsoft Jet-Arbeitsbereiche).

Bemerkungen

Sie können ein bestehendes Group-Objekt an die Groups-Auflistung in einem User-Objekt anfügen, um das Benutzerkonto in dieses Group-Objekt aufzunehmen. Alternativ dazu können Sie das User-Objekt an die Users-Auflistung eines Group-Objekts anfügen, um einem Benutzerkonto die globalen Berechtigungen dieser Gruppe zu erteilen. In beiden Fällen muß das vorhandene Group-Objekt schon ein Element der Groups-Auflistung des aktuellen Workspace-Objekts sein. Unter Umständen müssen Sie die Refresh-Methode verwenden, wenn Sie eine andere Users- oder Groups-Auflistung verwenden als die, an die Sie gerade ein Objekt angefügt haben, damit die aktuellen Informationen aus der Datenbank in die Auflistung übernommen werden.

Auf ein Group-Objekt verweisen Sie über dessen Ordinalzahl und Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

Groups(0)

Groups("Name")

Groups![Name]


Group-Objekt, Groups-Auflistung - Zusammenfassung

Group-Objekt

Das Group-Objekt enthält die folgenden Auflistungen, folgende Methode und folgende Eigenschaften.

Auflistungen

Properties

Users (Standardeinstellung)

Methode

CreateUser

Eigenschaften

Name

PID

Groups-Auflistung

Eine Groups-Auflistung erscheint in jedem User-Objekt und Workspace-Objekt in Microsoft Jet und enthält folgende Methoden und folgende Eigenschaft.

Methoden

Append

Delete

Refresh

Eigenschaft

Count


Index-Objekt

Index-Objekte geben die Reihenfolge von Datensätzen an, auf die von Datenbanktabellen zugegriffen wird, und legen fest, ob mehrfach auftretende Datensätze zulässig sind oder nicht. Index-Objekte ermöglichen außerdem einen effizienten Zugriff auf Daten. Bei externen Datenbanken beschreiben Index-Objekte die Indizes, die für externe Tabellen eingerichtet wurden (gilt nur für Microsoft Jet-Arbeitsbereiche).

Bemerkungen

Das Microsoft Jet-Datenbankmodul verwendet Indizes, wenn Tabellen verknüpft und Recordset-Objekte erstellt werden. Indizes bestimmen die Reihenfolge von Datensätzen, die von Recordset-Objekten vom Typ Tabelle zurückgegeben werden, aber nicht die Reihenfolge, in der Datensätze vom Microsoft Jet-Datenbankmodul in der Basistabelle gespeichert werden oder die Reihenfolge, in der andere Typen von Recordset-Objekten Datensätze zurückgeben.

Mit einem Index-Objekt stehen Ihnen folgende Möglichkeiten zur Verfügung.

•	Verwenden der Required-Eigenschaft, um zu bestimmen, ob die Field-Objekte Werte im Index erfordern, die nicht Null sind. Daraufhin verwenden Sie die IgnoreNulls-Eigenschaft, um festzustellen, ob die Null-Werte im Index eingetragen sind.

•	Verwenden der Primary- und Unique-Eigenschaften, um die Rangfolge und die Eindeutigkeit eines Index-Objekts zu bestimmen.

Das Microsoft Jet-Datenbankmodul verwaltet alle Basistabellen-Indizes automatisch. Indizes werden aktualisiert, sobald Sie Datensätze der Basistabelle hinzufügen, ändern oder löschen. Nachdem Sie die Datenbank einmal erstellt haben, müssen Sie regelmäßig die CompactDatabase-Methode verwenden, um die Indizes auf dem aktuellen Stand zu halten.

Wenn auf ein Recordset-Objekt vom Typ Tabelle zugegriffen wird, geben Sie die Reihenfolge der Datensätze mit der Index-Eigenschaft des Objekts an. Setzen Sie diese Eigenschaft auf die Einstellung der Name-Eigenschaft eines bestehenden Index-Objekts in der Indexes-Auflistung. Diese Auflistung ist in dem TableDef-Objekt enthalten, das die Tabelle darstellt, die dem von Ihnen verwendeten Recordset-Objekt zugrundeliegt.

Anmerkung   Sie müssen keine Indizes für eine Tabelle erstellen, aber der Zugriff auf einen bestimmten Datensatz oder das Verarbeiten von Verknüpfungen kann in großen Tabellen ohne Index sehr lange dauern. Auf der anderen Seite können zu viele Indizes Aktualisierungen der Datenbank verlangsamen, da alle Tabellenindizes berichtigt werden.

Die Attributes-Eigenschaft aller Field-Objekte im Index bestimmt die Reihenfolge der zurückgegebenen Datensätze und legt daher auch die Zugriffsverfahren fest, die für diesen Index verwendet werden müssen.

Jedes Field-Objekt in der Fields-Auflistung eines Index-Objekts ist eine Komponente des Indexes. Sie definieren einen neuen Index, indem Sie die zugehörigen Eigenschaften festlegen, bevor Sie ihn an eine Auflistung anfügen, wodurch der Index zur weiteren Verwendung verfügbar wird.

Anmerkung   Sie können die Name-Eigenschaft eines bestehenden Index-Objekts nur ändern, wenn die Einstellung der Updatable-Eigenschaft des umgebenden TableDef-Objekts den Wert True hat.

Wenn Sie einen Primärschlüssel für eine Tabelle festlegen, wird er vom Microsoft Jet-Datenbankmodul automatisch als Primärindex definiert. Ein Primärindex besteht aus einem oder mehreren Feldern, die alle Datensätze in einer Tabelle in einer vordefinierten Reihenfolge eindeutig kennzeichnen. Da das Feld für den Primärindex eindeutig sein muß, setzt das Microsoft Jet-Datenbankmodul die Unique-Eigenschaft des Index-Objekts für den Primärindex automatisch auf True. Wenn der Primärindex mehrere Felder enthält, kann jedes einzelne Feld mehrfach vorkommende Werte enthalten, solange jede Kombination aus Werten aller indizierten Felder eindeutig ist. Ein Primärindex besteht aus einem Schlüssel für die Tabelle und ist immer aus denselben Feldern aufgebaut wie der Primärschlüssel.

Wichtig   Sorgen Sie dafür, daß Ihre Daten mit den Attributen des neuen Indexes verträglich sind. Wenn Ihr Index eindeutige Werte erwartet, dürfen in den bestehenden Datensätzen keine Duplikate vorhanden sind. Falls Datensätze mehrfach vorkommen, kann das Microsoft Jet-Datenbankmodul den Index nicht erstellen und löst einen auffangbaren Fehler aus, wenn Sie versuchen, die Append-Methode auf den neuen Index anzuwenden.

Wenn Sie eine Beziehung aufbauen, die referentielle Integrität erzwingt, erstellt das Microsoft Jet-Datenbankmodul automatisch einen Index, bei dem die Foreign-Eigenschaft als Fremdschlüssel in der referenzierenden Tabelle gesetzt ist. Nachdem Sie eine Tabellenbeziehung hergestellt haben, unterbindet das Microsoft Jet-Datenbankmodul Erweiterungen oder Änderungen an der Datenbank, die für diese Beziehung unzulässig sind. Wenn Sie die Attributes-Eigenschaft des Relation-Objekts so festlegen, daß Operationen zur Aktualisierungsweitergabe und Löschweitergabe zulässig sind, werden  Datensätze aus Tabellen, die in Beziehung miteinander stehen, durch das Microsoft Jet-Datenbankmodul automatisch aktualisiert oder gelöscht.

So erstellen Sie ein neues Index-Objekt

1.	Verwenden Sie die CreateIndex-Methode für ein TableDef-Objekt.

2.	Verwenden Sie die CreateField-Methode für das Index-Objekt, um ein Field-Objekt für jedes Feld (Spalte) zu erstellen, das in das Index-Objekt aufgenommen werden soll.

3.	Legen Sie die erforderlichen Index-Eigenschaften fest.

4.	Fügen Sie das Field-Objekt an die Fields-Auflistung an.

5.	Fügen Sie das Index-Objekt an die Indexes-Auflistung an.

Anmerkung   Die Clustered-Eigenschaft wird für Datenbanken, die das Microsoft Jet-Datenbankmodul verwenden, nicht beachtet, da das Microsoft Jet-Datenbankmodul gruppenbildende Indizes nicht unterstützt.


Indexes-Auflistung

Eine Indexes-Auflistung enthält alle gespeicherten Index-Objekte eines TableDef-Objekts (gilt nur für Microsoft Jet-Arbeitsbereiche).

Bemerkungen

Wenn auf ein Recordset-Objekt vom Typ Tabelle zugegriffen wird, verwenden Sie die Index-Eigenschaft des Objekts, um die Reihenfolge der Datensätze anzugeben. Setzen Sie diese Eigenschaft auf die Einstellung der Name-Eigenschaft eines bestehenden Index-Objekts in der Indexes-Auflistung des TableDef-Objekts, das die Tabelle darstellt, die dem Recordset-Objekt zugrundeliegt.

Anmerkung   Sie können die Append- oder Delete-Methode auf einer Indexes-Auflistung nur anwenden, wenn die Einstellung der Updatable-Eigenschaft des umgebenden TableDef-Objekts den Wert True hat.

Nach Erstellung eines neuen Index-Objekts sollten Sie es mit Hilfe der Append-Methode an die Indexes-Auflistung des TableDef-Objekts anfügen.

Wichtig   Vergewissern Sie sich, daß Ihre Daten den Attributen Ihres neuen Indexes entsprechen. Wenn Ihr Index eindeutige Werte benötigt, stellen Sie sicher, daß keine Duplikate in vorhandenen Datensätzen vorkommen. Das Microsoft Jet-Datenbankmodul kann keinen Index erstellen, falls Duplikate vorhanden sind. Wenn Sie versuchen, die Append-Methode auf dem neuen Index auszuführen, tritt ein auffangbarer Fehler auf.


Index-Objekt, Indexes-Auflistung - Zusammenfassung

Index-Objekt

Ein Index-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften.

Auflistungen

Fields (Standardeinstellung)

Properties

Methoden

CreateField

CreateProperty

Eigenschaften

Clustered

DistinctCount

Foreign

IgnoreNulls

Name

Primary

Required

Unique

Indexes-Auflistung

Eine Indexes-Auflistung erscheint in jedem TableDef-Objekt und enthält die folgenden Methoden und folgende Eigenschaft.

Methoden

Append

Delete

Refresh

Eigenschaft

Count


Parameter-Objekt

Ein Parameter-Objekt stellt einen Wert dar, der an eine Abfrage übergeben wird. Der Parameter ist einem QueryDef-Objekt zugeordnet, das von einer Parameterabfrage erstellt wurde.

Bemerkungen

Parameter-Objekte ermöglichen es Ihnen, die Argumente eines regelmäßig ausgeführten QueryDef-Objekts zu ändern, ohne die Abfrage erneut kompilieren zu müssen.

Mit den Eigenschaften eines Parameter-Objekts können Sie einen Abfrageparameter festlegen, der geändert werden kann, bevor die Abfrage ausgeführt wird. Sie haben folgende Möglichkeiten.

•	Verwenden der Name-Eigenschaft, um den Namen eines Parameters zurückzugeben.

•	Verwenden der Value-Eigenschaft zur Festlegung oder Rückgabe der Parameterwerte, die in der Abfrage benutzt werden sollen.

•	Verwenden der Type-Eigenschaft, um den Datentyp des Parameter-Objekts zurückzugeben.

•	Verwenden der Direction-Eigenschaft um festzulegen oder zurückzugeben, ob der Parameter ein Eingabe-, Ausgabe- oder sowohl Eingabe- als auch Ausgabeparameter ist.

Desweiteren stehen Ihnen in einem ODBCDirect-Arbeitsbereich folgende Möglichkeiten zur Verfügung.

•	Ändern der Einstellung der Type-Eigenschaft. Dadurch wird auch die Value-Eigenschaft gelöscht.

•	Verwenden der Direction-Eigenschaft um festzulegen oder zurückzugeben, ob der Parameter ein Eingabe-, Ausgabe- oder sowohl Eingabe- als auch Ausgabeparameter ist.


Parameters-Auflistung

Eine Parameters-Auflistung enthält alle Parameter-Objekte eines QueryDef-Objekts.

Bemerkungen

Die Parameters-Auflistung stellt lediglich Informationen zu existierenden Parametern zur Verfügung. Sie können keine Objekte an eine Parameters-Auflistung anfügen oder daraus löschen.


Parameter-Objekt, Parameters-Auflistung - Zusammenfassung

Parameter-Objekt

Ein Parameter-Objekt enthält keine Methoden, aber die folgende Auflistung und die aufgeführten Eigenschaften.

Legende:

Funktionen, die nur in ODBCDirect-Arbeitsbereichen verfügbar sind.

Auflistung

Properties

Eigenschaften

Direction

Name

Type

Value (Voreinstellung)

Parameters-Auflistung

Eine Parameters-Auflistung erscheint in jedem QueryDef-Objekt und enthält folgende Methode und Eigenschaft.

Methode

Refresh

Eigenschaft

Count


Property-Objekt

Ein Property-Objekt stellt ein integriertes oder benutzerdefiniertes Merkmal eines DAO-Objekts dar.

Bemerkungen

Jedes DAO-Objekt, außer Connection- und Error-Objekten, enthält eine Properties-Auflistung mit Property-Objekten, die den integrierten Eigenschaften des DAO-Objekts entsprechen. Der Benutzer kann auch Property-Objekte definieren, und sie an die Properties-Auflistung einiger DAO-Objekte anfügen. Diese Property-Objekte (oft auch einfach als Eigenschaften bezeichnet) kennzeichnen die jeweilige Instanz des Objekts eindeutig.

Sie haben die Möglichkeit, benutzerdefinierte Eigenschaften für die folgenden Objekte zu erstellen.

•	Database-, Index-, QueryDef- und TableDef-Objekte

•	Field-Objekte in Fields-Auflistungen von QueryDef- und TableDef-Objekten

Sie können eine benutzerdefinierte Eigenschaft hinzufügen, indem Sie mit der CreateProperty-Methode ein Property-Objekt mit einer eindeutigen Einstellung für die Name-Eigenschaft erstellen. Legen Sie die Eigenschaften Type und Value des neuen Property-Objekts fest, und fügen Sie es an die Properties-Auflistung des entsprechenden Objekts an. Das Objekt, dem die benutzerdefinierte Eigenschaft hinzugefügt wird, muß bereits an eine Auflistung angefügt worden sein. Wenn sie auf ein benutzerdefiniertes Property-Objekt, das noch nicht an eine Properties-Auflistung angefügt wurde, verweisen, tritt ein Fehler auf. Dies geschieht ebenfalls, wenn Sie ein benutzerdefiniertes Property-Objekt an eine Properties-Auflistung anfügen, die ein Property-Objekt mit gleichem Namen enthält.

Benutzerdefinierte Eigenschaften können aus der Properties-Auflistung gelöscht werden, integrierte Eigenschaften jedoch nicht.

Anmerkung   Ein benutzerdefiniertes Property-Objekt ist nur der jeweiligen Instanz eines Objekts zugeordnet. Die Eigenschaft ist nicht für alle Instanzen von Objekten des ausgewählten Typs definiert.

Mit der Properties-Auflistung eines Objekts können Sie eine Liste der integrierten und benutzerdefinierten Eigenschaften des Objekts ausgeben. Zum Verändern der Eigenschaften müssen Sie die vorhandenen Eigenschaften oder deren Merkmale (Name- und Type-Eigenschaften) nicht genau kennen. Wenn Sie allerdings eine schreibgeschützte Eigenschaft, wie z.B. die Password-Eigenschaft eines Workspace-Objekts, überprüfen oder in einem unpassenden Kontext, wie z.B. der Einstellung der Value-Eigenschaft von einem Field-Objekt in der Fields-Auflistung eines TableDef-Objekts, eine Eigenschaft lesen oder schreiben möchten, tritt ein Fehler auf.

Das Property-Objekt hat vier integrierte Eigenschaften.

•	Die Name-Eigenschaft, ein Wert vom Datentyp String, der die Eigenschaft eindeutig kennzeichnet.

•	Die Type-Eigenschaft, ein Wert vom Datentyp Integer, der den Datentyp der Eigenschaft angibt.

•	Die Value-Eigenschaft, ein Wert vom Datentyp Variant, der die Einstellung der Eigenschaft enthält.

•	Die Inherited-Eigenschaft, ein Wert vom Datentyp Boolean, der anzeigt, ob die Eigenschaft von einem anderen Objekt übernommen wurde. Ein Field-Objekt in einer Fields-Auflistung eines Recordset-Objekts kann z.B. Eigenschaften vom zugrundeliegenden TableDef- oder QueryDef-Objekt übernehmen.

Sie verweisen auf ein integriertes Property-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

Objekt.Eigenschaften(0)

Objekt.Eigenschaften("Name")

Objekt.Eigenschaften![Name]

Bei integrierten Eigenschaften können Sie auch die folgende Syntax verwenden.

Objekt.Name

Anmerkung   Bei benutzerdefinierten Eigenschaften müssen Sie die vollständige Syntax Objekt.Eigenschaften("Name") verwenden.

Sie können mit derselben Syntax auch auf die Value-Eigenschaft eines Property-Objekts verweisen. Der Kontext des Verweises legt fest, ob Sie auf das Property-Objekt selbst oder auf die Value-Eigenschaft des Property-Objekts verweisen.


Properties-Auflistung

Eine Properties-Auflistung enthält alle Property-Objekte für eine bestimmte Instanz eines Objekts.

Bemerkungen

Jedes DAO-Objekt, außer Connection- und Error-Objekten, enthält eine Properties-Auflistung mit bestimmten integrierten Property-Objekten. Diese Property-Objekte (oft auch einfach als Eigenschaften bezeichnet) kennzeichnen die jeweilige Instanz des Objekts eindeutig.

Neben diesen integrierten Eigenschaften können Sie zu einigen Objekten Ihre eigenen benutzerdefinierten Eigenschaften erstellen und hinzufügen. Sie fügen einer bestehenden Instanz eines Objekts eine benutzerdefinierte Eigenschaft hinzu, indem Sie zunächst deren Merkmale mit Hilfe der CreateProperty-Methode definieren und sie dann an die Auflistung mit Hilfe der Append-Methode anfügen. Wenn sie auf ein benutzerdefiniertes Property-Objekt, das noch nicht an eine Properties-Auflistung angefügt wurde, verweisen, tritt ein Fehler auf. Dies geschieht ebenfalls, wenn Sie ein benutzerdefiniertes Property-Objekt an eine Properties-Auflistung anfügen, die ein Property-Objekt mit gleichem Namen enthält.

Sie können die Delete-Methode verwenden, um benutzerdefinierte Eigenschaften aus der Properties-Auflistung zu entfernen, Sie können jedoch keine integrierten Eigenschaften entfernen.

Anmerkung   Ein benutzerdefiniertes Property-Objekt ist nur der jeweiligen Instanz eines Objekts zugeordnet. Die Eigenschaft ist nicht für alle Instanzen von Objekten des ausgewählten Typs definiert.

Mit der Properties-Auflistung eines Objekts können Sie eine Liste der integrierten und benutzerdefinierten Eigenschaften des Objekts ausgeben. Zum Verändern der Eigenschaften müssen Sie die vorhandenen Eigenschaften oder deren Merkmale (Name und Type-Eigenschaften) nicht genau kennen. Wenn Sie allerdings eine schreibgeschützte Eigenschaft, wie z.B. die Password-Eigenschaft eines Workspace-Objekts, überprüfen oder in einem unpassenden Kontext, wie z.B. der Einstellung der Value-Eigenschaft von einem Field-Objekt in der Fields-Auflistung eines TableDef-Objekts, eine Eigenschaft lesen oder schreiben möchten, tritt ein Fehler auf.

Sie verweisen auf ein integriertes Property-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

Objekt.Eigenschaften(0)

Objekt.Eigenschaften("Name")

Objekt.Eigenschaften![Name]

Bei integrierten Eigenschaften können Sie auch die folgende Syntax verwenden.

Objekt.Name

Anmerkung   Bei benutzerdefinierten Eigenschaften müssen Sie die vollständige Syntax Objekt.Eigenschaften("Name") verwenden.

Sie können mit derselben Syntax auch auf die Value-Eigenschaft eines Property-Objekts verweisen. Der Kontext des Verweises legt fest, ob Sie auf das Property-Objekt selbst oder auf die Value-Eigenschaft des Property-Objekts verweisen.


Property-Objekt, Properties-Auflistung - Zusammenfassung

Property-Objekt

Ein Property-Objekt enthält keine Methoden, aber die folgende Auflistung und die aufgeführten Eigenschaften.

Auflistung

Properties

Eigenschaften

Inherited (Immer False in ODBCDirect-Datenbanken)

Name

Type

Value

Properties-Auflistung

Eine Properties-Auflistung erscheint in jedem der anderen DAO-Objekte, außer in Connection- und Error-Objekten, und enthält die folgenden Methoden und die aufgeführte Eigenschaft.

Methoden

Append

Delete

Refresh

Eigenschaft

Count


QueryDef-Objekt

Ein QueryDef-Objekt ist eine gespeicherte Definition einer Abfrage in einer Microsoft Jet-Datenbank oder eine temporäre Definition einer Abfrage in einem ODBCDirect-Arbeitsbereich.

Bemerkungen

Mit dem QueryDef-Objekt können Sie eine Abfrage definieren. Ihnen stehen z.B. folgende Möglichkeiten zur Verfügung.

•	Verwenden der Einstellung der SQL-Eigenschaft, um die Definition der Abfrage festzulegen oder zurückzugeben.

•	Verwenden der Parameters-Auflistung des QueryDef-Objekts, um Abfrageparameter festzulegen oder zurückzugeben.

•	Verwenden der Type-Eigenschaft, um einen Wert zurückzugeben, der anzeigt, ob die Abfrage Datensätze aus einer bestehenden Tabelle auswählt, eine neue Tabelle erstellt, Datensätze aus einer Tabelle in eine andere Tabelle einfügt, Datensätze löscht oder Datensätze aktualisiert.

•	Verwenden der MaxRecords-Eigenschaft zur Begrenzung der Anzahl der von einer Abfrage zurückgegebenen Datensätze.

•	Verwenden der ODBCTimeout-Eigenschaft, um anzugeben, wie lange maximal gewartet werden soll, bis die Abfrage Datensätze zurückgibt. Die ODBCTimeout-Eigenschaft betrifft alle Abfragen, die auf ODBC-Daten zugreifen.

In einem Microsoft Jet-Arbeitsbereich stehen Ihnen desweiteren folgende Möglichkeiten zur Verfügung.

•	Verwenden der ReturnsRecords-Eigenschaft, um anzuzeigen, daß die Abfrage Datensätze zurückgibt. Die ReturnsRecords-Eigenschaft ist nur bei SQL-Pass-Through-Abfragen gültig.

•	Verwenden der Connect-Eigenschaft, um eine SQL-Pass-Through-Abfrage an eine ODC-Datenbank zu stellen.

In einem ODBCDirect-Arbeitsbereich stehen Ihnen außerdem folgende Möglichkeiten zur Verfügung.

•	Verwenden der Prepare-Eigenschaft, um festzulegen, ob die ODBC-SQLPrepare-API (Application Programming Interface = Schnittstelle für die Anwendungsprogrammierung) aufgerufen werden soll, wenn die Abfrage ausgeführt wurde.

•	Verwenden der CacheSize-Eigenschaft, um Datensätze, die von einer Abfrage zurückgegeben wurden, schnell zwischenzuspeichern.

Sie können auch temporäre QueryDef-Objekte erstellen. Sie werden im Gegensatz zu permanenten QueryDef-Objekten nicht auf der Festplatte gespeichert oder an die QueryDefs-Auflistung angefügt. Temporäre QueryDef-Objekte sind nützlich bei Abfragen, die regelmäßig während der Laufzeit ausgeführt werden, jedoch nicht auf Festplatte gespeichert werden müssen, insbesondere wenn deren SQL-Anweisungen während der Laufzeit erstellt werden.

Sie können sich ein permanentes QueryDef-Objekt in einem Microsoft Jet-Arbeitsbereich als eine kompilierte SQL-Anweisung vorstellen. Von einem permanenten QueryDef-Objekt wird eine Abfrage schneller ausgeführt, als die entsprechende SQL-Anweisung in der OpenRecordset-Methode. Das liegt daran, daß das Microsoft Jet-Datenbankmodul die Abfrage nicht kompilieren muß, bevor sie ausgeführt werden kann.

Die Verwendung von QueryDef-Objekten wird empfohlen, um den systemeigenen SQL-Dialekt eines externen Datenbankmoduls, auf die mit Hilfe des Microsoft Jet-Datenbankmoduls zugegriffen wurde, zu verwenden. Sie können z.B. eine Microsoft SQL Server-Abfrage verwenden und in einem QueryDef-Objekt speichern. Wenn Sie eine SQL-Abfrage benötigen, die nicht auf dem Microsoft Jet-Datenbankmodul basiert, müssen Sie eine Zeichenfolge für die Connect-Eigenschaft angeben, die zum Verbindungsaufbau mit der externen Datenquelle benötigt wird. Abfragen mit gültigen Werten für die Connect-Eigenschaft umgehen das Microsoft Jet-Datenbankmodul und übergeben die Abfrage direkt an den externen Datenbank-Server zur Verarbeitung.

Sie erstellen ein neues QueryDef-Objekt mit der CreateQueryDef-Methode. In einem Microsoft Jet-Arbeitsbereich erstellen Sie ein permanentes QueryDef, das automatisch an die QueryDefs-Auflistung angefügt und auf der Festplatte gespeichert wird, wenn Sie für das Argument Name eine Zeichenfolge einsetzen oder die Name-Eigenschaft des neuen QueryDef-Objekts explizit auf eine Zeichenfolge, die keine Null-Zeichenfolge ist, festlegen. Wenn für das Argument Name eine Zeichenfolge der Länge Null eingesetzt wird, oder die Einstellung der Name-Eigenschaft explizit auf eine Zeichenfolge der Länge Null festgelegt wird, wird ein temporäres QueryDef-Objekt erstellt.

In einem ODBCDirect-Arbeitsbereich, ist QueryDef immer temporär. Die QueryDefs-Auflistung enthält alle geöffneten QueryDef-Objekte. Wenn ein QueryDef-Objekt geschlossen wird, wird es automatisch aus der QueryDefs-Auflistung entfernt.

Sie verweisen auf ein QueryDef-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

QueryDefs(0)

QueryDefs("Name")

QueryDefs![Name]

Sie können auf ein temporäres QueryDef-Objekt nur über die Objektvariablen, die Sie ihm zugewiesen haben, verweisen.


QueryDefs-Auflistung

Eine QueryDefs-Auflistung enthält alle QueryDef-Objekte eines Database-Objekts in einer Microsoft Jet-Datenbank und alle QueryDef-Objekte eines Connection-Objekts in einem ODBCDirect-Arbeitsbereich.

Bemerkungen

Sie erstellen ein neues QueryDef-Objekt mit der CreateQueryDef-Methode. In einem Microsoft Jet-Arbeitsbereich erstellen Sie ein permanentes QueryDef-Objekt, das automatisch an die QueryDefs-Auflistung angefügt und auf der Festplatte gespeichert wird, wenn Sie für das Argument Name eine Zeichenfolge einsetzen oder die Name-Eigenschaft des neuen QueryDef-Objekts explizit auf eine Zeichenfolge, die keine Null-Zeichenfolge ist, festlegen. Wenn für das Argument Name eine Zeichenfolge der Länge Null eingesetzt wird, oder die Einstellung der Name-Eigenschaft explizit auf eine Zeichenfolge der Länge Null festgelegt wird, wird ein temporäres QueryDef-Objekt erstellt.

In einem ODBCDirect-Arbeitsbereich, ist QueryDef immer temporär. Die QueryDefs-Auflistung enthält alle geöffneten QueryDef-Objekte. Wenn ein QueryDef-Objekt geschlossen wird, wird es automatisch aus der QueryDefs-Auflistung entfernt.

Sie verweisen auf ein QueryDef-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

QueryDefs(0)

QueryDefs("Name")

QueryDefs![Name]

Sie können auf ein temporäres QueryDef-Objekt nur über die Objektvariablen, die Sie ihm zugewiesen haben, verweisen.


QueryDef-Objekt, QueryDefs-Auflistung - Zusammenfassung

QueryDef-Objekt

Ein QueryDef-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften.

Legende:

Nur in einem Microsoft Jet-Arbeitsbereich verfügbar.

Nur in einem ODBCDirect-Arbeitsbereich verfügbar.

Auflistungen

Fields

Parameters (Voreinstellung)

Properties

Methoden

Cancel

Close

CreateProperty

Execute

OpenRecordset

Eigenschaften

CacheSize

Connect

DateCreated

KeepLocal

LastUpdated

LogMessages

MaxRecords

Name

ODBCTimeout

Prepare

RecordsAffected

Replicable

ReturnsRecords

SQL

StillExecuting

Type

Updatable

QueryDefs-Auflistung

Eine QueryDefs-Auflistung erscheint in jedem Connection-Objekt in einem ODBCDirect-Arbeitsbereich und in jedem Database-Objekt und enthält die folgenden Methoden und die aufgeführte Eigenschaft.

Methoden

Append

Delete

Refresh

Eigenschaft

Count


Recordset-Objekt

Ein Recordset-Objekt stellt die Datensätze in einer Basistabelle oder die Datensätze, die das Ergebnis einer Abfrage sind, dar.

Bemerkungen

Recordset-Objekte werden zur Veränderung von Daten auf Datensatzebene verwendet. Wenn Sie DAO-Objekte verwenden, verändern Sie Daten nahezu vollständig über Recordset-Objekte. Alle Recordset-Objekte werden aus Datensätzen (Zeilen) und Feldern (Spalten) konstruiert. Es gibt fünf Arten von Recordset-Objekten.

•	Recordset-Objekte vom Typ Tabelle — Darstellung einer Basistabelle im Code, mit der Sie Datensätze aus einer einzelnen Datenbanktabelle hinzufügen, ändern oder löschen können (gilt nur für Microsoft Jet-Arbeitsbereiche).

•	Recordset-Objekte vom Typ Dynaset — Das Ergebnis einer Abfrage, in dem die Datensätze aktualisiert werden können. Ein Recordset-Objekt vom Typ Dynaset ist eine dynamische Gruppe von Datensätzen, mit der Sie Datensätze aus einer oder mehreren zugrundeliegenden Datenbanktabellen hinzufügen, ändern oder löschen können. Ein Recordset-Objekt vom Typ Dynaset kann Felder aus einer oder mehreren Tabellen in einer Datenbank enthalten. Dieser Datentyp entspricht einem ODBC-Schlüsselgruppen-Cursor.

•	Recordset-Objekte vom Typ Snapshot — Eine statische Kopie einer Gruppe von Datensätzen, die Sie zur Datensuche oder Berichtserstellung verwenden können. Ein Recordset-Objekt vom Typ Snapshot kann Felder aus einer oder mehreren Tabellen in einer Datenbank enthalten, kann aber nicht aktualisiert werden. Dieser Datentyp entspricht einem statischen ODBC-Cursor.

•	Recordset-Objekte vom Typ Vorwärts — wie der Recordset vom Typ Snapshot außer, daß kein Cursor zur Verfügung steht. Sie können sich nur vorwärts durch die Datensätze bewegen. Dadurch verbessert sich das Leistungsverhalten, wenn Sie die Ergebnismenge nur einmal durchgehen müssen. Dieser Datentyp entspricht einem ODBC-Vorwärts-Cursor.

•	Recordset-Objekte vom Typ Dynamisch — eine Ergebnismenge einer Abfrage aus einer oder mehreren Basistabellen, die zuläßt, Datensätze einer Abfrage, die Datensätze zeilenweise zurückgibt, hinzuzufügen, zu ändern oder zu löschen. Desweiteren werden Datensätze, die andere Benutzer der Basistabelle hinzufügen, daraus löschen oder bearbeiten, in Ihrem Recordset angezeigt. Dieser Datentyp entspricht einem dynamischen ODBC-Cursor (gilt nur für ODBCDirect-Arbeitsbereiche).

Sie können den Typ des zu erstellenden Recordset-Objekts wählen, indem Sie das Argument Typ der OpenRecordset-Methode verwenden.

Falls Sie in einem Microsoft Jet-Arbeitsbereich keinen Typ angeben, versucht DAO, den Typ des Recordset-Objekts zu erstellen, der die größtmögliche Funktionalität bietet, wobei mit dem Typ Tabelle angefangen wird. Wenn dieser Typ nicht verfügbar ist, versucht DAO ein Recordset-Objekt vom Typ Dynaset, dann Snapshot und schließlich eines vom Typ Vorwärts zu erstellen.

Falls Sie in einem ODBCDirect-Arbeitsbereich keinen Typ angeben, versucht DAO, den Typ des Recordset-Objekts zu erstellen, der die schnellste Abfragebearbeitung ermöglicht, wobei mit dem Typ Vorwärts angefangen wird. Wenn dieser Typ nicht verfügbar ist, versucht DAO ein Recordset-Objekt vom Typ Snapshot, dann Dynaset und schließlich eines vom Typ Dynamisch zu erstellen.

Wenn Sie ein Recordset-Objekt mit einem nichtverknüpften TableDef-Objekt in einem Microsoft Jet-Arbeitsbereich erstellen, werden nur Recordset-Objekte vom Typ Tabelle erzeugt. Ausschließlich Recordset-Objekte vom Typ Dynaset oder Snapshot können mit verknüpften Tabellen oder Tabellen in ODBC-Datenbanken, die mit Microsoft Jet verbunden sind, erstellt werden.

Ein neues Recordset-Objekt wird automatisch der Recordsets-Auflistung hinzugefügt, wenn Sie das Objekt öffnen, und wird automatisch entfernt, wenn Sie es schließen.

Anmerkung   Wenn Sie ein Recordset-Objekt und das Database-Objekt, das das Recordset-Objekt enthält, mit Variablen darstellen, müssen Sie darauf achten, daß diese Variablen denselben Gültigkeitsbereich oder dieselbe Lebensdauer haben. Wenn Sie z.B. eine öffentliche Variable deklarieren, die ein Recordset-Objekt darstellt, müssen Sie darauf achten, daß die Variable das Database-Objekt darstellt, welches das Recordset-Objekt enthält, ebenfalls öffentlich ist oder in einer Sub- oder Function-Prozedur mit dem Schlüsselwort Static deklariert ist.

Sie können beliebig viele Recordset-Objektvariablen erstellen. Verschiedene Recordset-Objekte können auf gleiche Tabellen, Abfragen oder Felder zugreifen, ohne Konflikte hervorzurufen.

Recordset-Objekte vom Typ Dynaset, Snapshot und Vorwärts werden im lokalen Hauptspeicher abgelegt. Wenn nicht genügend Speicher zum Ablegen der Daten im lokalen Hauptspeicher zur Verfügung steht, speichert das Microsoft Jet-Datenbankmodul die zusätzlichen Daten im TEMP-Bereich auf der Festplatte. Wenn dieser Speicher verbraucht ist, tritt ein auffangbarer Fehler auf.

Die Standardauflistung eines Recordset-Objekts ist die Fields-Auflistung, und die Standardeigenschaft eines Field-Objekts ist die Value-Eigenschaft. Durch Verwendung dieser Standardeinstellungen, können Sie Ihren Code vereinfachen.

Wenn Sie ein Recordset-Objekt erstellen, wird als aktueller Datensatz der erste Datensatz festgelegt, falls Datensätze vorhanden sind. Ist dies nicht der Fall, hat die RecordCount-Eigenschaft den Wert 0, und die Eigenschaften BOF und EOF haben den Wert True.

Mit den Methoden MoveNext, MovePrevious, MoveFirst und MoveLast können Sie die Position des aktuellen Datensatzes ändern. Recordset-Objekte vom Typ Vorwärts unterstützen nur die MoveNext-Methode. Wenn Sie die Move-Methoden verwenden, um jeden Datensatz durchzugehen, können Sie BOF- und EOF-Eigenschaften verwenden, um den Anfang und das Ende des Recordset-Objekts zu überprüfen.

Bei Recordset-Objekten vom Typ Dynaset und Snapshot können Sie in einem Microsoft Jet-Arbeitsbereich auch die Find-Methoden (wie FindFirst) verwenden, um einen bestimmten Datensatz über ein Suchkriterium zu finden. Wenn der Datensatz nicht gefunden wird, wird die NoMatch-Eigenschaft auf True gesetzt. Bei Recordset-Objekten vom Typ Tabelle können Sie die Seek-Methode zum Durchsuchen der Datensätze verwenden.

Die Type-Eigenschaft zeigt den Typ des erstellten Recordset-Objekts an, und die Updatable-Eigenschaft zeigt an, ob die Datensätze des Objekts verändert werden können.

Informationen über den Aufbau der Basistabelle, wie der Name und der Datentyp jedes Field- und Index-Objekts, sind im TableDef-Objekt gespeichert.

Sie verweisen auf ein Recordset-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

Recordsets(0)

Recordsets("Name")

Recordsets![Name]

Anmerkung   Sie können ein Recordset-Objekt der gleichen Datenquelle oder Datenbank mehrmals öffnen, indem Sie Namensduplikate in der Recordsets-Auflistung verwenden. Sie sollten Recordset-Objekten Objektvariablen zuweisen und auf sie mit dem Variablennamen verweisen.


Recordsets-Auflistung

Eine Recordsets-Auflistung enthält alle in einem Database-Objekt geöffneten Recordset-Objekte.

Bemerkungen

Wenn Sie DAO-Objekte verwenden, verändern Sie die Daten nahezu vollständig über Recordset-Objekte.

Ein neues Recordset-Objekt wird automatisch der Recordsets-Auflistung hinzugefügt, wenn Sie das Objekt öffnen, und wird automatisch entfernt, wenn Sie es schließen.

Sie können beliebig viele Recordset-Objektvariablen erstellen. Verschiedene Recordset-Objekte können auf gleiche Tabellen, Abfragen oder Felder zugreifen, ohne Konflikte hervorzurufen.

Sie verweisen auf ein Recordset-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

Recordsets(0)

Recordsets("Name")

Recordsets![Name]

Anmerkung   Sie können ein Recordset-Objekt der gleichen Datenquelle oder Datenbank mehrmals öffnen, indem Sie Namen in der Recordsets-Auflistung mehrfach verwenden. Sie sollten Recordset-Objekten Objektvariablen zuweisen und auf sie mit dem Variablennamen verweisen.


Recordset-Objekt, Recordsets-Auflistung - Zusammenfassung

Recordset-Objekt

Ein Recordset-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften.

Legende:

Funtion, die sowohl in Microsoft Jet- als auch in ODBCDirect-Arbeitsbereichen verfügbar ist.

Funktion, die nur in Microsoft Jet-Arbeitsbereichen verfügbar ist.

 	Funktion, die nur in ODBCDirect-Arbeitsbereichen verfügbar ist.

Auflistungen

Fields (Voreinstellung)

Properties

Recordset-Methoden

Die folgende Tabelle enthält eine Liste aller Recordset-Methoden und zeigt von welchem Typ Recordset jede Methode unterstützt wird, und ob die Methode in einem Microsoft Jet-Arbeitsbereich oder in einem ODBCDirect-Arbeitsbereich oder in beiden verfügbar ist.

Methode	Tabelle	Dynaset	Snapshot	Vorwärts	Dynamisch
AddNew			*
Cancel
CancelUpdate			*
Clone
Close
CopyQueryDef
Delete			*
Edit			*
FillCache
FindFirst
FindLast
FindNext
FindPrevious
GetRows
Move				Nur mit Vorwärts bewegungen, die  kein Lesezeichen- Offset verwenden
MoveFirst
MoveLast
MoveNext
MovePrevious
NextRecordset
OpenRecordset
Requery
Seek
Update			*
* Abhängig vom ODBC-Treiber kann ein Recordset-Objekt vom Typ Snapshot in einem ODBCDirect-Arbeitsbereich eventuell aktualisiert werden. Die Methoden AddNew, Edit, Delete, Update und CancelUpdate sind nur in Recordset-Objekten vom Typ Snapshot in ODBCDirect verfügbar, wenn der ODBC-Treiber deren Aktualisierung unterstützt.

Recordset-Eigenschaften

Die folgende Tabelle zeigt sowohl für Microsoft Jet- als auch für ODBCDirect-Datenbanken an, welche Eigenschaften für die einzelnen Typen von Recordset-Objekten gelten, und ob die Eigenschafteneinstellung Lese-/Schreibzugriff hat, ob sie schreibgeschützt ist oder ob sie immer den Wert False hat.

Schreibgeschützt

Lesen/Schreiben

Eigenschaft	Tabelle	Dynaset	Snapshot	Vorwärts	Dynamisch
AbsolutePosition
BatchCollisionCount
BatchCollisions
BatchSize
BOF
Bookmark
Bookmarkable
CacheSize		für Microsoft Jet-Arbeits bereiche
		für ODBCDirect-Arbeits bereiche
CacheStart
Connection
DateCreated
EditMode
EOF
Filter
Index
LastModified			*
LastUpdated
LockEdits		für Microsoft Jet-Arbeits bereiche	für Microsoft Jet-Arbeits bereiche
		für ODBCDirect-Arbeits bereiche	für ODBCDirect-Arbeits bereiche
Name
NoMatch
PercentPosition
RecordCount
RecordStatus
Restartable	False
Sort
StillExecuting
Transactions			Immer False	Immer False
Type
Updatable			Immer False in Microsoft Jet-Arbeits bereichen	Immer False in Microsoft Jet-Arbeits bereichen
			in ODBCDirect-Arbeits bereichen *	in ODBCDirect-Arbeits bereichen *
UpdateOptions
ValidationRule
ValidationText
* Abhängig vom ODBC-Treiber kann ein Recordset-Objekt vom Typ Snapshot in einem ODBCDirect-Arbeitsbereich eventuell aktualisiert werden. Die Methoden AddNew, Edit, Delete, Update und CancelUpdate sind nur in Recordset-Objekten vom Typ Snapshot in ODBCDirect verfügbar, wenn der ODBC-Treiber deren Aktualisierung unterstützt.

Recordsets-Auflistung

Eine Recordsets-Auflistung ist in jedem Connection- und Database-Objekt enthalten. Sie umfaßt die folgende Methode und Eigenschaft.

Methode

Refresh

Eigenschaft

Count


Relation-Objekt

Ein Relation-Objekt stellt eine Beziehung zwischen Feldern in Tabellen oder Abfragen (gilt nur für Microsoft Jet-Datenbanken) dar.

Bemerkungen

Mit dem Relation-Objekt können Sie neue Beziehungen aufbauen und bereits vorhandene Beziehungen in Ihrer Datenbank untersuchen.

Mit einem Relation-Objekt und den zugehörigen Eigenschaften haben Sie folgende Möglichkeiten.

•	Angeben einer einzuhaltenden Beziehung zwischen Feldern in Basistabellen (aber keine Beziehung, die eine Abfrage oder eine verknüpfte Tabelle umfaßt).

•	Einrichten von nicht einzuhaltenden Beziehungen zwischen allen Arten von Tabellen oder Abfragen (systemintern oder verknüpft).

•	Verwenden der Name-Eigenschaft zum Verweisen auf die Beziehung zwischen den Feldern in der referenzierten Primärtabelle und der referenzierenden Fremdtabelle.

•	Verwenden der Attributes-Eigenschaft, um festzustellen, ob die Beziehung zwischen Feldern in der Tabelle eine 1:1- oder eine 1:n-Beziehung ist, und ob die Einhaltung der referentiellen Integrität durchgesetzt werden soll.

•	Verwenden der Attributes-Eigenschaft, um festzustellen, ob das Microsoft Jet-Datenbankmodul Aktualisierungs- und Löschweitergabeoperationen auf Primär- und/oder Fremdtabellen durchführen kann.

•	Verwenden der Attributes-Eigenschaft, um festzustellen, ob die Beziehung zwischen Feldern in der Tabelle eine linke Inklusionsverknüpfung oder eine rechte Inklusionsverknüpfung ist.

•	Verwenden der Name-Eigenschaft aller Field-Objekte in der Fields-Auflistung eines Relation-Objekts, um die Namen von Feldern im Primärschlüssel der referenzierten Tabelle festzulegen oder zurückzugeben oder Verwenden der Einstellungen der ForeignName-Eigenschaft der Field-Objekte, um die Namen der Felder im Fremdschlüssel der referenzierenden Tabelle festzulegen oder zurückzugeben.

Wenn Sie Änderungen vornehmen, aufgrund derer die eingerichteten Beziehungen für die Datenbank nicht eingehalten werden können, tritt ein auffangbarer Fehler auf. Wenn Sie Operationen durchführen möchten, die zur Aktualisierungsweitergabe oder Löschweitergabe führen, ändert das Microsoft Jet-Datenbankmodul auch die Tabellen mit dem Primärschlüssel oder Fremdschlüssel, um die Einhaltung der eingerichteten Beziehungen durchzusetzen.

Die Nordwind-Datenbank enthält z.B. eine Beziehung zwischen den Tabellen "Bestellungen" und "Kunden". Das Feld "Kunden-Code" der Tabelle "Kunden" ist der Primärschlüssel, und das Feld "Kunden-Code" der Tabelle "Bestellungen" ist der Fremdschlüssel. Damit Microsoft Jet einen neuen Datensatz in der Tabelle "Bestellungen" übernimmt, durchsucht es die Tabelle "Kunden" nach einem entsprechenden Eintrag im Feld "Kunden-Code" der Tabelle "Bestellungen". Wenn Microsoft Jet keinen entsprechenden Eintrag findet, übernimmt es den neuen Datensatz nicht, und es tritt ein auffangbarer Fehler auf.

Wenn Sie die Einhaltung der referentiellen Integrität durchsetzen, muß bereits ein eindeutiger Index für das Schlüsselfeld der referenzierten Tabelle existieren. Das Microsoft Jet-Datenbankmodul legt automatisch einen Index an, bei dem die Foreign-Eigenschaft gesetzt ist, die den Fremdschlüssel in der referenzierenden Tabelle darstellt.

Sie erstellen ein neues Relation-Objekt mit der CreateRelation-Methode. Sie verweisen auf ein Relation-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

Relations(0)

Relations("Name")

Relations![Name]


Relations-Auflistung

Eine Relations-Auflistung enthält gespeicherte Relation-Objekte eines Database-Objekts (gilt nur für Microsoft Jet-Datenbanken).

Bemerkungen

Mit dem Relation-Objekt können Sie neue Beziehungen aufbauen und bereits vorhandene Beziehungen in Ihrer Datenbank untersuchen. Sie können ein Relation-Objekt mit Hilfe der Append-Methode an eine Relations-Auflistung anfügen, nachdem Sie es zuvor mit der CreateRelation-Methode erstellt haben. Dadurch wird das Relation-Objekt gespeichert, wenn Sie das Database-Objekt schließen. Sie können ein Relation-Objekt mit Hilfe der Delete-Methode aus der Auflistung entfernen.

Sie verweisen auf ein Relation-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

Relations(0)

Relations("Name")

Relations![Name]


Relation-Objekt, Relations-Auflistung - Zusammenfassung

Relation-Objekt

Ein Relation-Objekt enthält die folgenden Auflistungen, die aufgeführte Methode und nachfolgende Eigenschaften.

Auflistungen

Fields (Voreinstellung)

Properties

Methode

CreateField

Eigenschaften

Attributes

ForeignTable

Name

PartialReplica

Table

Relations-Auflistung

Eine Relations-Auflistung ist in jedem Database-Objekt einer Microsoft Jet-Datenbank vorhanden und enthält die folgenden Methoden und die nachfolgende Eigenschaft.

Methoden

Append

Delete

Refresh

Eigenschaft

Count


Recordset-Objekt vom Typ Snapshot

Ein Recordset-Objekt vom Typ Snapshot ist eine statische Gruppe von Datensätzen, mit der Sie Daten in einer oder mehreren zugrundeliegenden Tabellen untersuchen können. In einer ODBCDirect-Datenbank entspricht ein Recordset-Objekt vom Typ Snapshot einem statischen Cursor.

Bemerkungen

Zur Erstellung eines Recordset-Objekts vom Typ Snapshot verwenden Sie die OpenRecordset-Methode auf einer geöffneten Datenbank, auf einem anderem Recordset-Objekt vom Typ Dynaset oder Snapshot oder auf einem QueryDef-Objekt.

Ein Recordset-Objekt vom Typ Snapshot kann Felder aus einer oder mehreren Tabellen in einer Datenbank enthalten. Es kann in einem Microsoft Jet-Arbeitsbereich nicht aktualisiert werden. In einem ODBCDirect-Arbeitsbereich kann ein Recordset-Objekt vom Typ Snapshot möglicherweise aktualisiert werden. Dies hängt vom ODBC-Treiber ab.

Wenn Sie ein Recordset-Objekt vom Typ Snapshot erstellen, werden Datenwerte für alle Felder (mit Ausnahme von Memo- und OLE-Objekt-Felddatentypen (Long Binary) in .mdb-Dateien) in den lokalen Speicher geladen. Nach dem Laden wirken sich Änderungen, die an den Daten der Basistabelle vorgenommen werden, nicht in den Daten des Recordset-Objekts vom Typ Snapshot aus. Sie können das Recordset-Objekt vom Typ Snapshot mit den aktuellen Daten erneut laden, indem Sie die Requery-Methode verwenden oder die OpenRecordset-Methode erneut ausführen.

Die Reihenfolge der Daten eines Recordset-Objekts vom Typ Snapshot ist nicht von vornherein festgelegt. Wenn Ihre Daten sortiert sein müssen, können Sie eine SQL-Anweisung mit einem ORDER BY-Abschnitt verwenden, um das Recordset-Objekt zu erstellen. Mit diesem Verfahren können Sie auch Datensätze filtern, damit nur bestimmte Datensätze zum Recordset-Objekt hinzugefügt werden. Mit diesem Verfahren können Sie in der Regel schneller auf Ihre Daten zugreifen als durch Verwendung der Eigenschaften Filter oder Sort oder durch Testen jedes einzelnen Datensatzes.

Recordset-Objekte vom Typ Snapshot können in der Regel schneller erstellt und ausgeführt werden als Recordset-Objekte vom Typ Dynaset, weil die zugehörigen Datensätze entweder im Hauptspeicher abgelegt oder im TEMP-Bereich auf dem Datenträger gespeichert werden, und weil das Microsoft Jet-Datenbankmodul das Sperren von Seiten oder Zugriffe durch mehrere Benutzer nicht beachten muß. Recordset-Objekte vom Typ Snapshot benötigen jedoch mehr lokale Ressourcen als Recordset-Objekte vom Typ Dynaset, da jeweils der gesamte Datensatz in den lokalen Speicher geladen wird.


Recordset-Objekt vom Typ Tabelle

Ein Recordset-Objekt vom Typ Tabelle ist eine Darstellung einer Basistabelle, mit der Sie Datensätze einer Tabelle hinzufügen, ändern oder löschen können. Nur der aktuelle Datensatz wird in den Hauptspeicher geladen. Ein vordefinierter Index legt die Reihenfolge der Datensätze im Recordset-Objekt fest (gilt nur für Microsoft Jet-Arbeitsbereiche).

Bemerkungen

Sie erstellen ein Recordset-Objekt vom Typ Tabelle, indem Sie die OpenRecordset-Methode auf einem geöffneten Database-Objekt ausführen.

Sie können ein Recordset-Objekt vom Typ Tabelle mit einer Basistabelle einer Microsoft Jet-Datenbank, aber nicht mit einer ODBC-Tabelle oder einer verknüpften Tabelle erstellen. Sie können das Recordset-Objekt vom Typ Tabelle zusammen mit ISAM-Datenbanken (wie FoxPro, dBASE oder Paradox) verwenden, wenn Sie sie direkt öffnen.

Im Gegensatz zu Recordset-Objekten vom Typ Dynaset oder Snapshot kann das Recordset-Objekt vom Typ Tabelle nur auf genau eine Basistabelle verweisen, und Sie können es nicht mit einer SQL-Anweisung, die die Daten sortiert oder filtert, erstellen. Wenn Sie auf ein Recordset-Objekt vom Typ Tabelle zugreifen, geben Sie in der Regel einen der vordefinierten Indizes für die Tabelle an, wodurch die Daten sortiert werden, die an Ihre Anwendung zurückgegeben werden. Wenn die Tabelle keinen Index hat, ist die Reihenfolge der zurückgegebenen Daten unbestimmt. Ihre Anwendung kann ggf. einen Index erstellen, der Datensätze in einer bestimmten Reihenfolge zurückgibt. Sie wählen eine bestimmte Reihenfolge für das Recordset-Objekt vom Typ Tabelle, indem Sie die Index-Eigenschaft auf einen gültigen Index setzen.

Das Recordset-Objekt vom Typ Tabelle unterscheidet sich ebenfalls von den Objekten des Typs Dynaset und Snapshot dadurch, daß Recordset-Objekte vom Typ Tabelle nicht explizit gefüllt werden müssen, um einen genauen Wert für die RecordCount-Eigenschaft zu erhalten.

Damit die Datenintegrität gewährleistet bleibt, werden Recordset-Objekte vom Typ Tabelle gesperrt, während die Operationen der Edit- und Update-Methoden durchgeführt werden, so daß ein bestimmter Datensatz immer nur jeweils von einem Benutzer aktualisiert werden kann. Wenn das Microsoft Jet-Datenbankmodul einen Datensatz sperrt, wird die gesamte 2 KB große Seite gesperrt, die den Datensatz enthält.

Bei Tabellen, die keine ODBC-Tabellen sind, gibt es zwei Verfahren zum Sperren von Datensätzen: vollständiges und eingeschränktes Sperren.Tabellen, auf die über ODBC zugegriffen wird, sind immer eingeschränkt gesperrt. Die LockEdits-Eigenschaft bestimmt das jeweils während der Bearbeitung wirksame Sperrverfahren.


TableDef-Objekt

Ein TableDef-Objekt stellt die gespeicherte Definition einer Basistabelle oder einer verknüpften Tabelle dar (gilt nur für Microsoft Jet-Arbeitsbereiche).

Bemerkungen

Sie verändern eine Tabellendefinition mit einem TableDef-Objekt und den zugehörigen Methoden und Eigenschaften. Ihnen stehen z.B. folgende Möglichkeiten zur Verfügung.

•	Untersuchen der Feld- und Indexstruktur einer beliebigen lokalen, verknüpften oder externen Tabelle in einer Datenbank.

•	Verwenden der Eigenschaften Connect und SourceTableName, um Informationen über verknüpfte Tabellen festzulegen oder zurückzugeben, sowie Verwenden der RefreshLink-Methode, um Verbindungen mit verknüpften Tabellen zu aktualisieren.

•	Verwenden der Einstellungen der Eigenschaften ValidationRule und ValidationText, um Gültigkeitsbedingungen festzulegen oder zurückzugeben.

•	Verwenden der OpenRecordset-Methode, um ein Recordset-Objekt vom Typ Tabelle, Dynaset, Dynamisch, Snapshot oder Vorwärts auf der Basis der Tabellendefinition zu erstellen.

Bei Basistabellen enthält die RecordCount-Eigenschaft die Anzahl der Datensätze in der angegebenen Datenbanktabelle. Bei verknüpften Tabellen hat die RecordCount-Eigenschaft immer den Wert -1.

Sie erstellen ein neues TableDef-Objekt mit der CreateTableDef-Methode.

So fügen Sie einer Tabelle ein Feld hinzu

1.	Alle Recordset-Objekte, die auf der Tabelle basieren, müssen geschlossen sein.

2.	Verwenden Sie die CreateField-Methode, um eine Field-Objektvariable zu erstellen, und legen Sie die zugehörigen Eigenschaften fest.

3.	Verwenden Sie die Append-Methode, um das Field-Objekt der Fields-Auflistung des TableDef-Objekts hinzuzufügen.

Sie können ein Field-Objekt aus einer TableDefs-Auflistung löschen, wenn ihm keine Indizes zugewiesen wurden, jedoch verlieren Sie die im Feld enthaltenen Daten.

So erstellen Sie eine Tabelle, die neue Datensätze in einer Datenbank aufnehmen kann

1.	Verwenden Sie die CreateTableDef-Methode, um ein TableDef-Objekt zu erstellen.

2.	Legen Sie die zugehörigen Eigenschaften fest.

3.	Verwenden Sie für jedes Feld der Tabelle die CreateField-Methode, um eine Field-Objektvariable zu erstellen, und legen Sie die zugehörigen Eigenschaften fest.

4.	Verwenden Sie die Append-Methode, um die Felder der Fields-Auflistung des TableDef-Objekts hinzuzufügen.

5.	Verwenden Sie die Append-Methode, um das neue TableDef-Objekt der TableDefs-Auflistung des Database-Objekts hinzuzufügen.

Eine verknüpfte Tabelle wird mit der Datenbank über die Eigenschaften SourceTableName und Connect des TableDef-Objekts verbunden.

So verknüpfen Sie eine Tabelle mit einer Datenbank

1.	Verwenden Sie die CreateTableDef-Methode, um ein TableDef-Objekt zu erstellen.

2.	Legen Sie die zugehörigen Connect- und SourceTableName-Eigenschaften (und optional die zugehörige Attributes-Eigenschaft) fest.

3.	Verwenden Sie die Append-Methode, um das Objekt der TableDefs-Auflistung eines Database-Objekts hinzuzufügen.

Sie verweisen auf ein TableDef-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

TableDefs(0)

TableDefs("Name")

TableDefs![Name]


TableDefs-Auflistung

Eine TableDefs-Auflistung enthält alle gespeicherten TableDef-Objekte in einer Datenbank (gilt nur für Microsoft Jet-Arbeitsbereiche).

Bemerkungen

Sie verändern eine Tabellendefinition mit einem TableDef-Objekt und den zugehörigen Methoden und Eigenschaften.

Die Standardauflistung eines Database-Objekts ist die TableDefs-Auflistung.

Sie verweisen auf ein TableDef-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

TableDefs(0)

TableDefs("Name")

TableDefs![Name]


TableDef-Objekt, TableDefs-Auflistung - Zusammenfassung

TableDef-Objekt

Ein TableDef-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften.

Auflistungen

Fields (Voreinstellung)

Indexes

Properties

Methoden

CreateField

CreateIndex

CreateProperty

OpenRecordset

RefreshLink

Eigenschaften

Attributes

ConflictTable

Connect

DateCreated

KeepLocal (benutzerdefiniert)

LastUpdated

Name

RecordCount

Replicable (benutzerdefiniert)

ReplicaFilter

SourceTableName

Updatable

ValidationRule

ValidationText

Ein TableDef-Objekt kann auch anwendungsdefinierte Eigenschaften enthalten. Genaue Informationen zum Abrufen und Festlegen dieser Eigenschaften finden Sie in der Hilfe der jeweiligen Anwendung.

TableDefs-Auflistung

Eine TableDefs-Auflistung ist in jedem Database-Objekt in einer Microsoft Jet-Datenbank vorhanden und enthält die folgenden Methoden und die nachfolgende Eigenschaft.

Methoden

Append

Delete

Refresh

Eigenschaft

Count


User-Objekt

Ein User-Objekt stellt ein Benutzerkonto dar, das Zugriffsberechtigungen hat, wenn ein Workspace-Objekt als geschützte Arbeitsgruppe operiert (gilt nur für Microsoft Jet-Arbeitsbereiche).

Bemerkungen

Sie verwenden User-Objekte, um Zugriffsberechtigungen für Ihre Document-Objekte, wie Datenbanken, Tabellen und Abfragen zu erteilen und deren Einhaltung durchzusetzen. Wenn Sie die Eigenschaften eines bestimmten User-Objekts kennen, können Sie darüber hinaus ein neues Workspace-Objekt erstellen, für das dieselben Zugriffsberechtigungen gelten wie für das User-Objekt.

Sie können ein bestehendes User-Objekt an die Users-Auflistung eines Group-Objekts anfügen, um dem Benutzerkonto die Zugriffsberechtigungen für dieses Group-Objekt zu erteilen. Alternativ dazu können Sie das Group-Objekt an die Groups-Auflistung eines User-Objekts anfügen, um das Benutzerkonto in diese Gruppe aufzunehmen. Sie müssen u.U. die Refresh-Methode verwenden, wenn Sie eine andere Users- oder Groups-Auflistung verwenden als die, an die Sie soeben ein Objekt angefügt haben.

Mit den Eigenschaften eines User-Objekts haben Sie folgende Möglichkeiten.

•	Verwenden der Name-Eigenschaft, um den Namen eines vorhandenen Benutzers zurückzugeben. Sie können nicht die Eigenschaften PID und Password eines bestehenden User-Objekts zurückgeben.

•	Verwenden der Eigenschaften Name, PID und Password eines neu erstellten und noch nicht angefügten User-Objekts, um die Kennzeichnung dieses User-Objekts festzulegen. Wenn Sie die Password-Eigenschaft nicht festlegen, hat sie als Wert eine Null-Zeichenfolge ("").

Im Microsoft Jet-Datenbankmodul sind zwei User-Objekte vordefiniert: "Admin" und "Guest". Der Benutzer "Admin" gehört den beiden Group-Objekten "Admins" (Administratoren) und "Users" (Benutzer) an; der Benutzer "Guest" gehört nur dem Group-Objekt "Guests" (Gäste) an.

Sie erstellen ein neues User-Objekt mit der CreateUser-Methode.

Sie verweisen auf ein User-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

[Arbeitsbereich | Gruppe].Users(0)

[Arbeitsbereich | Gruppe].Users("Name")

[Arbeitsbereich | Gruppe].Users![Name]


Users-Auflistung

Eine Users-Auflistung enthält alle gespeicherten User-Objekte eines Workspace-Objekts oder eines Group-Objekts (gilt nur für Microsoft Jet-Arbeitsbereiche).

Bemerkungen

Sie können ein bestehendes User-Objekt an die Users-Auflistung eines Group-Objekts anfügen, um dem Benutzerkonto die Zugriffsberechtigungen für dieses Group-Objekt zu erteilen. Alternativ dazu können Sie das Group-Objekt an die Groups-Auflistung eines User-Objekts anfügen, um das Benutzerkonto in diese Gruppe aufzunehmen. Sie müssen u.U. die Refresh-Methode verwenden, wenn Sie eine andere Users- oder Groups-Auflistung verwenden als die, an die Sie soeben ein Objekt angefügt haben.

Im Microsoft Jet-Datenbankmodul sind zwei User-Objekte vordefiniert: "Admin" und "Guest". Der Benutzer "Admin" gehört den beiden Group-Objekten "Admins" (Administratoren) und "Users" (Benutzer) an; der Benutzer "Guest" gehört nur dem Group-Objekt "Guests" (Gäste) an.

Sie verweisen auf ein User-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

[Arbeitsbereich | Gruppe].Users(0)

[Arbeitsbereich | Gruppe].Users("Name")

[Arbeitsbereich | Gruppe].Users![Name]


User-Objekt, Users-Auflistung - Zusammenfassung

User-Objekt

Ein User-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften.

Auflistungen

Groups (Voreinstellung)

Properties

Methoden

CreateGroup

NewPassword

Eigenschaften

Name

Password

PID

Users-Auflistung

Eine Users-Auflistung ist in jedem Group- und Microsoft Jet- Workspace-Objekt vorhanden und enthält die folgenden Methoden und die nachfolgende Eigenschaft.

Methoden

Append

Delete

Refresh

Eigenschaft

Count


Workspace-Objekt

Ein Workspace-Objekt definiert eine mit einem Namen versehene Sitzung für einen Benutzer. Es enthält geöffnete Datenbanken und stellt Mechanismen für gleichzeitig ausgeführte Transaktionen und in Microsoft Jet-Arbeitsbereichen Unterstützung für geschützte Arbeitsgruppen zur Verfügung. Es steuert ebenfalls, ob Sie mit dem Microsoft Jet-Datenbankmodul oder durch ODBCDirect auf externe Daten zugreifen.

Bemerkungen

Ein Workspace-Objekt ist kein beständiges Objekt, das sowohl bei der Verwendung des Microsoft Jet-Datenbankmoduls als auch von ODBCDirect festlegt, wie Ihre Anwendung und Daten gegenseitig aufeinander wirken. Verwenden Sie das Workspace-Objekt, um die aktuelle Sitzung zu verwalten oder eine weitere Sitzung zu starten. Innerhalb einer Sitzung können Sie mehrere Datenbanken oder Verbindungen öffnen und Transaktionen verwalten. Ihnen stehen z.B. folgende Möglichkeiten zur Verfügung.

•	Verwenden der Eigenschaften Name, UserName und Type, um eine mit einem Namen versehene Sitzung zu erstellen. Innerhalb dieser Sitzung können Sie mehrere Datenbanken öffnen und eine Instanz von verschachtelten Transaktionen durchführen.

•	Verwenden der Close-Methode, um eine Sitzung zu beenden.

•	Verwenden der OpenDatabase-Methode, um während einer Sitzung eine oder mehrere vorhandene Datenbanken eines Workspace-Objekts zu öffnen.

•	Verwenden der Methoden BeginTrans, CommitTrans und Rollback, um innerhalb eines Workspace-Objekts verschachtelte Transaktionen zu verwalten. Außerdem können Sie verschiedene Workspace-Objekte verwenden, um mehrere, gleichzeitig ausgeführte und sich überschneidende Transaktionen durchzuführen.

Weiterhin können Sie in einem Microsoft Jet-Arbeitsbereich auf der Basis von Benutzernamen und Kennwörtern Sicherheit gewährleisten.

•	Verwenden der Auflistungen Groups und Users, um Gruppen- und Benutzerzugriffsberechtigungen für Objekte im Arbeitsbereich (Workspace) zu erteilen.

•	Verwenden der IsolateODBCTrans-Eigenschaft, um mehrere Transaktionen voneinander zu trennen, die dieselbe mit Microsoft Jet verbundene ODBC-Datenbank betreffen.

Anmerkung   Eine vollständige Liste aller verfügbaren Methoden, Eigenschaften und Auflistungen eines Workspace-Objekts sowohl in einer Microsoft Jet-Datenbank als auch in einer ODBCDirect-Datenbank finden Sie unter Zusammenfassung.

Sobald Sie das erste Mal auf das Workspace-Objekt verweisen oder es erstmals verwenden, erstellen Sie automatisch den Standard-Arbeitsbereich, DBEngine.Workspaces(0). Die Einstellungen der Eigenschaften Name und UserName des Standard-Arbeitsbereichs sind "#Default Workspace#" bzw. "Admin". Bei aktivierten Sicherheitsmechanismen entspricht die Einstellung der UserName-Eigenschaft dem Namen des angemeldeten Benutzers.

Sie erstellen ein ODBCDirect Workspace-Objekt und vermeiden, daß das Microsoft Jet-Datenbankmodul in den Speicher geladen wird, indem Sie die DefaultType-Eigenschaft des DBEngine-Objekts auf dbUseODBC oder das Argument Typ der CreateWorkspace-Methode auf dbUseODBC festlegen.

Wenn Sie Transaktionen verwenden, sind alle Datenbanken im angegebenen Arbeitsbereich (Workspace) betroffen, auch wenn mehrere Database-Objekte im Workspace-Objekt geöffnet sind. Sie verwenden z.B. eine BeginTrans-Methode, aktualisieren mehrere Datensätze in einer Datenbank und löschen dann Datensätze in einer anderen Datenbank. Wenn Sie anschließend die Rollback-Methode ausführen, werden sowohl die Aktualisierungs- als auch die Löschoperation abgebrochen und rückgängig gemacht. Sie können ein weiteres Workspace-Objekt erstellen, um Transaktionen unabhängig voneinander datenbankübergreifend (über mehrere Database-Objekte) zu verwalten.

Sie können Workspace-Objekte mit der CreateWorkspace-Methode erstellen. Nach dem Erstellen des neuen Workspace-Objekts, fügen Sie es an die Workspaces-Auflistung an, wenn Sie aus der Workspaces-Auflistung darauf verweisen müssen.

Sie können neu erstellte Workspace-Objekte verwenden, ohne sie an die Workspaces-Auflistung anzufügen. Sie müssen allerdings auf das Objekt mit der zugehörigen Objektvariablen, welche Sie ihm zugewiesen haben, verweisen.

Sie verweisen auf ein Workspace-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

DBEngine.Workspaces(0)

DBEngine.Workspaces("Name")

DBEngine.Workspaces![Name]


Workspaces-Auflistung

Eine Workspaces-Auflistung enthält alle aktiven und nicht verborgenen Workspace-Objekte des DBEngine-Objekts. (Verborgene Workspace-Objekte werden nicht an die Auflistung angefügt ,und auf sie wird über die Variable, die ihnen zugewiesen ist, verwiesen.)

Bemerkungen

Verwenden Sie das Workspace-Objekt, um die aktuelle Sitzung zu verwalten oder eine weitere Sitzung zu starten.

Sobald Sie das erste Mal auf das Workspace-Objekt verweisen oder es erstmals verwenden, erstellen Sie automatisch den Standard-Arbeitsbereich, DBEngine.Workspaces(0). Die Einstellungen der Eigenschaften Name und UserName des Standard-Arbeitsbereichs sind "#Default Workspace#" bzw. "Admin". Bei aktivierten Sicherheitsmechanismen entspricht die Einstellung der UserName-Eigenschaft dem Namen des angemeldeten Benutzers.

Sie können neue Workspace-Objekte mit der CreateWorkspace-Methode erstellen. Neue Workspace-Objekte müssen Sie nach dem Erstellen an die Workspaces-Auflistung anfügen, wenn Sie aus der Workspaces-Auflistung darauf verweisen müssen. Sie können neu erstellte Workspace-Objekte aber auch verwenden, ohne sie an die Workspaces-Auflistung anzufügen.

Sie verweisen auf ein Workspace-Objekt in einer Auflistung über die zugehörige Ordinalzahl oder die Einstellung der Name-Eigenschaft unter Verwendung der folgenden Syntax.

DBEngine.Workspaces(0)

DBEngine.Workspaces("Name")

DBEngine.Workspaces![Name]


Workspace-Objekt, Workspaces-Auflistung - Zusammenfassung

Workspace-Objekt

Ein Workspace-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften.

Legende:

Funktionen, die nur in Microsoft Jet-Arbeitsbereichen verfügbar sind.

Funktionen, die nur in ODBCDirect-Arbeitsbereichen verfügbar sind.

Auflistungen

Connections

Databases (Voreinstellung)

Groups

Properties

Users

Methoden

BeginTrans

Close

CommitTrans

CreateDatabase

CreateGroup

CreateUser

OpenConnection

OpenDatabase

Rollback

Eigenschaften

DefaultCursorDriver

IsolateODBCTrans

LoginTimeout

Name

Type

UserName

Workspaces-Auflistung

Eine Workspaces-Auflistung ist im DBEngine-Objekt vorhanden und enthält die folgenden Methoden und die nachfolgende Eigenschaft.

Methoden

Append

Delete

Refresh

Eigenschaft

Count


Connection-Objekt

Ein Connection-Objekt stellt eine Verbindung zu einer ODBC-Datenbank dar (gilt nur für ODBCDirect-Arbeitsbereiche).

Bemerkungen

Ein Connection-Objekt ist ein nicht beständiges Objekt, das eine Verbindung zu einer Remote-Datenbank darstellt. Das Connection-Objekt ist nur in ODBCDirect-Arbeitsbereichen verfügbar (d.h., ein Workspace-Objekt, dessen Typoptionen beim Erstellen auf dbUseODBC festgelegt wurden).

Anmerkung   Code, der für frühere Versionen von DAO geschrieben wurde, kann das Database-Objekt weiterhin für die Abwärtskompatibilität verwenden, aber wenn Sie auch die neuen Funktionen des Connection-Objekts nutzen möchten, dann sollten Sie den Code überarbeiten, damit er das Connection-Objekt nutzen kann. Sie erleichtern die Code-Konvertierung, wenn Sie den Verweis eines Connection-Objekts von einem Database-Objekt durch Lesen der Connection-Eigenschaft eines Database-Objekts ermitteln. Umgekehrt können Sie den Verweis eines Database-Objekts aus der Database-Eigenschaft eines Connection-Objekts lesen.


Connections-Auflistung

Eine Connections-Auflistung enthält das aktuelle Connection-Objekt eines Workspace-Objekts (gilt nur für ODBCDirect-Arbeitsbereiche).

Bemerkungen

Wenn Sie ein Connection-Objekt öffnen, wird dieses automatisch einer Connections-Auflistung des Workspace-Objekt angefügt. Wenn Sie ein Connection-Objekt mit der Close-Methode schließen, wird es aus der Connections-Auflistung entfernt. Sie sollten alle geöffneten Recordset-Objekte in dem Connection-Objekt schließen, bevor Sie es schließen.

Wenn Sie ein Connection-Objekt öffnen, wird gleichzeitig ein entsprechendes Database-Objekt erstellt und der Databases-Auflistung im selben Workspace-Objekt angefügt und umgekehrt. Genauso wird verfahren, wenn Sie ein Connection-Objekt schließen. Das entsprechende Database-Objekt aus der Databases-Auflistung wird gelöscht usw.

Die Einstellung der Name-Eigenschaft eines Connection-Objekts ist eine Zeichenfolge, die den Pfad der Datenbankdatei angibt. Wenn Sie in einer Auflistung auf ein Connection-Objekt mit dessen Ordnungszahl oder Einstellung der Name-Eigenschaft verweisen möchten, verwenden Sie  folgende Syntax.

Connections(0)

Connections("Name")

Connections![Name]

Anmerkung   Sie können dieselbe Datenquelle mehrfach öffnen, indem Sie in der Connections-Auflistung Duplikatsnamen erstellen. Sie sollten Connection-Objekten Objektvariablen zuweisen und auf die Objekte mit deren Variablennamen verweisen.


Connection-Objekt, Connections-Auflistung - Zusammenfassung

Connection-Objekt

Das Connection-Objekt enthält folgende Auflistungen, Methoden und Eigenschaften.

Auflistungen

QueryDefs (Voreinstellung)

Recordsets

Methoden

Cancel

Close

CreateQueryDef

Execute

OpenRecordset

Eigenschaften

Connect

Database

Name

QueryTimeout

RecordsAffected

StillExecuting

Transactions

Updatable

Connections-Auflistung

Eine Connections-Auflistung ist in jedem ODBCDirect-Workspace-Objekt enthalten und enthält folgende Methode mit der zugehörigen Eigenschaft.

Methode

Refresh

Eigenschaft

Count


Recordset-Objekt vom Typ Vorwärts

Dieser Recordset-Objekttyp ist fast mit dem Typ Snapshot identisch, jedoch können Sie sich nur vorwärts in dessen Datensätzen bewegen. Dadurch wird das Leistungsverhalten verbessert, wenn Sie nur eine einzige Pass-Through-Abfrage in einer Ergebnismenge benötigen.

In einem ODBCDirect-Arbeitsbereich entspricht dieser Typ einem ODBC-Vorwärts-Cursor.


Recordset-Objekt vom Typ Vorwärts - Zusammenfassung

Das Recordset-Objekt vom Typ Vorwärts enthält folgende Auflistungen, Methoden und Eigenschaften..

Legende:

Funktionen, die nur in Microsoft Jet-Arbeitsbereichen verfügbar sind.

 	Funktionen, die nur in ODBCDirect-Arbeitsbereichen verfügbar sind.

Auflistungen

Fields (Voreinstellung)

Properties

Methoden	Einschränkungen
AddNew
Cancel
CancelUpdate
Close
CopyQueryDef
Delete
Edit
GetRows
Move	Nur beim Vorwärtsbewegen, wenn keine Lesezeichen-Offsets verwendet werden.
MoveNext
NextRecordset
Requery
Update
Eigenschaften

In der folgenden Tabelle wird gezeigt, ob eine Eigenschafteneinstellung im Microsoft Jet- oder ODBCDirect-Arbeitsbereich Lese-/Schreibzugriff hat, schreibgeschützt ist oder immer den Wert False hat.

Schreibgeschützt

Lese-/Schreibzugriff

Eigenschaften	Einschränkungen
BatchCollisionCount
BatchCollisions
BatchSize
BOF
Connection
EOF
Filter
Name
RecordCount
RecordStatus
Restartable
StillExecuting
Transactions	Hat immer den Wert False
Type
Updatable	False
UpdateOptions
ValidationRule
ValidationText


Recordset-Objekt vom Typ Dynamisch

Dieser Recordset-Objekttyp stellt die Ergebnismenge einer Abfrage auf einer oder mehreren Basistabellen dar. Sie können dabei Datensätze aus einer Abfrage, die Datensätze zeilenweise zurückgibt, hinzufügen, ändern oder löschen. Außerdem werden Datensätze, die von anderen Benutzern der Basistabelle  hinzugefügt, gelöscht oder bearbeitet wurden, in Ihrem Recordset-Objekt angezeigt.

Dieser Typ ist nur in ODBCDirect-Arbeitsbereichen verfügbar und entspricht einem dynamischen Cursor in ODBC.


Recordset-Objekt vom Typ Dynamisch - Zusammenfassung

Ein Recordset-Objekt vom Typ Dynamisch enthält folgende Auflistungen, Methoden und Eigenschaften. Dieser Recordset-Objekttyp und die zugehörigen Methoden und Eigenschaften sind nur in ODBCDirect-Arbeitsbereichen verfügbar.

Auflistungen

Fields (Voreinstellung)

Properties

Methoden

AddNew

Cancel

CancelUpdate

Close

Delete

Edit

GetRows

Move

MoveFirst

MoveLast

MoveNext

MovePrevious

NextRecordset

Requery

Update

Eigenschaften

In der folgenden Tabelle wird gezeigt, ob eine Eigenschafteneinstellung Lese-/Schreibzugriff hat, schreibgeschützt ist oder immer den Wert False hat.

Schreibgeschützt

Lese-/Schreibzugriff

Eigenschaften	Einschränkungen
AbsolutePosition
BatchCollisionCount
BatchCollisions
BatchSize
BOF
Bookmark
Bookmarkable
CacheSize
Connection
EditMode
EOF
LastModified
LockEdits
Name
PercentPosition
RecordCount
RecordStatus
Restartable
StillExecuting
Type
Updatable
UpdateOptions


Recordset-Objekt vom Typ Dynaset - Zusammenfassung

Das Recordset-Objekt vom Typ Dynaset enthält folgende Auflistungen, Methoden und Eigenschaften.

Legende:

Funktion ist nur in Microsoft Jet-Arbeitsbereichen verfügbar.

 	Funktion ist nur in ODBCDirect-Arbeitsbereichen verfügbar.

Auflistungen

Fields (Voreinstellung)

Properties

Methoden	Einschränkungen
AddNew
Cancel
CancelUpdate
Clone
Close
CopyQueryDef
Delete
Edit
FillCache
FindFirst
FindLast
FindNext
FindPrevious
GetRows
Move
MoveFirst
MoveLast
MoveNext
MovePrevious
NextRecordset
OpenRecordset
Requery
Update
Eigenschaften

In der folgenden Tabelle wird gezeigt, ob eine Eigenschafteneinstellung Lese-/Schreibzugriff hat, schreibgeschützt ist oder nur im Microsoft Jet- oder ODBCDirect-Arbeitsbereich verfügbar ist.

Schreibgeschützt

Lese-/Schreibzugriff

Eigenschaften	Einschränkungen
AbsolutePosition
BatchCollisionCount
BatchCollisions
BatchSize
BOF
Bookmark
Bookmarkable
CacheSize	Microsoft Jet  ODBCDirect
CacheStart
Connection
EditMode
EOF
Filter
LastModified
LockEdits
Name
NoMatch
PercentPosition
RecordCount
RecordStatus
Restartable
Sort
StillExecuting
Transactions
Type
Updatable
UpdateOptions
ValidationRule
ValidationText


Recordset-Objekt vom Typ Snapshot - Zusammenfassung

Das Recordset-Objekt vom Typ Snapshot enthält folgende Auflistungen, Methoden und Eigenschaften.

Legende:

Funktion ist nur in Microsoft Jet-Arbeitsbereichen verfügbar.

 	Funktion ist nur in ODBCDirect-Arbeitsbereichen verfügbar.

Auflistungen

Fields (Voreinstellung)

Properties

Methoden	Einschränkungen
AddNew	*
Cancel
CancelUpdate	*
Clone
Close
CopyQueryDef
Delete	*
Edit	*
FindFirst
FindLast
FindNext
FindPrevious
GetRows
Move
MoveFirst
MoveLast
MoveNext
MovePrevious
NextRecordset
OpenRecordset
Requery
Update	*
* In einem ODBCDirect-Arbeitsbereich kann ein Recordset-Objekt vom Typ Snapshot aktualisiert werden; dies ist abhängig vom ODBC-Treiber ab. Die Methoden AddNew, Edit, Delete, Update und CancelUpdate sind nur in einem ODBCDirect-Recordset-Objekt vom Typ Snapshot verfügbar, wenn der ODBC-Treiber aktualisierbare Snapshots unterstützt.

Eigenschaften

In der folgenden Tabelle wird gezeigt, ob eine Eigenschafteneinstellung in Microsoft Jet- oder ODBCDirect-Arbeitsbereichen Lese-/Schreibzugriff hat, schreibgeschützt ist oder immer den Wert False hat.

Schreibgeschützt

Lese-/Schreibzugriff

Eigenschaften	Einschränkungen
AbsolutePosition
BatchCollisionCount
BatchCollisions
BatchSize
BOF
Bookmark
Bookmarkable
CacheSize
Connection
EditMode
EOF
Filter
LastModified	*
LockEdits
Name
NoMatch
PercentPosition
RecordCount
RecordStatus
Restartable
Sort
StillExecuting
Transactions	Hat immer den Wert False
Type
Updatable	Hat in Microsoft Jet-Arbeitsbereichen immer den Wert False; [image] in ODBCDirect-Arbeitsbereichen *
UpdateOptions
ValidationRule
ValidationText
* In einem ODBCDirect-Arbeitsbereich kann ein Recordset-Objekt vom Typ Snapshot aktualisiert werden; dies ist abhängig vom ODBC-Treiber. Die LastModified-Eigenschaft ist nur in einem ODBCDirect-Recordset-Objekt vom Typ Snapshot verfügbar und die Updatable-Eigenschaft hat den Wert True,  wenn der ODBC-Treiber aktualisierbare Snapshots unterstützt.


Recordset-Objekt vom Typ Tabelle - Zusammenfassung

Ein Recordset-Objekt vom Typ Tabelle enthält folgende Auflistungen, Methoden und Eigenschaften. Dieser Typ eines Recordset-Objekts und die zugehörigen Methoden und Eigenschaften sind nur in einem Microsoft Jet-Arbeitsbereich verfügbar.

Auflistungen

Fields (Voreinstellung)

Properties

Methoden

AddNew

CancelUpdate

Clone

Close

Delete

Edit

GetRows

Move

MoveFirst

MoveLast

MoveNext

MovePrevious

OpenRecordset

Seek

Update

Eigenschaften

In der folgenden Tabelle wird gezeigt, ob eine Eigenschafteneinstellung Lese-/Schreibzugriff hat, schreibgeschützt ist oder immer den Wert False hat.

Schreibgeschützt

Lese-/Schreibzugriff

Eigenschaften	Einschränkungen
BOF
Bookmark
Bookmarkable
DateCreated
EditMode
EOF
Index
LastModified
LastUpdated
LockEdits
Name
NoMatch
PercentPosition
RecordCount
Restartable	Hat immer den Wert False
Transactions
Type
Updatable
ValidationRule
ValidationText


AddNew-Methode

Erstellt einen neuen Datensatz für ein aktualisiertes Recordset-Objekt.

Syntax

Recordset.AddNew

Der Platzhalter Recordset ist eine Objektvariable, die ein aktualisierbares Recordset-Objekt darstellt, dem ein neuer Datensatz hinzugefügt werden soll.

Bemerkungen

Mit der AddNew-Methode können Sie einen Datensatz erstellen und dem durch Recordset bezeichneten Recordset-Objekt hinzufügen. Diese Methode setzt die Felder auf die Standardwerte, und wenn kein Standardwert angegeben wurde, werden die Felder auf Null (der Standardwert für ein Recordset-Objekt vom Typ Tabelle) gesetzt.

Nachdem Sie den neuen Datensatz geändert haben, können Sie mit der Update-Methode die Änderungen speichern und den Datensatz dem Recordset-Objekt hinzufügen. Die Änderungen an der Datenbank erfolgen erst, wenn Sie die Update-Methode ausführen.

Vorsicht   Wenn Sie AddNew ausführen und dann eine Operation durchführen, die zu einem anderen Datensatz wechselt, jedoch Update nicht verwenden, gehen Ihre Änderungen ohne Warnung verloren. Wenn Sie Recordset schließen oder die Prozedur beenden, die Recordset oder dessen Database-Objekt deklariert, geht der neue Datensatz ohne Warnung verloren.

Anmerkung   Wenn Sie AddNew in einem Microsoft Jet-Arbeitsbereich verwenden und das Datenbankmodul eine neue Seite erstellen muß, um den aktuellen Datensatz aufzunehmen, wird die Seite vollständig gesperrt. Wenn der neue Datensatz in einer bestehenden Seite Platz findet, wird die Seite eingeschränkt gesperrt.

Wenn Sie sich nicht zum letzten Datensatz Ihres Recordset-Objekts bewegt haben, können Datensätze aufgenommen werden, die Basistabellen von anderen Vorgängen hinzugefügt wurden, wenn sie eine Position hinter dem aktuellen Datensatz erhalten. Wenn Sie dagegen einen Datensatz Ihrem Recordset hinzufügen, ist der Datensatz im Recordset-Objekt sichtbar und wird in die zugrundeliegende Tabelle aufgenommen, wodurch er dann für alle neuen Recordset-Objekte sichtbar wird.

Die Position des neuen Datensatzes hängt vom Typ des Recordset-Objekts ab:

•	In einem Recordset-Objekt vom Typ Dynaset werden Datensätze am Ende des Recordset-Objekts eingefügt, unabhängig von Sortierregeln, die beim Öffnen des Recordset-Objekts wirksam waren.

•	In einem Recordset vom Typ Tabelle, dessen Index-Eigenschaften gesetzt wurden, werden Datensätze entsprechend ihrer Position in der Sortierreihenfolge zurückgegeben. Wenn die Index-Eigenschaft nicht gesetzt wurde, werden neue Datensätze am Ende des Recordset-Objekts zurückgegeben.

Der Datensatz, der vor der Verwendung von AddNew aktuell war, bleibt aktuell. Wenn der neue Datensatz zum aktuellen Datensatz werden soll, können Sie die Bookmark-Eigenschaft auf das Lesezeichen setzen, das durch die Einstellung der LastModified-Eigenschaft gekennzeichnet ist.

Anmerkung   Um einen Datensatz hinzufügen, bearbeiten oder löschen zu können, muß ein eindeutiger Index auf dem Datensatz der zugrundeliegenden Datenquelle sein. Wenn dies nicht der Fall ist, tritt im Microsoft Jet-Arbeitsbereich beim Aufrufen der AddNew-, Delete- oder Edit-Methode der Fehler "Berechtigung verweigert" auf. Beim Aufrufen von Update in einem ODBCDirect-Arbeitsbereich. tritt der Fehler "Ungültiges Argument" auf.


Append-Methode

Fügt einer Auflistung ein neues DAO-Objekt hinzu.

Syntax

Auflistung.Append Objekt

Die Syntax der Append-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Auflistung	Eine Objektvariable, die jede Auflistung darstellt, die neue Objekte aufnehmen kann (Einschränkungen siehe Tabelle am Ende des Themas).
Objekt	Eine Objektvariable, die das anzufügende Objekt darstellt; es muß denselben Datentyp wie die Elemente der Auflistung haben.
Bemerkungen

Die Append-Methode kann zum Hinzufügen einer neuen Tabelle zu einer Datenbank, zum Hinzufügen eines Feldes zu einer Tabelle und zum Hinzufügen eines Feldes zu einem Index verwendet werden.

Das hinzugefügte Objekt wird zu einem beständigen Objekt, das auf der Festplatte gespeichert wird, bis Sie es mit der Delete-Methode löschen. Wenn es sich bei Auflistung um eine Workspaces-Auflistung handelt (die lediglich im Hauptspeicher gehalten wird), bleibt das Objekt solange aktiv, bis Sie es mit der Close-Methode entfernen.

Das Hinzufügen eines neuen Objekts erfolgt unmittelbar, aber Sie sollten die Refresh-Methode für alle anderen Auflistungen verwenden, die von Änderungen an der Datenbankstruktur betroffen sein könnten.

Wenn das anzufügende Objekt nicht vollständig ist (weil Sie z.B. einer Fields-Auflistung eines Index-Objekts keine Field-Objekte hinzugefügt haben, bevor Sie diese an eine Indexes-Auflistung angefügt haben), oder wenn die Eigenschaften, die in einem oder mehreren der zugrundeliegenden Objekte gesetzt sind, einen falschen Wert haben, wird durch Verwenden der Append-Methode ein Fehler ausgelöst. Wenn Sie z.B. einen ungültigen Feldtypen angeben und dann versuchen, das Field-Objekt an die Fields-Auflistung in einem TableDef-Objekt anzufügen, löst die Append-Methode einen Laufzeitfehler aus.

Die folgende Tabelle führt einige der Einschränkungen für die Verwendung der Append-Methode auf. Das Objekt in der ersten Spalte ist ein Objekt, das die Auflistung in der zweiten Spalte enthält. Die dritte Spalte zeigt an, ob Sie ein Objekt an diese Auflistung anfügen können (sofern dies überhaupt möglich ist). Sie können z.B. niemals ein Container-Objekt an die Containers-Auflistung eines Database-Objekts anfügen.

Objekt	Auflistung	Können neue Objekte angefügt werden?
DBEngine	Workspaces	Ja
DBEngine	Errors	Nein. Neue Error-Objekte werden automatisch angefügt, wenn sie auftreten.
Workspace	Connections	Nein. Wenn Sie die OpenConnection-Methode verwenden, werden neue Objekte automatisch angefügt.
Workspace	Databases	Nein. Wenn Sie die OpenDatabase-Methode verwenden, werden neue Objekte automatisch angefügt.
Workspace	Groups	Ja
Workspace	Users	Ja
Connection	QueryDefs	Nein. Wenn Sie die CreateQueryDef-Methode verwenden, werden neue Objekte automatisch angefügt.
Connection	Recordsets	Nein. Wenn Sie die OpenRecordset-Methode verwenden, werden neue Objekt automatisch angefügt.
Database	Containers	Nein
Database	QueryDefs	Nur wenn das QueryDef-Objekt ein neues, nicht angefügtes Objekt ist, das ohne Namen erstellt wurde. Weitere Informationen erhalten Sie unter CreateQueryDef-Methode.
Database	Recordsets	Nein, Wenn Sie die OpenRecordset-Methode verwenden, werden neue Objekte automatisch angefügt.
Database	Relations	Ja
Database	TableDefs	Ja
Group	Users	Ja
User	Groups	Ja
Container	Documents	Nein
QueryDef	Fields	Nein
QueryDef	Parameters	Nein
Recordset	Fields	Nein
Relation	Fields	Ja
TableDef	Fields	Nur wenn die Updatable-Eigenschaft des TableDef-Objekts auf True gesetzt ist oder wenn das TableDef-Objekt nicht angefügt ist.
TableDef	Indexes	Nur wenn die Updatable--Eigenschaft des TableDef-Objekts auf True eingestellt ist oder wenn das TableDef-Objekt nicht angefügt ist.
Index	Fields	Nur wenn das Index-Objekt ein neues, nicht angefügtes Objekt ist.
Database, Field, Index, QueryDef, TableDef	Properties	Nur wenn das Database-, Field-, Index-, QueryDef- oder TableDef-Objekt ein Microsoft Jet-Arbeitsbereich ist.
DBEngine, Parameter, Recordset, Workspace	Properties	Nein


AppendChunk-Methode

Fügt Daten aus einem Zeichenfolgenausdruck an ein Field-Objekt vom Typ Memo oder Long Binary in einem Recordset-Objekt an.

Syntax

Datensatzgruppe ! Feld.AppendChunk Quelle

Die Syntax der AppendChunk-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Datensatzgruppe	Eine Objektvariable, die für das Recordset-Objekt steht, das die Fields-Auflistung enthält.
Feld	Eine Objektvariable, die für den Namen eines Field-Objekts steht, dessen Type-Eigenschaft den Wert dbMemo (Memo), dbLongBinary (Long Binary) oder einen äquivalenten Wert hat.
Quelle	Ein Variant-(vom Typ String) Ausdruck oder eine Variable mit den Daten, die an das durch Feld angegebene Field-Objekt angefügt wird.
Bemerkungen

Mit den Methoden AppendChunk und GetChunk können Sie auf Teilmengen von Daten in einem Feld vom Typ Memo oder Long Binary zugreifen.

Sie können diese Methoden auch verwenden, um Zeichenfolgenspeicher einzusparen, wenn Sie mit Feldern vom Typ Memo oder Long Binary arbeiten. Bestimmte Operationen (z.B. Kopieren) arbeiten mit temporären Zeichenfolgen. Wenn der Speicher für Zeichenfolgen beschränkt ist, müssen Sie ggf. mit Teilen eines Feldes arbeiten und können nicht das ganze Feld verwenden.

Wenn beim Verwenden von AppendChunk kein aktueller Datensatz vorhanden ist, tritt ein Fehler auf.

Anmerkungen

•	Durch die erste AppendChunk-Operation (nach dem Edit oder AddNew-Aufruf) können Daten einfach im Feld abgelegt werden, wobei vorhandene Daten überschrieben werden. Bei nachfolgenden Aufrufen von AppendChunk innerhalb einer Edit- oder AddNew-Sitzung werden dann Daten hinzugefügt.

•	In einem ODBCDirect-Arbeitsbereich kann AppendChunk nicht aufgerufen werden (obwohl kein Fehler auftritt), wenn Sie sich im Edit-Modus befinden, es sei denn, Sie bearbeiten zuerst ein anderes Feld im aktuellen Datensatz.

•	In einem ODBCDirect-Arbeitsbereich können Sie solange in einem Feld weder Lesen noch Schreiben, nachdem Sie AppendChunk auf dieses Feld angewendet haben, bis Sie den aktuellen Datensatz verlassen haben und dann wieder dorthin zurückgehen. Dies kann mit den Methoden MoveNext und MovePrevious ausgeführt werden.


BeginTrans-, CommitTrans-, Rollback-Methoden

Die Transaktionsmethoden verwalten die Verarbeitung von Transaktionen im Rahmen einer Sitzung, die von einem Workspace-Objekt folgendermaßen definiert wird.

•	BeginTrans beginnt eine neue Transaktion.

•	CommitTrans beendet die aktuelle Transaktion und speichert die Änderungen.

•	Rollback beendet die aktuelle Transaktion und stellt den Zustand der Datenbanken im Workspace-Objekt wieder her, den sie vor dem Start der aktuellen Transaktion hatten.

Syntax

Arbeitsbereich.BeginTrans | CommitTrans [dbFlushOSCacheWrites] | Rollback

Der Platzhalter für Arbeitsbereich ist eine Objektvariable, die für den Workspace mit den Datenbanken steht, die die Transaktion verwenden.

Bemerkungen

Sie können diese Methoden mit einem Workspace-Objekt verwenden, wenn Sie eine Folge von Änderungen, die an den Datenbanken in einer Sitzung vorgenommen werden, als eine Einheit behandeln möchten.

In der Regel verwenden Sie Transaktionen, um die Integrität der Daten zu gewährleisten, wenn Sie Datensätze in zwei oder mehr Tabellen aktualisieren müssen und sichergestellt sein muß, daß alle Änderungen in allen Tabellen vollständig durchgeführt wurden (Verwendung von CommitTrans), oder daß überhaupt keine Änderung durchgeführt wurde (Verwendung von Rollback). Wenn Sie z.B. Geld von einem Konto auf ein anderes überweisen, werden Sie einen Betrag von einem Kontostand abziehen und zum anderen Kontostand hinzuaddieren. Wenn eine der beiden Aktualisierungen fehlschlägt, stimmt die Bilanz der Konten nicht mehr. Verwenden Sie die BeginTrans-Methode vor dem Aktualisieren des ersten Datensatzes. Wenn dann eine nachfolgende Aktualisierung fehlschlägt, können Sie mit der Rollback-Methode alle Aktualisierungen rückgängig machen. Verwenden Sie die CommitTrans-Methode, nachdem Sie erfolgreich den letzten Datensatz aktualisiert haben.

In einem Microsoft Jet-Arbeitsbereich kann die Konstante dbFlushOSCacheWrites zusammen mit CommitTrans angegeben werden. Dadurch wird erzwungen, daß das Datenbankmodul alle Aktualisierungen sofort auf den Datenträger schreibt, anstatt zuerst in den Cache zu speichern. Wenn diese Option nicht verwendet wird, könnten Benutzer direkt nachdem CommitTrans aufgerufen wurde den Computer ausschalten, ohne daß die Daten auf den Datenträger geschrieben wurden. Dadurch wird zwar die Leistung der Anwendung eingeschränkt, aber Daten werden so gespeichert, bevor der Computer ausgeschaltet werden kann.

Vorsicht   Innerhalb eines Workspace-Objekts sind Transaktionen immer global (bezogen auf das Workspace-Objekt) und nicht auf ein Connection oder Database-Objekt beschränkt. Wenn Sie Operationen auf mehreren Verbindungen oder Datenbanken innerhalb einer Workspace-Transaktion durchführen, werden durch Auflösen der Transaktion (mit den Methoden CommitTrans oder Rollback) alle Operationen auf allen Verbindungen und Datenbanken innerhalb des Arbeitsbereichs beeinflußt.

Nachdem Sie CommitTrans verwendet haben, können Sie keine der während der Transaktion vorgenommenen Änderungen mehr rückgängig machen, es sei denn, die Transaktion ist innerhalb einer anderen Transaktion enthalten, die zurückgesetzt wird. Wenn Sie Transaktionen verschachteln, müssen Sie die aktuelle Transaktion auflösen, bevor Sie eine Transaktion in einer höheren Verschachtelungsebene auflösen.

Wenn Sie gleichzeitig ausgeführte Transaktionen mit überlappenden, aber nicht verschachtelten Gültigkeitsbereichen benötigen, können Sie zusätzliche Workspace-Objekte erstellen, die die gleichzeitig ausgeführten Transaktionen enthalten.

Wenn Sie ein Workspace-Objekt schließen, ohne noch nicht abgeschlossene Transaktionen aufzulösen, werden die Transaktionen automatisch zurückgesetzt.

Wenn Sie die CommitTrans- oder Rollback-Methode verwenden, ohne zuvor die BeginTrans-Methode aufzurufen, tritt ein Fehler auf.

Einige ISAM-Datenbanken, die in einem Microsoft Jet-Arbeitsbereich verwendet werden, unterstützen möglicherweise keine Transaktionen. In diesem Fall hat die Transactions-Eigenschaft des Database-Objekts oder Recordset-Objekts den Wert False. Um sicherzustellen, daß die Datenbank Transaktionen unterstützt, überprüfen Sie den Wert der Transactions-Eigenschaft des Database-Objekts, bevor Sie die BeginTrans-Methode verwenden. Wenn Sie ein Recordset-Objekt verwenden, das auf mehreren Datenbanken basiert, überprüfen Sie die Transactions-Eigenschaft des Recordset-Objekts. Wenn ein Recordset-Objekt vollständig auf Microsoft Jet-Tabellen basiert, können Sie immer Transaktionen verwenden. Recordset-Objekte, die auf Tabellen basieren, die mit anderen Datenbankprodukten erstellt wurden, unterstützen möglicherweise keine Transaktionen. Sie können z.B. keine Transaktionen in einem Recordset-Objekt verwenden, das auf einer Paradox-Tabelle basiert. Dann hat die Transactions-Eigenschaften den Wert False. Wenn das Database- oder Recordset-Objekt keine Transaktionen unterstützt, werden die Methoden ignoriert, ohne das ein Fehler auftritt.

Transaktionen können nicht verschachtelt werden, wenn Sie auf ODBC-Datenquellen über das Microsoft Jet-Datenbankmodul zugreifen.

Anmerkungen

•	Häufig kann das Leistungverhalten der Anwendung verbessert werden, indem Operationen, die auf den Datenträger zugreifen, in Transaktionsblöcke aufgeteilt werden. Dadurch werden Ihre Operationen gepuffert, und die Anzahl der Zugriffe auf den Datenträger kann deutlich herabgesetzt werden.

•	In einem Microsoft Jet-Arbeitsbereich werden Transaktionen in einer Datei protokolliert, die in dem Verzeichnis gespeichert wird, das durch die Umgebungsvariable TEMP auf der Arbeitsstation angegeben ist. Wenn für die Transaktions-Protokolldatei nicht mehr genügend Speicher auf dem durch TEMP bezeichneten Laufwerk vorhanden ist, löst das Datenbankmodul einen Laufzeitfehler aus. Wenn Sie zu diesem Zeitpunkt CommitTrans verwenden, wird eine unbestimmte Anzahl an Operationen abgeschlossen, aber die verbleibenden, noch nicht abgeschlossenen Operationen sind verloren, und die Operation muß erneut gestartet werden. Durch das Aufrufen einer Rollback-Methode werden das Transaktionsprotokoll freigegeben und alle Operationen in der Transaktion zurückgesetzt.


CancelUpdate-Methode

Bricht alle nicht abgeschlossenen Aktualisierungen für das Recordset-Objekt ab.

Syntax

Datensatzgruppe.CancelUpdate Typ

Die Syntax der AppendChunk-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Datensatzgruppe	Eine Objektvariable, die das Recordset-Objekt darstellt, dessen ausstehenden Aktualisierungen abgebrochen werden.
Typ	Optional. Eine Konstante, die den Aktualisierungstyp anzeigt, wie es unter Einstellungen beschrieben wird (gilt nur für ODBCDirect-Arbeitsbereiche )
Einstellungen

Die folgenden Werte können nur für das Argument Typ festgelegt werden, wenn Stapelaktualisierung aktiviert ist.

Konstante	Beschreibung
dbUpdateRegular	Voreinstellung. Bricht alle ausstehenden Änderungen ab, die sich nicht im Zwischenspeicher befinden.
DbUpdateBatch	Bricht alle ausstehenden Änderungen ab, die sich im Aktualisierungsspeicher befinden.
Bemerkungen

Mit der CancelUpdate-Methode können Sie alle nicht abgeschlossenen  Aktualisierungen nach einer Edit- oder AddNew-Operation abbrechen. Wenn ein Benutzer z.B. die Edit- oder AddNew-Methode aufruft und die Update-Methode noch nicht aufgerufen hat, nimmt CancelUpdate alle Änderungen zurück, die nach dem Aufrufen von Edit oder AddNew vorgenommen wurde.

Überprüfen Sie die EditMode-Eigenschaft des Recordset-Objekts, um festzustellen, ob es nicht abgeschlossene Operationen gibt, die abgebrochen werden können.

Anmerkung   Die CancelUpdate-Methode hat die gleiche Wirkung wie das Wechseln zu einem anderen Datensatz ohne die Update-Methode zu verwenden, mit der Ausnahme, daß der aktuelle Datensatz nicht geändert wird und verschiedene Eigenschaften, wie z.B. BOF und EOF nicht aktualisiert werden.


Clone-Methode

Erstellt eine Kopie eines Recordset-Objekts, die auf das Original des Recordset-Objekts verweist.

Syntax

Set Kopie = Original.Clone

Die Syntax der Clone-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Kopie	Eine Objektvariable, die die Kopie des zu erstellenden Recordset-Objekts kennzeichnet.
Original	Eine Objektvariable, die das zu kopierende Recordset-Objekt kennzeichnet.
Bemerkungen

Mit der Clone-Methode erstellen Sie mehrere Kopien von Recordset-Objekten. Jedes Recordset-Objekt kann einen eigenen aktuellen Datensatz haben. Nur durch Clone werden die Daten in den Objekten oder zugrundeliegenden Strukturen nicht verändert. Mit der Clone-Methode können Sie Lesezeichen in zwei oder mehr Recordset-Objekten gemeinsam nutzen, da ihre Lesezeichen nicht austauschbar sind.

Sie können die Clone-Methode einsetzen, wenn Sie eine Operation auf einem Recordset-Objekt durchführen möchten, das mehrere aktuelle Datensätze erfordert. Dieses Verfahren ist schneller und effizienter als das Öffnen eines zweiten Recordset-Objekts. Wenn Sie ein Recordset-Objekt mit der Clone-Methode erstellen, hat es zunächst keinen aktuellen Datensatz. Damit ein Datensatz aktuell wird, bevor Sie das Recordset-Duplikat verwenden können, müssen Sie die Bookmark-Eigenschaft setzen, oder Sie verwenden eine der Move-Methoden, eine der Find-Methoden oder die Seek-Methode.

Von dem Ausführen der Close-Methode auf dem ursprünglichen oder dem duplizierten Objekt ist das jeweils andere Objekt nicht betroffen. Beispielsweise wird durch Ausführen der Close-Methode auf dem ursprünglichen Recordset-Objekt das Duplikat nicht geschlossen.

Anmerkungen

•	Wenn Sie ein Recordset-Duplikat in einer noch nicht abgeschlossenen Transaktion schließen, wird dadurch eine implizite Rollback-Operation hervorgerufen.

•	Wenn Sie ein Recordset-Objekt vom Typ Tabelle in einem Microsoft Jet-Arbeitsbereich verwenden, wird die Einstellung der Index-Eigenschaft nicht auf die neue Kopie des Recordset-Objekts dupliziert. Sie müssen die Einstellung der Index-Eigenschaft manuell kopieren.

•	Sie können die Clone-Methode mit Recordset-Objekten vom Typ Vorwärts nur in einem ODBCDirect-Arbeitsbereich verwenden.


Close-Methode

Schließt ein geöffnetes DAO-Objekt.

Syntax

Objekt.Close

Der Platzhalter Objekt ist eine Objektvariable, die ein geöffnetes Connection-, Database-, Recordset- oder Workspace-Objekt darstellt.

Bemerkungen

Durch Schließen eines geöffneten Objekts wird dieses aus der Auflistung entfernt, an die es angefügt ist. Jeder Versuch, den Standard-Arbeitsbereich zu schließen, wird ignoriert.

Wenn das von Objekt benannte Connection-, Database-, Recordset- oder Workspace-Objekt geschlossen wird, bevor Close verwendet wird, tritt ein Laufzeitfehler auf.

Vorsicht   Wenn Sie eine Prozedur beenden, die Connection-, Database- oder Recordset-Objekte deklariert, werden die Objekte geschlossen, alle noch nicht abgeschlossenen Transaktionen werden zurückgesetzt, und alle nicht gespeicherten Änderungen an Ihren Daten gehen verloren.

Wenn Sie versuchen, ein Connection- oder Database-Objekt zu schließen, während zugehörige Recordset-Objekte geöffnet sind, werden die Recordset-Objekte geschlossen und nicht abgeschlossene Änderungen werden abgebrochen. Wenn Sie versuchen, ein Workspace-Objekt zu schließen, ist es ähnlich: Wenn es geöffnete Connection- oder Database-Objekte hat, werden diese geschlossen, wodurch deren Recordset-Objekte geschlossen werden.

Wenn Sie die Close-Methode für entweder ein originales oder ein dupliziertes Recordset-Objekt verwenden, wirkt sich dies nicht auf das jeweils andere Recordset-Objekt aus.

Wenn Sie Objekte aus aktualisierbaren Auflistungen löschen wollen, und es sich dabei nicht um Connections-, Databases-, Recordsets- und Workspaces-Auflistungen handelt, müssen Sie die Delete-Methode verwenden. Sie können den Containers-, Documents- und Errors-Auflistungen keine neuen Elemente hinzufügen.

Eine Alternative zur Close-Methode ist es, den Wert einer Objektvariable auf Nothing (Set dbsTemp = Nothing) zu setzen.


CompactDatabase-Methode

Kopiert und komprimiert eine geschlossene Datenbank und gibt Ihnen die Möglichkeit, die Version, die Sortierreihenfolgen und Verschlüsselung zu ändern. (Nur in Microsoft Jet-Arbeitsbereichen)

Syntax

DBEngine.CompactDatabase AlteDb, NeueDb, Gebietsschema, Optionen, Kennwort

Die Syntax der CompactDatabase-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
AlteDb	Ein String, der den Namen einer existierenden geschlossenen Datenbank angibt. Der Ausdruck kann den vollständigen Pfad- und Dateinamen enthalten, z.B. "C:\Db1.mdb". Wenn der Dateiname eine Erweiterung hat, müssen Sie diesen angeben. Sie können auch einen Netzwerkpfad angeben, z.B. "\\Server1\Freigabe1\Verz1\Db1.mdb".
NeueDb	Ein String, der den vollständigen Dateinamen (und Pfad) der komprimierten Datenbank angibt, die erstellt werden soll. Sie können auch einen Netzwerkpfad angeben. Sie können mit dem Argument NeueDb nicht dieselbe Datenbankdatei angeben wie mit dem Argument AlteDb.
Gebietsschema	Optional. Ein Variant, der ein Zeichenfolgenausdruck ist, der die Sortierreihenfolge zum Erstellen von NeueDb angibt, wie unter Einstellungen beschrieben. Wenn Sie dieses Argument nicht angeben, entspricht das Gebietsschema von NeueDb dem von AlteDb.
	Sie können für NeueDb auch ein Kennwort erstellen, indem Sie die Kennwortzeichenfolge mit einer Konstanten des Arguments Gebietsschema verketten (beginnend mit ";pwd="), beispielsweise so:
	dbLangSpanish & ";pwd=NewPassword"
	Wenn Sie dasselbe Gebietsschema als auch dieselbe AlteDb (der Standardwert) verwenden möchten, aber ein neues Kennwort angeben, geben Sie einfach eine Kennwortzeichenfolge für Gebietsschema an:
	";pwd=NewPassword"
Optionen	Optional. Eine Konstante oder eine Kombination aus Konstanten, die eine oder mehrere Optionen angibt, wie unter Einstellungen beschrieben. Sie können die Optionen kombinieren, indem Sie die entsprechenden Konstanten aufsummieren.
Kennwort	Optional. Ein Variant(ein Zeichenfolgenausdruck) mit einem Kennwort, falls die Datenbank kennwortgeschützt ist. Die Zeichenfolge  „;pwd=„";pwd=" muß dem tatsächlichen Kennwort vorangestellt werden. Wenn Sie in Gebietsschema eine Kennworteinstellung einschließen, wird diese Einstellung ignoriert.
Einstellungen

Sie können die folgenden Konstanten für das Argument Gebietsschema verwenden, um die mit der CollatingOrder-Eigenschaft festgelegte Sortierreihenfolge für Zeichenfolgenvergleiche von Text anzugeben:

Konstante	Sortierreihenfolge
dbLangGeneral	Englisch, Deutsch, Französisch, Portugiesisch, Italienisch und Spanisch (Modern)
dbLangArabic	Arabisch
dbLangChineseSimplified	Vereinfachtes Chinesisch
dbLangChineseTraditional	Traditionelles Chinesisch
dbLangCyrillic	Russisch
dbLangCzech	Tschechisch
dbLangDutch	Holländisch
dbLangGreek	Griechisch
dbLangHebrew	Hebräisch
dbLangHungarian	Ungarisch
dbLangIcelandic	Isländisch
dbLangJapanese	Japanisch
dbLangKorean	Koreanisch
dbLangNordic	Skandinavische Sprachen (Nur Microsoft Jet Datenbankmodul, Version 1.0)
dbLangNorwDan	Norwegisch und Dänisch
dbLangPolish	Polnisch
dbLangSlovenian	Slowenisch
dbLangSpanish	Traditionelles Spanisch
dbLangSwedFin	Schwedisch und Finnisch
dbLangThai	Thailändisch
dbLangTurkish	Türkisch
Sie können eine der folgenden Konstanten im Argument Optionen verwenden, um anzugeben, ob die Datenbank beim Komprimieren verschlüsselt oder entschlüsselt werden soll.

Konstante	Beschreibung
dbEncrypt	Datenbank wird beim Komprimieren verschlüsselt.
DbDecrypt	Datenbank wird beim Komprimieren entschlüsselt.
Wenn Sie keine Verschlüsselungskonstante oder die Konstanten dbDecrypt und dbEncrypt gleichzeitig angeben, hat NeueDb denselben Verschlüsselungszustand wie AlteDb.

Mit einer der folgenden Konstanten im Argument Optionen können Sie die Version des Datenformats für die komprimierte Datenbank angeben. Diese Konstante betrifft nur die Version des Datenformats für NeueDb und hat keine Auswirkung auf die Version von Objekten, die durch Microsoft Access definiert wurden (wie Formulare und Berichte).

Konstante	Beschreibung
dbVersion10	Erstellt eine Datenbank, die beim Komprimieren das Dateiformat aus dem Microsoft Jet-Datenbankmodul, Version 1.0, verwendet.
DbVersion11	Erstellt eine Datenbank, die beim Komprimieren das Dateiformat aus dem Microsoft Jet-Datenbankmodul, Version 1.1, verwendet.
DbVersion20	Erstellt eine Datenbank, die beim Komprimieren das Dateiformat aus dem Microsoft Jet-Datenbankmodul, Version 2.0, verwendet.
DbVersion30	Erstellt eine Datenbank, die beim Komprimieren das Dateiformat aus dem Microsoft Jet-Datenbankmodul, Version 3.0 (kompatibel mit Version 3.5), verwendet.
Sie können nur eine Versionskonstante angeben. Wenn Sie keine Versionskonstante angeben, hat NeueDb dieselbe Version wie AlteDb. Sie können in der komprimierten Datenbank (NeueDb) nur eine Version festlegen, die der Version von AlteDb entspricht oder aktueller ist.

Bemerkungen

Mit fortschreitenden Änderungen an den Daten in einer Datenbank kann die Datenbankdatei fragmentiert werden und mehr Festplattenspeicher benötigen als notwendig ist. Sie können die Datenbank regelmäßig mit der CompactDatabase-Methode komprimieren, um die Datenbankdatei zu defragmentieren. Die komprimierte Datenbank ist in der Regel kleiner und kann oft schneller ausgeführt werden. Sie können außerdem die Sortierreihenfolge, die Verschlüsselung und die Version des Datenformats ändern, während Sie die Datenbank kopieren und komprimieren.

Sie müssen AlteDb vor der Komprimierung schließen. In einer Mehrbenutzerumgebung können andere Benutzer AlteDb nicht geöffnet haben, während Sie die Datenbank komprimieren. Wenn AlteDb nicht geschlossen ist oder nicht für exklusiven Zugriff zur Verfügung steht, tritt ein Fehler auf.

Da CompactDatabase eine Kopie der Datenbank erstellt, müssen Sie genügend Festplattenspeicher für das Original und die Kopie der Datenbank haben. Die Komprimierung kann nicht erfolgen, wenn nicht genügend Speicher zur Verfügung steht. Die Datenbankkopie NeueDb muß nicht auf der Festplatte erstellt werden, auf der sich AlteDb befindet. Nach dem erfolgreichen Komprimieren einer Datenbank können Sie die Datei für AlteDb löschen und den Dateinamen für die komprimierte NeueDb in den Namen der ursprünglichen Datei umbenennen.

Die CompactDatabase-Methode kopiert alle Daten und die Sicherheitseinstellungen für die Berechtigungen aus der durch AlteDb angegebenen Datenbank in die durch NeueDb angegebene Datenbank.

Wenn Sie mit CompactDatabase eine Datenbank der Version 1.x auf die Version 2.5 oder 3.x konvertieren, kann die konvertierte Datenbank nur noch mit Anwendungen geöffnet werden, die Microsoft Jet, Version 2.5 oder 3.x, verwenden.

Anmerkung   In einem ODBCDirect-Arbeitsbereich gibt die CompactDatabase-Methode keinen Fehler zurück, sondern lädt statt dessen das Microsoft Jet-Datenbankmodul in den Speicher.

Achtung   Da die CompactDatabase-Methode keine Microsoft Access-Objekte konvertiert, sollte CompactDatabase nicht zum Konvertieren einer Datenbank mit solchen Objekten verwendet werden. Sie können eine Datenbank mit Microsoft Access-Objekten konvertieren, indem Sie in Microsoft Access im Menü Extras auf Datenbank-Dienstprogramme zeigen und dann auf Datenbank konvertieren klicken.


CopyQueryDef-Methode

Gibt ein QueryDef-Objekt zurück, das eine Kopie des QueryDef-Objekts ist, mit dem das Recordset-Objekt erstellt wurde, das durch den Platzhalter Datensatzgruppe (nur Microsoft Jet-Arbeitsbereich) dargestellt wird.

Syntax

Set querydef = Datensatzgruppe.CopyQueryDef

Die Syntax CopyQueryDef-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
QueryDef	Eine Objektvariable, die die Kopie des zu erstellenden QueryDef-Objekts darstellt.
Datensatzgruppe	Eine Objektvariable, die das mit dem ursprünglichen QueryDef-Objekt erstellte Recordset-Objekt darstellt.
Bemerkungen

Sie können mit der CopyQueryDef-Methode ein neues QueryDef-Objekt erstellen, das eine Kopie des QueryDef-Objekts ist, mit dem das Recordset-Objekt erstellt wurde.

Wenn kein QueryDef-Objekt verwendet wurde, um dieses Recordset-Objekt zu erstellen, tritt ein Fehler auf. Sie müssen zuerst ein Recordset-Objekt mit der OpenRecordset-Methode öffnen, bevor Sie die CopyQueryDef-Methode verwenden können.

Die Methode ist hilfreich, wenn Sie aus einem QueryDef-Objekt ein Recordset-Objekt erstellen und dann das Recordset-Objekt einer Funktion übergeben, und die Funktion muß z.B. das SQL-Äquivalent der Abfrage erstellen, um es verändern zu können.


CreateDatabase-Methode

Erstellt ein neues Database-Objekt, speichert die Datenbank auf der Festplatte und gibt ein geöffnetes Database-Objekt (nur Microsoft Jet-Arbeitsbereich) zurück.

Syntax

Set Datenbank = Arbeitsbereich.CreateDatabase (Name, Gebietsschema, Optionen)

Die Syntax der CreateDatabase-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Datenbank	Eine Objektvariable, die das zu erstellende Database-Objekt darstellt.
Arbeitsbereich	Eine Objektvariable, die das bestehende Workspace-Objekt darstellt, das die Datenbank aufnehmen wird. Wenn Sie Arbeitsbereich nicht angeben, verwendet CreateDatabase das voreingestellte Workspace-Objekt.
Name	Ein String, der bis zu 255 Zeichen lang sein kann, der den Namen der zu erstellenden Datenbankdatei angibt. Es kann der vollständige Pfad und Dateiname sein, wie z.B. "C:\db1.mdb". Wenn Sie nicht die Dateinamenerweiterung angeben, wird .mdb angefügt. Sie können auch einen Netzwerkpfad wie "\\Server1\Freigabe1\Verz1\Db1" angeben. Mit dieser Methode können nur .mdb-Datenbankdateien erstellt werden.
Gebietsschema	Ein Zeichenfolgenausdruck, der die Sortierreihenfolge zum Erstellen der Datenbank, wie in den Einstellungen angegeben, angibt. Sie müssen dieses Argument angeben, da sonst ein Fehler auftritt.
	Sie können für das neue Database-Objekt auch ein Kennwort erstellen, indem Sie die Kennwortzeichenfolgen (beginnend mit ";pwd=") mit einer Konstanten des Gebietsschema-Arguments verketten, z.B.:
	dbLangSpanish & ";pwd=NewPassword"
	Wenn Sie die Standardeinstellung Gebietsschema verwenden wollen, aber ein Kennwort eingeben möchten, geben Sie einfach die Kennwortzeichenfolge für das Gebietsschema-Argument ein:
	";pwd=NewPassword"
Optionen	Optional. Eine Konstante oder eine Kombination aus Konstanten, die eine oder mehrere Optionen angibt, wie unter Einstellungen beschrieben. Sie können Optionen kombinieren, indem Sie die entsprechenden Konstanten aufsummieren.
Einstellungen

Sie können die folgenden Konstanten für das Argument Gebietsschema verwenden, um die mit der CollatingOrder-Eigenschaft festgelegte Sortierreihenfolge von Text für Zeichenfolgenvergleiche anzugeben.

Konstante	Sortierreihenfolge
dbLangGeneral	Englisch, Deutsch, Französisch, Portugiesisch, Italienisch und Spanisch (Modern)
dbLangArabic	Arabisch
dbLangChineseSimplified	Vereinfachtes Chinesisch
dbLangChineseTraditional	Traditionelles Chinesisch
dbLangCyrillic	Russisch
dbLangCzech	Tschechisch
dbLangDutch	Holländisch
dbLangGreek	Griechisch
dbLangHebrew	Hebräisch
dbLangHungarian	Ungarisch
dbLangIcelandic	Isländisch
dbLangJapanese	Japanisch
dbLangKorean	Koreanisch
dbLangNordic	Skandinavische Sprachen (Nur Microsoft Jet-Datenbankmodul, Version 1.0)
dbLangNorwDan	Norwegisch und Dänisch
dbLangPolish	Polnisch
dbLangSlovenian	Slowenisch
dbLangSpanish	Traditionelles Spanisch
dbLangSwedFin	Schwedisch und Finnisch
dbLangThai	Thailändisch
dbLangTurkish	Türkisch
Sie können eine der folgenden Konstanten im Argument Optionen verwenden, um anzugeben, welche Version das Datenformat haben soll, und ob die Datenbank verschlüsselt werden soll oder nicht.

Konstante	Beschreibung
dbEncrypt	Erstellt eine verschlüsselte Datenbank.
dbVersion10	Erstellt eine Datenbank, die das Dateiformat des Microsoft Jet-Datenbankmoduls, Version 1.0, verwendet.
dbVersion11	Erstellt eine Datenbank, die das Dateiformat des Microsoft Jet-Datenbankmoduls, Version 1.1, verwendet.
dbVersion20	Erstellt eine Datenbank, die das Dateiformat des Microsoft Jet-Datenbankmoduls, Version 2.0, verwendet.
dbVersion30	(Voreinstellung) Erstellt eine Datenbank, die das Dateiformat des Microsoft Jet-Datenbankmoduls, Version 3.0, verwendet (kompatibel mit Version 3.5).
Wenn Sie die Verschlüsselungskonstante nicht angeben, erstellt die CreateDatabase-Methode eine unverschlüsselte Datenbank. Sie können nur eine Versionskonstante angeben. Wenn Sie keine Versionskonstante angeben, erstellt CreateDatabase eine Datenbank, die das Dateiformat des Microsoft Jet-Datenbankmoduls, Version 3.0 , verwendet.

Bemerkungen

Die CreateDatabase-Methode erstellt und öffnet eine neue, leere Datenbank und gibt das Database-Objekt zurück. Sie müssen die Struktur und den Inhalt mit weiteren DAO-Objekten ausfüllen. Wenn Sie eine teilweise oder vollständige Kopie einer bestehenden Datenbank erstellen möchten, können Sie die CompactDatabase-Methode verwenden, um eine Kopie zu erstellen, die angepaßt werden kann.


CreateField-Methode

Erstellt ein neues Field-Objekt (nur Microsoft Jet-Arbeitsbereich).

Syntax

Set Feld = Objekt.CreateField (Name, Typ, Größe)

Die Syntax der CreateField-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Feld	Eine Objektvariable, die das zu erstellende Field-Objekt darstellt.
Objekt	Eine Objektvariable, die das Index-, Relation- oder TableDef-Objekt darstellt, mit dem Sie das neue Field-Objekt erstellen.
Name	Optional. Ein Variant (vom Typ String), der das neue Field-Objekt eindeutig bezeichnet. In der Beschreibung der Name-Eigenschaft finden Sie weitere Informationen zu gültigen Namen von Field-Objekten.
Typ	Optional. Eine Konstante, die den Datentyp des neuen Field-Objekts festlegt. In der Beschreibung der Type-Eigenschaft finden Sie eine Liste der gültigen Datentypen.
Größe	Optional. Ein Variant (vom Typ Integer), der die maximale Größe eines Field-Objekts, das Text enthält, in Bytes angibt. In der Beschreibung der Size-Eigenschaft finden Sie eine Liste der gültigen Werte für Größe. Das Argument wird für numerische Felder und Felder mit feststehender Breite ignoriert.
Bemerkungen

Sie können mit der CreateField-Methode sowohl ein neues Feld erstellen als auch den Namen, Datentypen und die Größe des Feldes angeben. Wenn Sie einen oder mehrere optionale Teile beim Aufrufen von CreateField nicht angeben, können Sie eine geeignete Zuweisung verwenden, um die entsprechende Eigenschaft zu setzen oder zurückzusetzen, bevor Sie das neue Objekt an eine Auflistung anfügen. Nachdem Sie das neue Objekt angefügt haben, können Sie einen Teil der zugehörigen Eigenschafteneinstellungen ändern. Weitere Informationen finden Sie in den Themen zu den einzelnen Eigenschaften.

Die Argumente Typ und Größe beziehen sich lediglich auf Field-Objekte in einem TableDef-Objekt. Diese Argumente werden ignoriert, wenn ein Field-Objekt einem Index- oder Relation-Objekt zugeordnet ist.

Falls sich Name auf ein Objekt bezieht, das bereits ein Element der Auflistung ist, wird ein Laufzeitfehler ausgelöst, wenn Sie die Append-Methode aufrufen..

Sie entfernen ein Field-Objekt aus einer Fields-Auflistung, indem Sie die Delete-Methode auf der Auflistung ausführen. Sie können ein Field-Objekt nicht mehr aus der Fields-Auflistung eines TableDef-Objekts löschen, nachdem Sie einen Index erstellt haben, der auf das Feld verweist.


CreateGroup-Methode

Erstellt ein neues Group-Objekt (nur Microsoft Jet-Arbeitsbereiche).

Syntax

Set Gruppe = Objekt.CreateGroup (Name, PID)

Die Syntax der CreateGroup-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Gruppe	Eine Objektvariable, die das zu erstellende Group-Objekt darstellt.
Objekt	Eine Objektvariable, die das User- oder Workspace-Objekt für das zu erstellende neue Group-Objekt darstellt.
Name	Optional. Ein Variant (vom Typ String), der das neue Group-Objekt eindeutig bezeichnet. Weitere Informationen zu gültigen Namen von Group-Objekten finden Sie in der Beschreibung der Name-Eigenschaft.
PID	Optional. Ein Variant (vom Typ String), der die PID eines Gruppenkontos enthält. Die ID muß 4 bis 20 alphanumerische Zeichen enthalten. Weitere Informationen zu gültigen persönlichen IDs finden Sie  in der Beschreibung der PID-Eigenschaft.
Bemerkungen

Mit der CreateGroup-Methode können Sie für ein User- oder Workspace-Objekt ein neues Group-Objekt erstellen. Wenn Sie einen oder beide optionalen Teile beim Aufrufen von CreateGroup nicht angeben, können Sie eine geeignete Zuweisung verwenden, um die entsprechende Eigenschaft zu setzen oder zurückzusetzen, bevor Sie das neue Objekt an eine Auflistung anfügen. Nachdem Sie das neue Objekt angefügt haben, können Sie einen Teil der zugehörigen Eigenschafteneinstellungen ändern. Weitere Informationen finden Sie in den Themen zu den einzelnen Eigenschaften.

Falls sich Name auf ein Objekt bezieht, das bereits ein Element der Auflistung ist, wird ein Laufzeitfehler ausgelöst, wenn Sie die Append-Methode aufrufen.

Sie entfernen ein Group-Objekt aus einer Auflistung, indem Sie die Delete-Methode auf der Auflistung ausführen.


CreateIndex-Methode

Erstellt ein neues Index-Objekt (nur Microsoft Jet-Arbeitsbereich).

Syntax

Set Index = Tabledef.CreateIndex (Name)

Die Syntax der CreateIndex-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Index	Eine Objektvariable, die den zu erstellenden Index darstellt.
Tabledef	Eine Objektvariable, die das zum Erstellen des neuen Index-Objekts verwendete TableDef-Objekt darstellt.
Name	Optional. Ein Variant (vom Typ String), der das neue Index-Objekt eindeutig bezeichnet. In der Beschreibung der Name-Eigenschaft finden Sie weitere Informationen zu gültigen Namen von Index-Objekten.
Bemerkungen

Sie können mit der CreateIndex-Methode für das TableDef-Objekt ein neues Index-Objekt erstellen. Wenn Sie den optionalen Teil Name beim Aufrufen von CreateIndex nicht angeben, können Sie eine geeignete Zuweisung verwenden, um die Name-Eigenschaft zu setzen oder zurückzusetzen, bevor Sie das neue Objekt an eine Auflistung anfügen. Nachdem Sie das neue Objekt angefügt haben, können Sie die Name-Eigenschaft ändern oder nicht ändern. Dies hängt von der Art des Objekts ab, das die Indexes-Auflistung enthält. Weitere Informationen finden Sie in der Beschreibung der Name-Eigenschaft.

Falls sich Name auf ein Objekt bezieht, das bereits ein Element der Auflistung ist, wird ein Laufzeitfehler ausgelöst, wenn Sie die Append-Methode aufrufen.

Sie entfernen ein Index-Objekt aus einer Auflistung, indem Sie die Delete-Methode auf der Auflistung ausführen.


CreateProperty-Methode

Erstellt ein neues benutzerdefiniertes Property-Objekt (gilt nur für Microsoft Jet-Arbeitsbereich).

Syntax

Set Eigenschaft = Objekt.CreateProperty (Name, Typ, Wert, DDL)

Die CreateProperty-Methode besteht aus folgenden Teilen:

Teil	Beschreibung
Eigenschaft	Eine Objektvariable, die für das Property-Objekt steht, das Sie anlegen möchten.
Objekt	Eine Objektvariable, die für das Database-, Field-, Index-, QueryDef-, Document-, oder TableDef- Objekt steht, das Sie verwenden möchten, um das neue Property-Objekt anzulegen.
Name	Optional. Ein Variable vom Typ Variant (ein Untertyp vom Datentyp String), die das neue Property-Objekt eindeutig bezeichnet. Weitere Informationen zu gültigen Namen für ein Property-Objekt finden Sie im Hilfethema zur Name-Eigenschaft.
Typ	Optional. Eine Konstante, die den Datentyp des Property-Objekts definiert. Weitere Informationen zu gültigen Datentypen finden Sie im Hilfethema zur Type-Eigenschaft.
Wert	Optional. Ein Variable vom Typ Variant, die den anfänglichen Eigenschaftswert enthält. Weitere Informationen finden Sie im Hilfethema zur Value-Eigenschaft.
DDL	Optional. Eine Variable vom Typ Variant (Ein Untertyp vom Datentyp Boolean), die anzeigt, ob das Property-Objekt ein DDL-Objekt ist oder nicht. Die Voreinstellung ist False. Wenn DDL den Wert True hat, kann dieses Property-Objekt nicht geändert oder gelöscht werden, es sei denn, der Benutzer hat die Berechtigung dbSecWriteDef
Bemerkungen

Sie können ein benutzerdefiniertes Property-Objekt nur in einer Properties-Auflistung erstellen, das beständig ist.

Wenn Sie einen oder mehrere optionale Teile beim Aufrufen von CreateProperty nicht angeben, können Sie eine geeignete Zuweisung verwenden, um die entsprechende Eigenschaft zu setzen oder zurückzusetzen, bevor Sie das neue Objekt an eine Auflistung anfügen. Nachdem Sie das neue Objekt angefügt haben, können Sie einen Teil der zugehörigen Eigenschafteneinstellungen ändern. Weitere Informationen finden Sie in den Hilfethemen zu den Eigenschaften Name, Type und Value.

Falls sich Name auf ein Objekt bezieht, das bereits ein Element der Auflistung ist, wird ein Laufzeitfehler ausgelöst, wenn Sie die Append-Methode aufrufen.

Sie entfernen ein Property-Objekt für eine benutzerdefinierte Eigenschaft aus einer Auflistung, indem Sie die Delete -Methode auf der Properties-Auflistung ausführen. Sie können keine integrierten Eigenschaften löschen.

Anmerkung   Wenn Sie den Teil DDL nicht angeben, wird standardmäßig False (kein DDL-Objekt) verwendet. Keine entsprechende DDL-Eigenschaft wird offengelegt, daher können Sie ein Property-Objekt vom Typ DDL-Objekt nur in ein Nicht-DDL-Objekt ändern, indem Sie das Property-Objekt löschen und neu erstellen.


CreateQueryDef-Methode

Erstellt ein neues QueryDef-Objekt in einem angegebenen Connection- oder Database-Objekt.

Syntax

Set Querydef = Objekt.CreateQueryDef (Name, SQLText)

Die Syntax der CreateQueryDef-Methode besteht aus folgenden Teilen:

Teil	Beschreibung
Querydef	Eine Objektvariable, die das zu erstellende QueryDef-Objekt darstellt.
Objekt	Eine Objektvariable, die ein geöffnetes Connection- oder Database-Objekt darstellt, welches das neue QueryDef-Objekt enthält.
Name	Optional. Eine Variable vom Typ Variant (ein Untertyp vom Datentyp String), die das neue Querydef-Objekt eindeutig bezeichnet.
SQLText	Optional. Eine Variable vom Typ Variant (ein Untertyp vom Datentyp String), die eine SQL-Anweisung enthält, die das QueryDef-Objekt definiert. Wenn Sie dieses Argument nicht angeben, können Sie das QueryDef-Objekt definieren, indem Sie dessen SQL-Eigenschaft setzen, bevor oder nachdem das Objekt an eine Auflistung angefügt wurde.
Bemerkungen

Wenn Sie in einem Microsoft Jet-Arbeitsbereich, etwas anderes als eine Null-Zeichenfolge beim Anlegen eines Querydef-Objekts als Namen angeben, wird das entstandene QueryDef-Objekt automatisch an die QueryDefs-Auflistung angehängt. In einem ODBCDirect-Arbeitsbereich sind QueryDef-Objekte immer temporär.

In einem ODBCDirect-Arbeitsbereich kann das Argument SQLText eine SQL-Anweisung oder eine auf einem Microsoft SQL-Server gespeicherte Prozedur und ihre Parameter angeben.

Wenn das durch Name angegebene Objekt bereits ein Element der QueryDefs-Auflistung ist, wird ein Laufzeitfehler ausgelöst. Sie können ein temporäres QueryDef-Objekt erstellen, indem Sie eine Null-Zeichenfolge für das Argument Name verwenden, wenn Sie die CreateQueryDef-Methode ausführen, oder indem Sie die Name-Eigenschaft des neu erstellten QueryDef-Objekts auf eine Null-Zeichenfolge ("") setzen. Temporäre QueryDef-Objekte sind sinnvoll, wenn Sie dynamische SQL-Anweisungen mehrfach ausführen möchten, ohne neue permanente Objekte in der QueryDefs-Auflistung anlegen zu müssen. Einer Auflistung können Sie ein temporäres QueryDef-Objekt nicht hinzufügen, da eine Null-Zeichenfolge kein gültiger Name für ein permanentes QueryDef-Objekt ist. Sie können die Eigenschaften Name und SQL des neu erstellten QueryDef-Objekts setzen und anschließend das QueryDef-Objekt an die QueryDefs-Auflistung anhängen.

Sie führen eine SQL-Anweisung in einem QueryDef-Objekt aus, indem Sie die Execute- oder die OpenRecordset-Methode ausführen.

Die Verwendung eines QueryDef-Objekts ist die empfohlene Vorgehensweise zum Durchführen von SQL Pass Through-Abfragen auf ODBC-Datenbanken.

Sie entfernen ein QueryDef-Objekt aus einer QueryDefs-Auflistung in einer Microsoft Jet-Datenbank, indem Sie die Delete-Methode auf die Auflistung anwenden. Wenden Sie in einer ODBCDirect-Datenbank die Close-Methode auf das QueryDef-Objekt an.


CreateRelation-Methode

Erstellt ein neues Relation-Objekt (gilt nur für Microsoft Jet-Arbeitsbereiche).

Syntax

Set Beziehung = Datenbank.CreateRelation (Name, Tabelle, Fremdtabelle, Attribute)

Die Syntax der CreateRelation-Methode besteht aus folgenden Teilen:

Teil	Beschreibung
Beziehung	Eine Objektvariable, die das zu erstellende Relation-Objekt darstellt.
Datenbank	Eine Objektvariable, die das Database-Objekt, für das Sie das neue Relation-Objekt anlegen möchten, darstellt.
Name	Optional. Ein Variable vom Typ Variant (ein Untertyp vom Datentyp String), die das neue Relation-Objekt eindeutig bezeichnet. Weitere Informationen zu gültigen Namen von Relation-Objekten finden Sie im Hilfethema zur Name-Eigenschaft.
Tabelle	Optional. Eine Variable vom Typ Variant (Ein Untertyp vom Datentyp String), die die Primärtabelle in der Beziehung bezeichnet. Wenn die Tabelle nicht existiert, bevor Sie das Relation-Objekt anfügen, wird ein Laufzeitfehler ausgelöst.
Fremdtabelle	Optional. Eine Variable vom Typ Variant (Ein Untertyp vom Datentyp String), die die Fremdtabelle in der Beziehung bezeichnet. Wenn die Tabelle nicht existiert, bevor Sie das Relation-Objekt anfügen, wird ein Laufzeitfehler ausgelöst.
Attribute	Optional. Eine Konstante oder eine Kombination aus Konstanten, die Informationen zum Typ der Beziehung enthalten. Weitere Informationen finden Sie im Hilfethema zur Attributes-Eigenschaft.
Bemerkungen

Das Relation-Objekt leitet Informationen zur Beziehung zwischen Feldern in zwei TableDef- oder QueryDef-Objekten an das Microsoft Jet-Datenbankmodul weiter. Das Jet-Modul kann die referentielle Integrität über die Attributes-Eigenschaft gewährleisten.

Wenn Sie einen oder mehrere optionale Teile beim Aufrufen von CreateRelation nicht angeben, können Sie eine geeignete Zuweisung verwenden, um die entsprechende Eigenschaft zu setzen oder zurückzusetzen, bevor Sie das neue Objekt an eine Auflistung anfügen. Nachdem Sie das neue Objekt angefügt haben, kann keine der Eigenschafteneinstellungen mehr geändert werden. Weitere Informationen finden Sie in den Hilfethemen zu den einzelnen Eigenschaften.

Bevor Sie die Append-Methode auf ein Relation-Objekt ausführen können, müssen Sie die entsprechenden Field-Objekte anfügen, um die Tabellen für die Primärschlüssel- und Fremdschlüssel-Beziehung zu definieren.

Wenn sich Name auf ein Objekt bezieht, das bereits ein Element der Auflistung ist, oder wenn die in der untergeordneten Fields-Auflistung angegebenen Namen der Field-Objekte ungültig sind, wird ein Laufzeitfehler ausgelöst, wenn Sie die Append-Methode aufrufen.

Sie können keine Beziehung zwischen einer replizierten Tabelle und einer lokalen Tabelle einrichten oder unterhalten.

Sie entfernen ein Relation-Objekt aus einer Relations-Auflistung, indem Sie die Delete-Methode auf der Auflistung ausführen


CreateTableDef-Methode

Erstellt ein neues TableDef-Objekt (gilt nur für Microsoft Jet-Arbeitsbereiche).

Syntax

Set Tabledef = Datenbank.CreateTableDef (Name, Attribute, Quelle, Verbindung)

Die Syntax der CreateTableDef-Methode besteht aus folgenden Teilen:

Teil	Beschreibung
Tabledef	Eine Objektvariable, die das zu erstellende TableDef-Objekt darstellt.
Datenbank	Eine Objektvariable, die das Database-Objekt, mit dem Sie das neue TableDef-Objekt anlegen möchten, darstellt.
Name	Optional. Eine Variable vom Typ Variant (ein Untertyp vom Datentyp String), die das neue TableDef-Objekt eindeutig bezeichnet. Weitere Informationen zu gültigen Namen von TableDef-Objekten finden Sie im Hilfethema zur Name-Eigenschaft.
Attribute	Optional. Eine Konstante oder eine Kombination aus Konstanten, die eine oder mehrere charakteristische Merkmale des neuen TableDef-Objekts enthalten. Weitere Informationen finden Sie im Hilfethema zur Attributes-Eigenschaft.
Quelle	Optional. Eine Variable vom Typ Variant (ein Untertyp vom Datentyp String), die den Namen einer Tabelle in einer externen Datenbank enthält, die die ursprüngliche Quelle der Daten darstellt. Die Zeichenfolge Quelle wird zur Einstellung der SourceTableName-Eigenschaft des neuen TableDef-Objekts.
Verbindung	Optional. Eine Variable vom Typ Variant (Untertyp vom Datentyp String), die Informationen zur Quelle einer geöffneten Datenbank, einer in einer Pass Through-Abfrage verwendeten Datenbank oder einer verknüpften Tabelle enthält. Weitere Informationen über gültige Verbindungszeichenfolgen finden Sie im Hilfethema zur Connect-Eigenschaft.
Bemerkungen

Wenn Sie einen oder mehrere optionale Teile beim Aufrufen von CreateTableDef nicht angeben, können Sie eine geeignete Zuweisung verwenden, um die entsprechende Eigenschaft zu setzen oder zurückzusetzen, bevor Sie das neue Objekt an eine Auflistung anfügen. Nachdem Sie das neue Objekt angefügt haben, können Sie einen Teil der zugehörigen Eigenschafteneinstellungen ändern. Weitere Informationen finden Sie in den Hilfethemen zu den einzelnen Eigenschaften.

Falls sich Name auf ein Objekt bezieht, das bereits ein Element der Auflistung ist, oder falls Sie eine ungültige Eigenschaft im angefügten TableDef- oder Field-Objekt angeben, wird ein Laufzeitfehler ausgelöst, wenn Sie die Append-Methode aufrufen. Es ist auch nicht möglich ein TableDef-Objekt an eine TableDefs-Auflistung anzuhängen, wenn Sie nicht mindestens ein Field-Objekt für das TableDef-Objekt festlegen.

Sie entfernen ein TableDef-Objekt aus einer TableDefs-Auflistung, indem Sie die Delete-Methode auf der Auflistung ausführen.


CreateUser-Methode

Erstellt ein neues User-Objekt (gilt nur für Microsoft Jet-Arbeitsbereich).

Syntax

Set Benutzer = Objekt.CreateUser (Name, PID, Kennwort)

Die Syntax der CreateUser-Methode besteht aus folgenden Teilen:

Teil	Beschreibung
Benutzer	Eine Objektvariable, die das zu erstellende User-Objekt darstellt.
Objekt	Eine Objektvariable, die das Group- oder das Workspace-Objekt, für das das neue User-Objekt erstellt werden soll, darstellt.
Name	Optional. Eine Variable vom Typ Variant (ein Untertyp vom Datentyp String), die das neue User-Objekt eindeutig bezeichnet. Weitere Informationen über gültige Namen von User-Objekten finden Sie im Hilfethema zur Name-Eigenschaft.
PID	Optional. Eine Variable vom Typ Variant (ein Untertyp vom Datentyp String), die den persönlichen Bezeichner (PID) eines Benutzerkontos enthält. Der Bezeichner kann 4 bis 20 alphanumerische Zeichen enthalten. Weitere Informationen zu gültigen persönlichen Bezeichnern finden Sie im Hilfethema zur PID-Eigenschaft.
Kennwort	Optional. Eine Variable von Typ Variant (Untertyp vom Datentyp String), die das Kennwort für das neue User-Objekt enthält. Das Kennwort kann bis zu 14 Zeichen lang sein und alle Zeichen außer dem ASCII-Zeichen 0 (Null) enthalten. Weitere Informationen zu gültigen Kennwörtern finden Sie im Hilfethema zur Password-Eigenschaft.
Bemerkungen

Wenn Sie einen oder mehrere optionale Teile beim Aufrufen der CreateUser-Methode nicht angeben, können Sie eine geeignete Zuweisung verwenden, um die entsprechende Eigenschaft zu setzen oder zurückzusetzen, bevor Sie das neue Objekt an eine Auflistung anfügen. Nachdem Sie das neue Objekt angefügt haben, können Sie einen Teil der zugehörigen Eigenschafteneinstellungen ändern. Weitere Informationen finden Sie in den Hilfethemen zu den Eigenschaften PID, Name und Password.

Falls sich Name auf ein Objekt bezieht, das bereits ein Element der Auflistung ist, wird ein Laufzeitfehler ausgelöst, wenn Sie die Append-Methode aufrufen.

Sie entfernen ein User-Objekt aus einer Users-Auflistung, indem Sie die Delete-Methode auf der Auflistung ausführen.


CreateWorkspace-Methode

Erstellt ein neues Workspace-Objekt.

Syntax

Set Arbeitsbereich = CreateWorkspace(Name, Benutzer, Kennwort, Typ)

Die Syntax der CreateWorkspace-Methode besteht aus folgenden Teilen:

Teil	Beschreibung
Arbeitsbereich	Eine Objektvariable, die das zu erstellende Workspace-Objekt darstellt.
Name	Eine Variable vom Typ String, die das neue Workspace-Objekt eindeutig bezeichnet. Weitere Informationen zu gültigen Namen für Workspace-Objekte finden Sie im Hilfethema zur Name-Eigenschaft.
Benutzer	Eine Variable vom Typ String, die den Besitzer des neuen Workspace-Objekts angibt. Weitere Informationen finden Sie im Hilfethema zur UserName-Eigenschaft.
Kennwort	Eine Variable vom Typ String, die das Kennwort für das neue Workspace-Objekt enthält. Das Kennwort kann bis zu 14 Zeichen lang sein und alle Zeichen außer dem ASCII-Zeichen 0 (Null) enthalten. Weitere Informationen zu gültigen Kennwörtern finden Sie im Hilfethema zur Password-Eigenschaft.
Typ	Optional. Eine Konstante, die den Typ des Arbeitsbereiches, wie unter Einstellungen beschrieben, angibt.
Einstellungen

Für den Typ können Sie folgende Konstanten verwenden:

Konstante	Beschreibung
dbUseJet	Erstellt einen Microsoft Jet-Arbeitsbereich.
dbUseODBC	Erstellt einen ODBCDirect-Arbeitsbereich.
Bemerkungen

Nachdem Sie ein neues Workspace-Objekt mit der CreateWorkspace-Methode erstellt haben, wird eine Workspace-Sitzung gestartet und Sie können in Ihrer Anwendung auf das Workspace-Objekt verweisen.

Workspace-Objekte sind nicht beständig und können nicht gespeichert werden. Nachdem Sie ein Workspace-Objekt erstellt haben, kann keine der zugehörigen Eigenschafteneinstellungen geändert werden außer der Name-Eigenschaft. Diese können Sie ändern, bevor das Workspace-Objekt an die Workspaces-Auflistung angefügt wird.

Sie müssen das neue Workspace-Objekt nicht an eine Auflistung anfügen, bevor Sie es verwenden können. Sie fügen ein neu erstelltes Workspace-Objekt nur an, wenn Sie über die Workspaces-Auflistung darauf verweisen müssen.

Die Option Typ gibt an, ob das neue Workspace-Objekt ein Microsoft Jet- oder ODBCDirect-Arbeitsbereich ist. Wenn Sie Typ auf dbUseODBC setzen und noch keine Microsoft Jet-Arbeitsbereich erstellt haben, wird das Microsoft Jet-Datenbankmodul nicht in den Arbeitsspeicher geladen und alle Aktivitäten werden von der ODBC-Datenquelle als ein Connection-Objekt erkannt. Wenn Sie für Typ nichts angeben, bestimmt die DefaultType-Eigenschaft des DBEngine-Objekts mit welchem Datenquellentyp das Workspace-Objekt verbunden wird. Sie können sowohl Microsoft Jet- als auch ODBCDirect-Arbeitsbereiche zur gleichen Zeit geöffnet haben.

Sie entfernen ein Workspace-Objekt aus der Workspaces-Auflistung, indem Sie alle offenen Datenbanken und Verbindungen schließen und dann die Close-Methode auf dem Workspace-Objekt ausführen.


Delete-Methode

•	Recordset-Objekte - löscht den aktuellen Datensatz in einem aktualisierbaren Recordset-Objekt. Bei ODBCDirect-Arbeitsbereichen bestimmt der Typ des Treibers, ob die Recordset-Objekte aktualisierbar sind und somit die Delete-Methode unterstützen.

•	Auflistungen — löscht ein beständiges Objekt aus einer Auflistung.

Syntax

Datensatzgruppe.Delete

Auflistung.Delete Objektname

Die Syntax der Delete-Methode besteht aus folgenden Teilen:

Teil	Beschreibung
Datensatzgruppe	Eine Objektvariable, die ein aktualisierbares Recordset-Objekt darstellt, das den zu löschenden Datensatz enthält.
Auflistung	Eine Objektvariable, die eine Auflistung darstellt, in der Sie Objektname löschen möchten.
Objektname	Eine Variable vom Typ String, die die Einstellung der Name-Eigenschaft eines Objekts in Auflistung darstellt.
Bemerkungen

Mit der Delete-Methode können Sie einen aktuellen Datensatz aus einem Recordset-Objekt oder ein Element aus einer Auflistung, wie z.B. eine gespeicherte Tabelle aus einer Datenbank, ein gespeichertes Feld aus einer Tabelle oder einen gespeicherten Index aus einer Tabelle löschen.

Datensatzgruppe

Ein Recordset-Objekt muß einen aktuellen Datensatz enthalten, bevor Sie die Delete-Methode verwenden, andernfalls wird ein Laufzeitfehler ausgelöst.

Wenn Sie die Delete-Methode auf ein aktualisierbares Recordset-Objekt anwenden, wird der aktuelle Datensatz entfernt und der Zugriff gesperrt. Sie können den gelöschten Datensatz zwar nicht mehr bearbeiten oder verwenden, aber er bleibt trotzdem der aktuelle Datensatz. Sobald Sie allerdings zu einem anderen Datensatz wechseln, können Sie den gelöschten Datensatz nicht mehr zum aktuellen Datensatz machen. Nachfolgende Verweise auf einen gelöschten Datensatz in einem Recordset-Objekt sind unzulässig und verursachen einen Fehler.

Sie können das Löschen eines Datensatzes rückgängig machen, wenn Sie Transaktionen und die Rollback-Methode verwenden.

Wenn die Basistabelle die Primärtabelle in einer Beziehung mit Löschweitergabe ist, kann das Löschen des aktuellen Datensatzes auch zum Löschen eines oder mehrerer Datensätze in einer Fremdtabelle führen.

Anmerkung   Wenn Sie einen Datensatz hinzufügen, bearbeiten oder löschen möchten, muß ein eindeutiger Index im Datensatz in der zugrundeliegenden Datenquelle vorhanden sein. Ist er nicht vorhanden, wird beim Ausführen der AddNew-, Delete- oder Edit-Methode auf einem  Microsoft Jet-Arbeitsbereich ein Fehler mit der Meldung "Zugriff verweigert" ausgelöst. Auf einem ODBCDirect Arbeitsbereich wird beim Ausführen der Update-Methode ein Fehler mit der Meldung "Ungültiges Argument" ausgelöst.

Auflistungen

Mit der Delete-Methode können Sie ein beständiges Objekt löschen. Wenn die Auflistung allerdings eine Databases-, Recordsets- oder Workspaces-Auflistung ist (die lediglich im Hauptspeicher gespeichert wird), können Sie ein geöffnetes oder aktives Objekt nur entfernen, indem Sie dieses Objekt mit der Close-Methode schließen.

Das Löschen eines gespeicherten Objekts erfolgt unmittelbar, aber Sie sollten die Refresh-Methode für alle anderen Auflistungen verwenden, die von Änderungen an der Datenbankstruktur betroffen sein könnten.

Wenn Sie ein TableDef-Objekt aus der TableDefs-Auflistung löschen, löschen Sie auch die Tabellendefinition und die Daten in der Tabelle.

Die folgende Tabelle beschreibt einige Einschränkungen bei der Verwendung der Delete-Methode. Das Objekt in der ersten Spalte enthält die Auflistung aus der zweiten Spalte. Die dritte Spalte gibt an, wann Sie ein Objekt aus dieser Spalte löschen können. (Sie können z.B. nie ein Container-Objekt aus einer Containers-Auflistung eines Database-Objekts löschen.)

Objekt	Auflistung	Verwendung der Delete-Methode
DBEngine	Workspaces	Nein. Die Objekte werden durch Schließen gelöscht.
DBEngine	Errors	Nein
Workspace	Connections	Nein. Die Objekte werden durch Schließen gelöscht.
Workspace	Databases	Nein. Die Objekte werden durch Schließen gelöscht.
Workspace	Groups	Ja
Workspace	Users	Ja
Connection	QueryDefs	Nein
Connection	Recordsets	Nein. Die Objekte werden durch Schließen gelöscht.
Database	Containers	Nein
Database	QueryDefs	Ja
Database	Recordsets	Nein. Die Objekte werden durch Schließen gelöscht.
Database	Relations	Ja
Database	TableDefs	Ja
Group	Users	Ja
User	Groups	Ja
Container	Documents	Nein
QueryDef	Fields	Nein
QueryDef	Parameters	Nein
Recordset	Fields	Nein
Relation	Fields	Nur wenn das Relation-Objekt neu und nicht an die Datenbank angefügt ist.
TableDef	Fields	Nur wenn das TableDef-Objekt neu und nicht an die Datenbank angefügt ist oder die Updatable-Eigenschaft des TableDef-Objekts den Wert True hat.
TableDef	Indexes	Nur wenn das TableDef-Objekt neu und nicht an die Datenbank angefügt ist oder die Updatable-Eigenschaft des TableDef-Objekts den Wert True hat.
Index	Fields	Nur wenn das Index-Objekt neu und nicht an die Datenbank angefügt ist.
Database, Field, Index, QueryDef, TableDef	Properties	Nur wenn die Eigenschaft benutzerdefiniert ist.
DBEngine, Parameter, Recordset, Workspace	Properties	Nein


Edit-Methode

Kopiert den aktuellen Datensatz aus einem aktualisierbaren Recordset-Objekt in den Kopierpuffer, damit er anschließend bearbeitet werden kann

Syntax

Datensatzgruppe.Edit

Der Platzhalter Datensatzgruppe stellt den Namen eines geöffneten und aktualisierbaren Recordset-Objekts dar, das den zu bearbeitenden Datensatz enthält.

Bemerkungen

Nachdem Sie die Edit-Methode verwendet haben, werden Änderungen, die an den Feldern des aktuellen Datensatzes vorgenommen werden, in den Kopierpuffer kopiert. Nachdem Sie die gewünschten Änderungen am Datensatz vorgenommen haben, speichern Sie die Änderungen mit der Update-Methode

Der aktuelle Datensatz bleibt nach der Verwendung der Edit-Methode der aktuelle.

Vorsicht   Wenn Sie einen Datensatz bearbeiten und dann eine Operation durchführen, die einen anderen Datensatz aktiviert, ohne vorher die Update-Methode zu verwenden, gehen Ihre Änderungen ohne Warnung verloren. Wenn Sie die Datensatzgruppe schließen oder die Prozedur beenden, die das Recordset oder das übergeordnete Database- oder Connection-Objekt deklariert, gehen die Änderungen am Datensatz ebenfalls ohne Warnung verloren.

Die Verwendung der Edit-Methode verursacht einen Fehler wenn:

•	Es keinen aktuellen Datensatz gibt.

•	Das Connection-, Database- oder Recordset-Objekt schreibgeschützt ist.

•	Im Datensatz keine Felder aktualisiert werden können.

•	Das Database- oder Recordset-Objekt für den exklusiven Zugriff durch einen anderen Benutzer geöffnet wurde (Microsoft Jet-Arbeitsbereich).

•	Ein anderer Benutzer die Seite mit Ihrem Datensatz gesperrt hat (Microsoft Jet-Arbeitsbereich).

Für einen Microsoft Jet-Arbeitsbereich gilt, daß wenn die Einstellung der LockEdits-Eigenschaft des Recordset-Objekts den Wert True (vollständig gesperrt) in einer Mehrbenutzerumgebung hat, bleibt der Datensatz während der Verwendung von Edit gesperrt, bis die Aktualisierung abgeschlossen ist. Wenn die LockEdits-Eigenschaft den Wert False (eingeschränkt gesperrt) hat, wird der Datensatz gesperrt und mit der unbearbeiteten Version des Datensatzes verglichen, unmittelbar bevor er in der Datenbank aktualisiert wird. Wenn sich der Datensatz seit dem Aufrufen der Edit-Methode verändert hat, schlägt die Update-Operation fehl, wenn Sie die OpenRecordset-Methode verwenden, ohne die dbSeeChanges anzugeben, und es wird ein Laufzeitfehler ausgelöst. Mit Microsoft Jet verbundene ODBC- und installierbare ISAM-Datenbanken verwenden standardmäßig eingeschränktes Sperren.

Nachdem Sie in einem ODBCDirect-Arbeitsbereich das Feld mit dem Primärschlüssel eines Datensatzes bearbeitet haben (und die Update-Methode zur Aktualisierung verwenden), können Sie keine weiteren Felder in diesem Datensatz bearbeiten, bis Sie das Recordset-Objekt geschlossen haben und es erneut mit einer nachfolgenden Abfrage abgerufen haben.

Anmerkung   Wenn Sie einen Datensatz hinzufügen, bearbeiten oder löschen möchten, muß ein eindeutiger Index im Datensatz in der zugrundeliegenden Datenquelle vorhanden sein. Ist er nicht vorhanden, wird beim Ausführen der AddNew-, Delete- oder Edit-Methode auf einem Microsoft Jet-Arbeitsbereich ein Fehler mit der Meldung "Zugriff verweigert“ ausgelöst. Auf einem ODBCDirect-Arbeitsbereich wird beim Ausführen der Update-Methode ein Fehler mit der Meldung "Ungültiges Argument" ausgelöst.


Execute-Methode

Führt eine Aktionsabfrage oder eine SQL-Anweisung auf einem angegebenen Connection- oder Database-Objekt aus

Syntax

Objekt.Execute Quelle, Optionen

Querydef.Execute Optionen

Die Syntax der Execute-Methode besteht aus folgenden Teilen:

Teil	Beschreibung
Objekt	Eine Connection- oder Database-Objektvariable, auf der die Abfrage ausgeführt wird.
Querydef	Eine Objektvariable, die das QueryDef-Objekt darstellt, dessen Einstellungen der SQL-Eigenschaft die auszuführende SQL-Anweisung angeben.
Quelle	Eine Variable vom Typ String, die eine SQL-Anweisung enthält oder der Wert einer Name-Eigenschaft eines QueryDef-Objekts.
Optionen	Optional. Eine Konstante oder Kombination aus Konstanten, die die Merkmale der Datenintegrität der Abfrage bestimmen, wie unter Einstellungen beschrieben.
Einstellungen

Für den Teil Optionen können Sie die folgenden Konstanten verwenden:

Konstante	Beschreibung
dbDenyWrite	Unterbindet Schreibzugriff durch andere Benutzer (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbInconsistent	(Voreinstellung) Führt inkonsistente Aktualisierungen durch (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbConsistent	Führt konsistente Aktualisierungen durch (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbSQLPassThrough	Führt eine SQL Pass Through-Abfrage durch. Diese Einstellung reicht die SQL-Anweisung zur Verarbeitung an eine ODBC-Datenbank weiter (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbFailOnError	Setzt Aktualisierungen zurück, wenn ein Fehler auftritt (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbSeeChanges	Löst einen Laufzeitfehler aus, wenn ein anderer Benutzer Daten ändert, die von Ihnen bearbeitet werden. (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbRunAsync	Führt die Abfrage asynchron aus (gilt bei einer ODBCDirect-Datenbank nur für Connection- und QueryDef-Objekte).
dbExecDirect	Führt die Anweisung aus, ohne vorher die ODBC API-Funktion SQLPrepare aufzurufen (gilt bei einer ODBCDirect-Datenbank nur für Connection- und QueryDef-Objekte).
Anmerkung   Die Konstanten dbConsistent und dbInconsistent schließen einander aus. Sie können entweder die eine oder die andere, nicht aber beide zusammen in einer gegebenen Instanz eines OpenRecordset-Objekts verwenden. Die gleichzeitige Verwendung von dbConsistent und dbInconsistent löst einen Fehler aus.

Bemerkungen

Die Execute-Methode ist nur für Aktionsabfragen zulässig. Wenn Sie Execute für einen anderen Abfragetyp verwenden, tritt ein Fehler auf. Da eine Aktionsabfrage keine Datensätze zurückgibt, gibt Execute kein Recordset-Objekt zurück. (Die Ausführung einer SQL Pass Through-Abfrage in einem ODBCDirect-Arbeitsbereich löst keinen Fehler aus, wenn kein Recordset zurückgegeben wird.)

Verwenden Sie die RecordsAffected-Eigenschaft des Connection-, Database- oder QueryDef-Objekts, um die Anzahl der Datensätze zu bestimmen, die vom letzten Aufrufen der Execute-Methode betroffen sind. RecordsAffected enthält z.B. die Anzahl der gelöschten, aktualisierten oder eingefügten Datensätze, wenn eine Aktionsabfrage durchgeführt wird. Wenn Sie die Execute-Methode verwenden, um eine Abfrage durchzuführen, wird die RecordsAffected-Eigenschaft des QueryDef-Objekts auf die Anzahl der betroffenen Datensätze gesetzt.

Wenn Sie in einem Microsoft Jet-Arbeitsbereich eine syntaktisch korrekte SQL-Anweisung vorgeben und die entsprechenden Berechtigungen haben, wird die Execute-Methode nicht fehlschlagen —selbst wenn keine einzige Zeile geändert oder gelöscht werden kann. Verwenden Sie deshalb immer die Option dbFailOnError, wenn Sie die Execute-Methode verwenden, um eine Aktualisierungs- oder Löschabfrage durchzuführen. Diese Option löst einen auffangbaren Fehler aus und setzt alle erfolgreich vorgenommenen Änderungen zurück, wenn mindestens einer der betroffenen Datensätze gesperrt ist und nicht aktualisiert oder gelöscht werden kann.

Das beste Leistungsverhalten in einem Microsoft Jet-Arbeitsbereich, insbesondere in einer Mehrbenutzerumgebung, erzielen Sie, indem Sie die Execute-Methode in eine Transaktion einbauen. Verwenden Sie die BeginTrans-Methode auf dem aktuellen Workspace-Objekt, rufen Sie dann die Execute-Methode auf, und beenden Sie die Transaktion mit der CommitTrans-Methode auf dem Workspace-Objekt. Dadurch werden Änderungen auf der Festplatte gespeichert und alle Sperrungen aufgehoben, die ggf. gesetzt wurden, während die Abfrage ausgeführt wurde.

Wenn Sie in einem ODBCDirect-Arbeitsbereich die optionale Konstante dbRunAsync einschließen, wird die Abfrage asynchron durchgeführt. Sie stellen fest, ob eine asynchrone Abfrage noch läuft, indem Sie den Wert der StillExecuting-Eigenschaft des Objekts, von dem die Execute-Methode aufgerufen wurde, überprüfen. Der asynchrone Aufruf der Execute-Methode wird mit der Cancel-Methode beendet.


FillCache-Methode

Füllt den gesamten Cache (Puffer) oder einen Teil eines lokalen Cache für ein Recordset-Objekt auf, das Daten aus einer mit Microsoft Jet verbundenen ODBC-Datenquelle enthält (gilt nur für mit Microsoft Jet-verbundene ODBC-Datenbanken).

Syntax

Datensatzgruppe.FillCache Zeilen, Anfangslesezeichen

Die Syntax der FillCache-Methode besteht aus folgenden Teilen:

Teil	Beschreibung
Datensatzgruppe	Eine Objektvariable, die das aus der ODBC-Datenquelle erstellte Recordset-Objekt darstellt, Ein TableDef-Objekt stellt z.B. eine verknüpfte Tabelle oder ein QueryDef-Objekt, das von einem TableDef-Objekt abgeleitet ist, dar.
Zeilen	Optional. Eine Variable vom Typ Variant (Ein Untertyp vom Datentyp Integer), die die Anzahl im Cache zu speichernder Zeilen angibt. Wenn Sie dieses Argument nicht angeben, wird der Wert durch die Einstellung der CacheSize-Eigenschaft bestimmt.
Anfangslesezeichen	Optional. Eine Variable vom Typ Variant (Ein Untertyp vom Datentyp String) die ein Lesezeichen angibt. Das Auffüllen des Cache beginnt bei dem Datensatz, der durch dieses Lesezeichen angegeben ist. Wenn Sie dieses Argument nicht angeben, beginnt das Auffüllen des Cache mit dem Datensatz, der durch die CacheStart-Eigenschaft angegeben wird.
Bemerkungen

Durch das Puffern in einem Cache verbessert sich das Leistungsverhalten einer Anwendung, die Daten von einem Netzwerk-Server abruft. Ein Cache ist ein Bereich im lokalen Hauptspeicher, der die Daten aufnimmt, die zuletzt vom Server abgerufen wurden, in der Annahme, daß diese Daten wahrscheinlich noch einmal angefordert werden, solange die Anwendung ausgeführt wird. Wenn Daten angefordert werden, überprüft das Microsoft Jet-Datenbankmodul zuerst, ob die Daten im Cache bereits vorhanden sind, statt die Daten vom Server abzurufen, was mehr Zeit kostet. Daten, die nicht aus einer ODBC-Datenquelle stammen, werden nicht im Cache gespeichert.

Sie müssen nicht darauf warten, daß der Cache beim Abrufen von Datensätzen gefüllt wird, sondern Sie können den Cache jederzeit explizit mit der FillCache-Methode auffüllen. Damit können Sie den Cache schneller auffüllen, da FillCache nicht nur jeweils einen Datensatz, sondern mehrere Datensätze auf einmal abruft. Wenn z.B. jeweils eine Seite mit Datensätzen angezeigt wird, kann Ihre Anwendung mit FillCache bereits die Datensätze für die nächste Seite abrufen.

Jede mit Microsoft Jet verbundene ODBC-Datenquelle, auf die mit Recordset-Objekten zugegriffen wird, kann einen lokalen Cache besitzen. Sie legen den Cache an, indem Sie ein Recordset-Objekt von der Remote-Datenquelle öffnen und dann die CacheSize- und CacheStart-Eigenschaften des Recordset-Objekts setzen.

Wenn durch Zeilen und Start ein Bereich festgelegt wird, der ganz oder teilweise außerhalb des durch die Eigenschaften CacheSize und CacheStart angegebenen Bereichs liegt, wird der außerhalb des Bereichs liegende Teil von Datensatzgruppe ignoriert und nicht in den Cache geladen.

Wenn FillCache mehr Datensätze anfordert, als noch in der Remote-Datenquelle vorhanden sind, werden nur die verbleibenden Datensätze abgerufen, und es tritt kein Fehler auf.

Anmerkungen

•	Datensätze, die aus dem Cache abgerufen werden, enthalten keine Änderungen, die durch andere Benutzer seit dem Puffern an der Datenquelle vorgenommen wurden.

•	FillCache ruft nur Datensätze ab, die noch nicht im Cache gepuffert sind. Sie können eine Aktualisierung aller gepufferten Daten erzwingen, indem Sie die CacheSize-Eigenschaft des Recordset-Objekts auf 0 und dann auf die Größe des Puffers setzen, den Sie ursprünglich angefordert hatten, und anschließend FillCache aufrufen.


FindFirst-, FindLast-, FindNext-, FindPrevious-Methoden

Sucht den ersten, letzten, nächsten oder vorhergehenden Datensatz in einem Recordset-Objekt vom Typ Dynaset oder Snapshot, der die angegebenen Kriterien erfüllt. Dieser Datensatz wird zum aktuellen Datensatz (gilt nur für Microsoft Jet-Arbeitsbereiche).

Syntax

Datensatzgruppe.{FindFirst | FindLast | FindNext | FindPrevious} Kriterien

Die Syntax der Find-Methoden besteht aus folgenden Teilen:.

Teil	Beschreibung
Datensatzgruppe	Eine Objektvariable, die ein bestehendes Recordset-Objekt vom Typ Dynaset oder Snapshot darstellt.
Kriterien	Eine Variable vom Typ String, die zum Auffinden des Datensatzes verwendet wird. Sie entspricht dem WHERE-Abschnitt in einer SQL-Anweisung ohne das Wort WHERE.
Bemerkungen

Wenn alle Datensätze in die Suche eingeschlossen werden sollen — und nicht nur die, die eine bestimmte Bedingung erfüllen — können Sie sich mit den Move-Methoden von Datensatz zu Datensatz bewegen. Sie können einen Datensatz in einem Recordset-Objekt vom Typ Tabelle finden, indem Sie die Seek-Methode verwenden.

Wenn ein Datensatz, der die Kriterien erfüllt, nicht gefunden wird, ist der aktuelle Datensatzzeiger nicht bekannt, und die NoMatch-Eigenschaft wird auf True gesetzt. Wenn Datensatzgruppe mehrere Datensätze enthält, die die Kriterien erfüllen, aktiviert FindFirst den ersten dieser Datensätze, FindNext den nächsten usw.

Alle Find-Methoden beginnen mit der Suche an der Stelle und in der Richtung, die in der folgenden Tabelle angegeben ist:

Find-Methode	Suchanfang	Suchrichtung
FindFirst	Anfang der Datensatzgruppe	Ende der Datensatzgruppe
FindLast	Ende der Datensatzgruppe	Anfang der Datensatzgruppe
FindNext	Aktueller Datensatz	Ende der Datensatzgruppe
FindPrevious	Aktueller Datensatz	Anfang der Datensatzgruppe
Wenn Sie die FindLast-Methode verwenden, füllt das Microsoft Jet-Datenbankmodul das Recordset-Objekt vollständig auf, bevor mit der Suche begonnen wird (sofern dies nicht bereits geschehen ist).

Die Verwendung einer der Find-Methoden unterscheidet sich von der Verwendung einer Move-Methode, bei denen lediglich der erste, letzte, nächste oder vorherige Datensatz zum aktuellen Datensatz wird, ohne daß eine Bedingung angegeben wird. Im Anschluß an eine Find-Operation können Sie eine Move-Operation durchführen.

Überprüfen Sie immer den Wert der NoMatch-Eigenschaft, um herauszufinden, ob die Find-Operation erfolgreich war. Wenn die Suche erfolgreich war, wird NoMatch auf False gesetzt. Andernfalls wird NoMatch auf True gesetzt und der aktuelle Datensatz ist nicht definiert. In diesem Fall müssen Sie den aktuellen Datensatzzeiger zurück auf einen gültigen Datensatz setzen.

Die Verwendung der Find-Methode bei Datensatzgruppen, auf die über eine mit Microsoft Jet verbundene ODBC-Datenquelle kann ineffizient sein. Ggf. ist das Umschreiben der Kriterien zum Auffinden eines bestimmten Datensatzes schneller, insbesondere, wenn Sie mit großen Datensatzgruppen arbeiten.

In einem ODBCDirect-Arbeitsbereich stehen die Find- und Seek-Methoden für ein jeden Typ von Recordset-Objekt nicht zur Verfügung, da die Durchführung einer Find- oder Seek-Operation über eine ODBC-Verbindung in einem Netzwerk nicht sehr effizient ist. Sie sollten stattdessen die Abfrage mit einem entsprechenden WHERE-Abschnitt formulieren (d.h., das Argument Quelle mit der OpenRecordset-Methode verwenden), die die zurückgegebenen Datensätze auf solche beschränkt, die den Kriterien entsprechen, die Sie sonst bei einer Find-oder Seek-Methode verwenden würden.

Wenn Sie mit Microsoft Jet verknüpften ODBC-Datenbanken und großen Recordset-Objekten vom Typ Dynaset arbeiten, werden Sie feststellen, daß die Verwendung der Find-Methoden oder der Sort- oder Filter-Eigenschaften langsam ist. Sie können die Ausführung beschleunigen, indem Sie SQL-Abfragen mit angepaßten ORDER BY- und WHERE-Abschnitten, Parameterabfragen oder QueryDef-Objekten verwenden, die speziell indizierte Datensätze abrufen.

Sie sollten das amerikanische Datumsformat (Monat/Tag/Jahr) verwenden, wenn Sie nach Feldern mit Datumsangaben suchen, auch wenn Sie nicht die amerikanische Version des Microsoft Jet-Datenbankmoduls verwenden. Andernfalls werden die Daten möglicherweise nicht gefunden. Mit der Visual Basic-Funktion Format können Sie das Datum entsprechend umwandeln. Beispiel:

rstEmployees.FindFirst "HireDate > #" _

& Format(mydate, 'm-d-yy' ) & "#"

Wenn Kriterien aus einer Zeichenfolge verknüpft mit einem Wert ungleich einer Ganzzahl besteht und die Systemparameter einen nichtamerikanisches Dezimalzeichen, wie beispielsweise ein Komma angeben(z.B strSQL = "PRICE > " & lngPrice, und lngPrice = 125,50), so tritt ein Fehler auf, wenn Sie die Methode anwenden. Dies geschieht, da während der Verkettung die Zahl in eine Zeichenfolge umgewandelt wird und das für Ihr System voreingestellte Dezimalzeichen verwendet wird, wohingegen Microsoft Jet SQL nur amerikanische Dezimalzeichen akzeptiert.

Anmerkungen

•	Für eine bessere Leistungsfähigkeit sollten die Kriterien entweder in der Form "Feld = Wert" verwendet werden, wobei Feld ein indiziertes Feld in der zugrunde liegenden Basistabelle ist, oder in der Form "Feld LIKE Präfix", wobei Feld ein indiziertes Feld in der zugrundeliegenden Basistabelle ist und Präfix ein Präfix einer Suchzeichenfolge ist (z.B. "ART*").

•	Für die gleich Suche gilt allgemein, daß die Seek-Methode schneller ist als die Find-Methoden. Diese setzt voraus, daß allein die Recordset-Objekte vom Typ Tabelle Ihren Bedürfnissen entsprechen.


GetChunk-Methode

Gibt den Inhalt oder einen Teil des Inhalts eines Field-Objekts vom Typ Memo- oder Long Binary in der Fields-Auflistung eines Recordset-Objekts zurück.

Syntax

Set Variable = Datensatzgruppe ! Feld.GetChunk (Offset, Anzbytes)

Die Syntax der GetChunk-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Variable	Ein Variant (vom Typ String), der Daten aus dem Field-Objekt erhält, das durch Feld bezeichnet wird.
Datensatzgruppe	Eine Objektvariable, die das Recordset-Objekt darstellt, das die Fields-Auflistung enthält.
Feld	Eine Objektvariable, die das Field-Objekt darstellt, dessen Type-Eigenschaft den Wert dbMemo (Memo) oder dbLongBinary (Long Binary) hat.
Offset	Ein Wert Long, der gleich ist mit der Anzahl der Bytes, die übersprungen werden sollen, bevor kopiert wird.
AnzBytes	Ein Wert Long, der gleich ist mir der Anzahl der Bytes, die zurückgegeben werden sollen.
Bemerkungen

Die von der GetChunk-Methode zurückgegeben Bytes, die einer Variablen zugewiesen wurden. Verwenden Sie GetChunk, um jeweils einen Teil aller Daten zurückzugeben. Mit der AppendChunk-Methode können Sie die Teile wieder zusammensetzen.

Wenn Offset den Wert 0 hat, kopiert GetChunk ab dem ersten Byte im Feld.

Wenn AnzBytes größer als die Anzahl der Bytes in einem Feld ist, gibt GetChunk die tatsächliche Anzahl der Bytes in dem Feld zurück.

Achtung   Verwenden Sie ein Feld vom Typ Memo für Textdaten, und speichern Sie binäre Daten nur in Feldern vom Typ Long Binary. Ansonsten können Sie unerwünschte Ergebnisse erhalten.


GetRows-Methode

Ruft mehrere Zeilen eines Recordset-Objekts auf.

Syntax

Set varArray = Datensatzgruppe.GetRows (AnzZeilen)

Die Syntax der GetRows-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
varArray	Ein Variant, der die zurückgegebenen Daten speichert.
Datensatzgruppe	Eine Objektvariable, die das Recordset-Objekt darstellt.
AnzZeilen	Ein Variant, der genauso groß wie die Anzahl der abzurufenden Zeilen ist.
Bemerkungen

Verwenden Sie die GetRows-Methode, um Datensätze aus einem Recordset-Objekt zu kopieren. GetRows gibt ein zweidimensionales Feld zurück. Der erste Index identifiziert das Feld und der zweite die Zeilennummer. Beispielsweise stellt intField das Feld dar und intRecord bezeichnet die Zeilennummer.

avarRecords(intField, intRecord)

Sie erhalten den Wert des ersten Feldes in der zweiten zurückgegebenen Zeile, wenn Sie folgenden Code verwenden.

field1 = avarRecords(0,1)

Sie erhalten den Wert des zweiten Feldes in der ersten Zeile, wenn Sie folgenden Code verwenden.

field2 = avarRecords(1,0)

Die Variable avarRecords wird automatisch ein zweidimensionales Feld, wenn GetRows Daten zurückgibt.

Wenn Sie mehr Zeilen anfordern als verfügbar sind, dann gibt GetRows nur die Anzahl der verfügbaren Zeilen zurück. Sie können mit der Ubound-Funktion aus Visual Basic für Applikationen festlegen, wie viele Zeilen GetRows letztendlich abruft, da die Größe des Feldes durch die Anzahl der zurückgegebenen Zeilen festgelegt wird. Wenn z.B. die Ergebnisse in einen Variant namens varA zurückgegeben werden, kann der folgende Code verwendet werden, um festzulegen, wie viele Zeilen zurückgegeben werden sollen.

numReturned = UBound(varA,2) + 1

Verwenden Sie "+ 1", da sich die erste zurückgegebene Zeile im Element 0 des Feldes befindet. Die Anzahl der Zeilen, die Sie abrufen können, wird durch den zur Verfügung stehenden Speicher beschränkt. Verwenden Sie GetRows nicht dazu, eine ganze Tabelle in ein Datenfeld zu speichern, wenn es sich um eine große Tabelle handelt.

Da GetRows alle Felder, einschließlich der Felder vom Typ Memo und Long Binary, des Recordset-Objekts in einem Datenfeld zurückgibt, verwenden Sie ggf. eine Abfrage, die die zurückgegebenen Felder einschränkt.

Nach dem Aufrufen von GetRows wird der aktuelle Datensatz an der nächsten ungelesenen Zeile positioniert. GetRows hat also dieselbe Wirkung auf die aktuellen Datensätze wie Move AnzZeilen.

Wenn Sie versuchen, alle Zeilen mit mehreren GetRows-Aufrufen abzurufen, verwenden Sie die EOF-Eigenschaft, um sicherzustellen, daß das Ende des Recordset-Objekts erreicht ist. GetRows gibt weniger Daten als angefordert zurück, wenn das Ende des Recordset-Objekts erreicht ist oder eine Zeile im angeforderten Bereich nicht abgerufen werden kann. Wenn Sie z.B. versuchen, 10 Datensätze abzurufen, aber den fünften Datensatz nicht abrufen können, gibt GetRows vier Datensätze zurück und macht den fünften Datensatz zum aktuellen Datensatz. Es wird kein Laufzeitfehler erzeugt. Dies kann jedoch auftreten, wenn ein anderer Benutzer einen Datensatz in einem Recordset-Objekt vom Typ Dynaset löscht. Informationen dazu, wie Sie dann vorgehen müssen, finden Sie in dem Beispiel.


Idle-Methode

Unterbricht die Datenverarbeitung und ermöglicht dem Microsoft Jet-Datenbankmodul, nicht abgeschlossene Operationen, wie z.B. Speicheroptimierung oder Zeitüberschreitungen beim Zugriff auf Seiten abzuschließen (gilt nur für Microsoft Jet-Arbeitsbereiche).

Syntax

DBEngine.Idle [dbRefreshCache]

Bemerkungen

Mit der Idle-Methode kann das Microsoft Jet-Datenbankmodul Hintergrundoperationen durchführen, die aufgrund umfangreicher Datenverarbeitung längere Zeit nicht durchgeführt wurden. Solche Situationen treten häufig in Mehrbenutzer- und Multitasking-Umgebungen auf, in denen nicht genügend Zeit zum Durchführen von Hintergrundoperationen zur Verfügung steht, um alle Datensätze in einem Recordset-Objekt auf dem aktuellen Stand zu halten.

In der Regel werden Lesesperren nur entfernt und Daten in lokalen Recordset-Objekten vom Typ Dynaset nur aktualisiert, wenn keine anderen Operationen (auch keine Mausbewegungen) durchgeführt werden. Wenn Sie regelmäßig die Idle-Methode aufrufen, kann Microsoft Jet Hintergrundprozesse durchführen, indem Sie nicht benötigte Lesesperren aufheben.

Durch Angeben des optionalen Arguments dbRefreshCache werden alle noch nicht abgeschlossenen Schreibvorgänge in .mdb-Dateien erzwungen, und der Speicher wird mit den aktuellen Daten aus der .mdb-Datei aktualisiert.

Sie benötigen diese Methode in einer Einzelbenutzerumgebung nicht, außer wenn mehrere Instanzen einer Anwendung ausgeführt werden. Die Idle-Methode kann das Leistungsverhalten in einer Mehrbenutzerumgebung verbessern, da sie das Datenbankmodul zwingt, Daten auf die Festplatte zu schreiben und so gesperrte Speicherbereiche freizugeben.

Anmerkung   Sie können Lesesperren auch freigeben, indem Sie Operationen in eine Transaktion einschließen.


MakeReplica-Methode

Erstellt ein neues Replikat aus einem anderen Datenbankreplikat (gilt nur für Microsoft Jet-Arbeitsbereich).

Syntax

Datenbank.MakeReplica Replikat, Beschreibung, Optionen

Die Syntax der MakeReplica-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Datenbank	Eine Objektvariable, die ein vorhandenes Database-Objekt darstellt, das ein Replikat ist.
Replikat	Ein String, der den Pfad und Dateinamen des neuen Replikats angibt. Wenn Replikat ein vorhandener Dateiname ist, tritt ein Fehler auf.
Beschreibung	Ein String, der das zu erstellende Replikat beschreibt.
Optionen	Optional. Eine Konstante oder eine Kombination aus Konstanten, die die Eigenschaften des zu erstellenden Replikats angeben, wie unter Einstellungen beschrieben.
Einstellungen

Sie können eine oder mehrere der folgenden Konstanten im Argument Optionen verwenden.

Konstante	Beschreibung
dbRepMakePartial	Erstellt ein Teilreplikat.
dbRepMakeReadOnly	Verhindert, daß Benutzer die replizierbaren Objekte des neuen Replikats verändern; wenn aber neue Replikate mit anderen Elementen der Replikatgruppe synchronisiert werden, werden Änderungen an Daten und Entwurf an das neue Replikat weitergegeben.
Bemerkungen

Bei einem neu erstellten teilweisen Replikat sind alle ReplicaFilter-Eigenschaften auf False eingestellt, d.h., es sind keine Daten in den Tabellen vorhanden.


Move-Methode

Verschiebt die Position des aktuellen Datensatzes in einem Recordset-Objekt.

Syntax

Datensatzgruppe.Move Zeilen, Start

Die Syntax der Move-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Datensatzgruppe	Eine Objektvariable, die das Recordset-Objekt darstellt, für das die Position des aktuelle Datensatzes geändert wird.
Zeilen	Ein Wert mit Vorzeichen vom Typ Long, der angibt, um wie viele Zeilen die Position geändert wird. Falls Zeilen größer als 0 ist, wird die Position nach vorne (in Richtung Dateiende) geändert. Falls Zeilen kleiner als 0 ist, wird die Position nach hinten (in Richtung Dateianfang) geändert.
Startlesezeichen	Optional. Ein Wert Variant (vom Typ String), der ein Lesezeichen kennzeichnet. Wenn Sie Startlesezeichen angeben, beginnt die Bewegung relativ zur Position des Lesezeichens. Sonst beginnt die Move-Methode beim aktuellen Datensatz.
Bemerkungen

Wenn Sie mit der Move-Methode den Zeiger des aktuellen Datensatzes vor den ersten Datensatz setzen möchten, bewegt sich der Zeiger des aktuellen Datensatzes an den Anfang der Datei. Wenn das Recordset-Objekt keine Datensätze enthält, und dessen BOF-Eigenschaft auf True eingestellt ist, wird ein Fehler ausgelöst, wenn diese Methode zum Rückwärtsbewegen verwendet wird.

Wenn Sie mit der Move-Methode den Zeiger auf den aktuellen Datensatz hinter den letzten Datensatz setzen, bewegt sich die Position des Zeigers auf den aktuellen Datensatz an das Ende der Datei. Wenn das Recordset-Objekt keine Datensätze enthält, und dessen EOF-Eigenschaft auf True eingestellt ist, dann wird ein Fehler ausgelöst, wenn diese Methode zum Vorwärtsbewegen verwendet wird.

Wenn entweder die BOF- oder die EOF-Eigenschaft auf True eingestellt ist, und Sie versuchen, die Move-Methode ohne gültiges Lesezeichen zu verwenden, tritt ein Laufzeitfehler auf.

Anmerkungen

•	Wenn Sie die Move-Methode auf ein Recordset-Objekt vom Typ Vorwärts anwenden, muß das Argument Zeilen eine positive Ganzzahl sein, und es dürfen keine Lesezeichen verwendet werden, so daß Vorwärtsbewegungen möglich sind.

•	Sie können den ersten, letzten, nächsten oder vorhergehenden Datensatz in einem Recordset-Objekt zum aktuellen Datensatz machen, indem Sie eine der Methoden MoveFirst, MoveLast, MoveNext oder MovePrevious verwenden.

•	Die Verwendung der Move-Methode mit dem Wert 0 für Zeilen stellt eine einfache Möglichkeit dar, um die dem aktuellen Datensatz zugrundeliegenden Daten abzurufen. Dies ist insbesondere dann hilfreich, wenn Sie sicherstellen möchten, daß der aktuelle Datensatz die neuesten Daten aus der zugrundeliegenden Tabelle hat. Gleichzeitig werden alle nicht abgeschlossenen Edit- oder AddNew-Aufrufe abgebrochen.


MoveFirst-, MoveLast-, MoveNext-, MovePrevious-Methoden

Geht zum ersten, letzten, nächsten oder vorhergehenden Datensatz in einem angegebenen Recordset-Objekt; dieser Datensatz wird zum aktuellen Datensatz.

Syntax

Datensatz.{MoveFirst | MoveLast [dbRunAsync] | MoveNext | MovePrevious}

Der Platzhalter Datensatz ist eine Objektvariable, die ein geöffnetes Recordset-Objekt darstellt.

Bemerkungen

Mit der Move-Methode können Sie sich von Datensatz zu Datensatz bewegen, ohne daß eine Bedingung erfüllt sein muß.

Vorsicht   Wenn Sie den aktuellen Datensatz bearbeiten, speichern Sie auf jeden Fall Änderungen mit der Update-Methode, bevor Sie zu einem anderen Datensatz wechseln. Wenn Sie zu einem anderen Datensatz wechseln, ohne den aktuellen Datensatz zu aktualisieren, gehen Ihre Änderungen ohne Warnung verloren.

Wenn Sie ein Recordset-Objekt öffnen, ist der erste Datensatz aktuell, und die BOF-Eigenschaft hat den Wert False. Wenn das Recordset-Objekt keine Datensätze enthält, hat die BOF-Eigenschaft den Wert True, und es gibt keinen aktuellen Datensatz.

Falls der erste oder letzte Datensatz bereits aktuell ist, wenn Sie MoveFirst oder MoveLast verwenden, ändert sich der aktuelle Datensatz nicht.

Falls Sie MovePrevious verwenden, wenn der erste Datensatz aktuell ist, wird die BOF-Eigenschaft auf True festgelegt, und es gibt keinen aktuellen Datensatz. Wenn Sie MovePrevious erneut verwenden, tritt ein Fehler auf, und BOF bleibt True.

Falls Sie MoveNext verwenden, wenn der letzte Datensatz aktuell ist, wird die EOF-Eigenschaft auf True festgelegt, und es gibt keinen aktuellen Datensatz. Wenn Sie MoveNext erneut verwenden, tritt ein Fehler auf, und EOF bleibt True.

Wenn sich Datensatzgruppe auf ein Recordset-Objekt (gilt nur für Microsoft Jet-Arbeitsbereiche) vom Typ Tabelle bezieht, folgt die Bewegung dem aktuellen Index. Sie können den aktuellen Index mit der Index-Eigenschaft festlegen. Wenn Sie den aktuellen Index nicht festlegen, ist die Reihenfolge der zurückgegebenen Datensätze undefiniert.

Wichtig   Sie können mit der MoveLast-Methode ein Recordset-Objekt vom Typ Dynaset oder Snapshot vollständig auffüllen, um die aktuelle Anzahl der Datensätze im Recordset-Objekt anzugeben. Wenn Sie aber MoveLast dazu verwenden, können Sie das Leistungsverhalten der Anwendung verlangsamen. Verwenden Sie die MoveLast-Methode nur dann zum Zählen der Datensätze, wenn dies absolut notwendig ist, um die genaue Anzahl der Datensätze in einem neu geöffneten Recordset-Objekt zu erhalten. Wenn Sie die Konstante dbRunAsync zusammen mit der MoveLast-Methode verwenden, ist der Aufruf der Methode asynchron. Mit der StillExecuting-Eigenschaft können Sie bestimmen, wann das Recordset-Objekt aufgefüllt ist, uns Sie können mit der Cancel-Methode die Ausführung des asynchronen Aufrufs der MoveLast-Methode beenden.

Sie können die Methoden MoveFirst, MoveLast und MovePrevious nicht bei einem Recordset-Objekt vom Typ Vorwärts verwenden.

Mit der Move-Methode bewegen Sie die Position des aktuellen Datensatzes in einem Recordset-Objekt um eine bestimmte Anzahl von Datensätzen nach vorne oder nach hinten.


NewPassword-Methode

Ändert das Kennwort eines bestehenden Benutzerkontos oder einer Microsoft Jet-Datenbank (gilt nur für Microsoft Jet-Arbeitsbereiche).

Syntax

Objekt.NewPassword AlltesKennwort, NeuesKennwort

Die Syntax der NewPassword-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Objekt	Eine Objektvariable, die das User-Objekt oder ein Database-Objekt von Microsoft Jet, Version 3.x, darstellt, dessen Password-Eigenschaft geändert werden soll.
AltesKennwort	Ein String, der die aktuelle Einstellung der Password-Eigenschaft des User-Objekts oder des Database-Objekts von Microsoft Jet, Version3.x, enthält.
NeuesKennwort	Ein String, der die neue Einstellung der Password-Eigenschaft des User-Objekts oder des Database-Objekts von Microsoft Jet, Version3.x, enthält.
Bemerkungen

Die Zeichenfolgen AltesKennwort und NeuesKennwort können maximal 14 Zeichen lang sein und alle Zeichen außer dem ASCII-Zeichen 0 (Null) enthalten. Sie können das Kennwort löschen, indem Sie für NeuesKennwort eine Zeichenfolge der Länge Null ("") verwenden.

Kennwörter sind von der Groß-/Kleinschreibung abhängig.

Wenn sich Objekt auf ein User-Objekt bezieht, das noch nicht einer Users-Auflistung angefügt wurde, tritt ein Fehler auf. Sie können ein neues Kennwort nur festlegen, wenn Sie entweder als der Benutzer angemeldet sind, dessen Konto geändert werden soll, oder wenn Sie ein Mitglied der Gruppe "Admins" sind. Die Password-Eigenschaft eines User-Objekts kann nur festgelegt werden; Benutzer können den aktuellen Wert nicht abrufen.

Wenn Objekt ein Database-Objekt von Microsoft Jet, Version 3.0 oder höher, angibt, stellt diese Methode beschränkte Sicherheitsmöglichkeiten in Form von Kennwortschutz zur Verfügung. Wenn Sie eine .mdb-Datei in Microsoft Jet, Version 3.x, erstellen oder öffnen, kann ein Teil der Connect-Verbindungszeichenfolge das Kennwort beschreiben.

Wenn eine Datenbank kein Kennwort hat, erstellt Microsoft Jet automatisch ein Kennwort, indem es eine Zeichenfolge der Länge Null ("") als altes Kennwort übergibt.

Vorsicht   Wenn Sie das Kennwort verlieren, können Sie die Datenbank nicht mehr öffnen.


OpenDatabase-Methode

Öffnet eine angegebene Datenbank in einem Workspace-Objekt und gibt einen Verweis auf das Database-Objekt zurück, das diese Datenbank repräsentiert.

Syntax

Set Datenbank = Arbeitsbereich.OpenDatabase (DBName, Optionen, Schreibgeschützt, Verbindung)

Die OpenDatabase-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Datenbank	Eine Objektvariable, die auf das zu öffnende Database-Objekt verweist.
Arbeitsbereich	Optional. Eine Objektvariable, die auf das bestehende Workspace-Objekt verweist, das die Datenbank aufnimmt. Wenn Sie keinen Wert für Arbeitsbereich angeben, verwendet OpenDatabase den voreingestellten Arbeitsbereich.
DBName	Ein String, der den Namen einer bestehenden Microsoft Jet-Datenbankdatei oder den Datenquellennamen (DSN) einer ODBC-Datenquelle darstellt. Weitere Informationen zur Einstellung dieses Wertes finden Sie unter der Name-Eigenschaft.
Optionen	Optional. Ein Wert vom Typ Variant, der verschiedene Optionen für die Datenbank, wie in den Einstellungen angegeben, einstellt.
Schreibgeschützt	Optional. Ein Wert vom Typ Variant (Boolean-Untertyp), der True entspricht, wenn die Datenbank für den schreibgeschützten Zugriff geöffnet werden soll, und False (die Voreinstellung), wenn die Datenbank mit Schreib-/Lese-Zugriff geöffnet werden soll.
Verbindung	Optional. Ein Wert vom Typ Variant (String-Untertyp), der verschiedene Verbindungsinformationen, einschließlich Kennwörtern, angibt.
Einstellungen

Für Microsoft Jet-Arbeitsbereiche können Sie die folgenden Werte für das Argument Optionen verwenden.

Einstellung	Beschreibung
True	Öffnet die Datenbank im Exklusivmodus.
False	(Voreinstellung) Öffnet die Datenbank im geteilten Modus.
Für ODBCDirect-Arbeitsbereiche bestimmt das Argument Optionen, ob und wann der Benutzer zur Herstellung der Verbindung aufgefordert wird. Sie können eine der folgenden Konstanten verwenden.

Konstante	Beschreibung
dbDriverNoPrompt	Die ODBC-Treiber-Manager verwendet die Verbindungszeichenfolge, die in DBName und Verbindung bereitgestellt wird. Stellen Sie nicht ausreichende Informationen bereit, tritt ein Laufzeitfehler auf.
dbDriverPrompt	Die ODBC-Treiberverwaltung zeigt das Dialogfeld ODBC-Datenquelle an, in dem alle in DBName oder Verbindung befindlichen relevanten Informationen angezeigt werden. Die Verbindungszeichenfolge wurde aus dem Datenquellennamen gebildet, den der Benutzer über die Dialogfelder ausgewählt hat, bzw. falls der Benutzer keinen Datenquellennamen bestimmt hat, wird der voreingestellte Datenquellenname verwendet.
dbDriverComplete	(Voreinstellung) Wenn die Argumente Verbindung und DBName alle zur Herstellung einer Verbindung benötigten Informationen enthalten, verwendet die ODBC-Treiberverwaltung die Zeichenfolge in Verbindung. Andernfalls verhält sie sich, als wenn Sie dbDriverPrompt angäben.
dbDriverCompleteRequired	Diese Option verhält sich wie dbDriverComplete, mit der Ausnahme, daß der ODBC-Treiber die Aufforderung nach Informationen, die für die Herstellung der Verbindung nicht erforderlich sind, deaktiviert.
Bemerkungen

Wenn Sie eine Datenbank öffnen, wird diese automatisch der Databases-Auflistung hinzugefügt. In einem ODBCDirect-Arbeitsbereich wird weiterhin das dem neuen Database-Objekt entsprechende Connection-Objekt erstellt und der Connections-Auflistung des gleichen Workspace-Objekts hinzugefügt.

Bei der Verwendung von DBName ist folgendes zu berücksichtigen:

•	Wenn sich das Argument auf eine Datenbank bezieht, die bereits für den exklusiven Zugriff durch einen anderen Benutzer geöffnet wurde, tritt ein Fehler auf.

•	Wenn sich das Argument nicht auf eine bestehende Datenbank oder einen gültigen ODBC-Datenquellennamen bezieht, tritt ein Fehler auf.

•	Wenn es sich bei dem Argument um eine Null-Zeichenfolge ("") handelt und Verbindung dem Wert "ODBC;" entspricht, so wird ein Dialogfeld angezeigt, das alle registrierten ODBC-Datenquellennamen auflistet, so daß der Benutzer eine Datenbank auswählen kann.

•	Wenn Sie eine Datenbank über einen ODBCDirect-Arbeitsbereich öffnen und den Datenquellennamen in Verbindung bereitstellen, so können Sie DBName auf eine Zeichenfolge Ihrer Wahl einstellen, welche Sie zum Verweis dieser Datenbank in nachfolgendem Code verwenden können.

Das Argument Verbindung wird in zwei Komponenten angegeben: Dem Datenbanktyp, gefolgt von einem Semikolon (;) und den optionalen Argumenten. Der Datenbanktyp (z.B. "ODBC;" oder "FoxPro 2.5;") muß zuerst angegeben werden. Die optionalen Argumente folgen in beliebiger Reihenfolge und sind jeweils durch Semikolons voneinander getrennt. Einer der Parameter kann das Kennwort angeben (wenn eines zugewiesen wurde), z.B.:

"FoxPro 2.5; pwd=mypassword"

Die Verwendung der NewPassword-Methode in einem Database-Objekt einer anderen als der ODBCDirect-Datenbank ändert den Kennwortparameter, der in der Komponente ";pwd=..." dieses Arguments erscheint. Sie müssen die Argumente Optionen und Schreibgeschützt angeben, um eine Quellenzeichenfolge bereitzustellen. Weitere Informationen zur Syntax finden Sie unter der Connect-Eigenschaft.

Sie schließen eine Datenbank und entfernen damit das zugehörige Database-Objekt aus der Databases-Auflistung, indem Sie die Close-Methode auf das Objekt anwenden.

Anmerkung   Wenn Sie auf eine mit Microsoft Jet verbundene ODBC-Datenquelle zugreifen, können Sie das Leistungsverhalten Ihrer Anwendung verbessern, indem Sie ein Database-Objekt öffnen, das mit der ODBC-Datenquelle verbunden ist, anstatt einzelne TableDef-Objekte mit bestimmten Tabellen in der ODBC-Datenquelle zu verknüpfen.


OpenRecordset-Methode

Erstellt ein neues Recordset-Objekt und fügt es an die Recordsets-Auflistung an.

Syntax

Für Connection- und Database-Objekte:

Set Datensatzgruppe = Objekt.OpenRecordset (Quelle, Typ, Optionen, Sperren)

Für QueryDef-, Recordset- und TableDef-Objekte:

Set Datensatzgruppe = Objekt.OpenRecordset (Typ, Optionen, Sperren)

Die OpenRecordset-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Datensatzgruppe	Eine Objektvariable, die das zu öffnende Recordset-Objekt repräsentiert.
Objekt	Eine Objektvariable, die ein bestehendes Objekt repräsentiert, das zum Erstellen des neuen Recordset-Objekts verwendet werden soll.
Quelle	Ein Wert vom Typ String, der die Quelle der Datensätze für das neue Recordset-Objekt angibt. Die Quelle kann ein Tabellenname, ein Abfragenname oder eine SQL-Anweisung sein, die Datensätze zurückgibt. Bei Recordset-Objekten vom Typ Tabelle in Microsoft Jet-Datenbanken kann als Quelle nur ein Tabellenname angegeben werden.
Typ	Optional. Eine Konstante, die den Typ des zu öffnenden Recordset-Objekts angibt, wie unter Einstellungen festgelegt.
Optionen	Optional. Eine Kombination von Konstanten, die Merkmale des neuen Recordset-Objekts angeben, wie unter Einstellungen aufgeführt.
Sperren	Optional. Eine Konstante, die Sperrungen für das Recordset-Objekt bestimmt, wie unter Einstellungen festgelegt.
Einstellungen

Sie können eine der folgenden Konstanten für das Argument Typ verwenden.

Konstante	Beschreibung
dbOpenTable	Öffnet ein Recordset-Objekt vom Typ Tabelle (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbOpenDynamic	Öffnet ein Recordset-Objekt vom Typ Dynamic, das einem ODBC dynamischer Cursor ähnelt (gilt nur für ODBCDirect-Arbeitsbereiche).
dbOpenDynaset	Öffnet ein Recordset-Objekt vom Typ Dynaset, das einem ODBC Schlüsselgruppen-Cursor ähnelt.
dbOpenSnapshot	Öffnet ein Recordset-Objekt vom Typ Snapshot, das einem ODBC statischen Cursor ähnelt.
dbOpenForwardOnly	Öffnet ein Recordset-Objekt vom Typ Vorwärts.
Anmerkung   Wenn Sie ein Recordset-Objekt in einem Microsoft Jet-Arbeitsbereich öffnen und Sie keinen Typ angeben, so erstellt OpenRecordset ein Recordset-Objekt vom Typ Tabelle, falls möglich. Wenn Sie eine verknüpfte Tabelle oder Abfrage angeben, so erstellt OpenRecordset ein Recordset-Objekt vom Typ Dynaset. In einem ODBCDirect-Arbeitsbereich entspricht die Voreinstellung dbOpenForwardOnly.

Sie können eine Kombination der folgenden Konstanten für das Argument Optionen verwenden.

Konstante	Beschreibung
dbAppendOnly	Ermöglicht es den Benutzern, dem Recordset-Objekt neue Datensätze anzufügen, jedoch keine bestehenden Datensätze zu bearbeiten oder zu löschen (gilt nur für Microsoft Jet-Recordset-Objekte vom Typ Dynaset).
dbSQLPassThrough	Gibt eine SQL-Anweisung an eine mit Microsoft Jet verbundene ODBC-Datenquelle zur Bearbeitung weiter (gilt nur für Microsoft Jet-Recordset-Objekte vom Typ Snapshot).
dbSeeChanges	Löst einen Laufzeitfehler aus, wenn ein Benutzer Daten ändert, die ein anderer Benutzer bearbeitet (gilt nur für Microsoft Jet-Recordset-Objekte vom Typ Dynaset). Dies ist in Anwendungen hilfreich, in denen mehrere Benutzer gleichzeitig über Lese-/Schreib-Zugriff auf die gleichen Daten verfügen.
dbDenyWrite	Verhindert, daß andere Benutzer keine Datensätze ändern oder hinzufügen können (gilt nur für Microsoft Jet- Recordset-Objekte).
dbDenyRead	Verhindert, daß andere Benutzer Daten in Tabellen lesen können (gilt nur für Microsoft Jet-Recordset-Objekte vom Typ Tabelle).
dbForwardOnly	Erstellt ein Recordset-Objekt vom Typ Vorwärts (gilt nur für Microsoft Jet-Recordset-Objekte vom Typ Snapshot). Diese Konstante wird nur aus Gründen der Abwärtskompatibilität bereitgestellt; Sie sollten anstelle dieser Option die Konstante dbOpenForwardOnly im Argument Typ verwenden.
dbReadOnly	Verhindert Änderungen am Recordset-Objekt (gilt nur für Microsoft Jet). Die Konstante dbReadOnly im Argument Sperren ersetzt diese Option, die nur aus Gründen der Abwärtskompatibilität bereitgestellt wird.
dbRunAsync	Führt eine asynchrone Abfrage aus (gilt nur für ODBCDirect-Arbeitsbereiche).
dbExecDirect	Führt eine Abfrage durch Überspringen von SQLPrepare sowie dem direkten Aufrufen von SQLExecDirect aus (gilt nur für ODBCDirect-Arbeitsbereiche). Verwenden Sie diese Option nur, wenn Sie kein Recordset-Objekt öffnen, das auf einer Parameterabfrage basiert. Weitere Informationen finden Sie in der Microsoft ODBC 3.0 Programmer’s Reference.
dbInconsistent	Ermöglicht inkonsistente Aktualisierungen (gilt nur für Microsoft Jet-Recordset-Objekte vom Typ Dynaset und Snapshot).
dbConsistent	Ermöglicht nur konsistente Aktualisierungen (gilt nur für Microsoft Jet-Recordset-Objekte vom Typ Dynaset und Snapshot).
Anmerkung   Die Konstanten dbConsistent und dbInconsistent schließen sich gegenseitig aus, die Verwendung beider löst einen Fehler aus. Die Bereitstellung eines Arguments Sperren bei gleichzeitiger Verwendung der Konstante dbReadOnly durch das Argument Optionen löst ebenso einen Fehler aus.

Sie können die folgenden Konstanten für das Argument Sperren verwenden.

Konstante	Beschreibung
dbReadOnly	Verhindert Änderungen am Recordset-Objekt (Voreinstellung für ODBCDirect-Arbeitsbereiche). Sie können dbReadOnly entweder im Argument Optionen oder im Argument Sperren verwenden, jedoch nicht in beiden. Verwenden Sie diese Konstante für beide Argumente, tritt ein Laufzeitfehler auf.
dbPessimistic	Verwendet vollständiges Sperren zur Bestimmung, wie Änderungen am Recordset-Objekt in einer Mehrbenutzerumgebung durchgeführt werden. Die den von Ihnen bearbeiteten Datensatz enthaltende Seite wird gesperrt, sobald Sie die Edit-Methode verwenden (Voreinstellung für Microsoft Jet-Arbeitsbereiche).
dbOptimistic	Verwendet eingeschränktes Sperren zur Bestimmung, wie Änderungen am Recordset-Objekt in einer Mehrbenutzerumgebung durchgeführt werden. Die den Datensatz enthaltende Seite wird nicht gesperrt, bis die Update-Methode ausgeführt wird.
dbOptimisticValue	Verwendet teilweise Gleichzeitigkeit, die auf Zeilenwerten basiert (gilt nur für ODBCDirect-Arbeitsbereiche).
dbOptimisticBatch	Aktiviert die teilweise Stapelaktualisierung (gilt nur für ODBCDirect-Arbeitsbereiche).
Bemerkungen

Wenn sich Objekt auf ein QueryDef-Objekt oder ein Recordset-Objekt vom Typ Dynaset oder Snapshot bezieht, oder wenn sich Quelle auf eine SQL-Anweisung oder ein TableDef-Objekt bezieht, das eine verknüpfte Tabelle darstellt, können Sie dbOpenTable nicht für das Argument Typ verwenden. (Andernfalls wird ein Laufzeitfehler ausgelöst.) Wenn Sie eine SQL Pass Through-Abfrage auf einer verknüpften Tabelle in einer mit Microsoft Jet verbundenen ODBC-Datenquelle verwenden möchten, müssen Sie zuerst die Connect-Eigenschaft der Datenbank der verknüpften Tabelle auf eine gültige ODBC-Verbindungszeichenfolge festlegen. Wenn Sie nur eine einzelne Pass Through-Abfrage für ein Recordset-Objekt einer mit Microsoft Jet verbundenen ODBC-Datenquelle durchführen müssen, so können Sie das Leistungsverhalten verbessern, indem Sie dbOpenForwardOnly für das Argument Typ verwenden.

Wenn sich Objekt auf ein Recordset-Objekt vom Typ Dynaset oder Snapshot bezieht, so ist das neue Recordset-Objekt vom gleichen Typ Objekt. Wenn sich Objekt auf ein Recordset-Objekt vom Typ Tabelle bezieht, so ist der Typ des neuen Objekts ein Recordset-Objekt vom Typ Dynaset. Sie können neue Recordset-Objekte nicht aus Recordset-Objekten vom Typ Vorwärts oder ODBCDirect-Recordset-Objekten öffnen.

Sie können in einem ODBCDirect-Arbeitsbereich ein Recordset-Objekt öffnen, das mehr als eine Auswahlabfrage im Argument Quelle enthält, wie z.B.

"SELECT LastName, FirstName FROM Authors
WHERE LastName = 'Smith';
SELECT Title, ISBN FROM Titles
WHERE ISBN Like '1-55615-*'"

Das zurückgegebene Recordset-Objekt wird mit den Ergebnissen der ersten Abfrage geöffnet. Um die Ergebnismengen der Datensätze nachfolgender Abfragen zu erhalten, verwenden Sie die NextRecordset-Methode.

Anmerkung   Sie können DAO-Abfragen an verschiedene Datenbank-Server mit ODBCDirect senden, und die verschiedenen Server verstehen alle einen leicht voneinander abweichende SQL-Dialekt. Deshalb wird die kontextsensitive Hilfe nicht mehr für Microsoft Jet-SQL angeboten, die Hilfe für Microsoft Jet-SQL gibt es jedoch weiterhin im Menü ?. Stellen Sie sicher, daß Sie in der entsprechenden Dokumentation für die SQL-Sprache Ihres Datenbank-Servers nachlesen, wenn Sie entweder ODBCDirect-Verbindungen oder Pass-Through-Abfragen in Client/Server-Anwendungen die mit Microsoft Jet verbunden sind.

Verwenden Sie die Konstante dbSeeChanges in einem Microsoft Jet-Arbeitsbereich, wenn Ihnen Änderungen angezeigt werden sollen, falls zwei oder mehrere Benutzer den gleichen Datensatz bearbeiten oder löschen wollen. Wenn z.B. zwei Benutzer anfangen, denselben Datensatz zu bearbeiten, setzt sich der Benutzer durch, der zuerst die Update-Methode ausführt. Wenn die Update-Methode vom zweiten Benutzer ausgeführt wird, tritt ein Laufzeitfehler auf. Wenn analog dazu der zweite Benutzer versucht, den Datensatz mit der Delete-Methode zu löschen, der Datensatz aber bereits vom ersten Benutzer geändert wurde, tritt ebenfalls ein Laufzeitfehler auf.

Wenn der Benutzer diesen Fehler beim Aktualisieren erhält, sollte Ihr Code in der Regel den Inhalt der Felder aktualisieren und die geänderten neuen Werte abrufen. Wenn der Fehler während des Löschvorgangs auftritt, kann Ihr Code dem Benutzer die aktualisierten Daten des Datensatzes anzeigen und ihn darauf hinweisen, daß die Daten verändert wurden. An dieser Stelle kann Ihr Code vom Benutzer eine Bestätigung verlangen, daß er den Datensatz immer noch löschen möchte.

Sie sollten die Konstante dbSeeChanges auch dann verwenden, wenn Sie ein Recordset-Objekt in einem mit Microsoft Jet verbundenen ODBC-Arbeitsbereich gegenüber einer Microsoft SQL-Server 6.0 (oder höher)-Tabelle öffnen, die über eine IDENTITY-Spalte verfügt, da andernfalls ein Fehler auftreten könnte.

In einem ODBCDirect-Arbeitsbereich können Sie asynchrone Abfragen durch Angabe der Konstante dbRunAsync im Argument Optionen ausführen. Das ermöglicht Ihrer Anwendung die weitere Verarbeitung anderer Anweisungen, während die Abfrage im Hintergrund ausgeführt wird. Sie können jedoch bis zur Vollendung der Abfrage auf die Daten des Recordset-Objekts nicht zugreifen. Überprüfen Sie zur Feststellung, ob die Abfrage beendet wurde, die StillExecuting-Eigenschaft des neuen Recordset-Objekts. Benötigt die Abfrage längere Zeit als erwartet, so können Sie die Ausführung mit der Cancel-Methode beenden.

Das Öffnen von mehr als einem Recordset-Objekt in einer ODBC-Datenquelle wird mißlingen, da die Verbindung mit einem älteren OpenRecordset-Aufruf beschäftigt ist. Eine Möglichkeit, dies zu umgehen, besteht in der Verwendung eines Server Cursors und ODBCDirect, falls der Server dies unterstützt. Eine andere Lösung wäre die vollständige Auffüllung des Recordset-Objekts durch die MoveLast-Methode, sobald das Recordset-Objekt geöffnet ist.

Wenn Sie ein Connection-Objekt, das die Einstellung DefaultCursorDriver hat, mit dbUseClientBatchCursor öffnen, so können Sie ein Recordset-Objekt öffnen, um Änderungen an den Daten (auch Stapelaktualisierung genannt) in einem ODBCDirect-Arbeitsbereich zu puffern. Geben Sie dbOptimisticBatch im Argument Sperren an, um das Aktualisieren des Pufferns zu ermöglichen. Informationen dazu, wie Änderungen unmittelbar gesichert werden, oder wie Änderungen im Stapel gepuffert und auf die Festplatte geschrieben werden, finden Sie im Thema über die Update-Methode über Details.

Wenn Sie ein Recordset-Objekt mit der Close-Methode schließen, wird es automatisch aus der Recordsets-Auflistung gelöscht.

Anmerkung   Wenn sich Quelle auf eine SQL-Anweisung bezieht, die aus einer Zeichenfolge verknüpft mit einem Wert ungleich einer Ganzzahl besteht, und die Systemparameter ein nichtamerikanisches Dezimalzeichen wie beispielsweise ein Komma angeben (z.B. strSQL = "PREIS > " & lngPreis, und lngPreis = 125,50), so tritt ein Fehler auf, wenn Sie das Recordset-Objekt zu öffnen versuchen. Der Grund besteht darin, daß während der Verknüpfung die Zahl in eine Zeichenfolge unter Verwendung Ihrer im System eingestellten Dezimalzeichen konvertiert, und SQL nur amerikanische Dezimalzeichen akzeptiert.


Refresh-Methode

Aktualisiert die Objekte in einer Auflistung entsprechend dem aktuellen Datenbankschema.

Syntax

Auflistung.Refresh

Der Platzhalter Auflistung ist eine Objektvariable, die eine beständige Auflistung repräsentiert.

Bemerkungen

Die Refresh-Methode kann nicht für Auflistungen verwendet werden, die nicht beständig sind, wie Connections, Databases, Recordsets, Workspaces oder die QueryDefs-Auflistung eines Connection-Objekts.

Sie können die Position bestimmen, die das Microsoft Jet-Datenbankmodul für Field-Objekte in der Fields-Auflistung eines QueryDef-, Recordset- oder TableDef-Objekts verwendet, indem Sie die OrdinalPosition-Eigenschaft jedes Field-Objekts abrufen. Die Refresh-Methode kann die Reihenfolge von Objekten innerhalb der Fields-Auflistung ändern, wenn die OrdinalPosition-Eigenschaft eines Field-Objekts in der Auflistung geändert wurde.

Verwenden Sie die Refresh-Methode in Mehrbenutzerumgebungen, in denen andere Benutzer die Datenbank ändern können. Ggf. müssen Sie sie auch für alle Auflistungen verwenden, die indirekt von Änderungen an der Datenbank betroffen sind. Wenn Sie z.B. eine Users-Auflistung ändern, müssen Sie möglicherweise eine Groups-Auflistung aktualisieren, bevor Sie die Groups-Auflistung verwenden.

Eine Auflistung wird mit Objekten gefüllt, wenn zum ersten Mal darauf zugegriffen wird. Sie wird aber nicht automatisch aktualisiert, um durch andere Benutzer vorgenommene Änderungen widerzuspiegeln. Wenn anzunehmen ist, daß eine Auflistung durch einen anderen Benutzer geändert wurde, rufen Sie die Refresh-Methode für die Auflistung auf, unmittelbar bevor Sie eine Operation in Ihrer Anwendung durchführen, die das Vorhandensein oder Fehlen eines bestimmten Objekts in der Auflistung erwartet. Dadurch sorgen Sie dafür, daß die Auflistung immer möglichst aktuell ist. Andererseits kann die Verwendung der Refresh-Methode unnötigerweise das Leistungsverhalten verschlechtern.


RefreshLink-Methode

Aktualisiert die Verbindungsinformationen für eine verknüpfte Tabelle (gilt nur für Microsoft Jet-Arbeitsbereiche).

Syntax

TableDef.RefreshLink

Der Platzhalter TableDef gibt das TableDef-Objekt an, das die verknüpfte Tabelle darstellt, deren Verbindungsinformationen aktualisiert werden sollen.

Bemerkungen

Sie ändern die Verbindungsinformationen für eine verknüpfte Tabelle, indem Sie die Connect-Eigenschaft des entsprechenden TableDef-Objekts zurücksetzen und dann die RefreshLink-Methode verwenden, um die Informationen zu aktualisieren. Wenn Sie die RefreshLink-Methode verwenden, werden die Eigenschaften der verknüpften Tabelle und die Relation-Objekte nicht verändert.

Damit diese Verbindungsinformationen in allen Auflistungen existieren, die mit dem TableDef-Objekt verbunden sind, das die verknüpfte Tabelle repräsentiert, müssen Sie außerdem die Refresh-Methode für alle Auflistungen aufrufen.


RegisterDatabase-Methode

Trägt Verbindungsinformationen für eine ODBC-Datenquelle in die Windows-Registrierung ein. Der ODBC-Treiber benötigt Verbindungsinformationen, wenn die ODBC-Datenquelle im Rahmen einer Sitzung geöffnet wird.

Syntax

DBEngine.RegisterDatabase DBName, Treiber, OhneAnzeige, Attribute

Die Syntax der RegisterDatabase-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
DBName	Ein Wert vom Typ String, mit dem in der OpenDatabase-Methode verwendeten Namen, der sich auf einen Block beschreibender Informationen zur Datenquelle bezieht. Wenn die Datenquelle z.B. eine ODBC-Netzdatenbank ist, könnte dies der Name des Servers sein.
Treiber	Ein Wert vom Typ String, der den Namen des ODBC-Treibers darstellt. Dies ist nicht der Name der DLL-Datei (Dynamic Link Library) für den ODBC-Treiber. SQL-Server ist z.B. ein Treibername, aber SQLSRVR.DLL ist der Name einer DLL-Datei. ODBC und der entsprechende Treiber müssen bereits installiert sein.
OhneAnzeige	Ein Wert vom Typ Boolean, der dem Wert True entspricht, wenn keine Dialogfelder des ODBC-Treibers angezeigt werden sollen, die zur Eingabe treiberbezogener Informationen auffordern; oder dem Wert False entspricht, wenn Dialogfelder des ODBC-Treibers angezeigt werden sollen. Wenn OhneAnzeige dem Wert True entspricht, muß Attribute alle notwendigen treiberbezogenen Informationen enthalten, ansonsten werden die Dialogfelder trotzdem angezeigt.
Attribute	Ein Wert vom Typ String, der eine Liste der Schlüsselwörter darstellt, die zusätzlich in die Windows-Registrierung eingetragen werden sollen. Die Schlüsselwörter befinden sich in einer Zeichenfolge, in der die Einträge durch ein Wagenrücklaufzeichen voneinander getrennt sind.
Bemerkungen

Falls die Datenbank bereits in der Windows-Registrierung registriert ist (also die Verbindungsinformationen bereits eingetragen wurden), wenn Sie die RegisterDatabase-Methode aufrufen, werden die Verbindungsinformationen aktualisiert.

Wenn die RegisterDatabase-Methode aus irgendeinem Grund nicht erfolgreich durchgeführt werden kann, werden keine Änderungen in der Windows-Registrierung vorgenommen, und es tritt ein Fehler auf.

Weitere Informationen zu ODBC-Treibern (wie z.B. dem ODBC-Treiber für SQL-Server) finden Sie in der Hilfedatei des entsprechenden Treibers.

Sie sollten das Dialogfeld ODBC-Datenquellen in der Systemsteuerung verwenden, um neue Datenquellen hinzuzufügen oder bestehende Einträge zu verändern. Wenn Sie allerdings die RegisterDatabase-Methode verwenden, sollten Sie die Option OhneAnzeige auf True setzen.


RepairDatabase-Methode

Unternimmt den Versuch, eine beschädigte Microsoft Jet-Datenbank zu reparieren (gilt nur für Microsoft Jet-Datenbanken).

Syntax

DBEngine.RepairDatabase DBName

Das Argument DBName ist ein Wert vom Typ String, der den Pfad und Dateinamen für eine bestehende Datenbankdatei im Format des Jet-Datenbankmoduls angibt. Wenn Sie den Pfad nicht angeben, wird nur das aktuelle Verzeichnis durchsucht. Wenn Ihr System UNC-Pfadangaben (UNC=Uniform Naming Convention) unterstützt, können Sie auch einen Netzwerkpfad angeben, z.B. "\\SERVER1\SHARE1\DIR1\DB1.MDB".

Bemerkungen

Sie müssen die durch DBName angegebene Datenbank schließen, bevor Sie versuchen, diese zu reparieren. In einer Mehrbenutzerumgebung können andere Benutzer die durch DBName angegebene Datenbank nicht geöffnet haben, während sie von Ihnen repariert wird. Wenn DBName nicht geschlossen ist oder nicht für exklusiven Zugriff zur Verfügung steht, tritt ein Fehler auf.

Diese Methode versucht, eine Datenbank zu reparieren, die nach einer unvollständigen Schreiboperation als möglicherweise beschädigt gekennzeichnet wurde. Dazu kann es kommen, wenn eine Anwendung, die das Jet-Datenbankmodul verwendet, aufgrund eines Stromausfalls oder Hardwareproblems unerwartet geschlossen wird. Die Datenbank wird nicht als möglicherweise beschädigt gekennzeichnet, wenn Sie die Close-Methode verwenden oder die Anwendung normal beenden.

Die RepairDatabase-Methode versucht auch, die Integrität aller Systemtabellen und Indizes zu überprüfen. Alle Daten, die nicht repariert werden können, werden verworfen. Wenn die Datenbank nicht repariert werden kann, wird ein Laufzeitfehler ausgelöst.

Wenn Sie eine beschädigte Datenbank öffnen oder komprimieren möchten, wird in der Regel ein Laufzeitfehler ausgelöst. In einigen Situationen kann eine beschädigte Datenbank jedoch nicht erkannt werden, und es tritt kein Fehler auf. Sie sollten Ihren Benutzern auf jeden Fall die Möglichkeit geben, in Ihrer Anwendung die RepairDatabase-Methode aufzurufen, falls sich eine Datenbank nicht so verhält, wie Sie es erwartet haben.

Einige Arten von Datenbanken können beschädigt werden, wenn ein Benutzer eine Anwendung beendet, ohne Database- oder Recordset-Objekte und das Microsoft Jet-Datenbankmodul zu schließen. Microsoft Windows kann in solchen Situationen keine Datenpuffer auf die Festplatte schreiben. Sie vermeiden Beschädigungen von Datenbanken, indem Sie Prozeduren zum Beenden von Anwendungen und zum Herunterfahren von Systemen einrichten, die dafür sorgen, daß alle gepufferten Seiten in der Datenbank gespeichert werden. In einigen Fällen sind möglicherweise unterbrechungsfreie Stromversorgungen erforderlich, um ungewollte Datenverluste bei Spannungsschwankungen zu vermeiden.

Anmerkung   Nach dem Reparieren einer Datenbank sollten Sie diese mit der CompactDatabase-Methode komprimieren, um die Dateifragmentierung zu entfernen und Speicherplatz auf der Festplatte freizugeben.


Requery-Methode

Aktualisiert die Daten in einem Recordset-Objekt, indem die Abfrage, auf dem das Objekt basiert, erneut ausgeführt wird.

Syntax

Datensatzgruppe.Requery NeuesQuerDef

Die Syntax der Requery-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Datensatzgruppe	Eine Objektvariable, die ein bestehendes Microsoft Jet-Recordset-Objekt vom Typ Dynaset, Snapshot oder Vorwärts, oder ein ODBCDirect-Recordset-Objekt darstellt.
NeuesQueryDef	Optional. Ein Wert vom Typ Variant, der den Wert der Name-Eigenschaft eines QueryDef-Objekts darstellt (gilt nur für Microsoft Jet-Arbeitsbereiche).
Bemerkungen

Mit dieser Methode sorgen Sie dafür, daß ein Recordset-Objekt die aktuellsten Daten enthält. Diese Methode füllt das aktuelle Recordset-Objekt erneut auf, indem entweder die aktuellen Abfrageparameter oder (in einem Microsoft Jet-Arbeitsbereich) die neuen Abfrageparameter verwendet werden, die durch das Argument NeuesQueryDef zur Verfügung gestellt werden.

In einem ODBCDirect-Arbeitsbereich führt Requery eine asynchrone Abfrage aus, wenn die Originalabfrage asynchron war.

Wenn Sie das Argument NeuesQueryDef nicht angeben, wird das Recordset-Objekt aufgrund derselben Abfragendefinition und Parameter wieder aufgefüllt, die bereits bei der ursprünglichen Auffüllung des Recordset-Objekts verwendet wurden. Alle Änderungen an den zugrundeliegenden Daten werden während dieser erneuten Auffüllung widergespiegelt. Wenn kein QueryDef-Objekt zum Erstellen des Recordset-Objekts verwendet wird, wird das Recordset-Objekt vollkommen neu erstellt.

Wenn Sie das ursprüngliche QueryDef-Objekt im Argument NeuesQueryDef angeben, wird das Recordset-Objekt erneut abgefragt, wobei die Parameter verwendet werden, die durch das QueryDef-Objekt angegeben werden. Alle Änderungen an den zugrundeliegenden Daten werden während dieser erneuten Auffüllung widergespiegelt. Zur Widerspiegelung aller Änderungen an den Werten der Abfrageparameter des Recordset-Objekts müssen Sie das Argument NeuesQueryDef bereitstellen.

Wenn ein anderes QueryDef-Objekt als das ursprünglich zum Erstellen des Recordset-Objekts verwendete angegeben wurde, wird das Recordset-Objekt vollkommen neu erstellt.

Wenn Sie Requery verwenden, wird der erste Datensatz im Recordset-Objekt der aktuelle Datensatz.

Sie können die Requery-Methode nicht bei Recordset-Objekten vom Typ Dynaset oder Snapshot verwenden, deren Restartable-Eigenschaft auf False festgelegt wurde. Wenn Sie jedoch das optionale Argument NeuesQueryDef angeben, wird die Restartable-Eigenschaft ignoriert.

Wenn sowohl die Einstellung der BOF- als auch die Einstellung der EOF-Eigenschaft des Recordset-Objekts dem Wert True entspricht, nachdem Sie die Requery-Methode ausgeführt haben, hat die Abfrage keine Datensätze zurückgegeben, und das Recordset-Objekt enthält keine Daten.


Seek-Methode

Sucht einen Datensatz in einem indizierten Recordset-Objekt vom Typ Tabelle, der die angegebenen Kriterien für den aktuellen Index erfüllt, und macht diesen Datensatz zum aktuellen Datensatz (gilt nur für Microsoft Jet-Arbeitsbereiche).

Syntax

Datensatzgruppe.Seek Vergleich, Schlüssel1, Schlüssel2...Schlüssel13

Die Syntax der Seek-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Datensatzgruppe	Eine Objektvariable, die ein bestehendes Recordset-Objekt vom Typ Tabelle darstellt, das einen definierten Index besitzt, der durch die Index-Eigenschaft des Recordset-Objekts angegeben ist.
Vergleich	Einer der folgenden Zeichenfolgenausdrücke: <, <=, =, >= oder >.
Schlüssel1, Schlüssel2...Schlüssel13	Ein oder mehrere Werte, die Feldern im aktuellen Index eines Recordset-Objekts entsprechen, wie durch die zugehörige Einstellung für die Index-Eigenschaft angegeben ist. Sie können bis zu 13 Schlüssel-Argumente angeben.
Bemerkungen

Sie müssen den aktuellen Index mit der Index-Eigenschaft festlegen, bevor Sie Seek verwenden. Wenn der Index ein nicht eindeutiges Schlüsselfeld kennzeichnet, sucht Seek nach dem ersten Datensatz, der die Kriterien erfüllt.

Die Seek-Methode durchsucht die angegebenen Schlüsselfelder und findet den ersten Datensatz, der die durch Vergleich und Schlüssel1 angegebenen Kriterien erfüllt. Wenn dieser Datensatz gefunden wurde, wird er zum aktuellen Datensatz, und die NoMatch-Eigenschaft wird auf False gesetzt. Wenn die Seek-Methode keinen passenden Datensatz findet, wird die NoMatch-Eigenschaft auf True gesetzt, und der aktuelle Datensatz ist undefiniert.

Wenn Vergleich gleich (=), größer gleich (>=) oder größer als (>) ist, beginnt Seek am Anfang des Indexes.

Wenn Vergleich kleiner (<) oder kleiner gleich (<=) ist, beginnt Seek am Ende des Indexes und sucht rückwärts, es sei denn, am Ende treten mehrfache Indexeinträge auf. In diesem Fall beginnt Seek an einem Eintrag, der willkürlich aus den Indexeinträgen am Ende des Indexes gewählt wird.

Sie müssen Werte für alle Felder angeben, die im Index definiert sind. Wenn Sie Seek mit einem Mehrspaltenindex verwenden und keinen Vergleichswert für alle Felder im Index angeben, können Sie den Gleich-Operator (=) in dem Vergleich nicht verwenden. Dies liegt darin begründet, daß manche der Kriterienfelder (Schlüssel2, Schlüssel3 usw.) den Standardwert Null erhalten, wodurch eine Übereinstimmung unwahrscheinlich ist. Der Gleich-Operator funktioniert daher nur korrekt, wenn ein Datensatz existiert, der außer dem Schlüssel, nachdem Sie suchen, nur Null enthält. Sie sollten stattdessen den Größer-Gleich-Operator (>=) verwenden.

Das Argument Schlüssel1 muß denselben Felddatentyp haben wie das entsprechende Feld im aktuellen Index. Wenn sich z.B. der aktuelle Index auf ein Zahlenfeld (wie „Angestellten-Nr„) bezieht, muß Schlüssel1 numerisch sein. Analog dazu muß Schlüssel1 eine Zeichenfolge sein, wenn sich der aktuelle Index auf ein Textfeld (wie „Nachname„) bezieht.

Sie benötigen keinen aktuellen Datensatz, wenn Sie Seek verwenden.

Mit der Indexes-Auflistung können Sie vorhandene Indizes auflisten.

Sie können einen Datensatz in einem Recordset-Objekt vom Typ Dynaset oder Snapshot auffinden, der eine bestimmte Bedingung erfüllt, die sich nicht mit bestehenden Indizes deckt, indem Sie eine der Find-Methoden verwenden. Wenn nicht nur die Datensätze, die eine bestimmte Bedingung erfüllen, sondern alle Datensätze durchsucht werden sollen, verwenden Sie die Move-Methoden, um sich von Datensatz zu Datensatz zu bewegen.

Sie können die Seek-Methode nicht für eine verknüpfte Tabelle verwenden, weil verknüpfte Tabellen nicht als Recordset-Objekte vom Typ Tabelle geöffnet werden können. Wenn Sie dagegen die OpenDatabase-Methode verwenden, um eine Datenbank mit installierbarem ISAM (nicht-ODBC) direkt zu öffnen, können Sie Seek für die Tabellen in dieser Datenbank verwenden.

In einem ODBCDirect-Arbeitsbereich sind die Find- und Seek-Methoden nicht für jeden Recordset-Objekttyp verfügbar, da die Ausführung von Find oder Seek über eine ODBC-Verbindung im Netzwerk nicht sehr effizient ist. Stattdessen sollten Sie die Abfrage (Verwendung des Arguments Quelle in der OpenRecordset-Methode) mit einem geeigneten WHERE-Abschnitt versehen, welche die zurückzugebenden Datensätze auf solche beschränkt, die den ansonsten in Find oder Seek anzugebenden Bedingungen entsprechen.


Synchronize-Methode

Synchronisiert zwei Replikate. (gilt nur für Microsoft Jet-Datenbanken).

Syntax

Datenbank.Synchronize Pfadname, Austausch

Die Syntax der Synchronize-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Datenbank	Eine Objektvariable, die auf ein replizierbares Database-Objekt verweist.
Pfadname	Ein Wert vom Typ String, der den Pfad zur Zieldatenbank enthält, mit der die Datenbank synchronisiert wird. Die Namenserweiterung .MDB kann optional ausgelassen werden.
Austausch	Optional. Eine Konstante, die anzeigt, in welche Richtung die Änderungen zwischen zwei Datenbanken synchronisiert werden sollen, wie unter Einstellungen angegeben.
Einstellungen

Sie können die folgenden Konstanten für das Argument Austausch verwenden. Sie können eine der ersten drei Konstanten mit oder ohne der vierten Konstante verwenden.

Konstante	Beschreibung
dbRepExportChanges	Sendet Änderungen von Datenbank an Pfadname.
dbRepImportChanges	Sendet Änderungen von Pfadname an Datenbank.
dbRepImpExpChanges	(Voreinstellung) Sendet Änderungen von Datenbank an Pfadname, und umgekehrt (bidirektionaler Austausch).
dbRepSyncInternet	Tauscht Daten zwischen Dateien aus, die über einen Internetpfad verbunden sind.
Bemerkungen

Die Synchronize-Methode löst einen Austausch der Daten und Änderungen am Entwurf zwischen den beiden Datenbanken aus. Änderungen am Entwurf werden immer zuerst vorgenommen. Beide Datenbanken müssen sich auf der gleichen Entwurfsebene befinden, bevor Daten ausgetauscht werden können. Ein Austausch vom Typ dbRepExportChanges kann z.B. Entwurfsänderungen in einem Replikat verursachen, obwohl die Datenänderungen nur von Datenbank in Richtung Pfadname erfolgen.

Das in Pfadname angegebene Replikat muß Bestandteil derselben Replikatgruppe sein. Wenn beide Replikate dieselbe Einstellung für die ReplicaID-Eigenschaft haben oder Entwurfs-Master zweier unterschiedlicher Replikatgruppen sind, schlägt die Synchronisierung fehl.

Wenn Sie zwei Replikate über das Internet synchronisieren wollen, müssen Sie die Konstante dbRepSyncInternet verwenden. In diesem Fall geben Sie eine URL-Adresse (URL=Uniform Resource Locator) für das Argument Pfadname anstelle eines lokalen Netzwerkpfads an.

Anmerkung   Sie können kein Teilreplikat mit anderen teilweisen Replikaten synchronisieren. Weitere Informationen finden Sie unter der PopulatePartial-Methode.

Die Synchronisierung über das Internet erfordert den Replikat-Manager, der nur in der Entwicklerversion von Microsoft Office 97 verfügbar ist.


Update-Methode

Speichert den Inhalt des Kopierpuffers in einem aktualisierbaren Recordset-Objekt.

Syntax

Datensatzgruppe.Update (Typ, Wirkung )

Die Syntax der Update-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
Datensatzgruppe	Eine Objektvariable, die ein geöffnetes, aktualisierbares Recordset-Objekt darstellt.
Typ	Optional. Eine Konstante, die den Typ der Aktualisierung kennzeichnet, wie unter Einstellungen festgelegt (gilt nur für ODBCDirect-Arbeitsbereiche).
Wirkung	Optional. Ein Wert vom Typ Boolean, der kennzeichnet, ob die Änderungen in der Datenbank durchgeführt werden sollen, ungeachtet dessen, ob die zugrundeliegenden Daten von einem anderen Benutzer seit dem Aufrufen von AddNew, Delete oder Edit geändert wurden. Entspricht der Wert True, werden die Änderungen durchgeführt und von anderen Benutzern getätigte Änderungen überschrieben. Entspricht der Wert False (Voreinstellung), verursachen die von anderen Benutzern während der Aktualisierung getätigten Änderungen, daß die Aktualisierung für die betreffenden Änderungen nicht erfolgreich ist. Es tritt kein Fehler auf, jedoch bezeichnen die BatchCollisionCount- und BatchCollisions-Eigenschaften die Nummern der Konflikte bzw. die betroffenen Zeilen (gilt nur für ODBCDirect-Arbeitsbereiche).
Einstellungen

Sie können die folgenden Werte für das Argument Typ verwenden. Sie können die nicht standardmäßigen Werte nur verwenden, wenn die Stapelaktualisierung aktiviert ist.

Konstante	Beschreibung
dbUpdateRegular	Voreinstellung. Anhängende Änderungen werden nicht gepuffert und unmittelbar auf die Festplatte geschrieben.
dbUpdateBatch	Alle anhängenden Änderungen im Aktualisierungspuffer werden auf die Festplatte geschrieben.
dbUpdateCurrentRecord	Nur die anhängenden Änderungen des aktuellen Datensatzes werden auf die Festplatte geschrieben.
Bemerkungen

Mit Update speichern Sie den aktuellen Datensatz und alle daran vorgenommenen Änderungen.

Vorsicht   Änderungen am aktuellen Datensatz gehen in den folgenden Situationen verloren:

•	Sie verwenden die Edit- oder AddNew-Methode und bewegen sich dann zu einem anderen Datensatz, ohne zuvor Update zu verwenden.

•	Sie verwenden Edit oder AddNew und verwenden dann Edit oder AddNew erneut, ohne zuvor Update zu verwenden.

•	Sie legen die Bookmark-Eigenschaft auf einen anderen Datensatz fest.

•	Sie schließen die durch Datensatzgruppe angegebene Datensatzgruppe, ohne zuvor Update zu verwenden.

•	Sie brechen Edit über CancelUpdate ab.

Zum Bearbeiten eines Datensatzes verwenden Sie die Edit-Methode, um den Inhalt des aktuellen Datensatzes in den Kopierpuffer zu kopieren. Falls Sie nicht zuerst Edit verwenden, tritt ein Fehler auf, wenn Sie Update aufrufen oder versuchen, den Wert eines Feldes zu ändern.

Sie können in einem ODBCDirect-Arbeitsbereich Stapelaktualisierungen ausführen, wenn die Cursor-Bibliothek Mehrfachaktualisierungen unterstützt und das Recordset-Objekt mit der Option teilweise Stapelsperrung geöffnet wurde.

Wenn in einem Microsoft Jet-Arbeitsbereich die Einstellung der LockEdits-Eigenschaft des Recordset-Objekts dem Wert True (vollständig gesperrt) in einer Mehrbenutzerumgebung entspricht, bleibt der Datensatz von dem Zeitpunkt, zu dem Edit aufgerufen wird, bis zum Ausführen der Update-Methode oder dem Abbruch der Bearbeitung gesperrt. Wenn die LockEdits-Eigenschaft auf den Wert False (eingeschränkt gesperrt) eingestellt ist, wird der Datensatz gesperrt und mit der unbearbeiteten Version des Datensatzes verglichen, unmittelbar bevor er in der Datenbank aktualisiert wird. Wenn sich der Datensatz seit dem Aufrufen der Edit-Methode verändert hat, kann die Update-Operation nicht durchgeführt werden. Mit Microsoft Jet verbundene ODBC- und installierbare ISAM-Datenbanken verwenden immer teilweises Sperren. Sie setzen die Update-Operation mit Ihren Änderungen fort, indem Sie die Update-Methode erneut aufrufen. Sie übernehmen den Datensatz so, wie er vom anderen Benutzer geändert wurde, indem Sie den aktuellen Datensatz über Move 0 aktualisieren.

Anmerkung   Zum Hinzufügen, Bearbeiten oder Löschen eines Datensatzes muß für den Datensatz der zugrundeliegenden Datenquelle ein eindeutiger Index bestehen. Falls nicht, tritt der Fehler „Zugriff verweigert“ beim Aufrufen der AddNew-, Delete- oder Edit-Methode in einem Microsoft Jet-Arbeitsbereich auf, oder der Fehler „Ungültiges Argument“ beim Aufrufen von Update in einem ODBCDirect-Arbeitsbereich.


Cancel-Methode

Beendet die anstehende Ausführung eines asynchronen Methodenaufrufs (gilt nur für ODBCDirect-Arbeitsbereiche).

Syntax

Objekt.Cancel

Die Syntax der Methode Cancel besteht aus folgenden Teilen:

Teil	Beschreibung
Objekt	Ein Zeichenfolgenausdruck, der ein Objekt in der Liste unter "Betrifft" ergibt.
Bemerkungen

Verwenden Sie die Methode Cancel, um die Ausführung eines asynchronen Aufrufs der Execute-, MoveLast, OpenConnection- oder OpenRecordset-Methode zu beenden (d.h., wenn die Methode mit der Option dbRunAsync aufgerufen wurde). Cancel gibt einen Laufzeitfehler zurück, wenn dbRunAsync beim Aufrufen der zu beendenden Methode nicht benutzt wurde.

Die folgende Tabelle zeigt, welche Task beendet wird, wenn Sie die Methode Cancel auf eine bestimmte Objektart anwenden.

Objekttyp	Beendet die asynchrone Methode
Connection	Execute oder OpenConnection
QueryDef	Execute
Recordset	MoveLast oder OpenRecordset
Es wird ein Fehler gemeldet, falls Sie nach Aufrufen der Cancel-Methode auf das Objekt Bezug nehmen, das durch einen asynchronen OpenConnection- oder OpenRecordset-Aufruf erstellt worden wäre (d.h., auf das Connection- oder Recordset-Objekt, dessen Cancel-Methode Sie aufgerufen haben).


NextRecordset-Methode

Gibt die nächste Datensatzgruppe zurück, falls vorhanden, die bei einer mehrteiligen Auswahlabfrage in einem OpenRecordset-Aufruf ermittelt wurde, und liefert einen Wert vom Typ Boolean, der anzeigt, ob mindestens noch ein Datensatz aussteht (gilt nur für ODBCDirect-Arbeitsbereiche).

Syntax

Set Boolean = Datensatzgruppe.NextRecordset

Die Syntax der NextRecordset-Methode besteht aus folgenden Teilen:

Teil	Beschreibung
Boolean	Eine Variable vom Typ Boolean. True zeigt an, daß die nächste Datensatzgruppe in Datensatzgruppe verfügbar ist. False bedeutet, daß keine weiteren Datensätze ausstehen, und daß Datensatzgruppe nun leer ist.
Datensatzgruppe	Eine vorhandene Variable vom Typ Recordset, an die die ausstehenden Datensätze zurückgegeben werden sollen.
Bemerkungen

In einem ODBCDirect-Arbeitsbereich können Sie ein Recordset-Objekt öffnen, das mehr als eine Auswahlabfrage im Argument source von OpenRecordset enthält, oder Sie können die SQL-Eigenschaft eines Auswahlabfrageobjekts QueryDef öffnen wie im folgenden Beispiel.

SELECT Nachname, Vorname FROM Autoren
WHERE Nachname = 'Schmidt';
SELECT Titel, ISBN FROM Titel
WHERE Pub_ID = 9999

Die zurückgegebene Datensatzgruppe wird mit den Ergebnissen der ersten Abfrage geöffnet. Um die Ergebnismengen der nachfolgenden Abfragen zu erhalten, verwenden Sie die NextRecordset-Methode.

Falls mehrere Datensätze verfügbar sind (d.h., der OpenRecordset-Aufruf oder die SQL-Eigenschaft enthielt eine weitere Auswahlabfrage), werden die von der nächsten Abfrage gelieferten Datensätze in die Datensatzgruppe geladen, und NextRecordset gibt True zurück, um anzuzeigen, daß weitere Datensätze verfügbar sind. Wenn keine weiteren Datensätze verfügbar sind (d.h. wenn die Ergebnisse der letzten Abfrage bereits in die Datensatzgruppe geladen waren), gibt NextRecordset den Wert False zurück, und die Datensatzgruppe ist leer.

Sie können auch die Cancel-Methode verwenden, um den Inhalt einer Datensatzgruppe zu entfernen. Allerdings entfernt Cancel auch alle noch nicht geladenen Datensätze.


OpenConnection-Methode

Öffnet ein Connection-Objekt auf einer ODBC-Datenquelle (gilt nur für ODBCDirect-Arbeitsbereiche).

Syntax

Set Connection = Workspace.OpenConnection (Name, Optionen, Readonly, Connect)

Die Syntax der OpenConnection-Methode besteht aus folgenden Teilen:

Teil	Beschreibung
Connection	Eine Connection-Objektvariable, der die neue Verbindung zugewiesen werden soll.
Workspace	Optional. Eine Variable vom Datentyp Workspace-Objekt, die auf das vorhandene Workspace-Objekt verweist, das die neue Verbindung enthalten soll.
Name	Ein Zeichenfolgenausdruck. Weitere Information finden Sie unter Bemerkungen.
Optionen	Optional. Ein Variant-Wert, der verschiedene Optionen für die Verbindung einstellt, wie unter Einstellungen beschrieben. Der ODBC-Treiber-Manager fragt den Benutzer anhand dieser Einstellungen nach Verbindungsinformationen wie z.B. dem Namen der Datenquelle (DSN), dem Benutzernamen oder dem Kennwort.
Readonly	Optional. Ein Wert vom Typ Boolean, der True ist, falls die Verbindung schreibgeschützt geöffnet werden soll, und False, wenn die Verbindung für Lese- und Schreibzugriff geöffnet werden soll (Standardwert).
Connect	Optional. Eine ODBC-Connect-Zeichenfolge. Weitere Informationen zu den einzelnen Elemente und zur Syntax dieser Zeichenfolge finden Sie unter Connect-Eigenschaft. Die Zeichenfolge muß mit "ODBC;" beginnen. Falls Connect nicht angegeben wird, werden UID und/oder PWD aus den UserName- und Password-Eigenschaften des Workspace-Objekts übernommen.
Einstellungen

Das Argument Optionen legt fest, ob und wann der Benutzer beim Aufbau der Verbindung gefragt und ob die Verbindung asynchron geöffnet werden soll. Sie können eine der folgenden Konstanten verwenden.

Konstante	Beschreibung
dbDriverNoPrompt	Der ODBC-Treiber-Manager verwendet die Verbindungszeichenfolge in dbname und Connect. Falls Sie nicht genügend Informationen angegeben haben, tritt ein Laufzeitfehler auf.
DbDriverPrompt	Der ODBC-Treiber-Manager zeigt das Dialogfeld ODBC-Datenquellen an, das alle relevanten Informationen aus dbname oder Connect enthält. Die Verbindungszeichenfolge wird aus dem DSN aufgebaut, den der Benutzer über die Dialogfelder wählt, oder es wird der Standard-DSN benutzt, falls der Benutzer keine Angaben macht.
DbDriverComplete	Standardeinstellung. Falls das Argument Connect alle zum Verbindungsaufbau nötigen Informationen enthält, verwendet der ODBC-Treiber-Manager die Zeichenfolge in Connect. Andernfalls geht er so vor, als ob dbDriverPrompt angegeben wäre.
DbDriverCompleteRequired	Diese Option entspricht dbDriverComplete, aber der ODBC-Treiber unterdrückt Fragen nach Informationen, die nicht zum Verbindungsaufbau benötigt werden.
dbRunAsync	Führt die Methode asynchron aus. Die Konstante kann mit jeder anderen Konstante Optionen verwendet werden.
Bemerkungen

Verwenden Sie die OpenConnection-Methode zum Aufbau einer Verbindung zu einer ODBC-Datenquelle aus einem ODBCDirect-Arbeitsbereich heraus. Die OpenConnection-Methode ähnelt der OpenDatabase-Methode, ist aber nicht äquivalent. Der Hauptunterschied besteht darin, daß OpenConnection nur in einem ODBCDirect-Arbeitsbereich verfügbar ist..

Wenn Sie im Argument Connect den Namen (DSN) einer registrierten ODBC-Datenquelle angeben, kann das Argument name eine beliebige, gültige Zeichenfolge enthalten, die auch als Name-Eigenschaft des Connection-Objekts verwendet wird. Falls das Argument Connect keinen gültigen DSN enthält, muß Name einen gültigen ODBC-DSN enthalten, der auch als Name-Eigenschaft verwendet wird. Falls weder Name noch Connect einen gültigen DSN enthält, kann der ODBC-Treiber-Manager (über das Argument Optionen) veranlaßt werden, den Benutzer nach den nötigen Verbindungsinformationen zu fragen. Der so erhaltene DSN wird dann als Name-Eigenschaft verwendet.

OpenConnection gibt ein Connection-Objekt zurück, das Informationen über die Verbindung enthält. Das Connection-Objekt ähnelt einem Database-Objekt. Der wesentliche Unterschied besteht darin, daß ein Database-Objekt normalerweise eine Datenbank darstellt, obwohl es in einem Microsoft Jet-Arbeitsbereich auch zur Darstellung einer Verbindung zu einer ODBC-Datenquelle verwendet werden kann.


SetOption-Methode

Überschreibt zeitweilig die Werte des Microsoft Jet-Datenbankmoduls in der Windows-Registrierung (gilt nur für Microsoft Jet-Arbeitsbereiche).

Syntax

DBEngine.SetOption Parameter, neuerWert

Die Syntax der SetOption-Methode besteht aus folgenden Teilen:

Teil	Beschreibung
Parameter	Eine Long-Konstante wie unter Einstellungen beschrieben.
NeuerWert	Ein Variant-Wert, dem Sie Parameter zuweisen möchten.
Einstellungen

Jede Konstante bezieht sich auf den entsprechenden Registrierungsschlüssel im Pfad Jet\3.5\Engines\Jet 3.5\ (d.h., dbSharedAsyncDelay entspricht dem Schlüssel Jet\3.5\Engines\Jet 3.5\SharedAsyncDelay usw.).

Konstante	Beschreibung
dbPageTimeout	Der Schlüssel PageTimeout
dbSharedAsyncDelay	Der Schlüssel SharedAsyncDelay
dbExclusiveAsyncDelay	Der Schlüssel ExclusiveAsyncDelay
dbLockRetry	Der Schlüssel LockRetry
dbUserCommitSync	Der Schlüssel UserCommitSync
dbImplicitCommitSync	Der Schlüssel ImplicitCommitSync
dbMaxBufferSize	Der Schlüssel MaxBufferSize
dbMaxLocksPerFile	Der Schlüssel MaxLocksPerFile
dbLockDelay	Der Schlüssel LockDelay
dbRecycleLVs	Der Schlüssel RecycleLVs
dbFlushTransactionTimeout	Der Schlüssel FlushTransactionTimeout
Bemerkungen

Verwenden Sie die SetOption-Methode, um Registrierungsschlüssel zur Laufzeit zu überschreiben. Neue Werte, die mit der SetOption-Methode festgelegt wurden, bleiben aktiv bis sie durch einen weiteren Aufruf von SetOption geändert werden oder bis das DBEngine-Objekt geschlossen wird.

Weitere Informationen zur Funktion von Registrierungsschlüsseln und deren korrekte Werte finden Sie unter Initialisieren des Microsoft Jet 3.5-Datenbankmoduls.


PopulatePartial-Methode

Alle Änderungen in einem Teilreplikat werden mit dem vollständigen Replikat synchronisiert, alle Datensätze im Teilreplikat werden gelöscht und das Teilreplikat wird wieder aufgefüllt, basierend auf dem aktuellen Replikatsfilter (gilt nur für Microsoft Jet-Datenbanken).

Syntax

database.PopulatePartial dbname

Die Syntax der PopulatePartial-Methode besteht aus folgenden Teilen.

Teil	Beschreibung
database	Eine Objektvariable, die auf das Teilreplikat Database-Objekt verweist, das Sie auffüllen möchten.
Dbname	Ein String, der den Pfad und den Namen des vollständigen Replikats angibt, aus dem die Datensätze aufgefüllt werden.
Bemerkungen

Wenn Sie ein Teilreplikat mit einem vollständigen Replikat synchronisieren, können in dem Teilreplikat "verwaiste" Datensätze erstellt werden. Beispielsweise haben Sie in der Tabelle "Kunden" die ReplicaFilter-Eigenschaft auf "Region = 'CA'" festgelegt. Wenn ein Benutzer die Region eines Kunden von CA auf NY in dem Teilreplikat ändert und die Synchronisierung mit der Synchronize-Methode durchgeführt wird, wird die Änderung an das vollständige Replikat weitergegeben, aber der Datensatz mit dem Eintrag NY im Teilreplikat ist verwaist, da er nicht den Kriterien des Replikatsfilters entspricht.

Mit der PopulatePartial-Methode können Sie das Problem der verwaisten Datensätze lösen. Die PopulatePartial-Methode gleicht der Synchronize-Methode, aber sie synchronisiert alle Änderungen mit dem vollständigen Replikat, löscht alle Datensätze im Teilreplikat und füllt dann das Teilreplikat basierend auf den aktuellen Replikatsfiltern wieder auf. Auch wenn sich die Replikatsfilter nicht verändert haben, löscht PopulatePartial immer alle Datensätze im Teilreplikat und füllt es dann basierend auf den aktuellen Filtern wieder auf.

Im allgemeinen verwenden Sie die PopulatePartial-Methode immer dann, wenn Sie ein Teilreplikat erstellen und Ihre Replikatsfilter ändern. Wenn Ihre Anwendung die Replikatsfilter ändert, gehen Sie wie folgt vor.

1	Synchronisieren Sie das vollständige Replikat mit dem Teilreplikat, in dem die Filter verändert werden.

2	Führen Sie die gewünschten Änderungen am Replikatsfilter mit den Eigenschaften ReplicaFilter und PartialReplica durch.

3	Rufen Sie die PopulatePartial-Methode auf, um alle Datensätze aus dem Teilreplikat zu löschen und alle Datensätze, die den neuen Replikatsfilterkriterien entsprechen, aus dem vollständigen Replikat zu übertragen.

Wenn ein Replikatsfilter geändert wurde und die Synchronize-Methode aufgerufen wird, ohne daß vorher die PopulatePartial-Methode aufgerufen wird, tritt ein auffangbarer Fehler auf.

Die PopulatePartial-Methode kann nur in einem Teilreplikat aufgerufen werden, das im Exklusivmodus geöffnet wurde. Die PopulatePartial-Methode kann auch nicht innerhalb von Code aufgerufen werden, der in einem Teilreplikat ausgeführt wird. Statt dessen öffnen Sie das Teilreplikat exklusiv aus dem vollständigen Replikat oder aus der Datenbank und rufen dann die PopulatePartial-Methode auf.

Anmerkung   Obwohl die PopulatePartial-Methode eine einseitige Synchronisierung durchführt, bevor das Teilreplikat geleert und wieder aufgefüllt wird, rufen Sie trotzdem die Synchronize-Methode auf, bevor Sie PopulatePartial aufrufen. Falls der Aufruf der Synchronize-Methode fehlschlägt, tritt ein auffangbarer Fehler auf. Mit diesem Fehler können Sie entscheiden, ob Sie mit der PopulatePartial-Methode fortfahren möchten (die alle Datensätze im Teilreplikat löscht). Wenn nur PopulatePartial aufgerufen wird und ein Fehler während der Synchronisierung auftritt, werden die Datensätze im Teilreplikat trotzdem gelöscht, was nicht unbedingt erwünscht ist.


AbsolutePosition-Eigenschaft

Gibt die relative Datensatznummer des aktuellen Datensatzes eines Recordset-Objekts zurück oder legt sie fest.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist eine Ganzzahl vom Typ Long im Bereich von 0 bis 1 weniger als die Anzahl der Datensätze im Recordset-Objekt. Die Ganzzahl entspricht der Ordinalposition des aktuellen Datensatzes in dem Recordset-Objekt, das durch das Objekt angegeben wird.

Bemerkungen

Mit Hilfe der AbsolutePosition-Eigenschaft können Sie den aktuellen Datensatzzeiger auf einen bestimmten Datensatz setzen, indem Sie die zugehörige Ordinalposition in einem Recordset-Objekt vom Typ Dynaset oder Snapshot angeben. Sie können die aktuelle Datensatznummer auch ermitteln, indem Sie die Einstellung der AbsolutePosition-Eigenschaft überprüfen.

Der Wert der AbsolutePosition-Eigenschaft beginnt mit 0 (d.h. der Wert 0 verweist auf den ersten Datensatz im Recordset-Objekt). Er kann nicht auf einen Wert größer als oder gleich der Anzahl der aufgefüllten Datensätze festgelegt werden; in diesem Fall wird ein auffangbarer Fehler ausgelöst. Sie können die Anzahl der aufgefüllten Datensätze im Recordset-Objekt ermitteln, indem Sie die Einstellung der RecordCount-Eigenschaft überprüfen. Die maximal zulässige Einstellung für AbsolutePosition ist eins weniger als der Wert von RecordCount.

Wenn es keinen aktuellen Datensatz gibt oder das Recordset-Objekt keine Datensätze enthält, gibt AbsolutePosition den Wert -1 zurück. Wenn der aktuelle Datensatz gelöscht wird, ist der Wert der AbsolutePosition-Eigenschaft undefiniert, und ein auffangbarer Fehler wird ausgelöst, wenn auf die Eigenschaft verwiesen wird. Neue Datensätze werden am Ende der Folge angefügt.

Diese Eigenschaft ist nicht als Ersatz-Datensatznummer gedacht. Sie sollten Lesezeichen verwenden, um eine bestimmte Position zu speichern und zu ihr zurückzukehren. Lesezeichen stellen auch die einzige Möglichkeit dar, den aktuellen Datensatz übergreifend für alle Arten von Recordset-Objekten zu positionieren. Insbesondere ändert sich die Position eines bestimmten Datensatzes, wenn weiter vorne stehende Datensätze gelöscht werden. Es ist auch nicht sichergestellt, daß ein bestimmter Datensatz die absolute Position beibehält, wenn das Recordset-Objekt neu erstellt wird, da die Reihenfolge einzelner Datensätze in einem Recordset-Objekt nur garantiert wird, wenn es mit einer SQL-Anweisung unter Verwendung eines ORDER BY-Abschnitts erstellt wird.

Anmerkungen

•	Wenn in einem neu geöffneten, nicht aufgefülltem Recordset die AbsolutePosition-Eigenschaft auf einen Wert, der größer als Null ist, eingestellt wird, wird dadurch ein auffangbarer Fehler ausgelöst. Füllen Sie das Recordset-Objekt zuvor mit der MoveLast-Methode auf.

•	Die AbsolutePosition-Eigenschaft steht nicht zur Verfügung bei einem Recordset-Objekt vom Typ Vorwärts oder bei einem Recordset, das durch eine Pass-Through-Abfrage auf einer mit Microsoft Jet verbundenen ODBC-Datenbank geöffnet wurde.


AllowZeroLength-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der anzeigt, ob eine Null-Zeichenfolge ("") eine gültige Einstellung für die Value-Eigenschaft eines Field-Objekts mit dem Datentyp Text oder Memo ist.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Boolean-Datentyp, der anzeigt, ob ein Wert gültig ist. Die Eigenschaft gibt den Wert True (-1) zurück, wenn das Field-Objekt eine Null-Zeichenfolge akzeptiert, der Standardwert ist False.

Bemerkungen

Bei einem Objekt, das einer Fields-Auflistung noch nicht angefügt wurde, ist diese Eigenschaft mit Lese-/Schreibzugriff.

Bei einer Fields-Auflistung hängt die Verfügbarkeit der AllowZeroLength-Eigenschaft von dem Objekt ab, das die Fields-Auflistung enthält, wie in der folgenden Tabelle gezeigt.

Die Fields-Auflistung gehört zum	Die AllowZeroLength-Eigenschaft
Index-Objekt	Wird nicht unterstützt.
QueryDef-Objekt	Ist schreibgeschützt.
Recordset-Objekt	Ist schreibgeschützt.
Relation-Objekt	Wird nicht unterstützt.
TableDef-Objekt	Hat Lese-/Schreibzugriff.
Sie können diese Eigenschaft zusammen mit den Eigenschaften Required, ValidateOnSet oder ValidationRule verwenden, um die Gültigkeit eines Wertes in einem Feld zu überprüfen.


AllPermissions-Eigenschaft

Gibt alle Berechtigungen zurück, die die aktuelle UserName-Eigenschaft des Container- oder Document-Objekts betreffen. Darin eingeschlossen sind Berechtigungen für den jeweiligen Benutzer und auch Berechtigungen, die ein Benutzer aufgrund der Mitgliedschaft in Gruppen (nur Microsoft Jet-Arbeitsbereich) erhalten (geerbt) hat.

Rückgabewerte

Bei beliebigen Container- oder Document-Objekten ist der Rückgabewert entweder ein Wert vom Typ Long, oder eine Konstante, die folgendes enthält:

Konstante	Beschreibung
dbSecReadDef	Der Benutzer kann die Tabellendefinition sowie Spalten- und Indexinformationen lesen.
DbSecWriteDef	Der Benutzer kann die Tabellendefinition sowie Spalten- und Indexinformationen ändern.
DbSecRetrieveData	Der Benutzer kann Daten vom Document-Objekt abrufen.
DbSecInsertData	Der Benutzer kann Datensätze hinzufügen.
DbSecReplaceData	Der Benutzer kann Datensätze ändern.
DbSecDeleteData	Der Benutzer kann Datensätze löschen.
Zusätzlich kann der Databases-Container oder ein beliebiges Document-Objekt in einer Documents-Auflistung folgendes enthalten:

Konstante	Beschreibung
dbSecDeleteData	Der Benutzer kann Datensätze löschen.
DbSecDBAdmin	Der Benutzer kann eine Datenbank replizieren und das Datenbankkennwort ändern.
DbSecDBCreate	Der Benutzer kann neue Datenbanken erstellen. Diese Einstellung ist nur im Databases-Container der Arbeitsgruppeninformationsdatei (System.mdw).
dbSecDBExclusive	Der Benutzer hat exklusiven Zugriff auf die Datenbank.
dbSecDBOpen	Der Benutzer kann die Datenbank öffnen.
Bemerkungen

Diese Eigenschaft unterscheidet sich von der Permissions-Eigenschaft, die nur die Berechtigungen für einen bestimmten Benutzer liefert und keine Berechtigungen beinhaltet, die der Benutzer aufgrund seiner Mitgliedschaft in Gruppen ebenfalls haben kann. Wenn der aktuelle Wert der UserName-Eigenschaft eine Gruppe ist, gibt die Eigenschaft AllPermissions die gleichen Werte wie Permissions-Eigenschaft zurück.


Attributes-Eigenschaft

Legt einen Wert fest oder gibt einen Wert zurück, der ein oder mehrere Merkmale eines Field-, Relation- oder TableDef-Objekts anzeigt.

Einstellungen und Rückgabewerte

Der Datentyp der Einstellung oder des Rückgabewerts ist Long und der Standardwert beträgt 0.

Bei einem Field-Objekt gibt der Wert Merkmale des Feldes an, das durch das Field-Objekt dargestellt wird. Der Wert kann aus einer Kombination aus den folgenden Konstanten bestehen.

Konstante	Beschreibung
dbAutoIncrField	Der Feldwert wird für neue Datensätze automatisch um eins erhöht (mit dem Ergebnis Long Integer) und ergibt einen eindeutigen Wert, der nicht geändert werden kann (in einem Microsoft Jet-Arbeitsbereich, werden nur Microsoft Jet Datenbank (.mdb)-Tabellen unterstützt).
DbDescending	Das Feld wird in absteigender Reihenfolge (Z bis A oder 100 bis 0) sortiert (nur bei einem Field-Objekt in einer Fields-Auflistung eines Index-Objekts). Wenn Sie diese Konstante nicht angeben, wird das Feld in aufsteigender Reihenfolge (A bis Z oder 0 bis 100) sortiert (Voreinstellung). Dies ist der Standardwert für Index- und TableDef-Felder (nur Microsoft Jet-Arbeitsbereich).
DbSystemField	Das Feld speichert Informationen für Replikate; dieser Feldtyp kann nicht gelöscht werden (gilt nur für Microsoft Jet-Arbeitsbereiche).
DbFixedField	Die Feldgröße ist festgelegt (Standard bei numerischen Feldern).
DbHyperlinkField	Das Feld enthält Hyperlink-Informationen (nur Memofelder).
DbUpdatableField	Der Feldwert kann geändert werden.
DbVariableField	Die Feldgröße kann geändert werden (nur Textfelder).
Bei einem Relation-Objekt gibt der Wert die Merkmale der Beziehung an, die durch das Relation-Objekt dargestellt wird. Der Wert kann eine Kombination aus den folgenden Konstanten sein:

Konstante	Beschreibung
dbRelationUnique	Es handelt sich um eine 1:1-Beziehung.
DbRelationDontEnforce	Die referentielle Integrität der Beziehung wird nicht erzwungen.
dbRelationInherited	Die Beziehung existiert zwischen zwei verknüpften Tabellen aus einer Datenbank, die nicht die aktuelle Datenbank ist.
dbRelationUpdateCascade	Aktualisierungen werden weitergegeben.
dbRelationDeleteCascade	Löschvorgänge werden weitergegeben.
Anmerkung   Wenn Sie die Attributes-Eigenschaft des Relation-Objekts festlegen, um Weitergabeoperationen zu aktivieren, aktualisiert oder löscht das Microsoft Jet-Datenbankmodul Datensätze in einer oder mehreren anderen Tabellen automatisch, wenn Änderungen an den Primärtabellen auftreten, die in einer Beziehung zu den Tabellen stehen.

Nehmen Sie beispielsweise an, Sie richten eine Beziehung zwischen den Tabellen "Kunden" und "Bestellungen" ein, die eine Löschweitergabe unterstützt. Wenn Sie dann Datensätze aus der Tabelle "Kunden" löschen, werden Datensätze in der Tabelle "Bestellungen", die in Beziehung zu den gelöschten Einträgen aus der Tabelle "Kunden" stehen, ebenfalls gelöscht. Wenn Sie solche Beziehungen zwischen der Tabelle "Bestellungen" und weiteren Tabellen einrichten, werden außerdem Datensätze aus diesen Tabellen automatisch gelöscht, wenn Sie Datensätze aus der Tabelle "Kunden" löschen.

Bei einem TableDef-Objekt gibt der Wert die Merkmale der Tabelle an, die durch das TableDef-Objekt dargestellt wird. Der Wert kann eine Kombination aus folgenden Long-Konstanten sein.

Konstante	Beschreibung
dbAttachExclusive	Bei Datenbanken, die das Microsoft Jet-Datenbankmodul verwenden, ist die Tabelle eine verknüpfte Tabelle, die für den exklusiven Zugriff geöffnet wurde. Sie können die Konstanten auf einem angefügten TableDef-Objekt einer lokalen Tabelle festlegen, nicht jedoch für eine Remote-Tabelle.
DbAttachSavePWD	Bei Datenbanken, die das Microsoft Jet-Datenbankmodul verwenden, sind die Benutzerkennung und das Kennwort für die verknüpfte Tabelle zusammen mit den Verbindungsinformationen gespeichert. Sie können diese Konstanten auf ein hinzugefügtes TableDef-Objekt einer Remote-Tabelle festlegen, nicht jedoch auf eine lokale Tabelle.
DbSystemObject	Die Tabelle ist eine Systemtabelle, die vom Microsoft Jet-Datenbankmodul bereitgestellt wird. Sie können diese Konstante auf ein angefügtes TableDef-Objekt festlegen.
DbHiddenObject	Die Tabelle ist eine verborgene Tabelle, die vom Microsoft Jet-Datenbankmodul bereitgestellt wird. Sie können diese Konstante auf ein angefügtes TableDef-Objekt festlegen.
DbAttachedTable	Die Tabelle ist eine verknüpfte Tabelle aus einer Nicht-ODBC-Datenquelle, z.B. aus einer Microsoft Jet- oder Paradox-Datenbank (schreibgeschützt).
DbAttachedODBC	Die Tabelle ist eine verknüpfte Tabelle aus einer ODBC-Datenbank, z.B. aus einer Datenbank des Microsoft SQL Server (schreibgeschützt).
Bemerkungen

Bei einem Objekt das noch nicht einer Auflistung angefügt wurde, ist diese Eigenschaft mit Lese-/Schreibzugriff.

Bei einem angefügten Field-Objekt hängt die Verfügbarkeit der Attributes-Eigenschaft von dem Objekt ab, das die Fields-Auflistung enthält.

Das Field-Objekt gehört zu einem	Das Attribut ist
Index-Objekt	Mit Lese-/Schreibzugriff, bis das TableDef-Objekt, an das der Index angefügt wird, an ein Database-Objekt angefügt wird. Anschließend ist die Eigenschaft schreibgeschützt.
QueryDef-Objekt	Schreibgeschützt.
Recordset-Objekt	Schreibgeschützt.
Relation-Objekt	Nicht unterstützt.
TableDef-Objekt	Mit Lese-/Schreibzugriff
Bei einem angefügten Relation-Objekt ist die Einstellung der Attributes-Eigenschaft für Objekte schreibgeschützt.

Bei einem angefügten TableDef-Objekt ist die Eigenschaft auf Lese-/Schreibzugriff festgelegt, obwohl nicht alle Konstanten festgelegt werden können, wenn das Objekt angefügt ist, wie unter Einstellungen und Rückgabewerte angemerkt ist.

Beim Festlegen mehrerer Attribute können Sie diese kombinieren, indem Sie die entsprechenden Konstanten aufsummieren. Nicht zulässige Werte werden ignoriert, ohne einen Fehler zu verursachen.


BOF-, EOF-Eigenschaften

•	BOF gibt einen Wert zurück, der anzeigt, ob die Position des aktuellen Datensatzes vor dem ersten Datensatz in einem Recordset-Objekt liegt.

•	EOF gibt einen Wert zurück, der anzeigt, ob die Position des aktuellen Datensatzes hinter dem letzten Datensatz in einem Recordset-Objekt liegt.

Rückgabewerte

Die Rückgabewerte der Eigenschaften BOF und EOF sind Werte vom Typ Boolean.

Die BOF-Eigenschaft liefert True, wenn sich die Position des aktuellen Datensatzes vor dem ersten Datensatz befindet, bzw. False, wenn sich die Position des aktuellen Datensatzes auf oder hinter dem ersten Datensatz befindet.

Die EOF-Eigenschaft liefert True, wenn sich die Position des aktuellen Datensatzes hinter dem letzten Datensatz befindet, bzw. False, wenn sich die Position des aktuellen Datensatzes auf oder vor dem letzten Datensatz befindet.

Bemerkungen

Mit den Eigenschaften BOF und EOF können Sie herausfinden, ob ein Recordset-Objekt Datensätze enthält oder ob Sie beim Bewegen von Datensatz zu Datensatz die Grenzen eines Recordset-Objekts überschritten haben.

Die Position des Zeigers auf den aktuellen Datensatz bestimmt die Rückgabewerte der Eigenschaften BOF und EOF.

Wenn eine der Eigenschaften BOF oder EOF den Wert True hat, gibt es keinen aktuellen Datensatz.

Wenn Sie ein Recordset ohne Datensätze öffnen, haben die Eigenschaften BOF und EOF den Wert True, und die RecordCount-Eigenschaft des Recordset-Objekts hat die Einstellung 0. Wenn Sie ein Recordset-Objekt öffnen, das mindestens einen Datensatz enthält, ist der erste Datensatz der aktuelle Datensatz, und die Eigenschaften BOF und EOF haben den Wert False. Beide behalten solange den Wert False, bis Sie sich mit der MovePrevious- bzw. MoveNext-Methode vor den Anfang oder hinter das Ende des Recordset-Objekts bewegen. Wenn Sie sich vor den Anfang oder hinter das Ende des Recordset-Objekts bewegen, gibt es keinen aktuellen Datensatz, oder es existiert überhaupt kein Datensatz.

Wenn Sie den letzten verbleibenden Datensatz im Recordset-Objekt löschen, können die Eigenschaften BOF und EOF den Wert False behalten, bis Sie versuchen, die Position des aktuellen Datensatzes zu ändern.

Wenn Sie die MoveLast-Methode auf einem Recordset-Objekt mit Datensätzen ausführen, wird der letzte Datensatz zum aktuellen Datensatz. Wenn Sie anschließend die MoveNext-Methode verwenden, wird der aktuelle Datensatz ungültig, und die EOF-Eigenschaft wird auf True festgelegt. Wenn Sie umgekehrt die MoveFirst-Methode auf einem Recordset mit Datensätzen ausführen, wird der erste Datensatz zum aktuellen Datensatz. Wenn Sie anschließend die MovePrevious-Methode verwenden, gibt es keinen aktuellen Datensatz, und die BOF-Eigenschaft wird auf True festgelegt.

Wenn Sie alle Datensätze in einem Recordset-Objekt bearbeiten, werden Sie die Datensätze in der Regel im Code in einer Schleife durchlaufen und MoveNext verwenden, bis die EOF-Eigenschaft den Wert True hat.

Wenn Sie die MoveNext-Methode verwenden, während die EOF-Eigenschaft den Wert True hat, oder die MovePrevious-Eigenschaft, während BOF den Wert True hat, tritt ein Fehler auf.

Die folgende Tabelle zeigt, welche Move-Methoden zusammen mit den verschiedenen Kombinationen der Eigenschaften BOF und EOF zulässig sind.

	MoveFirst, MoveLast	MovePrevious, Move < 0	Move 0	MoveNext, Move > 0
BOF=True, EOF=False	Zulässig	Fehler	Fehler	Zulässig
BOF=False, EOF=True	Zulässig	Zulässig	Fehler	Fehler
Beide True	Fehler	Fehler	Fehler	Fehler
Beide False	Zulässig	Zulässig	Zulässig	Zulässig
Die Zulässigkeit einer Move-Methode bedeutet nicht, daß die Methode auf jeden Fall einen Datensatz findet, sondern zeigt nur, daß die Ausführung der angegebenen Move-Methode zulässig ist und keinen Fehler verursacht. Der Zustand der Eigenschaften BOF und EOF kann sich nach dem Aufrufen einer Move-Methode ändern.

Eine OpenRecordset-Methode ruft intern eine MoveFirst-Methode auf. Deshalb legt die Ausführung der OpenRecordset-Methode auf einer leeren Datensatzgruppe die Eigenschaften BOF und EOF auf True fest. (In der folgenden Tabelle ist beschrieben, wie sich eine MoveFirst-Methode verhält, die nicht erfolgreich ausgeführt werden konnte.)

Alle Move-Methoden, die einen Datensatz gefunden haben, setzen die Eigenschaften BOF und EOF auf False zurück.

In einem Microsoft Jet-Arbeitsbereich erhält die Eigenschaft BOF den Wert False, wenn Sie einem leeren Recordset-Objekt einen Datensatz hinzufügen, während EOF den Wert True behält, wodurch angezeigt wird, daß die aktuelle Position am Ende eines Recordset-Objekts ist. In einem ODBCDirect-Arbeitsbereich erhalten beide, sowohl BOF als auch EOF den Wert False, wodurch angezeigt wird, daß die aktuelle Position der neue Datensatz ist.

Eine Delete-Methode, auch wenn sie den einzigen verbleibenden Datensatz aus einem Recordset-Objekt löscht, ändert die Einstellung für die Eigenschaften BOF oder EOF nicht.

In der folgenden Tabelle wird gezeigt, wie die Move-Methoden, die keinen Datensatz finden, die Einstellungen von BOF und EOF beeinflussen.

	BOF	EOF
MoveFirst, MoveLast	True	True
Move = 0	Keine Änderung	Keine Änderung
MovePrevious,  Move < 0	True	Keine Änderung
MoveNext, Move > 0	Keine Änderung	True


Bookmark-Eigenschaft

Gibt ein Lesezeichen zurück oder legt ein Lesezeichen fest, das den aktuellen Datensatz in einem Recordset-Objekt eindeutig kennzeichnet.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Zeichenfolgenausdruck oder ein Variant-Ausdruck, der als gültiges Lesezeichen interpretiert wird. (Der Datentyp ist ein Variant-Datenfeld mit Daten vom Typ Byte.)

Bemerkungen

Bei einem Recordset, dem nur Tabellen des Microsoft Jet-Datenbankmoduls zugrundeliegen, hat die Bookmarkable-Eigenschaft den Wert True, und die Bookmark-Eigenschaft kann mit dem Recordset verwendet werden. Andere Datenbankprodukte unterstützen Lesezeichen aber nicht unbedingt. Sie können z.B. keine Lesezeichen in einem Recordset-Objekt verwenden, das auf einer verknüpften Paradox-Tabelle ohne Primärschlüssel basiert.

Wenn Sie ein Recordset-Objekt erstellen oder öffnen, haben alle zugehörigen Datensätze bereits ein eindeutiges Lesezeichen. Sie können das Lesezeichen für den aktuellen Datensatz speichern, indem Sie den Wert der Bookmark-Eigenschaft einer Variablen zuweisen. Wenn Sie zu diesem Datensatz zurückkehren möchten, nachdem Sie zu einem anderen Datensatz gewechselt haben, legen Sie die Bookmark-Eigenschaft des Recordset-Objekts auf den Wert dieser Variablen fest.

Es gibt keine Beschränkung für die Anzahl der Lesezeichen, die Sie festlegen können. Sie erstellen ein Lesezeichen für einen Datensatz, der nicht der aktuelle Datensatz ist, indem Sie zum gewünschten Datensatz wechseln und den Wert der Bookmark-Eigenschaft einer String-Variablen zuweisen, die den Datensatz kennzeichnet.

Sie können überprüfen, ob das Recordset-Objekt Lesezeichen unterstützt, indem Sie den Wert der zugehörigen Bookmarkable-Eigenschaft abfragen, bevor Sie die Bookmark-Eigenschaft verwenden. Hat die Bookmarkable-Eigenschaft den Wert False, so unterstützt das Recordset-Objekt keine Lesezeichen, und die Verwendung der Bookmark-Eigenschaft löst einen auffangbaren Fehler aus.

Wenn Sie eine Kopie eines Recordset-Objekts mit der Clone-Methode erstellen, sind die Einstellungen für die Bookmark-Eigenschaft für das Original und die Kopie des Recordset-Objekts identisch und können austauschbar verwendet werden. Sie können allerdings keine Lesezeichen anderer Recordset-Objekte austauschbar verwenden, auch dann nicht, wenn sie mit demselben Objekt oder derselben SQL-Anweisung erstellt wurden.

Wenn Sie die Bookmark-Eigenschaft auf einen Wert festlegen, der einen gelöschten Datensatz darstellt, wird ein auffangbarer Fehler ausgelöst.

Der Wert der Bookmark-Eigenschaft stimmt nicht mit der Datensatznummer überein.


Bookmarkable-Eigenschaft

Gibt einen Wert zurück, der anzeigt, ob ein Recordset-Objekt Lesezeichen unterstützt, die mit der Bookmark-Eigenschaft festgelegt werden können.

Rückgabewerte

Der Rückgabewert ist ein Boolean-Datentyp, der den Wert True zurück gibt, wenn das Objekt Lesezeichen unterstützt.

Bemerkungen

Überprüfen Sie die Einstellung der Bookmarkable-Eigenschaft eines Recordset-Objekts, bevor Sie versuchen, die Bookmark-Eigenschaft festzulegen oder abzurufen.

Bei Recordset-Objekten, denen ausschließlich Tabellen des Microsoft Jet-Datenbankmoduls zugrundeliegen, hat die Bookmarkable-Eigenschaft den Wert True, und Lesezeichen können verwendet werden. Andere Datenbankprodukte unterstützen Lesezeichen aber nicht unbedingt. Sie können z.B. keine Lesezeichen in einem Recordset-Objekt verwenden, das auf einer verknüpften Paradox-Tabelle ohne Primärschlüssel basiert.


CacheSize-Eigenschaft

Legt einen Wert fest oder gibt einen Wert zurück, der die Anzahl der Datensätze, die aus einer ODBC-Datenquelle abgerufen wurden und lokal zwischengespeichert werden sollen.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Wert vom Typ Long und muß zwischen 5 und 1200 liegen, darf jedoch nicht größer als der zur Verfügung stehende Speicher sein. Ein typischer Wert ist 100. Die Einstellung 0 deaktiviert das Zwischenspeichern.

Bemerkungen

Durch das Zwischenspeichern von Daten in einem Cache wird das Leistung verbessert, wenn Sie mit Recordset-Objekten die Daten vom einem Remote-Server abrufen. Ein Cache ist ein Bereich im lokalen Hauptspeicher, der die Daten enthält, die zuletzt vom Server abgerufen wurden. Dies ist insbesondere dann nützlich, wenn während der Ausführung der Anwendung Benutzer erneut auf die Daten zugreifen wollen. Wenn Benutzer auf Daten zugreifen, überprüft das Microsoft Jet-Datenbankmodul zuerst, ob der Cache die gewünschten Daten enthält, anstatt sie vom Server abzurufen, was mit einem größeren Zeitaufwand verbunden ist. Im Cache werden nur Daten aus ODBC-Datenquellen gespeichert.

Jede ODBC-Datenquelle, die mit Microsoft Jet verbunden ist, wie z.B. eine verknüpfte Tabelle, kann einen lokalen Cache haben. Sie legen den Cache an, indem Sie ein Recordset-Objekt von einer Datenquelle im Netzwerk öffnen, die Eigenschaften CacheSize und CacheStart festlegen und dann die FillCache-Methode verwenden oder die Datensätze mit einer der Move-Methoden durchlaufen.

Ein ODBCDirect-Arbeitsbereich kann auf lokalen Cache zugreifen. Sie erstellen den Cache-Speicher, indem Sie die CacheSize-Eigenschaft auf ein QueryDef-Objekt festlegen. Auf einem Relation-Objekt ist die CacheSize-Eigenschaft schreibgeschützt und ist abhängig von dem Wert der CacheSize-Eigenschaft des QueryDef-Objekts. Sie können die CacheStart-Eigenschaft nicht auf einer FillCache-Methode in einem ODBCDirect-Arbeitsbereich verwenden.

Sie können die Einstellung der CacheSize-Eigenschaft basierend auf der Anzahl an Datensätzen festlegen, die Ihre Anwendung jeweils in einem Arbeitsgang verarbeiten kann. Wenn Sie z.B. ein Recordset-Objekt als Herkunft für die auf dem Bildschirm angezeigten Daten verwenden, könnten Sie die zugehörige CacheSize-Eigenschaft auf 20 festlegen, um 20 Datensätze gleichzeitig anzeigen zu können.

Das Microsoft Jet-Datenbankmodul ruft Datensätze innerhalb des zwischengespeicherten Bereichs aus dem Cache und Datensätze, die außerhalb des zwischengespeicherten Bereichs liegen, vom Server ab.

Anmerkungen

Aus dem Cache abgerufene Datensätze enthalten keine Änderungen, die parallel durch andere Benutzer an den zugrundeliegenden Daten in der Datenquelle vorgenommen wurden.

Sie erzwingen eine Aktualisierung aller zwischengespeicherten Daten, indem Sie die CacheSize-Eigenschaft des Recordset-Objekts auf 0 und anschließend auf die Größe des ursprünglich angeforderten Cache wieder festlegen und dann die FillCache-Methode verwenden.


Clustered-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der anzeigt, ob ein Index-Objekt einen gruppierten Index für eine Tabelle darstellt (nur Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Boolean-Datentyp, der den Wert True hat, wenn das Index-Objekt einen gruppenbildenden Index darstellt.

Bemerkungen

Einige IISAM-Desktop-Datenbankformate verwenden gruppenbildende Indizes. Ein gruppenbildender Index besteht aus einem oder mehreren Feldern, die keine Schlüsselfelder sind, und die zusammengenommen alle Datensätze in einer Tabelle in einer vordefinierten Reihenfolge sortieren. Ein gruppenbildender Index ermöglicht den effizienten Zugriff auf Datensätze in einer Tabelle, in der Indexwerte möglicherweise nicht eindeutig sind.

Die Clustered-Eigenschaft für ein neues Index-Objekt, das noch keiner Auflistung angefügt wurde, hat Lese-/Schreibzugriff, bei einem vorhandenen Index-Objekt in einer Indexes-Auflistung ist die Eigenschaft schreibgeschützt.

Anmerkungen

•	Die Clustered-Eigenschaft wird von Microsoft Jet-Datenbanken ignoriert, da das Microsoft Jet-Datenbankmodul keine gruppenbildenden Indizes unterstützt.

•	Bei ODBC-Datenquellen gibt die Clustered-Eigenschaft immer den Wert False zurück. Es wird nicht erkannt, ob die ODBC-Datenquelle einen gruppenbildenden Index besitzt oder nicht.


CollatingOrder-Eigenschaft

Gibt einen Wert zurück, der die Sortierreihenfolge in Text für Zeichenfolgenvergleiche oder Sortiervorgänge angibt (nur Microsoft Jet-Arbeitsbereich).

Rückgabewerte

Der Rückgabewert ist ein Wert des Datentyps Long oder eine Konstante, die einer der folgenden Werte haben kann.

Konstante	Sortierreihenfolge
dbSortGeneral	Allgemeine Sortierreihenfolge (Englisch, Französisch, Deutsch, Portugiesisch, Italienisch und Spanisch (Modern)).
DbSortArabic	Arabische Sortierreihenfolge.
DbSortChineseSimplified	Vereinfachtes Chinesisch
dbSortChineseTraditional	Traditionelles Chinesisch
dbSortCyrillic	Russische Sortierreihenfolge.
DbSortCzech	Tschechische Sortierreihenfolge.
DbSortDutch	Niederländische Sortierreihenfolge.
DbSortGreek	Griechische Sortierreihenfolge.
DbSortHebrew	Hebräische Sortierreihenfolge.
DbSortHungarian	Ungarische Sortierreihenfolge.
DbSortIcelandic	Isländische Sortierreihenfolge.
DbSortJapanese	Japanische Sortierreihenfolge.
DbSortKorean	Koreanische Sortierreihenfolge.
DbSortNeutral	Neutrale Sortierreihenfolge.
DbSortNorwdan	Norwegische oder dänische Sortierreihenfolge.
DbSortPDXIntl	Internationale Sortierreihenfolge (Paradox).
DbSortPDXNor	Norwegische oder dänische Sortierreihenfolge (Paradox).
DbSortPDXSwe	Schwedische oder finnische Sortierreihenfolge (Paradox).
DbSortPolish	Polnische Sortierreihenfolge.
DbSortSlovenian	Slowenische Sortierreihenfolge.
DbSortSpanish	Spanische Sortierreihenfolge.
DbSortSwedFin	Schwedische oder finnische Sortierreihenfolge.
DbSortThai	Thailändische Sortierreihenfolge
dbSortTurkish	Türkische Sortierreihenfolge.
DbSortUndefined	Die Sortierreihenfolge ist nicht definiert oder unbekannt.
Bemerkungen

Die Verfügbarkeit einer CollatingOrder-Eigenschaft hängt von dem Objekt ab, das die Fields-Auflistung enthält, wie in der folgenden Tabelle gezeigt wird.

Die Fields-Auflistung gehört zu einem	Die CollatingOrder-Eigenschaft ist dann
Index-Objekt	Nicht unterstützt
QueryDef-Objekt	Schreibgeschützt
Recordset-Objekt	Schreibgeschützt
Relation-Objekt	Nicht unterstützt
TableDef-Objekt	Schreibgeschützt
Die Einstellung der CollatingOrder-Eigenschaft entspricht dem Argument Gebietsschema der CreateDatabase-Methode zu dem Zeitpunkt, an dem die Datenbank erstellt wurde, oder dem Argument der CompactDatabase-Methode zu dem Zeitpunkt, an dem die Datenbank zuletzt komprimiert wurde.

Überprüfen Sie die Einstellung der CollatingOrder-Eigenschaft eines Database- oder Field-Objekts, um festzustellen, welches Verfahren bei der Datenbank oder dem Feld für Zeichenfolgenvergleiche verwendet wird. Sie können die CollatingOrder-Eigenschaft eines neuen, nicht angefügten Field-Objekts festlegen, wenn sich die Einstellung für das Field-Objekt von der Einstellung des umgebenden Database-Objekts unterscheiden soll.

Die Einstellungen der Eigenschaften CollatingOrder und Attributes eines Field-Objekts in der Fields-Auflistung eines Index-Objekts bestimmen zusammen die Reihenfolge und Richtung einer Sortierung in einem Index. Sie können allerdings keine Sortierreihenfolge für einen einzelnen Index festlegen, sondern nur für eine ganze Tabelle.


ConflictTable-Eigenschaft

Gibt den Namen einer Konflikttabelle zurück, die die Datenbank-Datensätze enthält, die während der Synchronisierung zweier Replikate einen Konflikt verursacht haben. (Nur Microsoft Jet-Arbeitsbereich)

Rückgabewerte

Der Rückgabewerte ist ein String-Datentyp, dessen Zeichenfolge die Länge Null hat, wenn es keine Konflikttabelle gibt oder die Datenbank kein Replikat ist.

Bemerkungen

Wenn zwei Benutzer an zwei verschiedenen Replikaten Änderungen am selben Datensatz in der Datenbank vornehmen, können die Änderungen eines Benutzers im anderen Replikat nicht übernommen werden. Dieser Benutzer muß den Konflikt auflösen und beheben.

Der Konflikt tritt auf Datensatzebene auf. Wenn ein Benutzer beispielsweise das Feld "Addresse" ändert und ein anderer Benutzer das Feld "Telefon" im gleichen Datensatz aktualisiert, wird eine Änderung zurückgewiesen. Da Konflikte auf Datensatzebene auftreten, erfolgt eine Zurückweisung, obwohl ein wirklicher Informationskonflikt durch die erfolgreiche Änderung und die verweigerte Änderung unwahrscheinlich ist.

Der Synchronisationsmechanismus verarbeitet die Datensatzkonflikte durch Anlegen von Konflikttabellen, welche die Informationen enthalten, die in der Tabelle gespeichert würden, wenn die Änderung erfolgreich gewesen wäre. Sie untersuchen diese Konflikttabellen und arbeiten sie Zeile für Zeile ab, um Konflikte ggf. zu beheben.

Alle Konflikttabellen erhalten den Namen Tabelle_conflict, wobei Tabelle der ursprüngliche Name der Tabelle ist, der auf die maximale Tabellennamenlänge abgeschnitten wurde.


Connect-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der Informationen zur Herkunft einer offenen Verbindung, einer geöffneten Datenbank, einer in einer Pass-Through-Abfrage verwendeten Datenbank oder einer verknüpften Tabelle bereitstellt. Bei Database-Objekten, neuen Connection-Objekten, verknüpften Tabellen und TableDef-Objekten, die noch nicht an eine Auflistung angefügt wurden, hat die Eigenschaft Lese-/Schreibzugriff. Bei QueryDef-Objekten und Basistabellen ist diese Eigenschaft schreibgeschützt.

Syntax

Objekt.Connect = Datenbanktyp;Parameter;

Die Syntax der Connect-Eigenschaft besteht aus folgenden Teilen:

Teil	Beschreibung
Objekt	Ein Objektausdruck, der ein Objekt in der Liste unter Betrifft ergibt.
Datenbanktyp	Optional. Ein Wert vom Typ String, der einen Datenbanktyp angibt. Geben Sie bei Microsoft Jet-Datenbanken dieses Argument nicht an. Wenn Sie Parameter angeben, verwenden Sie ein Semikolon (;) als Platzhalter.
Parameter	Optional. Ein String, der weitere Parameter angibt, die an Treiber für ODBC oder installierbares ISAM übergeben werden sollen. Verwenden Sie Semikolons, um Parameter voneinander zu trennen.
Einstellungen

Die Einstellung der Connect-Eigenschaft ist ein Wert vom Typ String, der sich aus einem Datenbanktypkennzeichen und ggf. aus einem oder mehreren Parametern zusammensetzt. Wenn Parameter angegeben werden, müssen sie durch Semikolons voneinander getrennt werden. Die Connect-Eigenschaft übergibt bei Bedarf weitere Informationen an ODBC- und bestimmte ISAM-Treiber.

Sie können eine SQL Pass-Through-Abfrage auf einer Tabelle, die mit Ihrer Microsoft Jet-Datenbank (.mdb)-Datei verknüpft ist, erst dann durchführen, wenn Sie die Connect-Eigenschaft der Datenbank der verknüpften Tabelle auf eine gültigen ODBC-Verbindungszeichenfolge festgelegt haben.

Bei einem TableDef-Objekt, das eine verknüpfte Tabelle darstellt, besteht die Einstellung der Connect-Eigenschaft aus einem oder zwei Teilen (einem Datenbanktypkennzeichen und einem Pfad für die Datenbank), die jeweils mit einem Semikolon enden.

Der Pfad (wie in der nachfolgenden Tabelle gezeigt) ist der vollständige Pfad für das Verzeichnis, in dem die Datenbankdateien enthalten sind. Dem Pfad muß der Bezeichner "DATABASE=" vorangestellt werden. In einigen Fällen (wie bei Microsoft Excel- und Microsoft Jet-Datenbanken) sollte ein bestimmter Dateiname im Pfadargument für die Datenbank angegeben werden.

Die folgende Tabelle zeigt mögliche Datenbanktypen und die entsprechenden Datenbankkennzeichen und Pfade für die Einstellung der Connect-Eigenschaft. Sie können auch „FTP://path/etc.“ oder „HTTP://path/etc.“ als Pfad angeben. In einem ODBC-Arbeitsbereich kann nur das Kennwort "ODBC" verwendet werden.

Datenbanktyp	Kennzeichen	Beispiel
Microsoft Jet-Datenbank	"[Datenbank];"	"Laufwerk:\Pfad\ Dateiname.MDB"
dBASE III	"dBASE III;"	"Laufwerk:\Pfad"
dBASE IV	"dBASE IV;"	"Laufwerk:\Pfad"
dBASE 5	„dBASE 5;“	"Laufwerk:\Pfad"
Paradox 3.x	"Paradox 3.x;"	"Laufwerk:\Pfad"
Paradox 4.x	"Paradox 4.x;"	"Laufwerk:\Pfad"
Paradox 5.x	„Paradox 5.x;“	"Laufwerk:\Pfad"
FoxPro 2.0	"FoxPro 2.0;"	"Laufwerk:\Pfad"
FoxPro 2.5	"FoxPro 2.5;"	"Laufwerk:\Pfad"
FoxPro 2.6	"FoxPro 2.6;"	"Laufwerk:\Pfad"
Excel 3.0	"Excel 3.0;"	"Laufwerk:\Pfad\ Dateiname.xls"
Excel 4.0	"Excel 4.0;"	"Laufwerk:\Pfad\ Dateiname.xls"
Excel 5.0 oder Excel 95	"Excel 5.0;"	"Laufwerk:\Pfad\ Dateiname.xls"
Excel 97	„Excel 97“	"Laufwerk:\Pfad\ Dateiname.xls"
HTML-Import	HTML Import;	Laufwerk:\Pfad\Dateiname
HTML-Export	HTML Export;	Laufwerk:\Pfad\
Text	"Text;"	"Laufwerk:\Pfad"
ODBC	"ODBC; DATABASE=Datenbank; UID=Benutzer; PWD=Kennwort; DSN=Datenquellenname [LOGINTIMEOUT=Sekunden;]	Keine Angabe
Exchange	Exchange;  MAPILEVEL=Ordnerpfad; [TABLETYPE={ 0 | 1 }];[PROFILE=Profil;] [PWD=Kennwort;] [DATABASE=Datenbank;]	Laufwerk:\Pfad\Dateiname.mdb
Bemerkungen

Wenn das Kennzeichen nur "ODBC;" enthält, zeigt der ODBC-Treiber ein Dialogfeld an, in dem die Namen aller registrierten ODBC-Datenquellen angezeigt werden, aus denen der Benutzer eine Datenbank auswählen kann.

Wenn ein Kennwort erforderlich ist, aber in der Einstellung der Connect-Eigenschaft nicht angegeben wurde, erscheint ein Anmeldedialogfeld, wenn der ODBC-Treiber zum ersten Mal auf die Tabelle zugreift und wenn die Verbindung abgebrochen und wieder hergestellt wird.

Für Daten in Microsoft Exchange sollte für den erforderlicher MAPILEVEL-Schlüssel der vollständige Pfad festgelegt werden (z.B., "Mailbox - Pat SmithIAlpha/Heute"). Der Pfad schließt nicht den Namen des Ordners ein, der als Tabelle geöffnet wird. Dieser Name sollte mit dem Argument Name der CreateTable-Methode angegeben werden. Der Schlüssel TABLETYPE sollte auf "0"  (Voreinstellung) festgelegt sein, um einen Ordner zu öffnen, oder auf "1", um ein Adreßbuch zu öffnen. Die Voreinstellung des Schlüssels PROFILE ist vom aktuellen Profil abhängig.

Bei Basistabellen der Microsoft Jet-Datenbank (.mdb) ist die Einstellung der Connect-Eigenschaft eine Null-Zeichenfolge ("").

Sie können die Connect-Eigenschaft für ein Database-Objekt festlegen, indem Sie in der OpenDatabase-Methode das Argument Quelle angeben. Sie können die Einstellung abrufen, um den Typ, den Pfad, die Benutzerkennung, das Kennwort oder die ODBC-Datenquelle der Datenbank zu bestimmen.

Bei einem QueryDef-Objekt in einem Microsoft Jet-Arbeitsbereich verwenden Sie die Connect-Eigenschaft zusammen mit der ReturnsRecords-Eigenschaft, um eine ODBC SQL-Pass-Through-Abfrage zu erstellen. Das Argument DBTyp der Verbindungszeichenfolge ist "ODBC;", und der verbleibende Teil der Zeichenfolge enthält Informationen für den jeweiligen ODBC-Treiber, der zum Zugriff auf die Netzwerkdaten verwendet wird. Weitere Informationen finden Sie in der Dokumentation zum jeweiligen Treiber.

 Anmerkungen

•	Sie müssen die Connect-Eigenschaft vor der ReturnsRecords-Eigenschaft setzen.

•	Sie müssen Zugriffsberechtigungen auf den Computer haben, der die Datenbank-Server enthält, auf die Sie zugreifen möchten.


Container-Eigenschaft

Gibt den Namen des Container-Objekts zurück, dem ein Document-Objekt angehört (nur Microsoft Jet-Arbeitsbereich).

Rückgabewerte

Der Rückgabewert dieser Eigenschaft hat den Datentyp String.


Count-Eigenschaft

Gibt die Anzahl der Objekte in einer Auflistung zurück.

Rückgabewert

Der Rückgabewert dieser Eigenschaft ist ein Wert vom Datentyp Integer.

Bemerkungen

Da die Elemente einer Auflistung bei 0 beginnen, sollten bei Code für Schleifen immer mit dem Element 0 begonnen werden und mit dem Wert der Count-Eigenschaft minus 1 geendet werden. Wenn die Schleife die Elemente einer Auflistung durchlaufen soll, ohne die Count-Eigenschaft zu überprüfen, können Sie einen For Each...Next-Befehl verwenden.

Die Einstellung der Count-Eigenschaft ist niemals Null. Ist der Wert 0, so befinden sich keine Objekte in der Auflistung.


DataUpdatable-Eigenschaft

Liefert einen Wert, der anzeigt, ob die Daten in dem Feld, das durch ein Field-Objekt dargestellt wird, aktualisiert werden können.

Rückgabewerte

Der Rückgabewert ist vom Typ Boolean und gibt den Wert True zurück, wenn die Daten in dem Feld aktualisiert werden können.

Bemerkungen

Mit dieser Eigenschaft können Sie bestimmen, ob Sie die Einstellung der Value-Eigenschaft eines Field-Objekts ändern können. Diese Eigenschaft hat immer den Wert False bei einem Field-Objekt, dessen Attributes-Eigenschaft dem Wert dbAutoIncrField entspricht.

Sie können die DataUpdatable-Eigenschaft bei Field-Objekten, die an die Fields-Auflistung von QueryDef-, Recordset- und Relation-Objekten, aber nicht an die Fields-Auflistung von Index- oder TableDef-Objekten angefügt werden, verwenden.


DateCreated-, LastUpdated-Eigenschaften

•	DateCreated liefert das Datum und die Uhrzeit des Zeitpunkts, an dem das Objekt (oder die Basistabelle, wenn das Objekt ein Recordset-Objekt vom Typ Tabelle ist) erstellt wurde (gilt nur für Microsoft Jet-Arbeitsbereiche).

•	LastUpdated liefert das Datum und die Uhrzeit des Zeitpunkts, an dem die letzte Änderung an dem Objekt (oder an der Basistabelle, wenn das Objekt ein Recordset-Objekt vom Typ Tabelle ist) vorgenommen wurde (gilt nur für Microsoft Jet-Arbeitsbereiche).

Rückgabewerte

Der Rückgabewert ist vom Typ Variant (Date/Time-Untertyp).

Bemerkungen

Bei Recordset-Objekten vom Typ Tabelle stammen die Einstellungen für Datum und Uhrzeit von dem Computer, auf dem die Basistabelle erstellt oder zuletzt aktualisiert wurde. Bei anderen Objekten liefern DateCreated und LastUpdated das Datum und die Uhrzeit des Zeitpunkts, an dem das Objekt erstellt oder zuletzt aktualisiert wurde. In einer Mehrbenutzerumgebung sollten Benutzer diese Einstellungen direkt vom Datei-Server abrufen, um Abweichungen zwischen den Einstellungen der Eigenschaften DateCreated und LastUpdated zu vermeiden.


DefaultUser-, DefaultPassword-Eigenschaften

•	DefaultUser legt den Benutzernamen fest, der zur Erstellung des voreingestellten Workspace-Objekts bei der Initialisierung verwendet wird.

•	DefaultPassword legt das Kennwort fest, das zur Erstellung des voreingestellten Workspace-Objekts bei der Initialisierung verwendet wird.

Einstellungen

Die Einstellung für DefaultUser ist ein Wert vom Typ String. Er kann 1–20 Zeichen lang in Microsoft Jet-Arbeitsbereichen sein und von beliebiger Länge in ODBCDirect-Arbeitsbereichen, und Buchstaben des Alphabets, Zeichen mit Umlauten oder Akzenten, Ziffern, Leerzeichen und Symbole enthalten, von den folgenden Ausnahmen abgesehen: " (Anführungszeichen), / (Schrägstrich), \ (umgekehrter Schrägstrich), [ ] (eckige Klammern), : (Doppelpunkt), | (Pipe-Zeichen), < (Kleiner-Zeichen), > (Größer-Zeichen), + (Pluszeichen), = (Gleichheitszeichen), ; (Semikolon), , (Komma), ? (Fragezeichen), * (Sternchen), führende Leerzeichen und Steuerzeichen (ASCII 00 bis ASCII 31).

Die Einstellung für DefaultPassword ist ein Wert vom Typ String, der bis zu 14 Zeichen lang in Microsoft Jet-Datenbanken und beliebiger Länge in ODBCDirect-Verbindungen sein kann. Er darf nur Zeichen außer dem ASCII-Zeichen 0 enthalten.

Die Voreinstellung für die DefaultUser-Eigenschaft entspricht "admin", die Voreinstellung für die DefaultPassword-Eigenschaft entspricht einer Null-Zeichenfolge ("").

Bemerkungen

Bei Benutzernamen wird die Groß-/Kleinschreibung in der Regel nicht beachtet. Wenn Sie allerdings ein Benutzerkonto neu einrichten, das gelöscht oder in einer anderen Arbeitsgruppe erstellt wurde, müssen bei der Eingabe dieselben Groß- und Kleinbuchstaben verwendet werden wie beim ursprünglichen Namen. Bei Kennwörtern wird die Groß-/Kleinschreibung beachtet.

In der Regel wird die CreateWorkspace-Methode verwendet, um ein Workspace-Objekt mit einem bestimmten Benutzernamen und Kennwort zu erstellen. Aus Gründen der Rückwärtskompatibilität zu früheren Versionen und zur Vereinfachung bei der Arbeit mit geschützten Datenbanken erstellt das Microsoft Jet-Datenbankmodul automatisch bei Bedarf ein Workspace-Objekt, wenn noch keines geöffnet ist. In diesem Fall werden die Werte der DefaultUser- und DefaultPassword-Eigenschaft verwendet.

Damit diese Eigenschaft wirksam wird, sollte sie festgelegt werden, bevor Datenzugriffsfunktionen aufgerufen werden.


DefaultValue-Eigenschaft

Gibt den Standardwert eines Field-Objekts zurück oder legt ihn fest. Bei einem Field-Objekt, das noch nicht an die Fields-Auflistung angefügt wurde, kann diese Eigenschaft abgerufen und festgelegt werden (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert für diese Eigenschaft ist ein Wert vom Typ String, der maximal 255 Zeichen enthalten und entweder ein Text oder ein Ausdruck sein kann. Wenn die Einstellung der Eigenschaft ein Ausdruck ist, kann sie die folgenden Elemente nicht enthalten: benutzerdefinierte Funktionen, SQL-Aggregatfunktionen des Microsoft Jet-Datenbankmoduls oder Verweise auf Abfragen, Formulare oder andere Field-Objekte.

Anmerkung   Sie können auch die DefaultValue-Eigenschaft eines Field-Objekts auf einem TableDef-Objekt auf den speziellen Wert "GenUniqueID( )" setzen. Dadurch wird dem Feld jedesmal eine Zufallszahl zugewiesen, wenn ein neuer Datensatz hinzugefügt oder erstellt wird, und somit auch jedem Datensatz ein eindeutiger Bezeichner. Die Type-Eigenschaft des Feldes muß vom Typ Long sein.

Bemerkungen

Die Verfügbarkeit der DefaultValue-Eigenschaft hängt vom übergeordneten Objekt der Fields-Auflistung ab, wie in der folgenden Tabelle gezeigt.

Objekt angefügt an	Die DefaultValue-Eigenschaft ist dann
Index-Objekt	Nicht unterstützt
QueryDef-Objekt	Schreibgeschützt
Recordset-Objekt	Schreibgeschützt
Relation-Objekt	Nicht unterstützt
TableDef-Objekt	Mit Lese-/Schreibzugriff
Wenn ein neuer Datensatz erstellt wird, wird die Einstellung der DefaultValue-Eigenschaft automatisch als Wert für das Feld eingegeben. Sie können den Wert des Feldes ändern, indem Sie die zugehörige Value-Eigenschaft festlegen.

Die DefaultValue-Eigenschaft kann nicht für Autowert- und Long Binary-Felder verwendet werden.


Description-Eigenschaft

Liefert eine beschreibende Zeichenfolge für einen Fehler.

Rückgabewerte

Der Rückgabewert ist vom Typ String, der die Fehlerbeschreibung enthält.

Bemerkungen

Die Description-Eigenschaft enthält eine kurze Beschreibung des Fehlers. Zeigen Sie diese Eigenschaft an, um den Benutzer auf einen Fehler aufmerksam zu machen, den Sie nicht behandeln können oder möchten.


DistinctCount-Eigenschaft

Liefert einen Wert, der die Anzahl der eindeutigen Werte für das Index-Objekt in der zugehörigen Tabelle anzeigt (gilt nur für Microsoft Jet-Arbeitsbereiche).

Rückgabewerte

Der Rückgabewert ist vom Typ Long.

Bemerkungen

Überprüfen Sie die DistinctCount-Eigenschaft, um die Anzahl der eindeutigen Werte (oder Schlüssel) in einem Index zu bestimmen. Jeder Schlüssel wird nur einmal gezählt, auch wenn der Schlüssel mehrmals auftritt, was der Fall sein kann, wenn der Index mehrfache Werte zuläßt. Diese Angabe ist in Anwendungen hilfreich, die den Datenzugriff durch Zugriff auf Indexinformationen optimieren sollen. Die Anzahl der eindeutigen Werte wird auch als die Kardinalität eines Index-Objekts bezeichnet.

Die DistinctCount-Eigenschaft zeigt nicht immer die tatsächliche Schlüsselanzahl zu einem bestimmten Zeitpunkt an. Eine Änderung durch das Rückgängigmachen (Rollback) einer Transaktion wird z.B. nicht unmittelbar in der DistinctCount-Eigenschaft berücksichtigt. Der Wert der DistinctCount-Eigenschaft gibt ebenso nicht die Löschung von Datensätzen mit eindeutigen Schlüsseln wieder. Die Zahl wird sofort nach der Verwendung der CreateIndex-Methode gültig.


EditMode-Eigenschaft

Liefert einen Wert, der den Bearbeitungszustand des aktuellen Datensatzes anzeigt.

Rückgabewerte

Der Rückgabewert ist vom Typ Long, der den Bearbeitungszustand anzeigt, wie in der folgenden Liste dargestellt.

Konstante	Beschreibung
dbEditNone	Momentan findet keine Bearbeitung statt.
DbEditInProgress	Die Edit-Methode wurde aufgerufen, und der aktuelle Datensatz befindet sich im Kopierpuffer.
dbEditAdd	Die AddNew-Methode wurde aufgerufen, und der aktuelle Datensatz im Kopierpuffer ist ein neuer Datensatz, der nicht in der Datenbank gespeichert wurde.
Bemerkungen

Die EditMode-Eigenschaft ist sehr hilfreich, wenn ein Verarbeitungsvorgang unterbrochen wurde, beispielsweise durch einen Gültigkeitsfehler. Sie können den Wert der EditMode-Eigenschaft verwenden, um herauszufinden, ob die Update- oder die CancelUpdate-Methode aufgerufen werden soll.

Sie können auch überprüfen, ob die LockEdits-Eigenschaft die Einstellung True und die EditMode-Eigenschaft die Einstellung dbEditInProgress hat, um herauszufinden, ob die aktuelle Seite gesperrt ist.


Filter-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der die Datensätze bestimmt, die in einem nachfolgend geöffneten Recordset-Objekt enthalten sind (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung bzw. der Rückgabewert ist vom Typ String, der den WHERE-Abschnitt einer SQL-Anweisung ohne das reservierte Wort WHERE enthält.

Bemerkungen

Verwenden Sie die Filter-Eigenschaft, um einen Filter auf ein Recordset-Objekt vom Typ Dynaset, Snapshot oder Vorwärts anzuwenden.

Mit der Filter-Eigenschaft können Sie die Datensätze einschränken, die von einem bestehenden Objekt zurückgegeben werden, wenn ein neues Recordset-Objekt geöffnet wird, dem ein bestehendes Recordset-Objekt zugrundeliegt.

Häufig ist es schneller, ein neues Recordset-Objekt mit einer SQL-Anweisung zu öffnen, die einen WHERE-Abschnitt enthält.

Verwenden Sie das amerikanische Datumsformat (Monat-Tag-Jahr), wenn Sie Felder filtern, die ein Datum enthalten, auch wenn Sie nicht die amerikanische Version des Microsoft Jet-Datenbankmoduls verwenden (in diesem Fall müssen Sie alle Daten mit verknüpfenden Zeichenfolgen zusammensetzen, beispielsweise strMonat & "-" & strTag & "-" & strJahr). Andernfalls können die Daten nicht wie erwartet gefiltert werden.

Wenn Sie die Eigenschaft auf eine Zeichenfolge einstellen, die mit einem Wert ungleich einer Ganzzahl verknüpft ist, und die Systemparameter auf ein nichtamerikanisches Dezimalzeichen wie z.B. ein Komma eingestellt sind (beispielsweise strFilter = "PREIS > " & lngPreis, und lngPreis = 125,50), so tritt beim Versuch, das nächste Recordset-Objekt zu öffnen, ein Fehler auf. Die Ursache ergibt sich aus der Tatsache, daß die Zahl bei der Verknüpfung unter Verwendung der im System voreingestellten Dezimalzeichen in eine Zeichenfolge konvertiert wurde, und Microsoft Jet SQL nur amerikanische Dezimalzeichen akzeptiert.


Foreign-Eigenschaft

Liefert einen Wert, der anzeigt, ob ein Index-Objekt einen Fremdschlüssel in einer Tabelle darstellt (gilt nur für Microsoft Jet-Arbeitsbereiche).

Rückgabewerte

Der Rückgabewert ist vom Typ Boolean, der True zurückgibt, wenn das Index-Objekt einen Fremdschlüssel darstellt.

Bemerkungen

Ein Fremdschlüssel besteht aus einem oder mehreren Feldern in einer Fremdtabelle, die alle Zeilen in einer Primärtabelle eindeutig kennzeichnen.

Das Microsoft Jet-Datenbankmodul erstellt ein Index-Objekt für die Fremdtabelle und legt ihre Foreign-Eigenschaft fest, wenn Sie eine Beziehung aufbauen, bei der die referentielle Integrität erzwungen wird.


ForeignName-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der in einer Beziehung den Namen des Field-Objekts in einer Fremdtabelle angibt, das dem Feld in einer Primärtabelle entspricht (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ String, der als Name eines Field-Objekts in der Fields-Auflistung des zugehörigen TableDef-Objekts ausgewertet wird.

Wenn das Relation-Objekt nicht an das Database-Objekt angefügt ist, aber das Field-Objekt an das Relation-Objekt angefügt wird, können Sie die ForeignName-Eigenschaft immer noch ändern. Nachdem das Relation-Objekt an die Datenbank angefügt ist, ist die ForeignName-Eigenschaft schreibgeschützt.

Bemerkungen

Nur ein Field-Objekt, das einer Fields-Auflistung angehört, die in einem Relation-Objekt enthalten ist, kann die ForeignName-Eigenschaft unterstützen.

Die Einstellungen für die Eigenschaften Name und ForeignName für ein Field-Objekt geben die Namen der entsprechenden Felder in der Primärtabelle und der Fremdtabelle einer Beziehung an. Die Einstellungen für die Eigenschaften Table und ForeignTable eines Relation-Objekts bestimmen die Primärtabelle und die Fremdtabellen einer Beziehung.

Wenn Sie z.B. eine Liste gültiger Artikelnummern (in einem Feld mit dem Namen "ArtNr") haben, die in der Tabelle "GültigeArtikel" gespeichert ist, könnten Sie eine Beziehung mit der Tabelle "Bestellungen" in der Form einrichten, daß eine in die Tabelle "Bestellungen" eingegebene Artikelnummer in der Tabelle "GültigeArtikel" existieren muß. Wenn die Artikelnummer in der Tabelle "GültigeArtikel" nicht existiert und Sie die Attributes-Eigenschaft des Relation-Objekts nicht auf dbRelationDontEnforce eingestellt haben, tritt ein auffangbarer Fehler auf.

In diesem Fall wäre die Tabelle "GültigeArtikel" ein Beispiel für eine Fremdtabelle, d.h. die ForeignTable-Eigenschaft des Relation-Objekts würde auf "GültigeArtikel" festgelegt, und die Table-Eigenschaft des Relation-Objekts würde auf "Bestellungen" festgelegt. Die Name-Eigenschaft und die ForeignName-Eigenschaft des Field-Objekts in der Fields-Auflistung des Relation-Objekts würden beide auf "ArtNr" festgelegt.

Die folgende Abbildung stellt die oben beschriebene Beziehung dar.


ForeignTable-Eigenschaft

Legt den Namen der Fremdtabelle in einer Beziehung fest oder gibt ihn zurück (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ String, der als Name einer Tabelle in der TableDefs-Auflistung des Database-Objekts ausgewertet wird. Die Einstellung dieser Eigenschaft kann abgerufen oder festgelegt werden, wenn es sich um ein neues Relation-Objekt handelt, das noch nicht an eine Auflistung angefügt wurde. Die Einstellung ist schreibgeschützt, wenn es sich um ein bestehendes Relation-Objekt in der Relations-Auflistung handelt.

Bemerkungen

Die Einstellung der ForeignTable-Eigenschaft eines Relation-Objekts entspricht der Einstellung der Name-Eigenschaft des TableDef- oder QueryDef-Objekts, das die Fremdtabelle oder Abfrage darstellt. Die Einstellung der Table-Eigenschaft entspricht der Einstellung der Name-Eigenschaft des TableDef- oder QueryDef-Objekts, das die Primärtabelle oder Primärabfrage darstellt.

Wenn Sie z.B. eine Liste gültiger Artikelnummern (in einem Feld mit dem Namen „ArtNr„) haben, die in der Tabelle „GültigeArtikel„ gespeichert ist, könnten Sie eine Beziehung mit der Tabelle „Bestellungen„ in der Form einrichten, daß eine in die Tabelle „Bestellungen„ eingegebene Artikelnummer in der Tabelle „GültigeArtikel„ existieren muß. Wenn die Artikelnummer in der Tabelle „GültigeArtikel„ nicht existiert und Sie die Attributes-Eigenschaft des Relation-Objekts nicht auf dbRelationDontEnforce eingestellt haben, tritt ein auffangbarer Fehler auf.

In diesem Fall wäre die Tabelle „GültigeArtikel„ ein Beispiel für die Fremdtabelle, d.h. die Table-Eigenschaft des Relation-Objekts würde auf „GültigeArtikel„ festgelegt, und die ForeignTable-Eigenschaft des Relation-Objekts würde auf „Bestellungen„ festgelegt. Die Name-Eigenschaft und die ForeignName-Eigenschaft des Field-Objekts in der Fields-Auflistung des Relation-Objekts würden beide auf "ArtNr" festgelegt.

Die folgende Abbildung stellt die oben beschriebene Beziehung dar.


HelpContext-, HelpFile-Eigenschaften

•	HelpContext—liefert einen Hilfekontext in Form einer Variablen vom Typ Long für ein Thema in einer Hilfedatei einer Microsoft Windows-Hilfe.

•	HelpFile—liefert einen vollständigen Pfad zu der Hilfedatei als Wert vom Typ String.

Bemerkungen

Wenn eine Hilfedatei der Microsoft Windows-Hilfe in HelpFile angegeben ist, wird die HelpContext-Eigenschaft verwendet, um automatisch das Hilfethema anzuzeigen, das durch die HelpContext-Eigenschaft gekennzeichnet wird.

Anmerkung   Sie sollten Routinen in Ihrer Anwendung schreiben, um typische Fehler zu behandeln. Beim Programmieren mit einem Objekt können Sie die Hilfe verwenden, die von der Hilfedatei des Objekts zur Verfügung gestellt wird, um die Qualität der Fehlerbehandlung zu verbessern oder dem Benutzer hilfreiche Informationen anzuzeigen, wenn der Fehler nicht behoben werden kann.


IgnoreNulls-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der anzeigt, ob es Indexeinträge für Datensätze gibt, die Null-Werte in ihren Indexfeldern enthalten (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ Boolean, der True entspricht, wenn die Felder mit Null-Werten nicht über Indexeinträge verfügen. Die Einstellung dieser Eigenschaft kann abgerufen oder festgelegt werden, wenn es sich um ein neues Index-Objekt handelt, das noch nicht an eine Auflistung angefügt wurde, und ist schreibgeschützt, wenn es sich um ein bestehendes Index-Objekt in einer Indexes-Auflistung handelt.

Bemerkungen

Sie können die Suche nach Datensätzen unter Verwendung eines Feldes beschleunigen, indem Sie einen Index für das Feld definieren. Wenn Sie Null-Einträge in einem Indexfeld zulassen und erwarten, daß viele Einträge den Wert Null haben, können Sie die IgnoreNulls-Eigenschaft des Index-Objekts auf True festlegen, um den für den Index benötigten Speicher zu verringern.

Die Einstellungen der IgnoreNulls-Eigenschaft und der Required-Eigenschaft bestimmen zusammen, ob ein Datensatz mit einem Null-Indexwert einen Indexeintrag hat, wie in der folgenden Tabelle gezeigt.

IgnoreNulls hat den Wert	Required-Eigenschaft	Null in Indexfeld
True	False	Null-Wert zulässig. Kein Indexeintrag wird hinzugefügt.
False	False	Null-Wert zulässig. Indexeintrag wird hinzugefügt.
True oder False	True	Null-Wert nicht zulässig. Kein Indexeintrag wird hinzugefügt.


Index-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der den Namen des aktuellen Index-Objekts in einem Recordset-Objekt vom Typ Tabelle anzeigt (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ String, der als Name eines Index-Objekts in der Indexes-Auflistung des Tabledef- oder TableDef-Objekts im Recordset-Objekt vom Typ Tabelle ausgewertet wird.

Bemerkungen

Datensätze in Basistabellen werden in unbestimmter Reihenfolge gespeichert. Durch das Festlegen der Index-Eigenschaft wird die Reihenfolge der Datensätze geändert, die aus der Datenbank zurückgegeben werden. Die Reihenfolge, in der die Datensätze gespeichert sind, ändert sich nicht.

Das angegebene Index-Objekt muß bereits definiert sein. Wenn Sie die Index-Eigenschaft auf ein Index-Objekt festlegen, das nicht existiert, oder wenn die Index-Eigenschaft beim Aufrufen der Seek-Methode nicht festgelegt ist, wird ein auffangbarer Fehler ausgelöst.

Untersuchen Sie die Indexes-Auflistung eines TableDef-Objekts, um die Index-Objekte zu bestimmen, die für Recordset-Objekte vom Typ Tabelle, die aus diesem TableDef-Objekt erstellt wurden, verfügbar sind.

Sie können einen neuen Index für die Tabelle erstellen, indem Sie ein neues Index-Objekt erstellen, die zugehörigen Eigenschaften festlegen, es an die Indexes-Auflistung des zugrundeliegenden TableDef-Objekts anfügen und anschließend das Recordset-Objekt erneut öffnen.

Von einem Recordset-Objekt vom Typ Tabelle zurückgegebene Datensätze können nur nach den Indizes sortiert werden, die für das zugrundeliegende TableDef-Objekt definiert sind. Wenn Sie Datensätze in einer anderen Reihenfolge sortieren möchten, können Sie ein Recordset-Objekt vom Typ Dynaset, Snapshot oder Vorwärts öffnen, indem Sie eine SQL-Anweisung mit einem ORDER BY-Abschnitt verwenden.

Anmerkungen

•	Sie müssen keine Indizes für Tabellen anlegen, aber in großen Tabellen ohne Index kann der Zugriff auf einen bestimmten Datensatz oder das Erstellen eines Recordset-Objekts sehr lange dauern. Andererseits kann das Erstellen zu vieler Indizes Aktualisierungs-, Anfüge- und Löschoperationen verlangsamen, da alle Indizes automatisch aktualisiert werden.

•	Datensätze, die aus Tabellen ohne Indizes gelesen werden, werden in unbestimmter Reihenfolge zurückgegeben.

•	Die Attributes-Eigenschaft jedes Field-Objekts im Index-Objekt bestimmt die Reihenfolge der Datensätze und demnach das Zugriffsverfahren, das für dieses Index-Objekt verwendet wird.

•	Ein eindeutiger Index optimiert das Auffinden von Datensätzen.

•	Indizes wirken sich nicht auf die physische Reihenfolge der Datensätze in einer Basistabelle aus — sie legen lediglich fest, wie auf die Datensätze durch das Recordset-Objekt vom Typ Tabelle zugegriffen wird, wenn ein bestimmter Index gewählt oder das Recordset-Objekt geöffnet wird.


Inherit-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der bestimmt, ob neue Document-Objekte die Standardeinstellung der Permissions-Eigenschaft übernehmen (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ Boolean. Wenn Sie die Eigenschaft auf den Wert True festlegen, so übernehmen Document-Objekte die Standardeinstellung der Permissions-Eigenschaft.

Bemerkungen

Verwenden Sie die Inherit-Eigenschaft zusammen mit der Permissions-Eigenschaft, um die Berechtigungen zu definieren, die neue Dokumente automatisch erhalten, wenn sie erstellt werden. Wenn Sie die Inherit-Eigenschaft auf den Wert True festlegen, eine Berechtigung für einen Container festlegen und dann ein neues Dokument im Container erstellen, wird diese Berechtigung immer für das neue Dokument festgelegt. Dadurch können Sie sehr einfach Berechtigungen für ein Objekt voreinstellen.

Das Festlegen der Inherit-Eigenschaft hat keine Auswirkungen auf bestehende Dokumente in dem Container — Sie können nicht alle Berechtigungen für alle bestehenden Dokumente in einem Container durch Festlegen der Inherit-Eigenschaft und durch eine neue Berechtigung verändern. Es werden nur neue Dokumente berücksichtigt, die erstellt werden, nachdem die Inherit-Eigenschaft festgelegt wurde.


Inherited-Eigenschaft

Gibt einen Wert zurück, der anzeigt, ob ein Property-Objekt von einem zugrundeliegenden Objekt übernommen wurde.

Rückgabewerte

Der Rückgabewert ist vom Typ Boolean, der True entspricht, wenn das Property-Objekt übernommen wurde. Bei integrierten Property-Objekten, die vordefinierte Eigenschaften darstellen, ist False der einzig mögliche Rückgabewert. Der Wert dieser Eigenschaft entspricht in einem ODBCDirect-Arbeitsbereich immer False.

Bemerkungen

Mit der Inherited-Eigenschaft können Sie bestimmen, ob eine benutzerdefinierte Eigenschaft für das Objekt erstellt wurde, auf das sie sich bezieht, oder ob die Eigenschaft von einem anderen Objekt erstellt wurde. Nehmen Sie beispielsweise an, Sie erstellen eine Eigenschaft für ein QueryDef-Objekt und öffnen dann ein Recordset-Objekt aus dem QueryDef-Objekt. Diese neue Eigenschaft ist dann Bestandteil der Properties-Auflistung des Recordset-Objekts, und die zugehörige Inherited-Eigenschaft wird auf True festgelegt, da die Eigenschaft für das QueryDef-Objekt erstellt wurde und nicht für das Recordset-Objekt.


IniPath-Eigenschaft

Legt den Teil für das Microsoft Jet-Datenbankmodul in der Windows-Registrierung fest oder gibt ihn zurück (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ String, der auf einen vom Benutzer bereitgestellten Teil des Registrierungsschlüssels verweist, in dem die Einstellungen oder Parameter des Microsoft Jet-Datenbankmoduls enthalten sind, die für installierbare ISAM-Datenbanken benötigt werden.

Bemerkungen

Das Microsoft Jet-Datenbankmodul kann mit der Windows-Registrierung konfiguriert werden. Sie können die Registrierung verwenden, um Optionen festzulegen, wie z.B. DLLs für installierbares ISAM.

Damit diese Option eine Wirkung hat, muß die IniPath-Eigenschaft festgelegt werden, bevor andere Datenzugriffsfunktionen von Ihrer Anwendung aufgerufen werden. Der Gültigkeitsbereich dieser Einstellung ist auf Ihre Anwendung beschränkt und kann nicht ohne einen erneuten Start Ihrer Anwendung geändert werden.

Sie verwenden die Registrierung auch, um Initialisierungsparameter für einige Datenbanktreiber für installierbares ISAM anzugeben. Sie verwenden z.B. Paradox, Version 4.0, indem Sie die IniPath-Eigenschaft auf einen Teil der Registrierung festlegen, der die entsprechenden Parameter enthält.

Diese Eigenschaft erkennt entweder HKEY_LOCAL_MACHINE oder HKEY_LOCAL_USER. Falls kein grundlegender Schlüssel definiert wurde, lautet die Voreinstellung HKEY_LOCAL_MACHINE.

Microsoft Jet-Versionen 2.5 oder früher speichern Initialisierungsinformationen in .INI-Dateien.


IsolateODBCTrans-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der anzeigt, ob mehrere Transaktionen auf derselben mit Microsoft Jet verbundenen ODBC-Datenquelle voneinander isoliert sind (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ Boolean, der True entspricht, wenn Sie Transaktionen isolieren wollen, die die gleiche ODBC (Open Database Connectivity)-Verbindung betreffen. Der Wert False (Voreinstellung) ermöglicht mehrere Transaktionen, die die gleiche ODBC-Verbindung betreffen.

Bemerkungen

In manchen Situationen müssen Sie mehrere nicht abgeschlossene Transaktionen auf derselben ODBC-Verbindung ausführen. Sie müssen dazu für jede Transaktion ein eigenes Workspace-Objekt öffnen. Jedes Workspace-Objekt kann zwar eine eigene ODBC-Verbindung zur Datenbank besitzen, aber dadurch wird die Ausführungsgeschwindigkeit verringert. Da die Isolierung von Transaktionen normalerweise nicht erforderlich ist, werden ODBC-Verbindungen von mehreren Workspace-Objekten, die vom selben Benutzer hergestellt wurden, standardmäßig zusammengefaßt.

Einige ODBC-Server wie der Microsoft SQL-Server lassen keine gleichzeitigen Transaktionen über eine einzelne Verbindung zu. Wenn Sie mehrere nicht abgeschlossene Transaktionen parallel auf einer solchen Datenbank ausführen müssen, legen Sie die IsolateODBCTrans-Eigenschaft für alle Workspace-Objekte unmittelbar nach dem Öffnen auf True fest. Damit erzwingen Sie, daß für jedes Workspace-Objekt eine eigene ODBC-Verbindung geöffnet wird.


LastModified-Eigenschaft

Gibt ein Lesezeichen zurück, das den zuletzt hinzugefügten oder geänderten Datensatz kennzeichnet.

Rückgabewerte

Der Rückgabewert ist ein Variant-Datenfeld mit Daten vom Typ Byte.

Bemerkungen

Mit der LastModified-Eigenschaft können Sie sich zum zuletzt hinzugefügten oder aktualisierten Datensatz bewegen. Verwenden Sie die LastModified-Eigenschaft mit Recordset-Objekten vom Typ Dynaset oder Tabelle. Ein Datensatz muß im Recordset-Objekt selbst hinzugefügt oder verändert werden, damit die LastModified-Eigenschaft einen Wert erhält.


LockEdits-Eigenschaft

Legt einen Wert fest oder gibt einen Wert zurück, der die Art der Sperrung anzeigt, die beim Bearbeiten wirksam ist.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Boolean-Datentyp, der die Art der Sperrung angibt, wie in der folgenden Tabelle aufgeführt wird.

Die möglichen Einstellungen oder Rückgabewerte sind:

Wert	Beschreibung
True (-1)	Voreinstellung. Vollständiges Sperren ist aktiviert. Die 2 KB große Seite, die den bearbeiteten Datensatz enthält, wird gesperrt, sobald Sie die Edit-Methode verwenden.
False (0)	Eingeschränktes Sperren ist beim Bearbeiten aktiviert. Die 2 KB große Seite, die den Datensatz enthält, wird nicht gesperrt, bis die Update-Methode ausgeführt wurde.
Bemerkungen

Sie können die LockEdits-Eigenschaft zusammen mit aktualisierbaren Recordset-Objekten vom Typ Dynaset und Tabelle verwenden.

Wenn eine Seite gesperrt ist, kann kein anderer Benutzer Datensätze auf derselben Seite bearbeiten. Wenn Sie die LockEdits-Eigenschaft auf True festlegen und ein anderer Benutzer bereits die Seite gesperrt hat, tritt beim Aufrufen der Edit-Methode ein Fehler auf. Andere Benutzer können jedoch Daten aus gesperrten Seiten lesen.

Wenn Sie die LockEdits-Eigenschaft auf False setzen und später die Update-Methode verwenden, während die Seite durch einen anderen Benutzer gesperrt ist, tritt ein Fehler auf. Sie können sehen, welche Änderungen ein anderer Benutzer an Ihrem Datensatz vorgenommen hat, wenn Sie die Move-Methode mit 0 als Argument verwenden, dadurch gehen jedoch alle Änderungen wieder verloren.

Wenn Sie mit ODBC-Datenquellen arbeiten, die mit Microsoft Jet verbunden sind, hat die LockEdits-Eigenschaft immer den Wert False (eingeschränktes Sperren). Das Microsoft Jet-Datenbankmodul hat keine Möglichkeit, die Zugriffsmechanismen zu steuern, die in externen Datenbank-Servern verwendet werden.

Anmerkung   Sie können den Wert der LockEdits-Eigenschaft voreinstellen, wenn Sie zuerst das Recordset-Objekt öffnen, indem Sie das Argument Sperren der OpenRecordset-Methode festlegen. Wenn Sie das Argument Sperren auf dbPessimistic festlegen, dann wird die LockEdits-Eigenschaft auf den Wert True festgelegt; wenn Sperren auf einen anderen Wert festgelegt wird, dann wird die LockEdits-Eigenschaft auf den Wert False festgelegt.


LoginTimeout-Eigenschaft

Gibt an, nach wie vielen Sekunden ein Fehler auftritt, wenn Sie versuchen, sich an eine ODBC-Datenbank anzumelden.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ Integer und gibt die Anzahl der Sekunden an, nach denen ein Fehler aufgrund einer Wartezeit beim Anmelden auftritt. Die Standardeinstellung für die LoginTimeout-Eigenschaft ist 20 Sekunden. Wenn die LoginTimeout-Eigenschaft den Wert 0 hat, tritt keine Wartezeit auf.

Bemerkungen

Wenn Sie sich an eine ODBC-Datenbank (z.B. Microsoft SQL Server) anmelden möchten, kann möglicherweise keine Verbindung hergestellt werden, weil Netzwerkfehler auftreten oder der Server nicht gestartet ist. Anstatt die voreingestellten 20 Sekunden auf den Verbindungsaufbau zu warten, können Sie angeben, wie lange gewartet werden soll, bevor ein Fehler auftritt. Das Anmelden an den Server erfolgt bei bestimmten Operationen implizit, etwa beim Ausführen einer Abfrage auf der Datenbank eines externen Servers.

Sie können die LoginTimeout-Eigenschaft auf das DBEngine-Objekt sowohl in Microsoft Jet- und ODBCDirect-Arbeitsbereichen verwenden. Die LoginTimeout-Eigenschaft kann auf das Workspace-Objek nur in ODBCDirect-Arbeitsbereichen verwendet werden. Wenn Sie die Eigenschaft auf -1 in einem Workspace-Objekt festlegen, entspricht dies dem Standardwert der aktuellen Einstellung von DBEngine.LoginTimeout. Sie können diese Eigenschaft in einem Workspace-Objekt jederzeit ändern, und die neue Einstellung wird mit dem Connection- oder Database-Objekt, das als nächstes geöffnet wird, aktiviert.

Der Standardwert wird vom ODBC-Treiber bestimmt. In einem Microsoft Jet-Arbeitsbereich kann der Standardwert des Treibers überschrieben werden, indem ein neuer „ODBC“-Schlüssel im Registrierungspfad \HKEY_LOCAL_MACHINE\SOFTWARE\Jet\3.5\ erstellt wird, wodurch wiederum ein LoginTimeout-Parameter für diesen Schlüssel erstellt und der Wert nach Wunsch festgelegt wird.


LogMessages-Eigenschaft

Legt einen Wert fest, der angibt, ob die Meldungen aus einer ODBC-Datenbank, die mit Microsoft Jet verbunden ist, aufgezeichnet werden (gilt nur für Microsoft Jet-Arbeitsbereiche).

Anmerkung   Der Benutzer muß diese Eigenschaft mit der CreateProperty-Methode für ein QueryDef-Objekt erstellen. Bevor Sie den Wert der LogMessages-Eigenschaft festlegen oder erhalten können, müssen Sie die LogMessages-Eigenschaft mit der CreateProperty-Methode erstellen und sie dann der Properties-Auflistung eines QueryDef-Objekts anfügen.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Boolean-Datentyp, der den Wert True hat, wenn die von ODBC erzeugten Meldungen aufgezeichnet werden.

Bemerkungen

Einige Pass-Through-Abfragen können zusätzlich zu den Daten Meldungen zurückgeben. Wenn Sie die LogMessages-Eigenschaft auf True festlegen, erstellt das Microsoft Jet-Datenbankmodul eine Tabelle, die die zurückgegebenen Meldungen enthält. Der Tabellenname setzt sich aus dem Benutzernamen, einem Bindestrich (-) und einer fortlaufenden Nummer (beginnend mit 00) zusammen. Da der Standard-Benutzername Admin ist, hätten die zurückgegebenen Tabellen in diesem Fall z.B. die Namen Admin-00, Admin-01 usw.

Wenn Sie erwarten, daß die Abfrage Meldungen zurückgibt, erstellen Sie eine benutzerdefinierte LogMessages-Eigenschaft für das QueryDef-Objekt, fügen Sie sie an, und legen Sie den zugehörigen Typ auf BOOLEAN und den Wert auf True fest.

Wenn Sie die Ergebnisse aus diesen Tabellen verarbeitet haben, löschen Sie diese Tabellen zusammen mit der temporären Abfrage zum Erzeugen der Tabelle aus der Datenbank.


Name-Eigenschaft

Gibt einen benutzerdefinierten Namen für ein DAO-Objekt zurück oder legt einen solchen Namen fest. Bei einem Objekt, das noch nicht an eine Auflistung angefügt wurde, kann diese Eigenschaft abgerufen und festgelegt werden.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ String, der einen Namen angibt. Der Name muß mit einem Buchstaben beginnen. Die maximale Anzahl an Zeichen ist abhängig vom Objektyp, auf den Name angewendet wird, wie auch unter Bemerkungen beschrieben wird. Er kann Ziffern und Unterstriche ( _ ) enthalten, aber keine Satzzeichen oder Leerzeichen.

Bemerkungen

TableDef-, QueryDef-, Field-, Index-, User- und Group-Objekte können innerhalb einer Auflistung nicht dieselben Namen haben.

Die Name-Eigenschaft eines Recordset-Objekts, das mit einer SQL-Anweisung geöffnet wurde, entspricht den ersten 256 Zeichen der SQL-Anweisung.

Sie können die Name-Eigenschaft eines Objekts zusammen mit der Dim-Anweisung aus Visual Basic für Applikationen in Code verwenden, um weitere Instanzen des Objekts zu erzeugen.

Anmerkung   Bei vielen DAO-Objekten entspricht die Name-Eigenschaft dem Namen, wie er auch im Database-Objekt bekannt ist, z.B. wie in den Namen von Table-, Field- oder QueryDef-Objekten. Es gibt keine direkte Verbindung zwischen dem Namen des DAO-Objekts und der Objektvariablen, mit der auf das Objekt verwiesen wird.

Ob die Name-Eigenschaft abgerufen oder gesetzt werden kann (d.h., ob sie schreibgeschützt ist oder nicht), hängt von der Art des zugehörigen Objekts ab und ob, oder ob nicht, das Objekt an eine Auflistung angefügt wurde. In einem ODBCDirect-Arbeitsbereich ist die Name-Eigenschaft eines angefügten Objekts immer schreibgeschützt. Die folgende Tabelle zeigt, ob die Name-Eigenschaft in einem Microsoft Jet-Arbeitsbereich für ein Objekt, das einer Auflistung angefügt wurde, mit Lese-/Schreibzugriff oder schreibgeschützt ist (es sei denn, es wurde anders angegeben), und sie gibt auch die maximale Länge bei Schreibberechtigung an.

Objekt	Verwendung	Maximale Länge
Container	Schreibgeschützt
Connection	Schreibgeschützt
Database	Schreibgeschützt
Document	Schreibgeschützt
Field
Nicht hinzugefügt	Lesen/Schreiben	64
Hinzugefügt zu Index	Schreibgeschützt
Hinzugefügt zu QueryDef	Schreibgeschützt
Hinzugefügt zu Recordset	Schreibgeschützt
Hinzugefügt zu TableDef (lokal)	Lesen/Schreiben	64
Hinzugefügt zu TableDef (verknüpft)	Schreibgeschützt
Hinzugefügt zu Relation	Schreibgeschützt
Group
Nicht hinzugefügt	Lesen/Schreiben	20
Hinzugefügt	Schreibgeschützt
Index
Nicht hinzugefügt	Lesen/Schreiben	64
Hinzugefügt	Schreibgeschützt
Parameter	Schreibgeschützt
Property
Nicht hinzugefügt	Lesen/Schreiben	64
Hinzugefügt	Schreibgeschützt
Integriert	Schreibgeschützt
QueryDef
Nicht hinzugefügt	Lesen/Schreiben	64
Temporär	Schreibgeschützt
Hinzugefügt	Lesen/Schreiben	64
Recordset	Schreibgeschützt
Relation
Nicht hinzugefügt	Lesen/Schreiben	64
Hinzugefügt	Schreibgeschützt
TableDef	Lesen/Schreiben	64
User
Nicht hinzugefügt	Lesen/Schreiben	20
Hinzugefügt	Schreibgeschützt
Workspace
Nicht hinzugefügt	Lesen/Schreiben	20
Hinzugefügt	Schreibgeschützt


NoMatch-Eigenschaft

Zeigt an, ob ein bestimmter Datensatz mit der Seek-Methode oder einer der Find-Methoden gefunden wurde (gilt nur für Microsoft Jet-Arbeitsbereiche).

Rückgabewerte

Der Rückgabewerte ist ein Boolean-Datentyp, der den Wert True hat, wenn der gewünschte Datensatz nicht gefunden wurde. Wenn Sie ein Recordset-Objekt öffnen oder erstellen, ist die NoMatch-Eigenschaft auf den Wert False festgelegt.

Bemerkungen

Sie finden einen Datensatz, indem Sie die Seek-Methode für ein Recordset-Objekt vom Typ Tabelle verwenden oder eine der Find-Methoden für ein Recordset-Objekt vom Typ Dynaset oder Snapshot aufrufen. Überprüfen Sie die Einstellung der NoMatch-Eigenschaft, um festzustellen, ob der Datensatz gefunden wurde.

Wenn die Seek- oder Find-Methode nicht erfolgreich war und die NoMatch-Eigenschaft den Wert True hat, ist der aktuelle Datensatz anschließend nicht mehr gültig. Speichern Sie daher auf jeden Fall das Lesezeichen des aktuellen Datensatzes, bevor Sie die Seek-Methode oder eine der Find-Methoden aufrufen, wenn Sie anschließend zu diesem Datensatz zurückkehren müssen.

Anmerkung   Die Verwendung der Move-Methoden für ein Recordset-Objekt hat keine Auswirkungen auf die Einstellung der zugehörigen NoMatch-Eigenschaft.


Number-Eigenschaft

Gibt einen numerischen Wert zurück, der einen Fehler angibt. Die Number-Eigenschaft ist die Standardeigenschaft des Error-Objekts.

Rückgabewerte

Der Rückgabewert ist eine Zahl vom Typ Long, der eine Fehlernummer darstellt.

Bemerkungen

Verwenden Sie die Number-Eigenschaft, um den aufgetretenen Fehler zu bestimmen. Der Wert der Eigenschaft ist eine eindeutige Nummer für den aufgefangenen Fehler, die einem Fehlerzustand entspricht. Eine vollständige Liste aller Nummern für auffangbare Fehler und Fehlerzustände finden Sie unter Auffangbare Microsoft Jet- und DAO-Fehler.


ODBCTimeout-Eigenschaft

Zeigt an, wie viele Sekunden gewartet wird, bevor ein Fehler aufgrund einer Wartezeit auftritt, wenn ein QueryDef-Objekt auf einer ODBC-Datenbank ausgeführt wird.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ Integer, der angibt, wie viele Sekunden gewartet werden muß, bevor ein Fehler aufgrund einer Wartezeit auftritt.

Wenn die ODBCTimeout-Eigenschaft auf -1 festgelegt wurde, entspricht die Voreinstellung für die Wartezeit der aktuellen Einstellung der QueryTimeout-Eigenschaft des Connection- oder Database-Objekts, das das QueryDef-Objekt enthält. Wenn die ODBCTimeout-Eigenschaft auf 0 festgelegt wurde, tritt kein Wartezeitfehler auf.

Bemerkungen

Wenn Sie eine ODBC-Datenbank (z.B. einen Microsoft SQL Server) verwenden, kann es zu Verzögerungen kommen, weil das Netzwerk oder der ODBC-Server stark belastet ist. Anstatt einen unbestimmten Zeitraum abzuwarten, können Sie angeben, wie lange gewartet werden soll, bevor ein Fehler ausgelöst wird.

Die Einstellung der ODBCTimeout-Eigenschaft eines QueryDef-Objekts setzt die Werte außer Kraft, die durch die Einstellung der QueryTimeout-Eigenschaft des Connection- oder Database-Objekts angegeben werden, das das QueryDef-Objekt enthält (aber nur für dieses QueryDef-Objekt).

Anmerkung   In einem ODBCDirect-Arbeitsbereich können Sie die ODBCTimeout-Eigenschaft, nachdem sie auf einen bestimmten Wert eingestellt wurde, nur einmal in einem QueryDef-Objekt wieder auf den Standardwert festlegen (d.h., -1). Andernfalls tritt ein Fehler auf.


OrdinalPosition-Eigenschaft

Gibt die relative Position eines Field-Objekts innerhalb der Fields-Auflistung zurück oder legt die Position fest. Bei Objekten, die noch nicht an die Fields-Auflistung angefügt wurden, kann diese Eigenschaft abgerufen und festgelegt werden.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ Integer, der die numerische Reihenfolge von Feldern angibt. Die Voreinstellung ist 0.

Bemerkungen

Die Verfügbarkeit der OrdinalPosition-Eigenschaft hängt von dem Objekt ab, das die Fields-Auflistung enthält, wie in der folgenden Tabelle gezeigt.

Die Fields-Auflistung gehört zu einem	Die OrdinalPosition-Eigenschaft ist dann
Index-Objekt	Nicht unterstützt
QueryDef-Objekt	Schreibgeschützt
Recordset-Objekt	Schreibgeschützt
Relation-Objekt	Nicht unterstützt
TableDef-Objekt	Lesen/Schreiben
Im allgemeinen hängt die Ordinalposition eines Objekts, das Sie an eine Auflistung anfügen, von der Reihenfolge ab, in der die Objekte angefügt werden. Das erste angefügte Objekt erhält die erste Position (0), das zweite angefügte Objekt die zweite Position (1) usw. Das letzte angefügte Objekt erhält die Position Anzahl - 1, wobei Anzahl der Anzahl der Objekte in der Auflistung entspricht, wie durch die Einstellung der Count-Eigenschaft angegeben.

Sie können mit der OrdinalPosition-Eigenschaft eine Ordinalposition für neue Field-Objekte angeben, die von der Position in der Reihenfolge, in der diese Objekte an eine Auflistung angefügt werden, abweicht. Sie können daher eine Feldreihenfolge für Ihre Tabellen, Abfragen und Datensatzgruppen angeben, wenn Sie sie in einer Anwendung verwenden. Beispielsweise wird die Reihenfolge, in der Felder durch eine SELECT *-Abfrage zurückgegeben werden, durch die aktuellen Werte der OrdinalPosition-Eigenschaft bestimmt.

Sie können die Reihenfolge, in der Felder in Datensatzgruppen zurückgegeben werden, permanent ändern, indem Sie die OrdinalPosition-Eigenschaft auf eine beliebige positive Ganzzahl festlegen.

Zwei oder mehr Field-Objekte in derselben Auflistung können denselben Wert für die OrdinalPosition-Eigenschaft haben; in diesem Fall werden Sie entsprechend ihrer alphabetischen Reihenfolge sortiert. Wenn z.B. ein Feld mit dem Namen "Alter" den Wert 4 hat und Sie ein zweites Feld mit dem Namen "Gewicht" auf 4 setzen, so wird "Gewicht" nach "Alter" zurückgegeben.

Wenn Sie eine Zahl angeben, die größer ist als die Anzahl der Felder minus 1, wird das Feld an einer Position relativ zur größten Zahl zurückgegeben. Wenn Sie z.B. die OrdinalPosition-Eigenschaft eines Feldes auf 20 setzen (und nur 5 Felder vorhanden sind) und die OrdinalPosition-Eigenschaft zweier anderer Felder auf 10 und 30 gesetzt hatten, erhält das Feld mit dem Wert 20 eine Position zwischen den Feldern mit den Werten 10 und 30.

Anmerkung   Auch wenn die Fields-Auflistung eines TableDef-Objekts nicht aktualisiert wurde, gibt die Reihenfolge der Felder in einem Recordset-Objekt, das aus dem TableDef-Objekt geöffnet wurde, die OrdinalPosition-Eigenschaft der Daten des TableDef-Objekts wieder. Ein Recordset-Objekt vom Typ Tabelle hat dieselben Daten mit der Eigenschaft OrdinalPosition wie die zugrundeliegende Tabelle, während andere Recordset-Objekte Daten mit neuen OrdinalPosition-Eigenschaften haben (die mit 0 beginnen), gemäß der Reihenfolge, die durch die OrdinalPosition-Eigenschaft der Daten im TableDef-Objekt festgelegt wurde.


Owner-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der den Eigentümer des Objekts angibt (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ String, der entweder den Namen eines User-Objekts in der Users-Auflistung oder den Namen eines Group-Objekts in der Groups-Auflistung auswertet.

Bemerkungen

Der Eigentümer eines Objekts hat bestimmte Zugriffsprivilegien, die andere Benutzer nicht haben. Die Einstellung der Owner-Eigenschaft kann jederzeit durch jedes Benutzerkonto (das durch ein User-Objekt dargestellt wird) oder jede Gruppe von Benutzerkonten (die durch ein Group-Objekt dargestellt wird) geändert werden, wenn die entsprechenden Berechtigungen vorhanden sind.


Password-Eigenschaft

Legt das Kennwort für ein Benutzerkonto fest (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen

Die Einstellung ist vom Typ String, der bis zu 14 Zeichen lang sein kann und beliebige Zeichen außer dem ASCII-Zeichen 0 (Null) enthalten darf. Die Eigenschaft ist bei neuen Objekten, die einer Auflistung noch nicht angefügt wurden, schreibgeschützt und bei vorhandenen Objekten nicht verfügbar.

Bemerkungen

Legen Sie die Password-Eigenschaft mit der PID-Eigenschaft fest, wenn Sie ein neues User-Objekt erstellen.

Verwenden Sie die NewPassword-Methode, um die Einstellung der Password-Eigenschaft für ein existierendes User-Objekt zu ändern. Sie löschen ein Kennwort, indem Sie das Argument NeuesKennwort der NewPassword-Methode auf eine Null-Zeichenfolge ("") festlegen.

Bei Kennwörtern wird die Groß-/Kleinschreibung berücksichtigt.

Anmerkung   Wenn Sie keine Zugriffsberechtigungen haben, können Sie das Kennwort eines anderen Benutzers nicht ändern.


PercentPosition-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der die ungefähre Position des aktuellen Datensatzes im Recordset-Objekt anzeigt, und zwar in Form eines Prozentsatzes aller Datensätze im Recordset-Objekt.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Single-Datentyp im Bereich von 0,0 bis 100,00.

Bemerkungen

Sie können die ungefähre Position des aktuellen Datensatzes in einem Recordset anzeigen oder ändern, indem Sie die PercentPosition-Eigenschaft abrufen oder festlegen. Wenn Sie mit einem Recordset-Objekt vom Typ Dynaset oder Snapshot arbeiten, das direkt aus der Basistabelle geöffnet wurde, füllen Sie das Recordset-Objekt zuerst auf, indem Sie sich zum letzten Datensatz bewegen, bevor Sie die PercentPosition-Eigenschaft abrufen oder festlegen. Wenn Sie die PercentPosition-Eigenschaft verwenden, bevor das Recordset-Objekt vollständig aufgefüllt ist, bezieht sich die vollzogene Bewegung auf die Anzahl der Datensätze, auf die zugegriffen wurde, wie durch die Einstellung der RecordCount-Eigenschaft angezeigt. Sie können sich mit der MoveLast-Methode zum letzten Datensatz bewegen.

Anmerkung   Sie sollten die PercentPosition-Eigenschaft nicht verwenden, um einen bestimmten Datensatz in einem Recordset-Objekt zum aktuellen Datensatz zu machen. Verwenden Sie dafür besser die Bookmark-Eigenschaft.

Nachdem Sie die PercentPosition-Eigenschaft auf einen Wert gesetzt haben, wird der Datensatz, der sich an der durch diesen Wert ungefähr angegebenen Stelle befindet, zum aktuellen Datensatz, und die PercentPosition-Eigenschaft wird auf einen Wert gesetzt, der der ungefähren Position des aktuellen Datensatzes entspricht. Wenn das Recordset-Objekt z.B. nur fünf Datensätze enthält und Sie die zugehörige PercentPosition-Eigenschaft auf den Wert 77 setzen, wird wahrscheinlich nicht 77 als Wert für die PercentPosition-Eigenschaft zurückgegeben, sondern 80.

Die PercentPosition-Eigenschaft kann für alle Arten von Recordset-Objekten, mit Ausnahme von Recordset-Objekten vom Typ Vorwärts oder für Recordset-Objekte, die von einer Pass-Through-Abfrage auf einer Remote-Datenbank geöffnet wurden, verwendet werden.

Sie können die PercentPosition-Eigenschaft zusammen mit einer Bildlaufleiste in einem Formular oder Textfeld verwenden, um die Position des aktuellen Datensatzes in einem Recordset-Objekt anzuzeigen.


Permissions-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der die Berechtigungen für den Benutzer oder die Gruppe einrichtet, der oder die durch die UserName-Eigenschaft des Container- oder Document-Objekts gekennzeichnet wird (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist eine Konstante vom Typ Long, die Berechtigungen einrichtet. In den folgenden Tabellen werden die gültigen Konstanten der Permissions-Eigenschaft für die DAO-Objekte aufgelistet. Wenn es nicht anders angegeben wird, gelten alle Konstanten für alle Document-Objekte

Die folgende Tabelle führt mögliche Werte für Container-Objekte auf, die nicht Tabellen- oder Datenbank-Container sind.

Konstante	Beschreibung
dbSecNoAccess	Der Benutzer hat keinen Zugriff auf das Objekt (nicht zulässig bei Document-Objekten).
dbSecFullAccess	Der Benutzer hat vollen Zugriff auf das Objekt.
dbSecDelete	Der Benutzer kann das Objekt löschen.
dbSecReadSec	Der Benutzer kann die sicherheitsbezogenen Informationen des Objekts lesen.
DbSecWriteSec	Der Benutzer kann die Zugriffsberechtigungen ändern.
DbSecWriteOwner	Der Benutzer kann die Einstellung der Owner-Eigenschaft ändern.
In der folgenden Tabelle werden die möglichen Einstellungen und Rückgabewerte des Tabellen-Containers aufgeführt.

Konstante	Beschreibung
dbSecCreate	Der Benutzer kann neue Dokumente erstellen (nicht zulässig bei Document-Objekten).
DbSecReadDef	Der Benutzer kann die Tabellendefinition (einschließlich Spalten- und Indexinformationen) lesen.
DbSecWriteDef	Der Benutzer kann die Tabellendefinition (einschließlich Spalten- und Indexinformationen) ändern oder löschen.
DbSecRetrieveData	Der Benutzer kann Daten aus dem Document-Objekt abrufen.
DbSecInsertData	Der Benutzer kann Datensätze hinzufügen.
DbSecReplaceData	Der Benutzer kann Datensätze ändern.
DbSecDeleteData	Der Benutzer kann Datensätze löschen.
In der folgenden Tabelle werden die möglichen Einstellungen und Rückgabewerte des Datenbank-Containers aufgeführt.

Konstante	Beschreibung
dbSecDBAdmin	Der Benutzer kann die Datenbank replizieren und das Datenbankkennwort ändern (nicht zulässig bei Document-Objekten).
DbSecDBCreate	Der Benutzer kann neue Datenbanken erstellen. Diese Option ist nur für Datenbank-Container der Informationsdatei für Arbeitsgruppen (System.mdw) zulässig. Diese Konstante ist nicht zulässig bei Document-Objekten.
DbSecDBExclusive	Der Benutzer hat exklusiven Datenbankzugriff.
dbSecDBOpen	Der Benutzer kann die Datenbank öffnen.
Bemerkungen

Mit dieser Eigenschaft können Sie die Art der Berechtigungen zum Lesen/Schreiben/Ändern einrichten oder bestimmen, die der Benutzer mit der UserName-Eigenschaft für ein Container-Objekt oder Document-Objekt angegeben hat.

Ein Document-Objekt übernimmt (erbt) die Berechtigungen für Benutzer aus dem zugehörigen Container-Objekt, wenn die Inherit -Eigenschaft des Container-Objekts für solche Benutzer oder für eine Gruppe, der der Benutzer angehört, gesetzt ist. Wenn Sie die Eigenschaften Permissions und UserName eines Document-Objekts zu einem späteren Zeitpunkt festlegen, können Sie die Möglichkeiten zum Zugriff auf Ihr Objekt weiter anpassen.

Mit der AllPermissions-Eigenschaft können Sie Berechtigungen für einen Benutzer festlegen oder zurückgeben, die übernommene Berechtigungen anderer Gruppen, denen der Benutzer angehört, einschließen.


PID-Eigenschaft

Legt die persönliche ID (PID) entweder für eine Gruppe oder für ein Benutzerkonto fest (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen

Die Einstellung ist vom Typ String, der 4-20 alphanumerische Zeichen enthält.

Bemerkungen

Legen Sie die PID-Eigenschaft zusammen mit der Name-Eigenschaft fest, wenn Sie ein neues Group-Objekt erstellen. Legen Sie die PID-Eigenschaft zusammen mit der Name- und der Password-Eigenschaft fest, wenn Sie ein neues User-Objekt erstellen.


Primary-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der anzeigt, ob ein Index-Objekt einen Primärindex für eine Tabelle darstellt (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Boolean-Datentyp, der den Wert True hat, wenn das Index-Objekt den Primärindex darstellt.

Die Einstellung der Primary-Eigenschaft ist bei einem neuen Index-Objekt, das noch nicht an eine Auflistung angefügt wurde, mit Lese-/Schreibzugriff, und ist bei einem bestehenden Index-Objekt in einer Indexes-Auflistung schreibgeschützt. Wenn das Index-Objekt an das TableDef-Objekt angefügt, aber das TableDef-Objekt nicht an die TableDefs-Auflistung angefügt wurde, kann die Index-Eigenschaft abgerufen und festgelegt werden.

Bemerkungen

Ein Primärindex besteht aus einem oder mehreren Feldern, die alle Datensätze in einer Tabelle in einer vordefinierten Reihenfolge eindeutig kennzeichnen. Da das Indexfeld eindeutig sein muß, hat die Unique-Eigenschaft des Index-Objekts den Wert True. Wenn der Primärindex aus mehreren Feldern besteht, kann jedes einzelne Feld mehrfach vorkommende Werte enthalten, solange die Kombination der Werte aller Indexfelder eindeutig ist. Ein Primärindex besteht aus einem Schlüssel für die Tabelle und enthält in der Regel dieselben Felder wie der Primärschlüssel.

Anmerkung   Sie müssen keine Indizes für Tabellen anlegen, aber in großen Tabellen ohne Index kann der Zugriff auf einen bestimmten Datensatz sehr lange dauern. Die Attributes-Eigenschaft jedes Field-Objekts im Index-Objekt bestimmt die Reihenfolge der Datensätze und damit die Zugriffsverfahren, die für diesen Index verwendet werden sollen. Wenn Sie eine neue Tabelle in Ihrer Datenbank erstellen, sollten Sie einen Index auf einem oder mehreren Feldern anlegen, der jeden Datensatz eindeutig kennzeichnet, und dann die Primary-Eigenschaft des Index-Objekts auf True festlegen.

Wenn Sie einen Primärschlüssel für eine Tabelle festlegen, wird der Primärschlüssel automatisch als Primärindex für die Tabelle definiert.


QueryTimeout-Eigenschaft

Gibt an, wie viele Sekunden gewartet wird, bevor ein Fehler aufgrund einer Wartezeit auftritt, wenn eine Abfrage auf einer ODBC-Datenquelle ausgeführt wird.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ Integer, der angibt, wie viele Sekunden gewartet wird. Der Standardwert ist 60.

Bemerkungen

Wenn Sie eine ODBC-Datenbank (z.B. einen Microsoft SQL Server) verwenden, kann es zu Verzögerungen kommen, weil das Netzwerk oder der ODBC-Server stark belastet ist. Anstatt einen unbestimmten Zeitraum abzuwarten, können Sie angeben, wie lange gewartet werden soll.

Wenn Sie die QueryTimeout-Eigenschaft zusammen mit einem Connection- oder Database-Objekt verwenden, gibt sie einen globalen Wert für alle Abfragen an, die mit der Datenbank verbunden sind. Sie können diesen Wert für eine bestimmte Abfrage außer Kraft setzen, indem Sie die ODBCTimeout-Eigenschaft auf das entsprechende QueryDef-Objekt festlegen.

In einem Microsoft Jet-Arbeitsbereich können Sie den Standardwert außer Kraft setzen, indem Sie im Pfad der Registrierung \HKEY_LOCAL_MACHINE\SOFTWARE\Jet\3.5\ einen neuen "ODBC"-Schlüssel erstellen, Sie dann einen QueryTimeout-Parameter in diesem Schlüssel erstellen und dann den Wert wie gewünscht festlegen.


RecordCount-Eigenschaft

Gibt die Anzahl der Datensätze zurück, auf die in einem Recordset-Objekt zugegriffen wird, oder die Gesamtanzahl der Datensätze in einem Recordset-Objekt vom Typ Tabelle oder einem TableDef-Objekt.

Rückgabewerte

Der Rückgabewert ist eine Zahl vom Typ Long Integer.

Bemerkungen

Mit der RecordCount-Eigenschaft können Sie herausfinden, auf wie viele Datensätze in einem Recordset- oder TableDef-Objekt zugegriffen wurde. Die RecordCount-Eigenschaft zeigt erst an, wie viele Datensätze in einem Recordset-Objekt vom Typ Dynaset, Vorwärts oder Snapshot enthalten sind, nachdem auf alle Datensätze zugegriffen wurde.

Nachdem auf den letzten Datensatz zugegriffen wurde, zeigt die RecordCount-Eigenschaft an, wie viele ungelöschte Datensätze insgesamt im Recordset- oder TableDef-Objekt enthalten sind. Damit auf jeden Fall auf den letzten Datensatz zugegriffen wird, verwenden Sie die MoveLast-Methode auf dem Recordset-Objekt. Sie können auch die SQL-Funktion Count verwenden, um die ungefähre Anzahl der Datensätze zu bestimmen, die Ihre Abfrage zurückgeben wird.

Anmerkung   Wenn Sie mit der MoveLast-Methode ein neu geöffnetes Recordset-Objekt auffüllen, wird die Leistung beeinträchtigt. Nur wenn ein exakter RecordCount sofort beim Öffnen des Recordset-Objekts nötig ist, sollten Sie dies durchführen, anderenfalls sollten Sie zuerst das Recordset-Objekt mit anderen Teilen des Codes auffüllen, bevor Sie die RecordCount-Eigenschaft aktivieren.

Während Ihre Anwendung Datensätze in einem Recordset-Objekt vom Typ Dynaset, wird der Wert der RecordCount-Eigenschaft kleiner. Allerdings werden keine Datensätze von der RecordCount-Eigenschaft berücksichtigt, die durch andere Benutzer gelöscht wurden, bevor nicht der aktuelle Datensatz auf einen gelöschten Datensatz positioniert wurde. Wenn Sie eine Transaktion ausführen, die die Einstellung der RecordCount-Eigenschaft ändert, und Sie anschließend die Transaktion zurücksetzen (Roll Back), entspricht die RecordCount-Eigenschaft nicht mehr der tatsächlichen Anzahl verbleibender Datensätze.

Die RecordCount-Eigenschaft eines Recordset-Objekts vom Typ Snapshot oder Vorwärts ändert sich nicht, wenn Änderungen an den zugrundeliegenden Tabellen vorgenommen werden.

Bei einem Recordset- oder TableDef-Objekt ohne Datensätze hat die RecordCount-Eigenschaft den Wert 0.

Beim Arbeiten mit verknüpften TableDef-Objekten hat die RecordCount-Eigenschaft immer den Wert –1.

Durch Ausführen der Requery-Methode auf einem Recordset-Objekt  wird die RecordCount-Eigenschaft zurückgesetzt (wie beim erneuten Ausführen der Abfrage).


RecordsAffected-Eigenschaft

Gibt die Anzahl der Datensätze zurück, die von der zuletzt ausgeführten Execute Methode betroffen sind.

Rückgabewerte

Der Rückgabewert ist eine Ganzzahl vom Typ Long im Bereich von 0 bis zur Anzahl der Datensätze, die von der zuletzt auf einem Database- oder QueryDef-Objekt ausgeführten Execute-Methode betroffen sind.

Bemerkungen

Wenn Sie mit der Execute-Methode eine Aktionsabfrage auf einem QueryDef-Objekt ausführen, dann enthält die RecordsAffected-Eigenschaft die Anzahl der gelöschten, aktualisierten oder eingefügten Datensätze.

Wenn Sie die RecordsAffected-Eigenschaft in einem ODBCDirect-Arbeitsbereich verwenden, wird kein verwertbarer Wert von der SQL DROP TABLE-Aktionsabfrage zurückgegeben.

Die RecordsAffected-Eigenschaft enthält die Anzahl der Datensätze, die beim Ausführen einer Aktionsabfrage gelöscht, aktualisiert oder eingefügt werden. Wenn Sie die Execute-Methode verwenden, um ein QueryDef-Objekt auszuführen, enthält die RecordsAffected-Eigenschaft die Anzahl der von der Operation betroffenen Datensätze.

Anmerkung   Die Einstellung der RecordsAffected-Eigenschaft entspricht dem Wert, der von der ExecuteSQL-Methode zurückgegeben wird.


Required-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der anzeigt, ob ein Field-Objekt einen Wert ungleich Null erfordert oder ob alle Felder in einem Index-Objekt aufgefüllt werden müssen.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Boolean-Datentyp, der den Wert True hat, wenn ein Feld keinen Null-Wert enthalten kann. Bei einem Objekt, das noch nicht an eine Auflistung angefügt wurde, kann diese Eigenschaft abgerufen und festgelegt werden. Bei einem Index-Objekt ist die Einstellung dieser Eigenschaft für Objekte schreibgeschützt, die an Indexes-Auflistungen in Recordset- und TableDef-Objekten angefügt sind.

Bemerkungen

Die Verfügbarkeit der Required-Eigenschaft hängt von dem Objekt ab, in dem die Fields-Auflistung enthalten ist, wie in der folgenden Tabelle gezeigt wird.

Die Fields-Auflistung gehört zu einem	Required ist dann
Index-Objekt	Nicht unterstützt
QueryDef-Objekt	Schreibgeschützt
Recordset-Objekt	Schreibgeschützt
Relation-Objekt	Nicht unterstützt
TableDef-Objekt	Lesen/Schreiben
Bei einem Field-Objekt können Sie die Required-Eigenschaft zusammen mit den Eigenschaften AllowZeroLength, ValidateOnSet oder ValidationRule verwenden, um die Gültigkeit der Einstellung der Value-Eigenschaft für dieses Field-Objekt festzustellen. Wenn die Required-Eigenschaft den Wert False hat, kann das Feld Null-Werte enthalten oder Werte, die die Bedingungen erfüllen, die durch die Einstellungen der Eigenschaften AllowZeroLength und ValidationRule angegeben werden.

Anmerkung   Wenn Sie diese Eigenschaft sowohl für ein Index-Objekt als auch für ein Field-Objekt festlegen können, dann legen Sie sie für das Field-Objekt fest. Die Überprüfung der Eigenschafteneinstellung für ein Field-Objekt erfolgt vor der Überprüfung eines Index-Objekts.


Restartable-Eigenschaft

Gibt einen Wert zurück, der anzeigt, ob ein Recordset-Objekt die Requery-Methode unterstützt, durch die die Abfrage erneut ausgeführt wird, die dem Recordset-Objekt zugrundeliegt.

Rückgabewerte

Der Rückgabewert ist ein Boolean-Datentyp, der den Wert True hat, wenn das Recordset-Objekt die Requery-Methode unterstützt. Ein Recordset-Objekt vom Typ Tabelle gibt immer den Wert False zurück.

Bemerkungen

Überprüfen Sie die Restartable-Eigenschaft, bevor Sie die Requery-Methode auf einem Recordset-Objekt ausführen. Wenn die Restartable-Eigenschaft des Objekts den Wert False hat, führen Sie die OpenRecordset-Methode auf dem zugrundeliegenden QueryDef-Objekt aus, um die Abfrage erneut auszuführen.


ReturnsRecords-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der anzeigt, ob eine SQL-Pass-Through-Abfrage auf einer externen Datenbank Datensätze zurückgibt.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Boolean-Datentyp, dessen Wert True (Voreinstellung) anzeigt, daß eine Pass-Through-Abfrage Datensätze zurückgibt.

Bemerkungen

Nicht alle SQL-Pass-Through-Abfragen auf externen Datenbanken geben Datensätze zurück. Die SQL-Anweisung UPDATE aktualisiert z.B. Datensätze, ohne Datensätze zurückzugeben, während die SQL-Anweisung SELECT Datensätze zurückgibt. Wenn die Abfrage Datensätze zurückgibt, legen Sie die ReturnsRecords-Eigenschaft auf True fest. Wenn die Abfrage keine Datensätze zurückgibt, legen Sie die ReturnsRecords-Eigenschaft auf False fest.

Anmerkung   Die Connect-Eigenschaft muß festgelegt werden, bevor die ReturnsRecords-Eigenschaft festgelegt wird.


Size-Eigenschaft

Liefert einen Wert, der die maximale Größe eines Field-Objekts (in Bytes) anzeigt.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist eine Konstante, die die maximale Größe eines Field-Objekts angibt. Bei einem Objekt, das noch keiner Fields-Auflistung angefügt wurde, hat die Eigenschaft Lese-/Schreibzugriff. Die Einstellung hängt von der Einstellung für die Type-Eigenschaft des Field-Objekts ab, wie unter Bemerkungen beschrieben.

Bemerkungen

Bei Feldern (außer Felder vom Typ Memo) die Zeichendaten enthalten, zeigt die Size-Eigenschaft die maximale Zahl der Zeichen an, die in diesem Feld sein können. Bei numerischen Feldern zeigt die Size-Eigenschaft an, wie viele Bytes an Speicher benötigt werden.

Die Verwendung der Size-Eigenschaft hängt von dem Objekt ab, das die Fields-Auflistung enthält, an die das Field-Objekt angefügt wird, wie in der folgenden Tabelle gezeigt.

Objekt angefügt an	Verwendung
Index	Nicht unterstützt
QueryDef	Schreibgeschützt
Recordset	Schreibgeschützt
Relation	Nicht unterstützt
TableDef	Schreibgeschützt
Wenn Sie ein Field-Objekt erstellen, das nicht den Datentyp Text hat, bestimmt die Einstellung der Type-Eigenschaft automatisch die Einstellung der Size-Eigenschaft, und Sie müssen sie nicht festlegen. Bei einem Field-Objekt mit dem Datentyp Text können Sie Size auf eine beliebige Ganzzahl bis zur maximalen Textgröße festlegen (255 Zeichen bei Microsoft Jet-Datenbanken). Wenn Sie die Größe nicht festlegen, wird das Feld so groß, wie die Datenbank erlaubt.

Bei Field-Objekten vom Typ Long Binary und Memo hat Size immer den Wert 0. Verwenden Sie die FieldSize-Eigenschaft des Field-Objekts, um die Größe der Daten in einem angegebenen Datensatz zu bestimmen. Die maximale Größe eines Feldes vom Typ Long Binary oder Memo ist nur durch die Systemressourcen oder die maximale Größe der Datenbank beschränkt.


Sort-Eigenschaft

Gibt die Sortierreihenfolge für Datensätze in einem Recordset-Objekt zurück oder legt sie fest (gilt nur für Microsoft Jet Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ String, der den ORDER BY-Abschnitt einer SQL-Anweisung ohne die reservierten Wörter ORDER BY enthält.

Bemerkungen

Sie können die Sort-Eigenschaft mit Recordset-Objekten vom Typ Dynaset und Snapshot verwenden.

Wenn Sie diese Eigenschaft für ein Objekt festlegen, findet der Sortiervorgang statt, wenn nachfolgend ein Recordset-Objekt aus diesem Objekt erstellt wird. Die Einstellung der Sort-Eigenschaft setzt alle Sortierreihenfolgen außer Kraft, die für ein QueryDef-Objekt angegeben wurden.

Standardmäßig wird die aufsteigende Sortierreihenfolge (A bis Z oder 0 bis 100) verwendet.

Die Sort-Eigenschaft kann nicht für Recordset-Objekte vom Typ Tabelle oder Vorwärts verwendet werden. Sie können ein Recordset-Objekt vom Typ Tabelle sortieren, indem Sie die Index-Eigenschaft verwenden.

Anmerkung   Häufig ist es schneller, ein neues Recordset-Objekt mit einer SQL-Anweisung zu öffnen, die die Sortierkriterien enthält.


Source-Eigenschaft

Gibt den Namen des Objekts oder der Anwendung zurück, das oder die ursprünglich den Fehler verursacht hat.

Rückgabewerte

Der Rückgabewert ist vom Typ String, der das Objekt oder die Anwendung darstellt, das/die den Fehler verursacht hat.

Bemerkungen

Der Wert der Source-Eigenschaft ist normalerweise der Name oder die Ressource-ID der Klasse. Verwenden Sie die Source-Eigenschaft, um Ihren Benutzern Informationen zur Verfügung zu stellen, wenn Ihr Code nicht in der Lage ist, einen Fehler zu behandeln, der in einem Objekt einer anderen Anwendung auftritt.

Wenn Sie z.B. auf Microsoft Excel zugreifen und ein Fehler "Division durch Null" auftritt, legt Microsoft Excel Error.Number auf die zugehörige Microsoft Excel-Fehlernummer für diesen Fehler und die Source-Eigenschaft auf Excel.Application fest. Wenn der Fehler von einem anderen Objekt verursacht wird, das von Microsoft Excel aufgerufen wird, fängt Microsoft Excel den Fehler trotzdem ab und legt Error.Number auf Microsoft Excel-Code fest. Jedoch behalten die anderen Error-Objekteigenschaften (einschließlich der Source-Eigenschaft) die Werte so, wie diese vom Objekt festgelegt wurden, das den Fehler verursacht hat. Die Source-Eigenschaft enthält immer den Namen des Objekts, das den Fehler ursprünglich verursacht hat.

Sie können mit Hilfe der Dokumentation der Fehler Code schreiben, der die Fehler entsprechend behandelt. Wenn Ihre Fehlerbehandlungsroutine fehlschlägt, können Sie die Informationen zum Error-Objekt dazu verwenden, dem Benutzer Informationen zum Fehler zur Verfügung zu stellen. Mit Hilfe der Source-Eigenschaft und den anderen Error-Eigenschaften können dem Benutzer Informationen darüber, welches Objekt den Fehler ursprünglich verursacht hat, eine zugehörige Beschreibung des Fehlers usw. zur Verfügung gestellt werden.

Anmerkung   Das Konstrukt On Error Resume Next sollte dem Konstrukt On Error GoTo vorgezogen werden, wenn Fehler behandelt werden, die während eines Zugriffes auf andere Objekte auftreten. Das Überprüfen der Eigenschaft des Error-Objekts nach jeder Interaktion mit einem Objekt sorgt dafür, daß immer eindeutig festgestellt werden kann, auf welches Objekt Ihr Code zugegriffen hat, als der Fehler auftrat. Dadurch kann sowohl sichergestellt werden, welches Objekt den Fehlercode in Error.Number abgelegt hat, als auch, welches Objekt den Fehler (Error.Source) ursprünglich verursacht hat.


SourceField-, SourceTable-Eigenschaften

•	SourceField: gibt einen Wert zurück, der den Namen des Feldes anzeigt, das die ursprüngliche Herkunft der Daten eines Field-Objekts darstellt.

•	SourceTable: gibt einen Wert zurück, der den Namen der Tabelle anzeigt, die die ursprüngliche Herkunft der Daten eines Field-Objekts darstellt.

Rückgabewerte

Der Rückgabewert ist vom Typ String, der den Namen des Feldes oder der Tabelle angibt, die die Herkunft der Daten darstellt.

Bemerkungen

Bei einem Field-Objekt hängt die Verwendung der Eigenschaften SourceField und SourceTable von dem Objekt ab, das die Fields-Auflistung enthält, an die das Field-Objekt angefügt wird, wie in der folgenden Tabelle gezeigt.

Objekt angefügt an	Verwendung
Index	Nicht unterstützt
QueryDef	Schreibgeschützt
Recordset	Schreibgeschützt
Relation	Nicht unterstützt
TableDef	Schreibgeschützt
Diese Eigenschaften zeigen die Namen des ursprünglichen Feldes bzw. der ursprünglichen Tabelle an, das/die einem Field-Objekt zugeordnet ist. Sie können mit diesen Eigenschaften z.B. die ursprüngliche Herkunft der Daten in einem Abfragefeld bestimmen, dessen Name keinen Bezug auf das Feld in der zugrundeliegenden Tabelle hat.

Anmerkung   Die SourceTable-Eigenschaft gibt keinen aussagekräftigen Tabellennamen zurück, wenn sie in einer Fields-Auflistung eines Recordset-Objekt vom Typ Tabelle auf ein Field-Objekt angewandt wird.


SourceTableName-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der den Namen einer verknüpften Tabelle oder den Namen einer Basistabelle angibt (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ String, der einen Tabellennamen angibt. Bei einer Basistabelle ist die Einstellung eine Null-Zeichenfolge ("").Bei einer Basistabelle ist die Einstellung für diese Eigenschaft schreibgeschützt, bei einer verknüpften Tabelle oder einem Objekt das keiner Auflistung angefügt wurde, ist sie mit Lese-/Schreibzugriff.


SQL-Eigenschaft

Gibt die SQL-Anweisung zurück, die die von einem QueryDef-Objekt ausgeführte Abfrage definiert, oder legt die SQL-Anweisung fest.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ String, der eine SQL-Anweisung enthält.

Bemerkungen

Die SQL-Eigenschaft enthält die SQL-Anweisung, die bestimmt, wie Datensätze ausgewählt , gruppiert und sortiert werden, wenn Sie die Abfrage ausführen. Sie können die Abfrage verwenden, um Datensätze auszuwählen, die in ein Recordset-Objekt aufgenommen werden sollen. Sie können auch Aktionsabfragen definieren, um Daten zu verändern, ohne Datensätze zurückzugeben.

Die in einer Abfrage verwendete SQL-Syntax muß in dem SQL-Dialekt des Abfragemoduls zulässig sein; dieses wird durch den Arbeitsbereich festgelegt. In einem Microsoft Jet-Arbeitsbereich können Sie den Microsoft Jet-SQL-Dialekt verwenden, es sei denn, Sie erstellen eine SQL-Pass-Through-Abfrage; dann sollten Sie den Dialekt des Servers verwenden. In einem ODBCDirect-Arbeitsbereich können Sie den SQL-Dialekt des Servers verwenden.

Anmerkung   Sie können DAO-Abfragen an verschiedene Datenbank-Server mit ODBCDirect senden, und die verschiedenen Server verstehen alle einen leicht voneinander abweichende SQL-Dialekt. Deshalb wird die kontextsensitive Hilfe nicht mehr für Microsoft Jet-SQL angeboten, die Hilfe für Microsoft Jet-SQL gibt es jedoch weiterhin im Menü ?. Stellen Sie sicher, daß Sie in der entsprechenden Dokumentation für die SQL-Sprache Ihres Datenbank-Servers nachlesen, wenn Sie entweder ODBCDirect-Verbindungen oder Pass-Through-Abfragen in Client/Server-Anwendungen die mit Microsoft Jet verbunden sind.

Wenn die SQL-Anweisung Parameter für die Abfrage enthält, müssen Sie diese vor der Ausführung festlegen. Die Parameterwerte werden solange bei jeder Ausführung der Abfrage verwendet, bis Sie sie zurücksetzen.

In einem ODBCDirect-Arbeitsbereich können Sie mit der SQL-Eigenschaft eine vorbereitete Anweisung auf dem Server ausführen. Beispielsweise können Sie durch Festlegen der SQL-Eigenschaft auf die folgende Zeichenfolge eine vorbereitete Anweisung "GetData" mit einem Parameter auf einem Microsoft SQL Server-Back-End ausführen.

"{call GetData (?)}"

In einem Microsoft Jet-Arbeitsbereich ist das QueryDef-Objekt eine bevorzugte Methode, um SQL-Pass-Through-Operationen auf ODBC-Datenquellen, die mit Microsoft Jet verbunden sind, auszuführen. Durch Festlegen der Connect-Eigenschaft des QueryDef-Objekts auf eine ODBC-Datenquelle können Sie angeben, daß SQL-Anweisungen in der Abfrage, die nicht dem Dialekt des Microsoft Jet-Datenbankmoduls entsprechen, an den externen Server "durchgereicht" werden. Sie können z.B. TRANSACT SQL-Anweisungen (für Datenbanken des Microsoft SQL Servers oder Sybase SQL Servers) verwenden, die das Microsoft Jet-Datenbankmodul ansonsten nicht ausführen würde.

Anmerkung   Wenn Sie die Eigenschaft auf eine Zeichenfolge festlegen, die mit einem Wert verkettet ist, der keine Ganzzahl darstellt, und die Systemparameter geben ein Dezimalzeichen an, das nicht US-spezifisch ist, wie z.B. ein Komma (z.B. strSQL = "PREIS > " & lngPrice, und lngPrice = 125,50), wird ein Fehler ausgegeben, wenn Sie versuchen, das QueryDef-Objekt in einer Microsoft Jet-Datenbank auszuführen. Dieser Fehler tritt auf, da während der Verkettung die Zahlen zu Zeichenfolgen konvertiert werden, wobei die voreingestellten Dezimalzeichen des Systems verwendet werden, und Microsoft Jet-SQL akzeptiert nur U.S.-Dezimalzeichen.


Table-Eigenschaft

Gibt den Namen der Primärtabelle eines Relation-Objekts an. Dieses sollte der Einstellung der Name-Eigenschaft eines TableDef- oder QueryDef-Objekts entsprechen (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Typ String, der den Namen einer Tabelle in einer TableDefs-Auflistung oder einer Abfrage in einer QueryDefs-Auflistung auswertet. Die Einstellung der Table-Eigenschaft kann bei einem neuen Relation-Objekt, das noch nicht an eine Auflistung angefügt wurde, abgerufen und festgelegt werden, und bei einem bestehenden Relation-Objekt in einer Relations-Auflistung nur abgerufen werden (d.h., sie ist schreibgeschützt).

Bemerkungen

Verwenden Sie die Table-Eigenschaft zusammen mit der ForeignTable-Eigenschaft, um ein Relation-Objekt zu definieren, das die Beziehung zwischen Feldern in zwei Tabellen oder Abfragen darstellt. Legen Sie die Einstellung der Table-Eigenschaft auf die Einstellung der Name-Eigenschaft des primären TableDef- oder QueryDef-Objekts fest, und legen Sie die Einstellung der ForeignTable-Eigenschaft auf die Einstellung der Name-Eigenschaft des TableDef- oder QueryDef-Fremdobjekts (referenzierenden Objekts) fest. Die Attributes-Eigenschaft bestimmt die Art der Beziehung zwischen den beiden Objekten.

Wenn Sie z.B. eine Liste gültiger Artikelnummern (in einem Feld mit dem Namen "Artikelnummer") haben, die in der Tabelle "Artikel" gespeichert ist, könnten Sie eine 1:n-Beziehung mit der Tabelle "Bestellung" in der Form einrichten, daß eine in die Tabelle "Bestellung" eingegebene Artikelnummer in der Tabelle "Artikel" schon vorhanden sein kann. Wenn die Artikelnummer in der Tabelle "Artikel" nicht existiert und Sie die Attributes-Eigenschaft des Relation-Objekts nicht auf dbRelationDontEnforce festlegen, tritt ein auffangbarer Fehler auf.

In diesem Fall ist die Tabelle "Artikel" ein Beispiel für die Fremdtabelle, so daß die Table-Eigenschaft des Relation-Objekts auf die Tabelle "Bestellung" festgelegt würde. Die Name-Eigenschaft und die ForeignName-Eigenschaft des Field-Objekts in der Fields-Auflistung des Relation-Objekts würden beide auf "Artikelnummer" festgelegt.

Die folgende Abbildung verdeutlicht die Beziehung.


Transactions-Eigenschaft

Gibt einen Wert zurück, der anzeigt, ob ein Objekt Transaktionen unterstützt.

Rückgabewerte

Der Rückgabewert ist vom Datentyp Boolean, der den Wert True hat, wenn das Objekt Transaktionen unterstützt.

Bemerkungen

In einem ODBCDirect-Arbeitsbereich ist die Transactions-Eigenschaft in Connection- und Database-Objekten verfügbar, und zeigt an, ob der von Ihnen verwendete ODBC-Treiber Transaktionen unterstützt.

Sie können die Transactions-Eigenschaft zusammen mit Recordset-Objekten vom Typ Dynaset oder Tabelle in einem Microsoft Jet-Arbeitsbereich verwenden. Recordset-Objekte vom Typ Vorwärts oder Snapshot geben immer den Wert False zurück.

Wenn ein Recordset-Objekt vom Typ Dynaset oder Tabelle auf einer Tabelle des Microsoft Jet-Datenbankmoduls basiert, hat die Transactions-Eigenschaft den Wert True, und Sie können Transaktionen verwenden. Nicht alle Datenbankmodule unterstützen Transaktionen. Sie können z.B. keine Transaktionen in einem Recordset-Objekt vom Typ Dynaset verwenden, das auf einer Paradox-Tabelle basiert.

Überprüfen Sie die Transactions-Eigenschaft, bevor Sie die BeginTrans-Methode auf dem Workspace-Objekt des Recordset-Objekts ausführen, um die Unterstützung von Transaktionen sicherzustellen. Das Ausführen der Methoden BeginTrans, CommitTrans oder Rollback auf einem Objekt, das nicht unterstützt wird, bleibt ohne Wirkung.


Type-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der den Operationstyp oder Datentyp eines Objekts angibt.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist eine Konstante, die einen Operationstyp oder Datentyp angibt. Bei einem Field- oder Property-Objekt kann diese Eigenschaft abgerufen und festgelegt werden, bis das Objekt an eine Auflistung oder ein anderes Objekt angefügt wird. Anschließend ist die Eigenschaft schreibgeschützt. Bei einem QueryDef-, Recordset oder Workspace-Objekt ist die Einstellung der Eigenschaft schreibgeschützt. Bei einem Parameter-Objekt in einem Microsoft Jet-Arbeitsbereich ist die Eigenschaft schreibgeschützt, in einem ODBCDirect-Arbeitsbereich ist die Eigenschaft mit Lese-/Schreibzugriff.

Bei einem Field-, Parameter- oder Property-Objekt sind die möglichen Einstellungen und Rückgabewerte in der folgenden Tabelle beschrieben.

Konstante	Beschreibung
dbBigInt	BigInteger
dbBinary	Binary
dbBoolean	Boolean
dbByte	Byte
dbChar	Char
dbCurrency	Currency
dbDate	Datum/Zeit
dbDecimal	Decimal
dbDouble	Double
dbFloat	Float
dbGUID	GUID
dbInteger	Integer
dbLong	Long
dbLongBinary	Long Binary (OLE Object)
dbMemo	Memo
dbNumeric	Numeric
dbSingle	Single
dbText	Text
dbTime	Time
dbTimeStamp	TimeStamp
dbVarBinary	VarBinary
Bei einem QueryDef-Objekt sind die möglichen Einstellungen und Rückgabewerte in der folgenden Tabelle aufgelistet.

Konstante	Abfragetyp
dbQAction	Aktion
dbQAppend	Anfügen
dbQCompound	Verbundabfrage
dbQCrosstab	Kreuztabelle
dbQDDL	Datendefinition
dbQDelete	Löschen
dbQMakeTable	Tabellenerstellung
dbQProcedure	Prozedur (Nur ODBCDirect-Arbeitsbereiche)
dbQSelect	Auswahl
dbQSetOperation	Union
dbQSPTBulk	Wird zusammen mit dbQSQLPassThrough verwendet, um eine Abfrage anzugeben, die keine Datensätze zurückgibt (gilt nur für Microsoft Jet-Arbeitsbereiche).
DbQSQLPassThrough	Pass-Through (gilt nur für Microsoft Jet-Arbeitsbereiche)
dbQUpdate	Aktualisierung
Anmerkung   Zum Erstellen einer SQL Pass-Through-Abfrage in einem Microsoft Jet-Arbeitsbereich muß die Type-Eigenschaft nicht auf dbQSQLPassThrough festgelegt werden. Diese wird automatisch durch das Microsoft Jet-Datenbankmodul festgelegt, wenn Sie ein QueryDef-Objekt erstellen und die Connect-Eigenschaft festlegen.

Bei einem Recordset-Objekt sind folgende Einstellungen und Rückgabewerte möglich.

Konstante	Recordset-Typ
dbOpenTable	Tabelle (gilt nur für Microsoft Jet-Arbeitsbereiche)
dbOpenDynamic	Dynamisch (gilt nur für ODBCDirect-Arbeitsbereiche)
dbOpenDynaset	Dynaset
dbOpenSnapshot	Snapshot
dbOpenForwardOnly	Vorwärts
Bei einem Workspace-Objekt sind folgende Einstellungen und Rückgabewerte möglich.

Konstante	Workspace-Typ
dbUseJet	Das Workspace-Objekt ist mit einem Microsoft Jet-Datenbankmodul verbunden.
DbUseODBC	Das Workspace-Objekt ist mit einer ODBC-Datenquelle verbunden.
Bemerkungen

Wenn Sie ein neues Field-, Parameter- oder Property-Objekt an die Auflistung eines Index-, QueryDef-, Recordset- oder TableDef-Objekts anfügen, tritt ein Fehler auf, wenn die zugrundeliegende Datenbank den für das neue Objekt angegebenen Datentyp nicht unterstützt.


Unique-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der angibt, ob ein Index-Objekt einen eindeutigen Index (Schlüsselindex) für eine Tabelle darstellt (gilt nur für Microsoft Jet-Arbeitsbereiche)

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Datentyp Boolean, der den Wert True hat, wenn das Index-Objekt einen eindeutigen Index darstellt. Bei einem Index-Objekt ist diese Eigenschaft mit Lese-/Schreibzugriff, bis das Objekt an eine Auflistung angefügt wird. Anschließend ist die Eigenschaft schreibgeschützt.

Bemerkungen

Ein eindeutiger Index besteht aus einem oder mehreren Feldern, die alle Datensätze in einer Tabelle logisch in einer eindeutigen, vordefinierten Reihenfolge anordnen. Wenn der Index aus einem Feld besteht, müssen die Werte in diesem Feld für die gesamte Tabelle eindeutig sein. Wenn der Index aus mehreren Feldern besteht, kann jedes einzelne Feld mehrfach auftretende Werte enthalten, solange die Kombination der Werte aus allen Indexfeldern eindeutig ist.

Wenn sowohl die Unique- als auch die Primary-Eigenschaft eines Index-Objekts den Wert True hat, ist der Index eindeutig und gleichzeitig der Primärindex: er kennzeichnet alle Datensätze in der Tabelle eindeutig in einer vordefinierten, logischen Reihenfolge. Wenn die Primary-Eigenschaft den Wert False (0) hat, ist der Index ein Sekundärindex. Sekundärindizes (mit und ohne Schlüssel) ordnen Datensätze logisch in einer vordefinierten Reihenfolge an, ohne als Bezeichner für Datensätze in der Tabelle zu dienen.

Anmerkungen

•	Sie müssen keine Indizes für Tabellen anlegen, aber in großen Tabellen ohne Index kann der Zugriff auf einen bestimmten Datensatz sehr lange dauern.

•	Datensätze, die aus Tabellen ohne Indizes gelesen werden, werden in unbestimmter Reihenfolge zurückgegeben.

•	Die Attributes-Eigenschaft jedes Field-Objekts im Index-Objekt bestimmt die Reihenfolge der Datensätze und demnach das Zugriffsverfahren, das für dieses Index-Objekt verwendet wird.

•	Ein eindeutiger Index optimiert das Auffinden von Datensätzen.

•	Indizes wirken sich nicht auf die physische Reihenfolge einer Basistabelle aus. Sie bestimmen nur, wie auf die Datensätze durch das Recordset-Objekt vom Typ Tabelle zugegriffen wird, wenn ein bestimmter Index gewählt wird oder das Microsoft Jet-Datenbankmodul Recordset-Objekte erstellt.


Updatable-Eigenschaft

Gibt einen Wert zurück, der anzeigt, ob an einem DAO-Objekt Änderungen vorgenommen werden können.

Rückgabewerte

Der Rückgabewert ist von Datentyp Boolean, der den Wert True hat, wenn das Objekt verändert oder aktualisiert werden kann. (Recordset-Objekte vom Typ Snapshot oder Vorwärts geben immer den Wert False zurück.)

Bemerkungen

Wenn die Updatable-Eigenschaft den Wert True hat, ist, abhängig vom Objekt, die zugeordnete Anweisung in der folgenden Tabelle wahr.

Objekt	Der Typ gibt an:
Database	Das Objekt kann geändert werden
QueryDef	Die Abfragedefinition kann geändert werden
Recordset	Die Datensätze können aktualisiert werden
TableDef	Die Tabellendefinition kann geändert werden
Die Einstellung der Updatable-Eigenschaft hat bei neu erstellten TableDef-Objekten immer den Wert True und bei einem verknüpften TableDef-Objekt immer den Wert False. Ein neues TableDef-Objekt kann nur an eine Datenbank angefügt werden, für die der aktuelle Benutzer die Schreibberechtigung besitzt.

Viele Arten von Objekten können Felder enthalten, die nicht aktualisiert werden können. Sie können z.B. ein Recordset-Objekt vom Typ Dynaset erstellen, in dem nur einige Felder geändert werden können. Die Felder können feststehende Werte oder automatisch hochgezählte Daten enthalten, oder das Dynaset kann das Ergebnis einer Abfrage sein, in der aktualisierbare Tabellen mit Tabellen kombiniert werden, die nicht aktualisiert werden können.

Wenn das Objekt nur Felder enthält, die schreibgeschützt sind, hat die Updatable-Eigenschaft den Wert False. Wenn mindestens ein Feld aktualisiert werden kann, hat die Eigenschaft den Wert True. Sie können nur die aktualisierbaren Felder ändern. Ein auffangbarer Fehler tritt auf, wenn Sie versuchen, einem Feld, das schreibgeschützt ist, einen neuen Wert zuzuweisen.

Die Updatable-Eigenschaft eines QueryDef-Objekts wird auf True gesetzt, wenn die Abfragedefinition aktualisiert werden kann, auch wenn das resultierende Recordset-Objekt nicht aktualisiert werden kann.

Da ein aktualisierbares Objekt Felder enthalten kann, die schreibgeschützt sind, sollten Sie die DataUpdatable-Eigenschaft jedes Feldes in der Fields-Auflistung eines Recordset-Objekts überprüfen, bevor Sie einen Datensatz bearbeiten.


UserName-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der einen Benutzer oder eine Gruppe von Benutzern oder den Eigentümer eines Workspace-Objekts darstellt.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Datentyp String, der den Namen eines Benutzer ergibt. In einem Microsoft Jet-Arbeitsbereich stellt dies ein User-Objekt in der Users-Auflistung oder ein Group-Objekt in der Groups-Auflistung dar. Bei Microsoft Jet-Container- und Document-Objekten ist die Einstellung dieser Eigenschaft mit Lese-/Schreibzugriff. Bei einem Workspace-Objekt ist die Eigenschaft schreibgeschützt.

Bemerkungen

Je nach Art des Objekts stellt die UserName-Eigenschaft folgendes dar.

•	Den Eigentümer eines Workspace-Objekts.

•	Einen Benutzer oder eine Gruppe von Benutzern, wenn Sie die Berechtigungen eines Container-Objekts oder Document-Objekts verändern (gilt nur für Microsoft Jet-Arbeitsbereiche).

Sie ermitteln die Berechtigungen für einen bestimmten Benutzer oder eine Gruppe von Benutzern oder legen diese fest, indem Sie zunächst die UserName-Eigenschaft auf den Namen des zu überprüfenden Benutzers bzw. der zu überprüfenden Gruppe setzen. Überprüfen Sie dann anhand der Einstellung der Permissions-Eigenschaft, welche Berechtigungen der Benutzer oder die Benutzergruppe hat, oder legen Sie die Permissions-Eigenschaft fest, um die Berechtigungen zu ändern.

Bei einem Workspace-Objekt überprüfen Sie die Einstellung der UserName-Eigenschaft, um den Eigentümer des Workspace-Objekts zu ermitteln. Legen Sie die UserName-Eigenschaft fest, um den Eigentümer des Workspace-Objekts anzugeben, bevor Sie das Objekt an die Workspaces-Auflistung anfügen.


V1xNullBehavior-Eigenschaft

Zeigt an, ob Null-Zeichenfolgen (""), die im Code zum Auffüllen von Text- oder Memo -Feldern verwendet werden, in Null-Werte umgewandelt werden.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Datentyp Boolean, der den Wert True hat, wenn Zeichenfolgen der Länge Null in Null-Werte umgewandelt werden.

Bemerkungen

Diese Eigenschaft betrifft nur Datenbanken der Version 1.x des Microsoft Jet-Datenbankmoduls, die in Datenbanken der Version 2.0 oder Version 3.0 des Microsoft Jet-Datenbankmoduls umgewandelt wurden.

Anmerkung   Das Microsoft Jet-Datenbankmodul erstellt diese Eigenschaft automatisch, wenn eine Datenbank der Version 1.x in eine Datenbank der Version 2.0 oder Version 3.x umgewandelt wird. Eine Datenbank der Version 2.0 behält diese Eigenschaft bei, wenn sie in eine Datenbank der Version 3.x umgewandelt wird.

Wenn Sie die Einstellung dieser Eigenschaft ändern, müssen Sie die Datenbank schließen und anschließend erneut öffnen, damit die Änderung wirksam wird.

Sie optimieren die Ausführungsgeschwindigkeit Ihres Codes, wenn Sie darin alle Text- oder Memo-Felder, die auf Zeichenfolgen der Länge Null festgelegt werden, statt dessen auf Null setzen und die V1xNullBehavior-Eigenschaft aus der Properties-Auflistung entfernen.


ValidateOnSet-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der angibt, ob der Wert eines Field-Objekts unmittelbar überprüft wird, nachdem die Value-Eigenschaft des Objekts festgelegt wird (gilt nur für Microsoft Jet-Arbeitsbereiche)

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Datentyp Boolean, der einen der folgenden Werte haben kann.

Wert	Beschreibung
True	Die Einstellung der ValidationRule-Eigenschaft des Field-Objekts gibt die Gültigkeitsregel an, die aktiviert ist, wenn Sie die Value-Eigenschaft festlegen.
False	(Voreinstellung) Überprüfen, wann der Datensatz aktualisiert wird.
Nur Field-Objekte in Recordset-Objekten unterstützen die ValidateOnSet-Eigenschaft mit Lese-/Schreibzugriff.

Bemerkungen

Die ValidateOnSet-Eigenschaft sollte auf den Wert True festgelegt werden, wenn ein Benutzer Datensätze eingibt, die große Mengen an Daten vom Typ Memo beinhalten. Wenn darauf gewartet wird, daß der Update-Aufruf die Daten überprüft, kann dies dazu führen, daß Zeit verloren geht, weil lange Daten vom Typ Memo in die Datenbank geschrieben werden, wenn die Daten ungültig waren, weil die Gültigkeitsregel in einem anderen Feld nicht eingehalten wurde.


ValidationRule-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der die Gültigkeit der Daten in einem Feld überprüft, während es geändert oder einer Tabelle hinzugefügt wird (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellungen oder Rückgabewerte sind vom Datentyp String, der einen Vergleich in Form eines SQL WHERE-Abschnitts ohne das reservierte Wort WHERE beschreibt. Bei einem Objekt, das noch nicht an die Fields-Auflistung angefügt wurde, hat diese Eigenschaft Lese-/Schreibzugriff. Weitere Informationen zu den Lese-/Schreibeigenschaften finden Sie unter Bemerkungen.

Bemerkungen

Die ValidationRule-Eigenschaft bestimmt, ob sich in einem Feld gültige Daten befinden oder nicht. Wenn die Daten ungültig sind, tritt ein auffangbarer Laufzeitfehler auf. Die zurückgegebene Fehlermeldung ist der Text der ValidationText-Eigenschaft (falls angegeben) oder der Text des Ausdrucks, der durch ValidationRule angegeben ist.

Bei einem Field-Objekt hängt die Verwendung der ValidationRule-Eigenschaft von dem Objekt ab, das die Fields-Auflistung enthält, an die das Field-Objekt angefügt wird.

Objekt angefügt an	Verwendung
Index	Nicht unterstützt
QueryDef	Schreibgeschützt
Recordset	Schreibgeschützt
Relation	Nicht unterstützt
TableDef	Lesen/Schreiben
Bei einem Recordset-Objekt kann die ValidationRule-Eigenschaft nur abgerufen werden (d.h., sie ist schreibgeschützt). Bei einem TableDef-Objekt hängt die Verwendung der ValidationRule-Eigenschaft vom Zustand des TableDef-Objekts ab, wie in der folgenden Tabelle gezeigt.

TableDef	Verwendung
Basistabelle	Lesen/Schreiben
Verknüpfte Tabelle	Schreibgeschützt
Die Überprüfung der Daten wird nur für Datenbanken unterstützt, die das Microsoft Jet-Datenbankmodul verwenden.

Der durch die ValidationRule-Eigenschaft eines Field-Objekts angegebene  Zeichenfolgenausdruck kann sich nur auf dieses Field-Objekt beziehen. Der Ausdruck kann sich nicht auf benutzerdefinierte Funktionen, SQL-Aggregatfunktionen oder Abfragen beziehen. Damit die ValidationRule-Eigenschaft eines Field-Objekts festgelegt werden kann, wenn die zugehörige ValidateOnSet-Eigenschaft den Wert True hat, muß der Ausdruck erfolgreich analysiert werden (wobei der Feldname als impliziter Operand verwendet wird) und True ergeben. Wenn die Einstellung der zugehörigen ValidateOnSet-Eigenschaft False ist, wird die Einstellung der ValidationRule-Eigenschaft ignoriert.

Die ValidationRule-Eigenschaft eines Recordset- oder TableDef-Objekts kann mehrere Felder in diesem Objekt referenzieren. Die weiter oben in diesem Thema für das Field-Objekt angegebenen Beschränkungen gelten ebenfalls.

Bei einem Recordset-Objekt vom Typ Tabelle übernimmt die ValidationRule-Eigenschaft den Wert der ValidationRule-Eigenschaft des TableDef-Objekts, mit dem Sie das Recordset-Objekt vom Typ Tabelle erstellen.

Bei einem TableDef-Objekt, dem eine verknüpfte Tabelle zugrundeliegt, übernimmt die Einstellung der ValidationRule-Eigenschaft den Wert der zugrundeliegenden Basistabelle. Wenn die zugrundeliegende Basistabelle die Überprüfung der Gültigkeit nicht unterstützt, hat diese Eigenschaft eine Null-Zeichenfolge ("") als Wert.

Anmerkung   Wenn Sie die Eigenschaft auf eine Zeichenfolge festlegen, die mit einem Wert verkettet ist, der keine Ganzzahl ist, und die Systemparameter geben ein Dezimalzeichen an, das nicht dem US-Standard entspricht, wie z.B. ein Komma (beispielsweise  strRule = "PREIS > " & lngPrice, and lngPrice = 125,50), wird ein Fehler ausgegeben, wenn Ihr Code versucht, die Daten zu überprüfen. Während der Verkettung wird die Zahl in eine Zeichenfolge konvertiert, der die Standardeinstellung für Dezimalzeichen des Systems verwendet, und Microsoft Jet-SQL akzeptiert nur US-Dezimalzeichen.


ValidationText-Eigenschaft

Gibt einen Wert zurück oder legt einen Wert fest, der den Text der Nachricht angibt, die Ihre Anwendung anzeigt, wenn der Wert eines Field-Objekts nicht die Gültigkeitsregel erfüllt, die durch die Einstellung der ValidationRule-Eigenschaft angegeben ist (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Datentyp String, der den Text angibt, der angezeigt wird, wenn ein Benutzer einen ungültigen Wert für ein Feld eingibt. Bei einem Objekt, das noch nicht an eine Auflistung angefügt wurde, ist diese Eigenschaft mit Lese-/Schreibzugriff. Bei einem Recordset-Objekt ist die Einstellung schreibgeschützt. Bei einem TableDef-Objekt ist die Einstellung dieser Eigenschaft bei einer verknüpften Tabelle schreibgeschützt und bei einer Basistabelle mit Lese-/Schreibzugriff.

Bemerkungen

Bei einem Field-Objekt hängt die Verwendung der ValidationText-Eigenschaft von dem Objekt ab, das die Fields-Auflistung enthält, an die das Field-Objekt angefügt wird, wie in der folgenden Tabelle gezeigt.

Objekt angefügt an	Verwendung
Index	Nicht unterstützt
QueryDef	Schreibgeschützt
Recordset	Schreibgeschützt
Relation	Nicht unterstützt
TableDef	Lesen/Schreiben


Value-Eigenschaft

Gibt den Wert eines Objekts zurück oder legt ihn fest.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist vom Datentyp Variant, der einen Wert ergibt, der für den Datentyp geeignet ist, wie durch die Type-Eigenschaft eines Objekts angegeben.

Bemerkungen

Im allgemeinen wird die Value-Eigenschaft verwendet, um Daten in Recordset-Objekten abzurufen und zu ändern.

Die Value-Eigenschaft ist die Standardeigenschaft der Objekte Field, Parameter und Property. Deshalb können Sie den Wert einer dieser Objekte festlegen oder zurückgeben, indem Sie direkt auf sie zugreifen und nicht die Value-Eigenschaft angeben. Wenn Sie versuchen, die Value-Eigenschaft in einem nicht passenden Zusammenhang festzulegen oder zurückzugeben (z.B. die Value-Eigenschaft eines Field-Objekts in der Fields-Auflistung eines TableDef-Objekts) wird ein auffangbarer Fehler ausgelöst.

Anmerkungen

•	In einem ODBCDirect-Arbeitsbereich können Sie die Value-Eigenschaft eines Recordset-Feldes nur einmal lesen oder festlegen, ohne den aktuellen Datensatz zu aktualisieren. Beispielsweise müssen Sie, um die Value-Eigenschaft lesen und festlegen zu können, zuerst die Eigenschaft lesen, dann mit der Move-Methode den aktuellen Datensatz aktualisieren und dann den neuen Wert festlegen.

•	Wenn Sie auf einer Microsoft SQL Server-Datenbank Dezimalwerte lesen, werden sie in wissenschaftlicher Schreibweise von einem Microsoft Jet-Arbeitsbereich formatiert, aber von einem ODBCDirect-Arbeitsbereich als normale Dezimalwerte angezeigt.


Version-Eigenschaft

•	Microsoft Jet-Arbeitsbereich: Gibt in einem DBEngine-Objekt die Version des aktuellen DAO zurück.In einem Database-Objekt gibt es die Version von Microsoft Jet zurück, mit der die .mdb-Datei erstellt wurde.

•	ODBCDirect-Arbeitsbereiche: In einem DBEngine-Objekt wird die aktuelle Version von DAO zurückgegeben. In einem Database-Objekt wird die aktuelle Version des ODBC-Treibers zurückgegeben.

Rückgabewerte

Der Rückgabewert ist vom Datentyp String, der eine Versionsnummer ergibt, die wie im folgenden formatiert ist.

•	Microsoft Jet-Arbeitsbereich: Stellt die Versionsnummer im Format "Haupt.Neben" dar. Beispielsweise "3.0". Die Versionsnummer des Produkts besteht aus der Versionsnummer (3), einem Punkt und der Release-Nummer (0).

•	ODBCDirect-Arbeitsbereich: Stellt die Versionsnummer der DAO-Version in der Form "Haupt.Neben" dar oder stellt die Versionsnummer des ODBC-Treibers in der Form " Haupt.Neben.Build" dar. Beispielsweise zeigt der Wert "3.5" von DBEngine.Version an, daß es sich um DAO, Version 3.5, handelt. Ein Version-Wert 2.50.1032 eines Database-Objekts zeigt an, daß die aktuelle Version von DAO mit der ODBC-Version 2.5, Build 1032, verbunden ist.

Bemerkungen

Bei einem Database-Objekt kennzeichnet diese Eigenschaft die Version des Jet-Datenbankmoduls, mit der die Datenbank erstellt wurde.

Die Einstellung der Version-Eigenschaft stellt die Versionsnummer in der Form "Haupt.Neben" dar, z.B. "3.0". Die Versionsnummer des Produkts (z.B.  3.0) besteht aus der Versionsnummer (3), einem Punkt und der Release-Nummer (0).

Bemerkungen

In einem Microsoft Jet-Arbeitsbereich entspricht die Version-Eigenschaft eines Database-Objekts der Version des Microsoft Jet-Datenbankmoduls und stimmt nicht zwangsläufig mit der Versionsnummer des Microsoft Produkts überein, die das Datenbankmodul enthält. Die Version-Eigenschaft eines mit Microsoft Visual Basic 3.0 erstellten Database-Objekts ist z.B. „1.1“, nicht „3.0“.

Die folgende Tabelle gibt an, welche Version des Datenbankmoduls von den verschiedenen Microsoft-Produkten verwendet wird.

Microsoft Jet-Version (Verkaufs- jahr)	Microsoft Access	Microsoft Visual Basic	Microsoft Excel	Microsoft Visual C++
1.0 (1992)	1.0	Nicht verfügbar	Nicht verfügbar	Nicht verfügbar
1.1 (1993)	1.1	3.0	Nicht verfügbar	Nicht verfügbar
2.0 (1994)	2.0	Nicht verfügbar	Nicht verfügbar	Nicht verfügbar
2.5 (1995)	Nicht verfügbar	4.0 (16-bit)	Nicht verfügbar	Nicht verfügbar
3.0 (1995)	‘95 (7.0)	4.0 (32-bit)	‘95 (7.0)	4.x
3.5 (1996)	‘97 (8.0)	5.0	‘97 (8.0)	5.0


DesignMasterID-Eigenschaft

Gibt einen 16-Byte-Wert zurück oder legt ihn fest, der den Entwurfs-Master (Design Master) in einer Replikatsgruppe eindeutig bezeichnet. (Nur Microsoft Jet-Arbeitsbereiche)

Einstellung und Rückgabewert

Die Einstellung oder der Rückgabewert ist ein GUID-Datentyp, der den Entwurfs-Master (Design Master) eindeutig bezeichnet.

Bemerkungen

Sie sollten die DesignMasterID-Eigenschaft nur dann festlegen, wenn Sie den aktuellen Entwurfs-Master (Design Master) verschieben müssen. Durch Festlegen der Eigenschaft wird ein bestimmtes Replikat in der Replikatsgruppe zum Entwurfs-Masters (Design Masters).

Vorsicht   Erstellen Sie niemals einen zweiten Entwurfs-Master (Design Master) in einer Replikatsgruppe. Ein zweiter Entwurfs-Master (Design Master) kann zu Datenverlusten führen.

Unter bestimmten Umständen, z.B. wenn das Original des Entwurfs-Masters (Design Masters) gelöscht wurde oder fehlerhaft ist, können Sie diese Eigenschaft auf das aktuelle Replikat festlegen. Wenn Sie diesen Wert jedoch von einem Replikat aus setzen, obwohl schon ein Entwurfs-Master (Design Master) vorhanden ist, kann dies dazu führen, daß Ihre Replikatgruppe in zwei unvereinbare Teile aufgeteilt wird und jede weitere Synchronisierung der Daten unmöglich ist.

Wenn Sie ein Replikat zum neuen Entwurfs-Master (Design Master) der Gruppe machen, sollten Sie es mit allen Replikaten in der Replikatsgruppe synchronisieren bevor Sie die DesignMasterID-Eigenschaft des Replikats festlegen. Das Replikat muß im Exklusivmodus geöffnet sein, damit es zum Entwurfs-Master (Design Master) wird.

Wenn Sie ein Replikat bestimmen, das im Entwurfs-Master (Design Master) schreibgeschützt ist, erhält das Zielreplikat Lese-/Schreibzugriff; der alte Entwurfs-Master (Design Master) hat ebenfalls Lese-/Schreibzugriff.

Die Einstellung der DesignMasterID-Eigenschaft ist in der MSysRepInfo-Systemtabelle gespeichert.


KeepLocal-Eigenschaft

Legt einen Wert in einer Tabelle, einer Abfrage, einem Formular, einem Bericht, einem Makro oder einem Modul fest oder gibt ihn zurück, der nicht repliziert werden soll, wenn eine Datenbank repliziert wird. (Nur Microsoft Jet-Arbeitsbereiche)

Anmerkung   Bevor Sie die KeepLocal-Eigenschaft in einem TableDef- oder QueryDef-Objekt erhalten oder festlegen können, müssen Sie es mit der CreateProperty-Methode erstellen und es der Properties-Auflistung des Objekts anfügen.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Text-Datentyp. Wenn Sie die Eigenschaft die Textzeichenfolge "T" festlegen, bleibt das Objekt lokal, wenn die Datenbank repliziert wird. Die KeepLocal-Eigenschaft kann nicht auf Objekte angewendet werden, nachdem Sie einmal replizierbar geworden sind.

Bemerkungen

Wenn Sie einmal die KeepLocal-Eigenschaft festgelegt haben, wird es in der Properties-Auflistung des Document-Objekts angezeigt und stellt das Host-Objekt dar.

Bevor Sie die KeepLocal-Eigenschaft festlegen, sollten Sie den Wert der Replicable-Eigenschaft überprüfen.

Nachdem Sie eine Datenbank replizierbar gemacht haben, sind alle Objekte, die innerhalb des Entwurfs-Master (Design Master) oder eines anderen Replikats in der Gruppe erstellt wurden, lokale Objekte. Lokale Objekte bleiben in dem Replikat, in dem sie erstellt wurden und werden nicht in der gesammten Replikatsgruppe kopiert. Wenn Sie ein neues Replikat in der Gruppe erstellen, enthält das neue Replikat alle replizierbaren Objekte des Quellreplikats, aber keines der lokalen Objekte des Quellreplikats.

Wenn Sie ein neues Objekt erstellen und es von so ändern wollen, daß es  nicht lokal sondern replizierbar ist, damit es alle Benutzer verwenden können, müssen Sie es entweder im Entwurfs-Master (Design Master) erstellen oder daraus importieren. Stellen Sie sicher, daß Sie alle lokalen Objekte aus allen Replikaten gelöscht werden, andernfalls tritt ein Entwurfsfehler auf. Nchdem das Objekt Teil des Entwurfs-Masters (Design Masters) ist, müssen Sie die Replicable-Eigenschaft auf den Wert True festlegen.

Das Objekt, für das Sie die KeepLocal-Eigenschaft setzen, hat diese eventuell schon von einem anderen Objekt übernommen. Der durch das andere Objekt gesetzte Wert hat jedoch keinen Einfluß auf das Verhalten des Objekts, das Sie lokal halten möchten. Sie müssen die Eigenschaft für jedes Objekt explizit angeben.


Replicable-Eigenschaft

Legt einen Wert fest oder gibt einen Wert zurück, der bestimmt, ob eine Datenbank oder ein Objekt in einer Datenbank replizierbar ist oder nicht: (Nur Microsoft Jet-Arbeitsbereiche)

Anmerkung   Bevor Sie die Replicable-Eigenschaft in einem Database-, TableDef- oder QueryDef-Objekt erhalten oder festlegen können, müssen Sie es mit der CreateProperty-Methode erstellen und der Properties-Auflistung des Objekts anfügen.

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Text-Datentyp.

Angewendet auf ein Database-Objekt wird die Datenbank replizierbar, falls diese Eigenschaft auf die Textzeichenfolge "T" gesetzt wird. Wurde die Eigenschaft einmal auf "T" gesetzt, kann dies nicht rückgängig gemacht werden. Das Festlegen der Eigenschaft auf "F" (oder einen beliebigen anderen Wert als "T") verursacht eine Fehlermeldung.

Angewendet auf ein Objekt in einer Datenbank, wird das Objekt (und alle folgenden Änderungen an dem Objekt) auf allen Replikaten in der Replikatsgruppe repliziert, wenn die Eigenschaft auf "T" festgelegt wird. at all. Diese Eigenschaft kann auch im Eigenschaftenfenster des Objekts in Microsoft Access gesetzt werden.

Anmerkung   Microsoft Jet 3.5 unterstützt auch die Boolean ReplicableBool-Eigenschaft. Die Funktionsmerkmale entsprechen denen der Replicable-Eigenschaft, nur erhält sie den Wert vom Typ Boolean. Wenn die ReplicableBool-Eigenschaft auf den Wert True festgelegt wird, wird das Objekt replizierbar.

Bemerkungen

Bevor Sie die Replicable-Eigenschaft für eine Datenbank festlegen, erstellen Sie eine Sicherungskopie der Datenbank. Wenn die Replicable-Eigenschaft nicht festgelegt werden kann, sollten Sie die zum Teil replizierte Datenbank löschen, eine neue Kopie aus der Sicherung einspielen und von vorne beginnen.

Auf Formularen, Berichten, Makros und Modulen, die von einer Host-Anwendung (wie z.B. Microsoft Access) definiert wurden, legen Sie die Eigenschaft auf dem vom Host - auf dessen Benutzeroberfläche - definierten Objekt fest. Wenn die Replicable-Eigenschaft einmal festgelegt wurde, wird sie in der Properties-Auflistung des Document-Objekts angezeigt und stellt das Host-Objekt dar.

Wenn die Replicable-Eigenschaft bereits für ein Objekt mit Hilfe des Kontrollkästchens Replikatbezogen im Eigenschaftenblatt für das Objekt festgelegt wurde, kann die Replicable-Eigenschaft im Code nicht gesetzt werden.

Wenn Sie diesen Eigenschaft in einem Database-Objekt festlegen, fügt Microsoft Jet Objekten innerhalb der Datenbank Feldern, Tabellen und Eigenschaften hinzu. Microsoft Jet verwendet diese Felder, Tabellen und Eigenschaften, um Datenbankobjekte zu synchronisieren. Beispielsweise haben alle vorhandenen Tabllen drei neue, hinzugefügte Felder, die bei der Suche nach geänderten Datensätzen hilfreich sind. Hinzufügen solcher Felder und anderer Objekte vergrößert dieDatenbank.

Wenn Sie in einem Replikat eine neue Tabelle, eine Abfrage, eine Form, einen Bericht, ein Makro oder ein Modul erstellen, gilt das Objekt als "lokal" und wird nur in diesem Replikat gespeichert. Wenn Sie möchten, daß auch Benutzer anderer Replikate dieses Objekt verwenden können, müssen Sie es von einem lokalen Objekt in ein replizierbares Objekt umwandeln. Entweder erstellen Sie das Objekt, oder Sie importieren es in den Entwurfs-Master (Design Master) und setzen dann die Replicable-Eigenschaft auf "T".

Das Objekt, für das Sie die Replicable-Eigenschaft setzen, hat diese eventuell schon von einem anderen Objekt übernommen. Der durch das andere Objekt gesetzte Wert hat jedoch keinen Einfluß auf das Verhalten des Objekts, das Sie replizierbar machen möchten. Sie müssen die Eigenschaft für jedes Objekt explizit angeben.


ReplicaID-Eigenschaft

Gibt einen 16-Byte-Wert zurück, der ein Datenbankreplikat eindeutig bezeichnet. (Gilt nur für Microsoft Jet-Arbeitsbereiche)

Rückgabewerte

Der Rückgabewert ist ein Wert GUID, der das Replikat oder den Entwurfs-Master (Design Master) eindeutig bezeichnet.

Bemerkungen

Das Microsoft Jet-Datenbankmodul erzeugt den Wert automatisch, wenn Sie ein neues Replikat erstellen.

Die ReplicaID-Eigenschaft von jedem Replikat (und des Entwurfs-Masters (Design Masters)) wird in der MSysReplicas-Systemtabelle gespeichert.


SystemDB-Eigenschaft

Legt den aktuellen Pfad der Arbeitsgruppeninformationsdatei fest oder gibt ihn zurück (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein String-Datentyp, der den vollständigen Pfad in der Arbeitsgruppeninformationsdatei angibt.

Bemerkungen

Das Microsoft Jet-Datenbankmodul ermöglicht Ihnen, Arbeitsgruppen zu definieren und für jeden Benutzer in der Arbeitsgruppe unterschiedliche Zugriffsberechtigungen für die einzelnen Objekt in der Datenbank festzulegen. Die Arbeitsgruppe wird durch die Arbeitsgruppeninformationsdatei, die normalerweise system.mda genannt wird, definiert. Damit Benutzer Zugriff  auf gesicherte Objekte in der Datenbank haben, benötigt DAO den Pfad dieser Arbeitsgruppeninformationsdatei. Der Pfad kann für DAO entweder durch Festlegen in der Windows-Registrierung oder durch die Einstellung der SystemDB-Eigenschaft angegeben werden. Beim Setup wird standardmäßig einfach system.mda ohne Pfadangabe eingerichtet.

Damit diese Option wirksam wird, muß die SystemDB-Eigenschaft festgelegt werden, bevor das DBEngine-Objekt durch Ihre Anwendung initialisiert wird (etwa durch Erstellen einer Instanz eines anderen DAO-Objekts). Der Gültigkeitsbereich dieser Einstellung ist auf Ihre Anwendung beschränkt und kann nicht ohne Neustarten der Anwendung geändert werden.


PartialReplica-Eigenschaft

Legt den Wert fest oder gibt den Wert eines Relation-Objekts zurück, wobei angezeigt wird, ob die Beziehung beachtet werden soll, wenn das Teilreplikat vom vollständigen Replikat aufgefüllt wird (gilt nur für Microsoft Jet-Datenbanken).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein Boolean-Datentyp, der den Wert True hat, wenn die Beziehung während der Synchronisierung erstellt wird.

Bemerkungen

Mit dieser Eigenschaft können Sie Daten vom vollständigen Replikat in das Teilreplikat replizieren, wobei die Replikation auf den Beziehungen zwischen den Tabellen basiert. Sie können die PartialReplica-Eigenschaft zusammen mit der ReplicaFilter-Eigenschaft verwenden, da die ReplicaFilter-Eigenschaft allein nicht ausreicht, um anzugeben, welche Daten in das Teilreplikat repliziert werden sollen. Angenommen Sie haben eine Datenbank, in der die Tabelle "Kunden" eine 1:n-Beziehung mit der Tabelle "Bestellungen" hat, und Sie möchten ein Teilreplikat konfigurieren, das nur Bestellungen von Kunden in der Region Kalifornien (anstelle von allen Bestellungen) repliziert. Sie können die ReplicaFilter-Eigenschaft nicht auf Region = 'CA' in der Tabelle "Bestellungen" festlegen, da sich das Feld in der Tabelle "Kunden" und nicht in der Tabelle "Bestellungen" befindet.

Wenn Sie alle Bestellungen aus der Region Kalifornien replizieren möchten, geben Sie an, daß die Beziehung zwischen den Tabellen "Bestellungen" und "Kunden" aktiviert sein muß. Wenn Sie ein Teilreplikat erstellt haben, führen Sie folgende Schritte durch, damit es mit allen Bestellungen aus der Region Kalifornien aufgefüllt wird.

1	Legen Sie die ReplicaFilter-Eigenschaft in dem TableDef-Objekt der Tabelle "Kunden" auf "Region = 'CA'" fest.

2	Legen Sie die PartialReplica-Eigenschaft des Relation-Objekts auf den Wert True fest, entsprechend der Beziehung zwischen den Tabellen "Bestellungen" und "Kunden".

3	Rufen Sie die PopulatePartial-Methode auf.

Vorsicht   Wenn Sie einen Replikatsfilter oder eine Replikatsbeziehung festlegen, beachten Sie, daß die Datensätze, die den Kriterien nicht entsprechen, zwar aus dem Teilreplikat jedoch nicht aus dem vollständigen Replikat entfernt werden. Angenommen Sie legen z.B. im TableDef-Objekt der Tabelle "Kunden" die ReplicaFilter-Eigenschaft auf "Region = 'CA'" fest und füllen die Datenbank dann wieder auf. Dadurch werden alle Datensätze der kalifornischen Kunden eingefügt oder aktualisiert. Wenn Sie dann die ReplicaFilter-Eigenschaft auf "Region = 'FL'" zurücksetzen und die Datenbank wieder auffüllen, werden alle Datensätze der Region Kalifornien entfernt und alle Datensätze der Kunden aus der Region Florida aus dem vollständigen Replikat eingefügt. Im vollständigen Replikat werden keine Datensätze gelöscht.

Bevor Sie die ReplicaFilter- oder die PartialReplica-Eigenschaft festlegen, synchronisieren Sie das Teilreplikat, in dem diese Eigenschaften festgelegt werden, mit dem vollständigen Replikat. Dadurch stellen Sie sicher, daß ausstehende Änderungen im Teilreplikat dem vollständigen Replikat hinzugefügt werden, bevor Datensätze aus dem Teilreplikat gelöscht werden.


ReplicaFilter-Eigenschaft

Legt in einem TableDef-Objekt innerhalb eines Teilreplikats einen Wert fest oder gibt ihn zurück, der anzeigt, welche Untergruppe der Datensätze aus dem vollständigen Replikat in die Tabelle repliziert wird (gilt nur für Microsoft Jet-Datenbanken).

Einstellungen und Rückgabewerte

Die Einstellung oder der Rückgabewert ist ein String- oder Boolean-Datentyp, der anzeigt, welche Datensatzuntergruppe, wie in der folgenden Tabelle angegeben, repliziert wird.

Wert	Beschreibung
Eine Zeichenfolge	Ein Kriterium, das ein Datensatz in der Tabelle des Teilreplikats erfüllen muß, um aus dem vollständigen Replikat repliziert zu werden.
True	Alle Datensätze werden repliziert.
False	(Voreinstellung) Es werden keine Datensätze repliziert.
Bemerkungen

Diese Eigenschaft ähnelt einem SQL WHERE-Abschnitt (ohne das Wort WHERE), Sie können jedoch keine Unterabfragen, Aggregatfunktionen (wie z.B. Count) oder benutzerdefinierte Funktionen innerhalb von Kriterien angeben.

Sie können Daten nur zwischen einem Teilreplikat und einem vollständigen Replikat synchronisieren. Sie können Daten zwischen zwei Teilreplikaten nicht synchronisieren. Sie können mit teilweiser Replikation Beschränkungen festlegen, welche Datensätze repliziert werden, aber Sie können nicht angeben, welche Felder repliziert werden sollen.

Normalerweise wird ein Replikatsfilter zurückgesetzt, wenn eine andere Gruppe von Datensätzen repliziert werden soll. Wenn z.B. ein Verkaufsrepräsentant zeitweilig die Region eines anderen Repräsentaten übernimmt, kann die Datenbankanwendung die Daten temporär für beide Regionen replizieren und dann wieder zum vorherigen Filter zurückkehren. In diesem Szenario setzt die Anwendung die ReplicaFilter-Eigenschaft zurück und füllt dann das Teilreplikat auf.

Wenn in Ihrer Anwendung die Replikatsfilter geändert werden, führen Sie folgende Schritte durch.

1	Synchronisieren Sie mit der Synchronize-Methode das vollständige Replikat mit dem Teilreplikat, in dem die Filter geändert werden.

2	Führen Sie mit der ReplicaFilter-Eigenschaft die gewünschten Änderungen am Replikatsfilter durch.

3	Entfernen Sie mit der PopulatePartial-Methode alle Datensätze aus dem Teilreplikat, und übertragen Sie alle Datensätze aus dem vollständigen Replikat, die den Kriterien des neuen Replikatsfilters entsprechen.

Legen Sie die ReplicaFilter-Eigenschaft auf den Wert False fest, um einen Filter zu entfernen. Wenn Sie alle Filter entfernen und die PopulatePartial-Methode aufrufen, werden keine Datensätze in den replizierten Tabellen des Teilreplikats angezeigt.

Anmerkung   Wenn sich ein Replikatsfilter geändert hat und die Synchronize-Methode aufgerufen wird, ohne daß zuvor die PopulatePartial-Methode aufgerufen wird, tritt ein auffangbarer Fehler auf.


BatchCollisionCount-Eigenschaft

Gibt die Anzahl von Datensätzen zurück, die bei der letzten Stapelaktualisierung nicht aktualisiert wurden (gilt nur für ODBCDirect-Arbeitsbereiche).

Rückgabewert

Der Rückgabewert ist vom Typ Long und enthält die Anzahl der nicht aktualisierten Datensätze oder 0, falls alle Datensätze erfolgreich aktualisiert wurden.

Bemerkungen

Diese Eigenschaft gibt an, bei wie vielen Datensätzen die letzte Stapelaktualisierung auf Kollisionen oder andere Probleme gestoßen ist und wie viele Datensätze aus diesem Grund nicht aktualisiert wurden. Der Wert dieser Eigenschaft entspricht der Anzahl von Lesezeichen in der BatchCollisions-Eigenschaft.

Wenn Sie die Bookmark-Eigenschaft des aktuellen Recordset-Objekts auf Werte vom Typ Bookmark im Feld BatchCollisions setzen, können Sie zu jedem Datensatz gelangen, der bei dem letzten Update nicht aktualisiert wurde.

Nach Korrektur der kollidierten Datensätze kann eine Update-Methode im Stapelmodus erneut aufgerufen werden. Dann versucht DAO eine weitere Stapelaktualisierung, und die BatchCollisions-Eigenschaft nennt wieder die Anzahl der Datensätze, die beim zweiten Versuch gescheitert sind. Datensätze, die beim vorhergehenden Versuch aktualisiert worden waren, werden beim zweiten Versuch nicht berücksichtigt, weil deren RecordStatus-Eigenschaft nun den Wert dbRecordUnmodified hat. Dieser Prozeß kann so lange fortgesetzt werden, bis keine Kollisionen mehr auftreten oder Sie die Aktualisierung abbrechen und die Ergebnismenge schließen.


BatchCollisions-Eigenschaft

Gibt ein Feld von Lesezeichen zurück, das die Zeilen anzeigt, in denen bei der letzten Stapelaktualisierung Kollisionen aufgetreten sind (gilt nur für ODBCDirect-Arbeitsbereiche).

Rückgabewert

Der Rückgabewert ist ein Ausdruck vom Typ Variant, der ein Feld von Lesezeichen enthält.

Bemerkungen

Diese Eigenschaft enthält ein Feld von Lesezeichen der Zeilen, in denen beim letzten Aufruf des Update im Stapelmodus eine Kollision aufgetreten ist. Die BatchCollisionCount-Eigenschaft nennt die Anzahl der Feldelemente.

Wenn Sie die Bookmark-Eigenschaft des aktuellen Recordset-Objekts auf Werte vom Typ Bookmark im Feld BatchCollisions setzen, können Sie zu jedem Datensatz gelangen, der beim letzten Update im Stapelmodus nicht aktualisiert wurde.

Nach Korrektur der kollidierten Datensätze kann eine Update-Methode im Stapelmodus erneut aufgerufen werden. In diesem Fall führt DAO eine weitere Stapelaktualisierung durch, und die BatchCollisions-Eigenschaft enthält wieder die Anzahl der Datensätze, die beim zweiten Versuch nicht aktualisiert wurden. Datensätze, die beim vorhergehenden Versuch aktualisiert worden sind, werden beim zweiten Versuch nicht berücksichtigt, weil deren RecordStatus-Eigenschaft nun den Wert dbRecordUnmodified hat. Dieser Vorgang kann so lange fortgesetzt werden, bis keine Kollisionen mehr auftreten oder bis Sie die Aktualisierung abbrechen und die Ergebnismenge schließen.

Dieses Feld wird bei jedem Aufruf einer Update-Methode im Stapelmodus neu erstellt.


BatchSize-Eigenschaft

Gibt die Anzahl der Anweisungen zurück bzw. legt die Anzahl der Anweisungen fest, die in jedem Stapel an den Server zurückgesendet werden (gilt nur für ODBCDirect-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung bzw. der Rückgabewert ist vom Typ Long und gibt die Anzahl von Anweisungen an, die dem Server in einer einzelnen Stapelaktualisierung zugesandt werden. Der Standardwert ist 15.

Bemerkungen

Die BatchSize-Eigenschaft legt die Stapelgröße für das Senden von Anweisungen an den Server bei einer Stapelaktualisierung fest. Der Wert der Eigenschaft bestimmt die Anzahl der Anweisungen, die dem Server in einem Befehlspuffer zugesandt werden. Standardmäßig werden dem Server 15 Anweisungen je Stapel zugesandt. Diese Eigenschaft kann jederzeit geändert werden. Falls ein Datenbank-Server keinen Stapelbetrieb unterstützt, können Sie diese Eigenschaft auf 1 setzen, so daß jede Anweisung einzeln gesendet wird.


CacheStart-Eigenschaft

Stellt einen Wert ein bzw. gibt einen Wert zurück, der das Lesezeichen des ersten Datensatzes in einem Recordset-Objekt vom Typ Dynaset darstellt. Dieses Objekt enthält Daten von einer ODBC-Datenquelle, die lokal zwischengespeichert werden sollen (gilt nur für Microsoft Jet-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung bzw. der Rückgabewert ist vom Typ String und gibt ein Lesezeichen an.

Bemerkungen

Durch Zwischenspeichern von Daten wird das Leistungsverhalten von Anwendungen verbessert, die Daten von einem Remote Server über Recordset-Objekte vom Typ Dynaset abrufen. Ein Zwischenspeicher ist ein lokaler Speicherbereich, der die zuletzt vom Server abgerufenen Daten aufnimmt für den Fall, daß die Daten erneut angefordert werden, solange die Anwendung ausgeführt wird. In diesem Fall prüft das Microsoft Jet-Datenbankmodul zuerst, ob sich die Daten im Zwischenspeicher befinden, statt sie vom Server abzurufen, was länger dauern würde. Es können nur Daten von einer ODBC-Datenquelle zwischengespeichert werden.

Jede ODBC-Datenquelle, die mit Microsoft Jet verbunden ist, wie z.B. eine verknüpfte Tabelle, kann einen lokalen Zwischenspeicher haben. Um diesen zu erstellen, öffnen Sie ein Recordset-Objekt der Remote-Datenquelle, stellen Sie die CacheSize- und die CacheStart-Eigenschaften ein, und benutzen Sie dann die FillCache-Methode oder gehen die Datensätze schrittweise durch mit Hilfe der Move-Methoden.

Die Einstellung der CacheStart-Eigenschaft ist das Lesezeichen des ersten Datensatzes im zwischenzuspeichernden Recordset-Objekt. Sie können das Lesezeichen eines beliebigen Datensatzes zur Einstellung der CacheStart-Eigenschaft verwenden. Machen Sie den Datensatz, mit dem Sie das Zwischenspeichern beginnen möchten, zum aktuellen Datensatz, und stellen Sie die CacheStart-Eigenschaft auf den Wert der Bookmark-Eigenschaft ein.

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

Datensätze, die vom Zwischenspeicher abgerufen werden, enthalten keine Änderungen, die von einem anderen Benutzer gleichzeitig an den Quelldaten vorgenommen wurden.

Um eine Aktualisierung aller zwischengespeicherten Daten zu erzwingen, setzen Sie die CacheSize-Eigenschaft des Recordset-Objekts erst auf 0 und dann wieder auf die ursprünglich eingestellte Zwischenspeichergröße, und verwenden Sie dann die FillCache-Methode.


Connection-Eigenschaft

Gibt für ein Database-Objekt das zur Datenbank gehörende Connection-Objekt zurück (gilt nur für ODBCDirect-Arbeitsbereiche).

Für ein Recordset-Objekt gibt diese Eigenschaft das Connection-Objekt zurück, dem das Recordset-Objekt gehört (gilt nur für ODBCDirect-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Der Rückgabewert ist eine Objektvariable, die das Connection-Objekt darstellt. Bei einem Database-Objekt kann die Connection-Eigenschaft nur gelesen werden, wohingegen sie bei einem Recordset-Objekt auch geändert werden kann.

Bemerkungen

Bei einem Database-Objekt verwenden Sie die Connection-Eigenschaft, um einen Verweis auf das zur Datenbank gehörende Connection-Objekt zu erhalten. In DAO sind ein Connection-Objekt und das zugehörige Database-Objekt einfach zwei verschiedene Objektvariablen, die auf dasselbe Objekt verweisen. Die Database-Eigenschaft eines Connection-Objekts und die Connection-Eigenschaft eines Database-Objekts erleichtern die Umstellung der Verbindungen zu einer ODBC-Datenquelle vom Microsoft Jet-Datenbankmodul auf ODBCDirect.


Database-Eigenschaft

Gibt das zu dieser Verbindung gehörende Database-Objekt zurück (gilt nur für ODBCDirect-Arbeitsbereiche).

Rückgabewerte

Der Rückgabewert ist eine Objektvariable, die ein Database-Objekt darstellt.

Bemerkungen

Bei einem Connection-Objekt verwenden Sie die Database-Eigenschaft, um einen Verweis auf das zur Verbindung gehörende Database-Objekt zu erhalten. In DAO sind ein Connection-Objekt und das zugehörige Database-Objekt einfach zwei verschiedene Objektvariablen, die auf dasselbe Objekt verweisen. Die Database-Eigenschaft eines Connection-Objekts und die Connection-Eigenschaft eines Database-Objekts erleichtern die Umstellung der Verbindungen zu einer ODBC-Datenquelle vom Microsoft Jet-Datenbankmodul auf ODBCDirect.


DefaultCursorDriver-Eigenschaft

Stellt den Typ des Cursors ein bzw. gibt den Typ des Cursors zurück, der auf der mit der OpenConnection- oder der OpenDatabase-Methode erstellten Verbindung benutzt wird (gilt nur für ODBCDirect-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung bzw. der Rückgabewert ist vom Typ Long und kann auf eine der folgenden Konstanten gesetzt werden:

Konstante	Beschreibung
dbUseDefaultCursor	(Voreinstellung) Verwendet Server Cursor, falls diese vom Server unterstützt werden; andernfalls wird die ODBC-Cursor-Bibliothek verwendet.
dbUseODBCCursor	Verwendet immer die ODBC-Cursor-Bibliothek. Diese Option liefert bessere Leistung bei kleinen Ergebnismengen, verschlechtert sich aber schnell mit zunehmender Größe der Ergebnismenge.
dbUseServerCursor	Verwendet immer Server-seitige Cursor. Bei den meisten größeren Operationen liefert diese Option bessere Leistung, sie kann allerdings u.U. eine höhere Netzwerkbelastung verursachen.
dbUseClientBatchCursor	Verwendet immer die Cursor-Bibliothek für Stapelaktualisierungen von Clients. Diese Option ist für Stapelaktualisierungen erforderlich.
dbUseNoCursor	Öffnet alle Cursor (d.h. Recordset-Objekte) als Typ Vorwärts, Schreibgeschützt und mit der Zeilengruppengröße 1. Wird auch als "Abfrage ohne Cursor" bezeichnet.
Bemerkungen

Die Einstellung dieser Eigenschaft wirkt sich nur auf Verbindungen aus, die nach der Einstellung aufgebaut werden. Die Änderung der DefaultCursorDriver-Eigenschaft hat keine Auswirkung auf vorhandene Verbindungen.


DefaultType-Eigenschaft

Stellt den Typ des Arbeitsbereichs (Microsoft Jet oder ODBCDirect) ein bzw. gibt den Typ des Arbeitsbereichs zurück, der bei der nächsten Erstellung eines Workspace-Objekts verwendet wird.

Einstellungen und Rückgabewerte

Die Einstellung bzw. der Rückgabewert ist vom Typ Long und kann die Werte folgender Konstanten annehmen:

Konstante	Beschreibung
dbUseJet	Erstellt Workspace-Objekte, die mit dem Microsoft Jet-Datenbankmodul verbunden sind.
dbUseODBC	Erstellt Workspace-Objekte, die mit einer ODBC-Datenquelle verbunden sind.
Bemerkungen

Die Einstellung kann für ein einzelnes Workspace-Objekt übergangen werden, indem das Argument Typ der CreateWorkspace-Methode anders gesetzt wird.


Direction-Eigenschaft

Stellt einen Wert ein bzw. gibt einen Wert zurück, der anzeigt, ob ein Parameter-Objekt einen Eingabeparameter, einen Ausgabeparameter, beides, oder den Rückgabewert der Prozedur darstellt (gilt nur für ODBCDirect-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung bzw. der Rückgabewert ist vom Typ Long und kann den Wert einer der folgenden Konstanten annehmen:

Konstante	Beschreibung
dbParamInput	(Standardeinstellung) Gibt Informationen an die Prozedur weiter.
dbParamInputOutput	Gibt Informationen an die Prozedur weiter und erhält von dieser Informationen zurück.
dbParamOutput	Gibt Informationen von der Prozedur zurück wie in einem Ausgabeparameter von SQL.
dbParamReturnValue	Gibt einen Rückgabewert von der Prozedur zurück.
Bemerkungen

Verwenden Sie die Direction-Eigenschaft, um herauszufinden, ob der Parameter ein Eingabeparameter, ein Ausgabeparameter, beides, oder der Rückgabewert einer Prozedur ist. Manche ODBC-Treiber liefern keine Informationen über die Richtung von Parametern für eine SELECT-Anweisung oder für einen Prozeduraufruf. In solchen Fällen ist es notwendig, die Richtung vor Ausführung der Abfrage einzustellen.

Die folgende Prozedur gibt beispielsweise einen Wert aus einer gespeicherten Prozedur namens "gib_Mitarbeiter" zurück:

{? = call gib_Mitarbeiter }

Dieser Aufruf produziert einen Parameter — den Rückgabewert. Sie müssen die Richtung dieses Parameters auf dbParamOutput oder auf dbParamReturnValue setzen, bevor Sie QueryDef ausführen.

Mit Ausnahme von dbParamInput müssen Sie alle Richtungsparameter einstellen, bevor Sie die auf die Parameterwerte zugreifen und bevor Sie QueryDef ausführen.

Verwenden Sie dbParamReturnValue für Rückgabewerte, aber falls diese Option vom Treiber oder vom Server nicht unterstützt wird, können Sie statt dessen auch dbParamOutput verwenden.

Hinweis   Der Treiber des Microsoft SQL-Servers 6.0 stellt die Direction-Eigenschaft automatisch für alle Prozedurparameter ein. Nicht alle ODBC-Treiber können die Richtung eines Abfrageparameters ermitteln. In diesen Fällen ist es notwendig, die Richtung vor Ausführen der Abfrage einzustellen.


FieldSize-Eigenschaft

Gibt die Anzahl der Bytes zurück, die in der Datenbank (nicht im Hauptspeicher) Field-Objekts vom Typ Memo oder Long Binary der Fields-Auflistung eines Recordset-Objekts benutzt werden.

Rückgabewerte

Der Rückgabewert ist vom Typ Long und enthält die Anzahl von Zeichen (bei einem Feld vom Typ Memo) bzw. die Anzahl von Bytes (bei einem Feld vom Typ Long Binary).

Bemerkungen

Sie können FieldSize mit den Methoden AppendChunk- und GetChunk verwenden, um große Felder zu bearbeiten.

Weil ein Feld vom Typ Long Binary oder Memo größer als 64 KB sein kann, weisen Sie den Rückgabewert von FieldSize einer Variablen zu, die groß genug ist, um eine Long-Variable aufzunehmen.

Um die Größe eines Field-Objekts von einem anderen Typ als Memo und Long Binary zu ermitteln, verwenden Sie die Size-Eigenschaft.

Anmerkung   In einem ODBCDirect-Arbeitsbereich ist die FieldSize-Eigenschaft in folgenden Situationen nicht verfügbar:

•	Wenn der Datenbank-Server oder der ODBC-Treiber keine Server Cursor unterstützt.

•	Wenn Sie die ODBC-Cursor-Bibliothek verwenden (d.h., wenn die DefaultCursorDriver-Eigenschaft auf dbUseODBC gesetzt ist oder auf dbUseDefault, falls der Server keine Server Cursor unterstützt).

•	Wenn Sie eine Abfrage ohne Cursor verwenden (d.h., wenn die DefaultCursorDriver-Eigenschaft auf dbUseNoCursor gesetzt ist).

Microsoft SQL-Server, Version 4.21, unterstützt z.B. keine Server Cursor, so daß die FieldSize-Eigenschaft nicht verfügbar ist.


MaxRecords-Eigenschaft

Stellt die maximale Anzahl von Datensätzen ein bzw. gibt die maximale Anzahl von Datensätzen zurück, die von einer Abfrage zurückgegeben werden sollen.

Einstellungen und Rückgabewerte

Die Einstellung bzw. der Rückgabewert ist vom Typ Long und stellt die Anzahl der zurückzugebenden Datensätze dar. Der Standardwert ist 0, d.h., die Anzahl der Datensätze ist unbegrenzt.

Bemerkungen

Wenn die in MaxRecords festgelegte Anzahl von Zeilen in einem Recordset an Ihre Anwendung zurückgegeben wurde, gibt der Abfrageprozessor keine weiteren Datensätze zurück, auch dann nicht, wenn weitere Datensätze für die Aufnahme in den Recordset qualifiziert sind. Diese Eigenschaft ist nützlich, wenn begrenzte Client-Ressourcen die Verwaltung einer großen Anzahl von Datensätzen verhindern.


OriginalValue-Eigenschaft

Gibt den Wert eines Field-Objekts in der Datenbank zurück, das bei Beginn der letzten Stapelaktualisierung bereits existierte (gilt nur für ODBCDirect-Arbeitsbereiche).

Rückgabewerte

Der Rückgabewert ist ein Ausdruck vom Typ Variant.

Bemerkungen

Während einer eingeschränkten Stapelaktualisierung kann u.U. eine Kollision auftreten, wobei ein zweiter Client in der Zeit zwischen Abruf der Daten und Aktualisierungsversuch durch den ersten Client dasselbe Feld in demselben Datensatz ändert. Die OriginalValue-Eigenschaft enthält den Wert, den das Feld zu Beginn des letzten Update, die im Stapelmodus durchgeführt wurde, hatte. Falls dieser Wert zu dem Zeitpunkt, zu dem das Update in die Datenbank zu schreiben versucht, nicht mit dem in der Datenbank tatsächlich gespeicherten Wert übereinstimmt, tritt eine Kollision auf. In diesem Fall ist der neue Wert in der Datenbank über die VisibleValue-Eigenschaft zugänglich.


Prepare-Eigenschaft

Stellt einen Wert ein bzw. gibt einen Wert zurück, der anzeigt, ob die Abfrage vor der Ausführung auf dem Server als temporär gespeicherte Prozedur unter Verwendung der ODBC-API-Funktion SQLPrepare vorbereitet werden soll, oder ob sie direkt unter Verwendung der ODBC-API-Funktion SQLExecDirect ausgeführt werden soll (gilt nur für ODBCDirect-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung bzw. der Rückgabewert ist vom Typ Long und kann den Wert einer der folgenden Konstanten annehmen:

Konstante	Beschreibung
dbQPrepare	(Standardeinstellung) Die Anweisung wird vorbereitet (d.h., die ODBC-API-Funktion SQLPrepare wird aufgerufen).
DbQUnprepare	Die Anweisung wird nicht vorbereitet (d.h., die ODBC-API-Funktion SQLExecDirect wird aufgerufen).
Bemerkungen

Sie können die Prepare-Eigenschaft entweder verwenden, um den Server aus Ihrer Abfrage eine temporär gespeicherte Prozedur erstellen zu lassen und sie dann auszuführen, oder um die Abfrage direkt auszuführen. Standardmäßig ist die Prepare-Eigenschaft auf dbQPrepare eingestellt. Sie können diese Eigenschaft jedoch auf dbQUnprepare einstellen, um die Vorbereitung einer Abfrage zu verhindern. In diesem Fall wird die Abfrage über die API-Funktion SQLExecDirect ausgeführt.

Die Erstellung einer gespeicherten Prozedur kann die anfängliche Operation verlangsamen, verbessert aber die Leistung bei allen nachfolgenden Bezügen auf die Abfrage. Manche Abfragen können jedoch nicht in Form von gespeicherten Prozeduren ausgeführt werden. In solchen Fällen müssen Sie die Prepare-Eigenschaft auf dbQUnprepare setzen.

Falls Prepare auf dbQPrepare eingestellt ist, kann dies bei Ausführung der Abfrage übergangen werden, indem das Argument Optionen der Execute-Methode auf dbExecDirect gesetzt wird.

Anmerkung   Die ODBC-API-Funktion SQLPrepare wird aufgerufen, sobald die DAO-Eigenschaft SQL eingestellt wird. Deshalb müssen Sie die Prepare-Eigenschaft vor der SQL-Eigenschaft einstellen, wenn Sie die Leistung über die Option dbQUnprepare verbessern möchten.


RecordStatus-Eigenschaft

Gibt einen Wert zurück, der den Aktualisierungsstatus eines Datensatzes anzeigt, sofern dieser Bestandteil einer Stapelaktualisierung ist (gilt nur für ODBCDirect-Arbeitsbereiche).

Rückgabewerte

Der Rückgabewert ist vom Typ Long und kann die Werte folgender Konstanten annehmen:

Konstante	Beschreibung
dbRecordUnmodified	(Voreinstellung) Der Datensatz wurde nicht geändert oder erfolgreich aktualisiert.
DbRecordModified	Der Datensatz wurde geändert und nicht in der Datenbank aktualisiert.
DbRecordNew	Der Datensatz wurde mit der AddNew-Methode eingefügt, aber noch nicht in die Datenbank übernommen.
DbRecordDeleted	Der Datensatz wurde gelöscht, aber noch nicht aus der Datenbank entfernt.
DbDBRecordDeleted	Der Datensatz wurde lokal und in der Datenbank gelöscht.
Bemerkungen

Der Wert der RecordStatus-Eigenschaft zeigt an, ob und wie der aktuelle Datensatz bei der nächsten Stapelaktualisierung berücksichtigt wird.

Wenn ein Benutzer einen Datensatz ändert, wird die RecordStatus-Eigenschaft dieses Datensatzes automatisch auf dbRecordModified gesetzt. Wenn ein Datensatz hinzugefügt oder gelöscht wird, nimmt die RecordStatus-Eigenschaft ebenfalls den entsprechenden Wert an. Wenn Sie nun eine Update-Methode im Stapelmodus benutzen, übergibt DAO für jeden Datensatz je nach dessen RecordStatus-Eigenschaft eine passende Operation an den Remote Server.


StillExecuting-Eigenschaft

 Zeigt an, ob eine asynchrone Operation (d.h., eine Methode, die mit der Option dbRunAsync aufgerufen wurde) schon beendet ist (gilt nur für ODBCDirect-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Der Rückgabewert ist vom Typ Boolean und hat den Wert True, falls die Abfrage noch läuft, andernfalls den Wert False.

Bemerkungen

Verwenden Sie die StillExecuting-Eigenschaft, um herauszufinden, ob die zuletzt aufgerufene asynchrone Execute-, MoveLast-, OpenConnection- oder OpenRecordset-Methode (d.h., eine Methode, die mit der Option dbRunAsync ausgeführt wird) beendet ist. Solange die StillExecuting-Eigenschaft den Wert True hat, kann nicht auf zurückgegebene Objekte zugegriffen werden.

Die folgende Tabelle zeigt, welche Methode überprüft wird, wenn Sie StillExecuting für einen bestimmten Objekttyp verwenden.

Wenn StillExecuting benutzt wird für	Wird diese asynchrone Methode geprüft
Connection	Execute oder OpenConnection
QueryDef	Execute
Recordset	MoveLast oder OpenRecordset
Sobald die StillExecuting-Eigenschaft eines Connection- oder Recordset-Objekts den Wert False zurückgibt, nachdem der Aufruf des OpenConnection- oder OpenRecordset-Objekts zurückgegeben wurden, kann auf das zugehörige Recordset- oder Connection-Objekt Bezug genommen werden. Solange die StillExecuting-Eigenschaft den Wert True behält, kann das Objekt nur für den Lesezugriff der StillExecuting-Eigenschaft referenziert werden. Wenn Sie die NextRecordset-Methode benutzen, um die Bearbeitung eines Recordset-Objekts abzuschließen, wird die StillExecuting-Eigenschaft auf True zurückgesetzt, solange die nachfolgenden Ergebnismengen abgerufen werden.

Verwenden Sie die Cancel-Methode, um die Ausführung einer Task abzubrechen.


UpdateOptions-Eigenschaft

Stellt einen Wert ein bzw. gibt einen Wert zurück, der anzeigt, wie der WHERE-Abschnitt für einen Datensatz bei einer Stapelaktualisierung konstruiert wird, und ob die Stapelaktualisierung eine UPDATE-Anweisung oder eine  DELETE- mit nachfolgender INSERT-Anweisung verwenden soll (gilt nur für ODBCDirect-Arbeitsbereiche).

Einstellungen und Rückgabewerte

Die Einstellung bzw. der Rückgabewert ist vom Typ Long und kann die Werte folgender Konstanten annehmen:

Konstante	Beschreibung
dbCriteriaKey	(Standardeinstellung) Verwendet nur die Schlüsselspalte(n) im WHERE-Abschnitt.
dbCriteriaModValues	Verwendet die Schlüsselspalte(n) und alle aktualisierten Spalten im WHERE-Abschnitt.
dbCriteriaAllCols	Verwendet die Schlüsselspalte(n) und alle Spalten im WHERE-Abschnitt.
dbCriteriaTimeStamp	Verwendet nur die Zeitstempel-Spalte, falls verfügbar (wenn die Ergebnismenge keine Zeitstempel-Spalte enthält, tritt ein Laufzeitfehler auf).
dbCriteriaDeleteInsert	Verwendet einen Satz von DELETE- und INSERT-Anweisungen für jede geänderte Zeile.
dbCriteriaUpdate	(Standardeinstellung) Verwendet eine UPDATE-Anweisung für jede geänderte Zeile.
Bemerkungen

Wenn Update im Stapelmodus ausgeführt wird, erstellt DAO zusammen mit der Client Cursor-Bibliothek eine Folge von SQL-UPDATE-Anweisungen, um die nötigen Änderungen durchzuführen. Für jede Aktualisierung wird ein SQL-WHERE-Abschnitt erstellt, um die durch die RecordStatus-Eigenschaft als geändert gekennzeichneten Datensätze zu isolieren. Da manche Remote Server Auslöser (Trigger) oder andere Mittel benutzen, um die referentielle Integrität zu gewährleisten, ist es oft wichtig, die zu aktualisierenden Felder genau auf diejenigen einzuschränken, die von der Änderung betroffen sind. Setzen Sie hierzu die UpdateOptions-Eigenschaft auf eine der Konstanten dbCriteriaKey, dbCriteriaModValues, dbCriteriaAllCols oder dbCriteriaTimeStamp. Auf diese Weise wird nur der minimale Umfang an Auslöser-Code ausgeführt. Dies hat zur Folge, daß die Aktualisierungsoperation schneller und mit weniger Fehlermöglichkeiten ausgeführt wird.

Sie können jede der Konstanten dbCriteriaDeleteInsert oder dbCriteriaUpdate auch verketten, um festzulegen, ob beim Zurücksenden von Stapelaktualisierungen an den Server für jede Aktualisierung eine Gruppe von DELETE- und INSERT-SQL-Anweisungen oder eine SQL-UPDATE-Anweisung verwendet werden soll. Im ersten Fall werden zwei Operationen für die Aktualisierung des Datensatzes benötigt. In manchen Fällen, vor allem, wenn das Remote-System DELETE-, INSERT- und UPDATE-Auslöser implementiert, kann die Wahl der richtigen UpdateOptions-Eigenschaft deutliche Auswirkungen auf das Leistungsverhalten haben.

Falls Sie keine Konstanten angeben, werden dbCriteriaUpdate und dbCriteriaKey verwendet.

Neu hinzugefügte Datensätze führen immer zu INSERT-Anweisungen, und gelöschte Datensätze führen immer zu DELETE-Anweisungen, so daß diese Eigenschaft nur steuert, wie die Cursor-Bibliothek geänderte Datensätze aktualisiert.


VisibleValue-Eigenschaft

Gibt einen Wert aus der Datenbank zurück, der aktueller ist als der Wert der OriginalValue-Eigenschaft, wie bei einem Konflikt während einer Stapelaktualisierung festgestellt wurde (gilt nur für ODBCDirect-Arbeitsbereiche).

Rückgabewerte

Der Rückgabewert ist ein Ausdruck vom Typ Variant.

Bemerkungen

Diese Eigenschaft enthält den Wert des Feldes, der zur Zeit in der Datenbank auf dem Server gespeichert ist. Während einer teilweisen Stapelaktualisierung kann u.U. eine Kollision auftreten, wobei ein zweiter Client in der Zeit zwischen Abruf der Daten und Aktualisierungsversuch durch den ersten Client dasselbe Feld in demselben Datensatz ändert. In diesem Fall ist der neue Wert in der Datenbank über die Eigenschaft zugänglich.


Datenzugriffskonstanten (DAO)

Datenzugriffsobjekte (DAO) bieten systeminterne Konstanten, die Sie zusammen mit Methoden oder Eigenschaften verwenden können. Alle Konstanten beginnen mit den Buchstaben db und werden zusammen mit der Methode oder Eigenschaft beschrieben, mit der sie verwendet werden.

Legende:

Schreibgeschützt

Lese-/Schreibzugriff

Konstanten der AllPermissions-Eigenschaft (Alle sind [image])

Für jedes Container- oder Document-Objekt gilt folgendes.

Konstante	Beschreibung
dbSecReadDef	Benutzer kann die Tabellendefinitionen lesen, auch die Spalten- und Indexinformationen.
dbSecWriteDef	Benutzer kann Tabellendefinition ändern oder löschen sowie die Spalten- und Indexinformationen.
dbSecRetrieveData	Benutzer kann Daten vom Document-Objekt abrufen.
dbSecInsertData	Benutzer kann Datensätze hinzufügen.
dbSecReplaceData	Benutzer kann alle Datensätze ändern.
dbSecDeleteData	Benutzer kann alle Datensätze löschen.
Der Databases-Container oder ein beliebiges Document-Objekt in einer Documents-Auflistung kann folgendes beinhalten.

Konstante	Beschreibung
dbSecDeleteData	Benutzer kann Datensätze löschen.
dbSecDBAdmin	Benutzer kann die Datenbank replizieren und das Datenbankkennwort ändern.
dbSecDBCreate	Benutzer kann neue Datenbanken erstellen. Diese Einstellung ist nur im Databases-Container von Arbeitsgruppeninformationsdateien gültig (System.mdw).
dbSecDBExclusive	Benutzer kann exklusiv auf die Datenbank zugreifen.
dbSecDBOpen	Benutzer kann die Datenbank öffnen.
Konstanten der Attributes-Eigenschaft

Die Attributes-Eigenschaft kann für jedes Field-Objekt folgendes beinhalten.

Konstante	Beschreibung
dbFixedField	Feste Feldgröße (Voreinstellung für numerische Felder).
dbVariableField	Variable Feldgröße (nur Textfelder).
dbAutoIncrField	Ein neuer Datensatzfeldwert, der hochgezählt wird und eine eindeutige Ganzzahl vom Typ Long darstellt (nur in Microsoft Jet-Arbeitsbereichen für TableDef-Objekte verfügbar, die aus .mdb-Dateien geöffnet werden).
dbUpdatableField	Das Feld ist aktualisierbar.
dbDescending	Das Feld ist in absteigender Reihenfolge sortiert (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbHyperlinkField	Das Feld enthält Informationen über Hyperlinks (gilt nur für Memofelder in Microsoft Jet-Arbeitsbereichen).
dbSystemField	Das Feld ist ein Replikationsfeld (nur in einem TableDef-Objekt in Microsoft Jet-Datenbanken).
Die Attributes-Eigenschaft kann für jedes Relation-Objekt folgendes beinhalten.

Konstante	Beschreibung
dbRelationUnique	1:1-Beziehung.
dbRelationDontEnforce	Die Beziehung wird nicht erzwungen (keine referentielle Integrität).
dbRelationInherited	Die Beziehung besteht in Datenbanken, die zwei verknüpfte Tabellen enthalten.
dbRelationUpdateCascade	Aktualisierungsweitergabe.
dbRelationDeleteCascade	Löschweitergabe.
Die Attributes-Eigenschaft kann für jedes TableDef-Objekt folgendes beinhalten.

Konstante	Beschreibung
dbAttachExclusive	Öffnet eine verknüpfte Tabelle des Microsoft Jet-Datenbankmoduls im exklusiven Modus.
dbAttachSavePWD	Speichert die Benutzer-ID und das Kennwort für verknüpfte Remote-Tabellen.
DbSystemObject	Systemtabelle.
dbHiddenObject	Ausgeblendete Tabelle (zur temporären Verwendung).
dbAttachedTable	Verknüpfte Datenbanktabellen außerhalb von ODBC
dbAttachedODBC	Verknüpfte ODBC-Datenbanktabellen.
Konstanten der CollatingOrder-Eigenschaft (Alle sind [image])

Konstante	Beschreibung
dbSortArabic	Arabische Sortierreihenfolge
dbSortChineseSimplified	Vereinfachte chinesische Sortierreihenfolge
dbSortChineseTraditional	Traditionelle chinesische Sortierreihenfolge
dbSortCyrillic	Russische Sortierreihenfolge
dbSortCzech	Tschechische Sortierreihenfolge
dbSortDutch	Niederländische Sortierreihenfolge
dbSortGeneral	Englische, deutsche, französische und portugiesische Sortierreihenfolge
dbSortGreek	Griechische Sortierreihenfolge
dbSortHebrew	Hebräische Sortierreihenfolge
dbSortHungarian	Ungarische Sortierreihenfolge
dbSortIcelandic	Isländische Sortierreihenfolge
dbSortJapanese	Japanische Sortierreihenfolge
dbSortKorean	Koreanische Sortierreihenfolge
dbSortNeutral	Neutrale Sortierreihenfolge
dbSortNorw	Norwegische und dänische Sortierreihenfolge
dbSortPDXIntl	Internationale Sortierreihenfolge von Paradox
dbSortPDXNor	Norwegische und dänische Sortierreihenfolge von Paradox
dbSortPDXSwe	Schwedische und finnische Sortierreihenfolge von Paradox
dbSortPolish	Polnische Sortierreihenfolge
dbSortSlovenian	Slowenische Sortierreihenfolge
dbSortSpanish	Spanische Sortierreihenfolge
dbSortSwedFin	Schwedische und finnische Sortierreihenfolge
dbSortThai	Thailändische Sortierreihenfolge
dbSortTurkish	Türkische Sortierreihenfolge
dbSortUndefined	Sortierreihenfolge nicht definiert oder nicht bekannt
DefaultCursorDriver-Eigenschaft (Alle sind [image])

Konstante	Beschreibung
dbUseDefaultCursor	(Voreinstellung) Verwendet Server Cursor, wenn der Server dieses unterstützt; andernfalls wird die ODBC-Cursor-Bibliothek verwendet.
dbUseODBCCursor	Verwendet immer die ODBC-Cursor-Bibliothek. Diese Option bietet bei kleinen Ergebnisgruppen ein besseres Leistungsverhalten, die Leistung wird jedoch bei größeren Ergebnisgruppen zunehmend schlechter.
dbUseServerCursor	Verwendet immer Server Cursor. Bei den größeren Operationen bietet diese Option ein besseres Leistungsverhalten, aber kann auch stärkeren Netzwerkverkehr verursachen.
dbUseClientBatchCursor	Verwendet immer die FoxPro-Cursor-Bibliothek. Diese Option wird benötigt, wenn Stapelaktualisierungen durchgeführt werden.
dbUseNoCursor	Öffnet alle Cursor (d.h. in Recordset-Objekten) als Typ Vorwärts, schreibgeschützt und mit einer Zeilengruppengröße von 1. Wird auch "Abfrage ohne Cursor" genannt.
Konstanten der Direction-Eigenschaft (Alle sind [image])

Konstante	Beschreibung
dbParamInput	(Voreinstellung) Gibt Informationen an die Prozedur weiter.
dbParamInputOutput	Gibt Informationen an die Prozedur weiter und nimmt Informationen von ihr entgegen.
dbParamOutput	Gibt die Informationen der Prozedur wie in einem Ausgabeparameter in SQL zurück.
dbParamReturnValue	Übergibt den Rückgabewert einer Prozedur.
Konstanten der EditMode-Eigenschaft (Alle sind [image])

Konstante	Beschreibung
dbEditNone	Es wird keine Bearbeitungsoperation ausgeführt.
dbEditInProgress	Edit-Methode wird aufgerufen.
dbEditAdd	AddNew-Methode wird aufgerufen.
Konstanten der Permissions-Eigenschaft (Alle sind  [image])

Die Permissions-Eigenschaft kann für jedes Container-Objekt folgendes beinhalten.

Konstante	Beschreibung
dbSecNoAccess	Verweigert Benutzern Zugriff auf das Objekt.
dbSecFullAccess	Benutzer hat uneingeschränkten Zugriff auf das Objekt.
dbSecDelete	Benutzer kann das Objekt löschen.
dbSecReadSec	Benutzer kann die sicherheitsbezogenen Informationen des Objekts lesen.
dbSecWriteSec	Benutzer kann Zugriffsberechtigungen verändern.
dbSecWriteOwner	Benutzer kann die Einstellungen der Owner-Eigenschaft verändern.
Die Permissions-Eigenschaft kann für jeden Datenbank-Container folgendes beinhalten. (Alle sind  [image]):

Konstante	Beschreibung
dbSecDBAdmin	Benutzer kann eine Datenbank replizierbar machen und das Datenbankkennwort ändern.
dbSecDBCreate	Benutzer kann neue Datenbanken erstellen (nur gültig für Datenbank-Container-Objekte in Systemdatenbanken).
dbSecDBOpen	Benutzer kann die Datenbank öffnen.
dbSecDBExclusive	Benutzer hat exklusiven Zugriff.
Die Permissions-Eigenschaft kann für jeden Tabellen-Container folgendes beinhalten.   (Alle sind  [image]):

Konstante	Beschreibung
dbSecCreate	Benutzer kann neue Tabellen erstellen (nur gültig bei Container-Objekten, die eine Tabelle darstellen, oder bei Datenbank-Container-Objekten in der Systemdatenbank).
dbSecReadDef	Benutzer hat Leseberechtigung für die Tabellendefinition, einschließlich Spalten- und Indexinformationen.
dbSecWriteDef	Benutzer kann die Tabellendefinition einschließlich der Spalten- und Indexinformationen verändern oder löschen.
dbSecRetrieveData	Benutzer kann Daten aus dem Dokument abrufen.
dbSecInsertData	Benutzer kann Datensätze hinzufügen.
dbSecReplaceData	Benutzer kann Datensätze verändern.
dbSecDeleteData	Benutzer kann Datensätze löschen.
Die Permissions-Eigenschaft kann für jedes Document-Objekt folgendes beinhalten. (Alle sind  [image]):

Konstante	Beschreibung
dbSecCreate	Benutzer kann neue Tabellen erstellen (nur gültig bei Container-Objekten, die Tabellen darstellen).
dbSecDBCreate	Benutzer kann neue Datenbanken darstellen (nur gültig bei Datenbank-Container-Objekten in Systemdatenbanken).
dbSecDBOpen	Benutzer kann die Datenbank öffnen.
dbSecDBExclusive	Benutzer hat exklusiven Zugriff.
dbSecDelete	Benutzer kann das Objekt löschen.
dbSecDeleteData	Benutzer kann Datensätze löschen.
dbSecFullAccess	Benutzer hat unbeschränkten Zugriff auf das Objekt.
dbSecInsertData	Benutzer kann Datensätze hinzufügen.
dbSecReadDef	Benutzer hat Lesezugriff auf die Tabellendefinition einschließlich den Spalten- und Indexinformationen.
dbSecReadSec	Benutzer hat Lesezugriff auf die sicherheitsbezogenen Informationen des Objekts.
dbSecReplaceData	Benutzer kann Datensätze ändern.
dbSecRetrieveData	Benutzer kann Daten aus dem Dokument abrufen.
dbSecWriteDef	Benutzer kann die Tabellendefinition einschließlich der Spalten- und Indexinformationen ändern oder löschen.
dbSecWriteSec	Benutzer kann Zugriffsberechtigungen ändern.
dbSecWriteOwner	Benutzer kann die Einstellungen der Owner-Eigenschaft ändern.
Konstanten der Prepare-Eigenschaft (Alle sind  [image])

Konstante	Beschreibung
dbQPrepare	(Voreinstellung) Die Anweisung ist vorbereitet (d.h., die ODBC-SQLPrepare-API wurde aufgerufen).
dbQUnprepare	Die Anweisung ist nicht vorbereitet (d.h., die ODBC-SQLExecDirect-API wurde aufgerufen).
Konstanten der RecordStatus-Eigenschaft (Alle sind  [image])

Konstante	Beschreibung
dbDBDeleted	Der Datensatz wurde lokal und in der Datenbank gelöscht.
dbDeleted	Der Datensatz wurde gelöscht, aber existiert noch in der Datenbank.
dbRecordModified	Der Datensatz wurde geändert und nicht in der Datenbank aktualisiert.
dbRecordNew	Der Datensatz wurde mit der AddNew-Methode eingefügt, aber noch nicht der Datenbank hinzugefügt.
dbRecordUnmodified	(Voreinstellung) Der Datensatz wurde nicht geändert oder wurde erfolgreich aktualisiert.
Konstanten der Type-Eigenschaft

Die Type-Eigenschaft kann für jedes Field-, Parameter- oder Property-Objekt folgendes beinhalten. (Alle sind [image]):

Konstante	Beschreibung
dbBigInt	Big Integer-Daten (nur ODBCDirect)
dbBinary	Binärdaten
dbBoolean	Boolesche Daten (True/False)
dbByte	Byte-Daten (8-Bit)
dbChar	Zeichensatzdaten (nur ODBCDirect)
dbCurrency	Währungsdaten
dbDate	Datumswerte
dbDecimal	Dezimaldaten (nur ODBCDirect)
dbDouble	Fließkommadaten mit doppelter Genauigkeit
dbFloat	Fließkommadaten (nur ODBCDirect)
dbGUID	GUID-Daten
dbInteger	Integer-Daten
dbLong	Long Integer-Daten
dbLongBinary	Binärdaten (Bitmap)
dbMemo	Memo-Daten (erweiterter Text)
dbNumeric	Numerische Daten (nur ODBCDirect)
dbSingle	Fließkommadaten mit einfacher Genauigkeit
dbText	Textdaten (variable Länge)
dbTime	Daten im Zeitformat (nur ODBCDirect)
dbTimeStamp	Daten in Zeit- und Datumsformat (nur ODBCDirect)
dbVarBinary	Variable Binärdaten (nur ODBCDirect)
Die Type-Eigenschaft kann für jedes QueryDef-Objekt folgendes beinhalten. (Alle sind [image]):

Konstante	Beschreibung
dbQAction	Aktionsabfrage
dbQAppend	Anfügeabfrage
dbQCompound	Verbundabfrage (gilt nur für ODBCDirect-Arbeitsbereiche)
dbQCrosstab	Kreuztabellenabfrage
dbQDDL	DDL-Abfrage (Datendefinitionssprache)
dbQDelete	Löschabfrage
dbQMakeTable	Tabellenerstellungsabfrage
dbQProcedure	SQL-Prozedur, die eine gespeicherte Prozedur ausführt (gilt nur für ODBCDirect-Arbeitsbereiche)
dbQSelect	Auswahlabfrage
dbQSetOperation	Abfrage zum Festlegen einer Operation
dbQSPTBulk	Abfrage für Sammeloperationen
dbQSQLPassThrough	SQL-Pass-Through-Abfrage
dbQUpdate	Aktualisierungsabfrage
Die Type-Eigenschaft kann für jedes Recordset-Objekt folgendes beinhalten. (Alle sind [image]):

Konstanten	Beschreibung
dbOpenDynamic	Öffnet ein Recordset-Objekt vom Typ Dynaset (gilt nur für ODBCDirect-Arbeitsbereiche)
dbOpenDynaset	Öffnet ein Recordset-Objekt vom Typ Dynaset
dbOpenForwardOnly	Öffnet ein Recordset-Objekt vom Typ Vorwärts
dbOpenSnapshot	Öffnet ein Recordset-Objekt vom Typ Snapshot
dbOpenTable	Öffnet ein Recordset-Objekt vom Typ Tabelle (gilt nur für Microsoft Jet-Arbeitsbereiche)
Konstanten der UpdateOptions-Eigenschaft (Alle sind [image])

Konstante	Beschreibung
dbCriteriaKey	(Voreinstellung) Verwendet nur die Schlüsselspalte(n) im WHERE-Abschnitt.
dbCriteriaModValues	Verwendet die Schlüsselspalte(n) und alle aktualisierten Spalten im WHERE-Abschnitt.
dbCriteriaAllCols	Verwendet die Schlüsselspalte(n) und alle Spalten im WHERE-Abschnitt.
dbCriteriaTimeStamp	Verwendet nur die Zeitstempel-Spalte, sofern verfügbar (wenn keine Zeitstempel-Spalte in der Ergebnisgruppe vorkommt, wird ein Laufzeitfehler ausgegeben).
dbCriteriaDeleteInsert	Verwendet ein Paar DELETE- und INSERT-Anweisungen für jede veränderte Zeile.
dbCriteriaUpdate	(Voreinstellung) Verwendet eine UPDATE-Anweisung für jede veränderte Zeile.
Konstanten des Arguments Gebietsschema der CompactDatabase und CreateDatabase-Methoden (Alle sind [image])

Konstante	Beschreibung
dbLangGeneral	Englisch, Deutsch, Französisch, Portugiesisch, Italienisch und Spanisch (Modern)
dbLangArabic	Arabisch
dbLangChineseSimplified	Vereinfachtes Chinesisch
dbLangChineseTraditional	Traditionelles Chinesisch
dbLangCyrillic	Russisch
dbLangCzech	Tschechisch
dbLangDutch	Niederländisch
dbLangGreek	Griechisch
dbLangHebrew	Hebräisch
dbLangHungarian	Ungarisch
dbLangIcelandic	Isländisch
dbLangJapanese	Japanisch
dbLangKorean	Koreanisch
dbLangNordic	Nordisch
dbLangNorwdan	Norwegisch und Dänisch
dbLangPolish	Polnisch
dbLangSlovenian	Slowenisch
dbLangSpanish	Spanisch
dbLangSwedfin	Schwedisch und Finnisch
dbLangThai	Thailändisch
dbLangTurkish	Türkisch
Konstanten des Arguments Optionen der CompactDatabase-Methode (Alle sind [image])

Konstante	Beschreibung
dbDecrypt	Verschlüsselt die Datenbank beim Komprimieren
dbEncrypt	Verschlüsselt die Datenbank
dbVersion10	Microsoft Jet-Datenbankmodul, Version 1.0
dbVersion11	Microsoft Jet-Datenbankmodul, Version 1.1
dbVersion20	Microsoft Jet-Datenbankmodul, Version 2.0
dbVersion30	Microsoft Jet-Datenbankmodul, Version 3.0
Konstanten des Arguments Optionen der CreateDatabase-Methode (Alle sind [image])

Konstante	Beschreibung
dbEncrypt	Verschlüsselt die Datenbank
dbVersion10	Microsoft Jet-Datenbankmodul, Version 1.0
dbVersion11	Microsoft Jet-Datenbankmodul, Version 1.1
dbVersion20	Microsoft Jet-Datenbankmodul, Version 2.0
dbVersion30	Microsoft Jet-Datenbankmodul, Version 3.0
Konstanten des Arguments Typ der CreateWorkspace-Methode

Sie können für jede Type-Eigenschaft eines Workspace-Objekts und jede DefaultType-Eigenschaft eines DBEngine-Objekts folgendes verwenden. (Alle sind [image])

Konstante	Beschreibung
dbUseODBC	Der nächste Arbeitsbereich, der erstellt wird, verwendet ODBCDirect.
dbUseJet	Der nächste Arbeitsbereich, der erstellt wird, verwendet das Microsoft Jet-Datenbankmodul.
Konstanten des Arguments Optionen der Execute-Methode (Alle sind  [image])

Konstante	Beschreibung
dbDenyWrite	Verweigert anderen Benutzern den Schreibzugriff (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbInconsistent	Erlaubt inkonsistente Aktualisierungen (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbConsistent	Erlaubt konsistente Aktualisierungen (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbSQLPassThrough	Eine SQL-Pass-Through-Abfrage. Eine SQL-Anweisung wird an eine ODBC-Datenbank zur Weiterverarbeitung übergeben (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbFailOnError	Setzt Aktualisierungen zurück, wenn ein Fehler auftritt (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbSeeChanges	Erzeugt einen Laufzeitfehler, sofern ein anderer Benutzer die Daten verändert, während Sie sie bearbeiten (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbRunAsync	Führt eine Abfrage asynchron aus (gilt nur für ODBCDirect-Arbeitsbereiche).
dbExecDirect	Führt die Abfrage aus, ohne daß zuerst die ODBC-Funktion SQLPrepare aufgerufen wird (gilt nur für ODBCDirect-Arbeitsbereiche).
Konstanten des optionalen Arguments der Idle-Methode (Ist [image])

Konstante	Beschreibung
dbRefreshCache	Erzwingt, daß ausstehende Schreibvorgänge auf dem Datenträger durchgeführt werden und daß der Speicher von den aktuellen Datenträgerdateien erneuert wird.
Konstanten des optionalen Arguments der MakeReplica-Methode (Alle sind [image])

Konstante	Beschreibung
dbRepMakePartial	Erstellt ein Teilreplikat.
dbRepMakeReadOnly	Replizierbare Elemente einer Datenbank werden schreibgeschützt.
Konstanten des Arguments Optionen der OpenConnection- und OpenDatabase-Methoden (Alle sind [image])

Konstante	Beschreibung
dbDriverNoPrompt	Der Treiber-Manager verwendet die Verbindungszeichenfolge, die in Verbinden zur Verfügung gestellt wird. Wenn nicht ausreichende Informationen vorhanden sind, wird ein auffangbarer Fehler zurückgegeben.
dbDriverPrompt	Der Treiber-Manager zeigt das Dialogfeld ODBC-Datenquellen an. Die Verbindungszeichenfolge, mit der die Verbindung hergestellt wurde, ist aus einem Datenquellennamen (DSN) erstellt worden, und der Benutzer hat sie mit Hilfe von Dialogfeldern ausgewählt und vervollständigt.
dbDriverComplete	Wenn die Verbindungszeichenfolge ein DSN-Schlüsselwort beinhaltet, verwendet der Treiber-Manager die Zeichenfolge wie in der Verbindung, andernfalls reagiert der Treiber-Manager, als ob dbDriverPrompt angegeben wurde.
dbDriverCompleteRequired	(Voreinstellung) Das Verhalten ist gleich dem bei dbDriverComplete, allerdings deaktiviert der Treiber in den Steuerelementen alle Informationen, die nicht notwendig sind, um die Verbindung zu beenden.
Konstanten des Arguments Typ der OpenRecordset-Methode (Alle sind [image])

Konstante	Beschreibung
dbOpenDynamic	Öffnet ein Recordset-Objekt vom Typ Dynaset (gilt nur für ODBCDirect-Arbeitsbereiche )
dbOpenDynaset	Öffnet ein Recordset-Objekt vom Typ Dynaset
dbOpenForwardOnly	Öffnet eine Recordset-Objekt vom Typ Vorwärts
dbOpenSnapshot	Öffnet ein Recordset-Objekt vom Typ Snapshot
dbOpenTable	Öffnet ein Recordset-Objekt vom Typ Tabelle (gilt nur für Microsoft Jet-Arbeitsbereiche)
Konstanten des Arguments LockEdits der OpenRecordset-Methode (Alle sind [image])

Konstante	Beschreibung
dbPessimistic	Vollständige Parallelität. Der Cursor verwendet die niedrigste Ebene, um ausreichend sperren zu können, um sicherzustellen, daß der Datensatz aktualisiert werden kann.
DbReadOnly	Cursor ist schreibgeschützt. Aktualisierungen sind nicht möglich.
dbOptimistic	Teilweise Parallität, die auf der Datensatzkennung basiert. Der Cursor vergleicht die Kennung in alten und in neuen Datensätzen, um zu bestimmen, ob der Datensatz seit dem letzten Zugriff geändert wurde.
dbOptimisticValue	Teilweise Parallelität, die auf den Datensatzwerten basiert. Der Cursor vergleicht Datenwerte in alten und in neuen Datensätzen, um zu bestimmen, ob der Datensatz seit dem letzten Zugriff geändert wurde (gilt nur für ODBCDirect-Arbeitsbereiche).
dbOptimisticBatch	Ermöglicht teilweise Stapelaktualisierungen (gilt nur für ODBCDirect-Arbeitsbereiche).
Konstanten des Arguments Optionen der OpenRecordset-Methode (Alle sind [image])

Konstante	Beschreibung
dbDenyWrite	Verhindert, daß andere Benutzer Datensätze im Recordset-Objekt ändern können (gilt nur für Microsoft Jet-Arbeitsbereiche ).
dbDenyRead	Verhindert, daß andere Benutzer Lesezugriff auf Datensätze im Recordset-Objekt haben (gilt nur für Daten vom Typ Tabelle und in Microsoft Jet-Arbeitsbereichen).
dbReadOnly	Öffnet ein Recordset-Objekt als schreibgeschützt (gilt nur für Microsoft Jet-Arbeitsbereiche).
dbAppendOnly	Benutzer kann dem Datentyp Dynaset Daten hinzufügen, aber er hat keinen Lesezugriff auf die vorhandenen Datensätze (gilt nur für Daten vom Typ Dynaset und in Microsoft Jet-Arbeitsbereichen).
dbInconsistent	Aktualisiert alle Felder vom Typ Dynaset, auch wenn dies Auswirkungen auf andere Datensätze hat (gilt nur für Daten vom Typ Dynaset oder Snapshot und in Microsoft Jet-Arbeitsbereichen).
dbConsistent	Aktualisiert Felder nur dann, wenn der Vorgang keine Auswirkungen auf Datensätze hat, die nicht vom Typ Dynaset sind (gilt nur für Daten vom Typ Dynaset und Snapshot und in Microsoft Jet-Arbeitsbereichen).
dbSQLPassThrough	Sendet eine SQL-Anweisung an eine ODBC-Datenbank (gilt nur für Daten vom Typ Snapshot und in Microsoft Jet-Arbeitsbereichen).
dbForwardOnly	Erstellt ein Recordset-Objekt vom Typ Vorwärts (gilt nur für Daten vom Typ Snapshot und in Microsoft Jet-Arbeitsbereichen).
dbSeeChanges	Erzeugt einen Laufzeitfehler, wenn ein anderer Benutzer die Daten ändert, während Sie die Daten bearbeiten (gilt nur für Daten vom Typ Dynaset und in Microsoft Jet-Arbeitsbereichen).
dbRunAsync	Führt die Abfrage asynchron aus (gilt nur für ODBCDirect-Arbeitsbereiche).
dbExecDirect	Führt die Abfrage aus, ohne daß zuvor die ODBC-Funktion SQLPrepare aufgerufen wird (gilt nur für ODBCDirect-Arbeitsbereiche).
Parameter-Konstanten der SetOption-Methode (Alle sind [image])

Konstante	Beschreibung
dbPageTimeout	Der Schlüssel PageTimeout
dbSharedAsyncDelay	Der Schlüssel SharedAsyncDelay
dbExclusiveAsyncDelay	Der Schlüssel ExclusiveAsyncDelay
dbLockRetry	Der Schlüssel LockRetry
dbUserCommitSync	Der Schlüssel UserCommitSync
dbImplicitCommitSync	Der Schlüssel ImplicitCommitSync
dbMaxBufferSize	Der Schlüssel MaxBufferSize
dbMaxLocksPerFile	Der Schlüssel MaxLocksPerFile
dbLockDelay	Der Schlüssel LockDelay
dbRecycleLVs	Der Schlüssel RecycleLVs
dbFlushTransactionTimeout	Der Schlüssel FlushTransactionTimeout
Konstanten des Arguments Austausch der Synchronize-Methode (Alle sind [image])

Konstante	Beschreibung
dbRepExportChanges	Sendet Änderungen von der aktuellen Datenbank an die Zieldatenbank.
dbRepImportChanges	Erhält Änderungen von der Zieldatenbank.
dbRepImpExpChanges	Sendet und erhält Daten in wechselseitigem Austausch.
dbRepSyncInternet	Datenaustausch zwischen Dateien, die über das Internet verbunden sind.
Konstanten des Arguments Typ der Update-Methode (Alle sind [image])

Konstante	Beschreibung
dbUpdateRegular	(Voreinstellung) Ausstehende Änderungen werden nicht zwischengespeichert, sondern direkt auf die Festplatte geschrieben.
dbUpdateBatch	Alle ausstehenden Änderungen im Aktualisierungsspeicher werden auf die Festplatte geschrieben..
dbUpdateCurrentRecord	Nur die ausstehenden Änderungen des Datensatzes werden auf die Festplatte geschrieben.
Konstanten des Arguments Typ der CancelUpdate-Methode (Alle sind [image])

Konstante	Beschreibung
dbUpdateRegular	(Voreinstellung) Ausstehende Änderungen werden nicht zwischengespeichert, sondern direkt auf die Festplatte geschrieben.
dbUpdateBatch	Alle ausstehenden Änderungen im Aktualisierungsspeicher werden auf die Festplatte geschrieben.


Container-Objekt und Containers-Auflistung (Beispiel)

Dieses Beispiel durchläuft die Containers-Auflistung der Nordwind-Datenbank und die Properties-Auflistung jedes Container-Objekts in der Auflistung.

Sub ContainerObjectX()

Dim dbsNorthwind As Database

Dim ctrLoop As Container

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Durchlaufen der Containers-Auflistung.

For Each ctrLoop In .Containers

Debug.Print "Eigenschaften von" & ctrLoop.Name _

& " Container"

' Durchlaufen der Properties-Auflistung jedes

' Container-Objekts.

For Each prpLoop In ctrLoop.Properties

Debug.Print "    " & prpLoop.Name _

& " = " prpLoop

Next prpLoop

Next ctrLoop

.Close

End With

End Sub


DBEngine-Objekt (Beispiel)

Dieses Beispiel durchläuft die Auflistungen des DBEngine-Objekts. Weitere Informationen finden Sie in den Beispielen zu den Methoden und Eigenschaften von DBEngine.

Sub DBEngineX()

Dim wrkLoop As Workspace

Dim prpLoop As Property

With DBEngine

Debug.Print "DBEngine-Eigenschaften"

' Durchlaufen der Properties-Auflistung des

' DBEngine-Objekts, wobei Eigenschaften gesucht

' werden, deren Werte in diesem Kontext

' unzulässig sind.

For Each prpLoop In .Properties

On Error Resume Next

Debug.Print "    " & prpLoop.Name & " = " _

& prpLoop

On Error GoTo 0

Next prpLoop

Debug.Print "Workspaces-Auflistung des DBEngine-Objekts"

' Durchlaufen der Workspaces-Auflistung des DBEngine-Objekts.

For Each wrkLoop In .Workspaces

Debug.Print "    " & wrkLoop.Name

' Durchlaufen der Properties-Auflistung von jedem

' Workspace-Objekt, wobei Eigenschaften gesucht werden

' deren Werte in diesm Kontext unzulässig sind.

For Each prpLoop In wrkLoop.Properties

On Error Resume Next

Debug.Print "        " & prpLoop.Name & _

" = " & prpLoop

On Error GoTo 0

Next prpLoop

Next wrkLoop

End With

End Sub


Recordset-Objekt vom Typ Dynaset (Beispiel)

Dieses Beispiel öffnet ein Recordset-Objekt vom Typ Dynaset und zeigt, inwiefern dessen Felder aktualisierbar sind.

Sub dbOpenDynasetX()

Dim dbsNorthwind As Database

Dim rstInvoices As Recordset

Dim fldLoop As Field

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstInvoices = _

dbsNorthwind.OpenRecordset("Rechnungen", dbOpenDynaset)

With rstInvoices

Debug.Print "Recordset-Objekt vom Typ Dynaset: " & .Name

If .Updatable Then

Debug.Print "    Aktualisierbare Felder:"

' Durchlaufen der Fields-Auflistung des Recordset-

' Objekts vom Typ Dynaset, nur aktualisierbare

' Felder ausgeben.

For Each fldLoop In .Fields

If fldLoop.DataUpdatable Then

Debug.Print "        " & fldLoop.Name

End If

Next fldLoop

End If

.Close

End With

dbsNorthwind.Close

End Sub


Field-Objekt, Fields-Auflistung (Beispiel)

Dieses Beispiel zeigt, welche Eigenschaften auf ein Field-Objekt angewendet werden, jeweils abhängig davon, wo das Field-Objekt sich befindet (z.B. die Fields-Auflistung eines TableDef-Objekts, die Fields-Auflistung eines QueryDef-Objekts usw.). Die Funktion FieldOutput wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub FieldX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim fldTableDef As Field

Dim fldQueryDef As Field

Dim fldRecordset As Field

Dim fldRelation As Field

Dim fldIndex As Field

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

' Ein Field-Objekt aus verschiedenen Fields-

' Auflistungen Objektvariablen zuweisen.

Set fldTableDef = _

dbsNorthwind.TableDefs(0).Fields(0)

Set fldQueryDef =dbsNorthwind.QueryDefs(0).Fields(0)

Set fldRecordset = rstEmployees.Fields(0)

Set fldRelation =dbsNorthwind.Relations(0).Fields(0)

Set fldIndex = _

dbsNorthwind.TableDefs(0).Indexes(0).Fields(0)

' Bericht ausgeben.

FieldOutput "TableDef", fldTableDef

FieldOutput "QueryDef", fldQueryDef

FieldOutput "Recordset", fldRecordset

FieldOutput "Relation", fldRelation

FieldOutput "Index", fldIndex

rstEmployees.Close

dbsNorthwind.Close

End Sub

Sub FieldOutput(strTemp As String, fldTemp As Field)

' Report function for FieldX.

Dim prpLoop As Property

Debug.Print "Gültige Field-Eigenschaft in " & strTemp

' Durchlaufen der Properties-Auflistung des

' übergebenen Field-Objekts.

For Each prpLoop In fldTemp.Properties

' Einige Eigenschaften sind in bestimmten

' Zusammenhängen unzulässig(z.B. die

' Value-Eigenschaft in einer Fields-

' Auflistung eines TableDef-Objekts). Versuche,

' eine unzulässige Eigenschaft zu verwenden,

' lösen Fehler aus.

On Error Resume Next

Debug.Print "    " & prpLoop.Name & " = " & _

prpLoop.Value

On Error GoTo 0

Next prpLoop

End Sub


Group-Objekt, Groups-Auflistung, User-Objekt und Users-Auflistung (Beispiel)

Dieses Beispiel beschreibt die Objekte Group und User und die Auflistungen Groups und Users. Zuerst wird ein neues User-Objekt erstellt, und das Objekt wird der Users-Auflistung des standardmäßigen Workspace-Objekts angefügt. Als nächstes wird ein neues Group-Objekt erstellt, und dieses wird der Groups-Auflistung des standardmäßigen Workspace-Objekts angefügt. Danach fügt das Beispiel den Benutzer Matthias Caesar zur Gruppe "Buchhaltung" hinzu. Schließlich durchläuft es die Auflistungen Users und Groups des standardmäßigen Workspace-Objekts. In den Beschreibungen der Methoden und Eigenschaften, die in der Zusammenfassung für Group und User aufgeführt sind, finden Sie weitere Beispiele.

Sub GroupX()

Dim wrkDefault As Workspace

Dim usrNew As User

Dim usrLoop As User

Dim grpNew As Group

Dim grpLoop As Group

Dim grpMember As Group

Set wrkDefault = DBEngine.Workspaces(0)

With wrkDefault

' Neuen Benutzer erstellen und anfügen.

Set usrNew = .CreateUser("Matthias Caesar", _

"abc123DEF456", "Kennwort1")

.Users.Append usrNew

' Neue Gruppen erstellen und anfügen.

Set grpNew = .CreateGroup("Buchhaltung", _

"UVW987xyz654")

.Groups.Append grpNew

' Der Benutzer Matthias Caesar wird zum Mitglied

' der Gruppe Buchhaltung gemacht, indem ein

' entsprechendes Group-Objekt erstellt und der

' Groups-Auflistung der Benutzer angefügt wird.

' Wenn ein User-Objekt erstellt wird, das Matthias

' Caesar darstellt, und dieses der Users-

' Auflistung der Gruppe Buchhaltung angefügt wird, ist das Ergebnis dasselbe.

Set grpMember = usrNew.CreateGroup("Buchhaltung")

usrNew.Groups.Append grpMember

Debug.Print "Users-Auflistung:"

' Durchlaufen aller User-Objekte im Standard-

' Arbeitsbereich der Users-Auflistung.

For Each usrLoop In .Users

Debug.Print "    " & usrLoop.Name

Debug.Print "        Gehört zu diesen Gruppen:"

' Alle Group-Objekte in jeder Groups-

' Auflistung von User-Objekten durchlaufen.

If usrLoop.Groups.Count <> 0 Then

For Each grpLoop In usrLoop.Groups

Debug.Print "            " & _

grpLoop.Name

Next grpLoop

Else

Debug.Print "            [Keine]"

End If

Next usrLoop

Debug.Print "Groups-Auflistung:"

' Alle Group-Objekte im Standardarbeitsbereich

' Groups-Auflistung durchlaufen.

For Each grpLoop In .Groups

Debug.Print "    " & grpLoop.Name

Debug.Print "        Enthält die Mitglieder:"

' Alle User-Objekte in jeder Group-Objekte

' zugehörigen Users-Auflistung durchlaufen.

If grpLoop.Users.Count <> 0 Then

For Each usrLoop In grpLoop.Users

Debug.Print "            " & _

usrLoop.Name

Next usrLoop

Else

Debug.Print "            [Keine]"

End If

Next grpLoop

' Neue User- und Group-Objekte löschen, da

' dies ein Beispiel ist.

.Users.Delete "Matthias Caesar"

.Groups.Delete "Buchhaltung"

End With

End Sub


Index-Objekt, Indexes-Auflistung (Beispiel)

Dieses Beispiel erstellt ein neues Index-Objekt, fügt es der Indexes-Auflistung des TableDef-Objekts der Tabelle "Personal" an und durchläuft dann die Indexes-Auflistung des TableDef-Objekts. Schließlich durchläuft es ein Recordset-Objekt, indem es zuerst das primäre Index-Objekt und dann das neue Index-Objekt verwendet. Die Prozedur IndexOutput wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub IndexObjectX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim idxNew As Index

Dim idxLoop As Index

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfEmployees = dbsNorthwind!Personal

With tdfEmployees

' Neuen Index erstellen und Field-Objekte

' ihrer Fields-Auflistung anfügen.

Set idxNew = .CreateIndex("NeuerIndex")

With idxNew

.Fields.Append .CreateField("Land")

.Fields.Append .CreateField("Nachname")

.Fields.Append .CreateField("Vorname")

End With

' Neues Index-Objekt der Indexes-Auflistung der

' Personal-Tabellenauflistung hinzufügen.

.Indexes.Append idxNew

.Indexes.Refresh

Debug.Print .Indexes.Count & " Indizes in " & _

.Name & " TableDef"

' Durchlaufen der Indexes-Auflistung der Tabelle

' Personal.

For Each idxLoop In .Indexes

Debug.Print "    " & idxLoop.Name

Next idxLoop

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

' Bericht unter Verwendung der alten und neuen

' Indizes ausgeben.

IndexOutput rstEmployees, "PrimaryKey"

IndexOutput rstEmployees, idxNew.Name

rstEmployees.Close

' Neuen Index löschen, da dies ein Beispiel ist.

.Indexes.Delete idxNew.Name

End With

dbsNorthwind.Close

End Sub

Sub IndexOutput(rstTemp As Recordset, _

strIndex As String)

' Report-Funktion für FieldX.

With rstTemp

' Set the index.

.Index = strIndex

.MoveFirst

Debug.Print "Recordset = " & .Name & _

", Index = " & .Index

Debug.Print "    [Personal-Nr] - Land - Name"

' Datensatzgruppe unter Verwendung des

' angegebenen Index durchlaufen.

Do While Not .EOF

Debug.Print "    " & ![Personal-Nr] & " - " & _

!Land & " - " & !Nachname & ", " & !Vorname

.MoveNext

Loop

End With

End Sub


Parameter-Objekt, Parameters-Auflistung (Beispiel)

Dieses Beispiel zeigt die Parameter-Objekte und die Parameters-Auflistung, indem ein temporäres QueryDef-Objekt erstellt wird und Daten abgerufen werden, die auf Änderungen basieren, die am Parameter-Objekt des QueryDef-Objekts gemacht wurden. Die Funktion ParametersChange wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub ParameterX()

Dim dbsNorthwind As Database

Dim qdfReport As QueryDef

Dim prmBegin As Parameter

Dim prmEnd As Parameter

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Temporäres QueryDef-Objekt mit zwei Parametern

' erstellen.

Set qdfReport = dbsNorthwind.CreateQueryDef("", _

"PARAMETERS dteBegin DateTime, dteEnd DateTime; " & _

"SELECT [Personal-Nr], COUNT([Bestell-Nr]) AS AnzahlBestellungen " & _

"FROM Bestellungen WHERE Lieferdatum BETWEEN " & _

"[dteBegin] AND [dteEnd] GROUP BY [Personal-Nr] " & _

"ORDER BY [Personal-Nr]")

Set prmBegin = qdfReport.Parameters!dteBegin

Set prmEnd = qdfReport.Parameters!dteEnd

' Bericht unter Verwendung der angegebenen

' Parameterwerte ausgeben.

ParametersChange qdfReport, prmBegin, #1/1/95#, _

prmEnd, #6/30/95#

ParametersChange qdfReport, prmBegin, #7/1/95#, _

prmEnd, #12/31/95#

dbsNorthwind.Close

End Sub

Sub ParametersChange(qdfTemp As QueryDef, _

prmFirst As Parameter, dteFirst As Date, _

prmLast As Parameter, dteLast As Date)

' Report function for ParameterX.

Dim rstTemp As Recordset

Dim fldLoop As Field

' Parameterwerte festlegen und Datensatzgruppe aus

' temporärem QueryDef-Objekt öffnen.

prmFirst = dteFirst

prmLast = dteLast

Set rstTemp = _

qdfTemp.OpenRecordset(dbOpenForwardOnly)

Debug.Print "Zeitraum " & dteFirst & " bis " & dteLast

' Datensatzgruppe durchlaufen.

Do While Not rstTemp.EOF

' Durchlaufen der Fields-Auflistung der Datensatzgruppe.

For Each fldLoop In rstTemp.Fields

Debug.Print " - " & fldLoop.Name & " = " & fldLoop;

Next fldLoop

Debug.Print

rstTemp.MoveNext

Loop

rstTemp.Close

End Sub


Property-Objekt, Properties-Auflistung (Beispiel)

Dieses Beispiel erstellt eine benutzerdefinierte Eigenschaft für die aktuelle Datenbank, legt deren Type- und Value-Eigenschaften fest und fügt sie der Properties-Auflistung der Datenbank an. Dann durchläuft das Beispiel alle Eigenschaften der Datenbank. In den Beschreibungen der Eigenschaften, die in der Zusammenfassung für Property aufgeführt sind, finden Sie weitere Beispiele.

Sub PropertyX()

Dim dbsNorthwind As Database

Dim prpNew As Property

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Benutzerdefinierte Eigenschaft erstellen und anfügen.

Set prpNew = .CreateProperty()

prpNew.Name = "Benutzerdefiniert"

prpNew.Type = dbText

prpNew.Value = "Benutzerdefinierte Eigenschaft."

.Properties.Append prpNew

' Alle Eigenschaften der aktuellen Datenbank durchlaufen.

Debug.Print "Eigenschaften von " & .Name

For Each prpLoop In .Properties

With prpLoop

Debug.Print "    " & .Name

Debug.Print "        Type: " & .Type

Debug.Print "        Value: " & .Value

Debug.Print "        Inherited: " & _

.Inherited

End With

Next prpLoop

' Neue Eigenschaft löschen, da dies ein Beispiel

' ist.

.Properties.Delete "Benutzerdefiniert"

End With

End Sub


QueryDef-Objekt, QueryDefs-Auflistung (Beispiel)

Dieses Beispiel erstellt ein neues QueryDef-Objekt und fügt es der QueryDefs-Auflistung des Nordwind Database-Objekts an. Dann durchläuft es die QueryDefs-Auflistung und die Properties-Auflistung des neuen QueryDef-Objekts.

Sub QueryDefX()

Dim dbsNorthwind As Database

Dim qdfNew As QueryDef

Dim qdfLoop As QueryDef

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Neues QueryDef-Objekt erstellen. Da es einen

' Namen hat , wird es automatisch der

' QueryDefs-Auflistung angefügt.

Set qdfNew = dbsNorthwind.CreateQueryDef("NeuesQueryDef", _

"SELECT * FROM Kategorien")

With dbsNorthwind

Debug.Print .QueryDefs.Count & _

" QueryDefs in " & .Name

' Durchlaufen der QueryDefs-Auflistung.

For Each qdfLoop In .QueryDefs

Debug.Print "    " & qdfLoop.Name

Next qdfLoop

With qdfNew

Debug.Print "Eigenschaften von " & .Name

' Durchlaufen der Properties-Auflistung des

' neuen QueryDef-Objekts.

For Each prpLoop In .Properties

On Error Resume Next

Debug.Print "    " & prpLoop.Name & " - " & _

IIf(prpLoop = "", "[leer]", prpLoop)

On Error Goto 0

Next prpLoop

End With

' Neues QueryDef-Objekt löschen, da dies ein

' Beispiel ist.

.QueryDefs.Delete qdfNew.Name

.Close

End With

End Sub


Recordset-Objekt, Recordsets-Auflistung (Beispiel)

Dieses Beispiel zeigt Recordset-Objekte und die Recordsets-Auflistung, indem vier verschiedene Typen von Recordsets geöffnet werden und die Recordsets-Auflistung des aktuellen Database-Objekts sowie die Properties-Auflistung jedes Recordset-Objekts durchlaufen wird.

Sub RecordsetX()

Dim dbsNorthwind As Database

Dim rstTable As Recordset

Dim rstDynaset As Recordset

Dim rstSnapshot As Recordset

Dim rstForwardOnly As Recordset

Dim rstLoop As Recordset

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Jeweils eines von jedem Typ der

' Recordset-Objekte öffnen.

Set rstTable = .OpenRecordset("Kategorien", _

dbOpenTable)

Set rstDynaset = .OpenRecordset("Personal", _

dbOpenDynaset)

Set rstSnapshot = .OpenRecordset("Versandfirmen", _

dbOpenSnapshot)

Set rstForwardOnly = .OpenRecordset _

("Personal", dbOpenForwardOnly)

Debug.Print "Recordsets in Recordsets-" & _

"Auflistung in dbsNorthwind"

' Durchlaufen der Recordsets-Auflistung.

For Each rstLoop In .Recordsets

With rstLoop

Debug.Print "    " & .Name

' Durchlaufen der Properties-Auflistung

' von jedem Recordset-Objekt. Nach

' Eigenschaften suchen, deren Werte in

' diesem Zusammenhang ungültig sind.

For Each prpLoop In .Properties

On Error Resume Next

If prpLoop <> "" Then Debug.Print _

"        " & prpLoop.Name & _

" = " & prpLoop

On Error GoTo 0

Next prpLoop

End With

Next rstLoop

rstTable.Close

rstDynaset.Close

rstSnapshot.Close

rstForwardOnly.Close

.Close

End With

End Sub


Relation-Objekt, Relations-Auflistung (Beispiel)

Dieses Beispiel zeigt wie ein vorhandenes Relation-Objekt Dateneingaben steuern kann. Die Prozedur versucht, einen Datensatz mit einer absichtlich falschen Kategorien-Nr hinzuzufügen, wodurch eine Fehlerbehandlungsroutine ausgelöst wird.

Sub RelationX()

Dim dbsNorthwind As Database

Dim rstProducts As Recordset

Dim prpLoop As Property

Dim fldLoop As Field

Dim errLoop As Error

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstProducts = dbsNorthwind.OpenRecordset("Artikel")

' Bericht ausgeben, der die verschiedenen Teile der

' Beziehung angibt und wo die einzelnen Teile

' gespeichert werden.

With dbsNorthwind.Relations!KategorienArtikel

Debug.Print "Eigenschaften von " & .Name & " Beziehung"

Debug.Print "    Table = " & .Table

Debug.Print "    ForeignTable = " & .ForeignTable

Debug.Print "Felder der " & .Name & "-Beziehung"

With .Fields![Kategorie-Nr]

Debug.Print "    " & .Name

Debug.Print "        Name = " & .Name

Debug.Print "        ForeignName = " & .ForeignName

End With

End With

' Versuchen, einen Datensatz hinzuzufügen, der

' gegen die Beziehungsregeln verstößt.

With rstProducts

.AddNew

!Artikelname = "Trygve's Lutefisk"

![Kategorie-Nr] = 10

On Error GoTo Err_Relation

.Update

On Error GoTo 0

.Close

End With

dbsNorthwind.Close

Exit Sub

Err_Relation:

' Benutzer informieren, wenn aufgrund von

' unzulässigen Daten Fehler auftreten.

If DBEngine.Errors.Count > 0 Then

For Each errLoop In DBEngine.Errors

MsgBox "Fehlernummer: " & errLoop.Number & _

vbCr & errLoop.Description

Next errLoop

End If

Resume Next

End Sub


Recordset vom Typ Snapshot (Beispiel)

Dieses Beispiel öffnet ein Recordset-Objekt und zeigt dessen schreibgeschützte Merkmale.

Sub dbOpenSnapshotX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenSnapshot)

With rstEmployees

Debug.Print "Recordset vom Typ Snapshot: " & _

.Name

' Durchlaufen der Properties-Auflistung des

' Recordset-Objekts vom Typ Snapshot;

' Eigenschaften auffangen, deren Werte in diesem

' Zusammenhang ungültig sind.

For Each prpLoop In .Properties

On Error Resume Next

Debug.Print "    " & _

prpLoop.Name & " = " & prpLoop

On Error Goto 0

Next prpLoop

.Close

End With

dbsNorthwind.Close

End Sub


Recordset-Objekt vom Typ Tabelle (Beispiel)

Dieses Beispiel öffnet ein Recordset-Objekt vom Typ Tabelle, legt dessen Index-Eigenschaft fest und durchläuft dessen Datensätze.

Sub dbOpenTableX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' dbOpenTable ist die Voreinstellung.

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

With rstEmployees

Debug.Print "Recordset vom Typ Tabelle: " & .Name

' Vordefinierten Index verwenden.

.Index = "Nachname"

Debug.Print "    Index = " & .Index

' Durchlaufen der Datensätze.

Do While Not .EOF

Debug.Print "        " & !Nachname & ", " & _

!Vorname

.MoveNext

Loop

.Close

End With

dbsNorthwind.Close

End Sub


TableDef-Objekt, TableDefs-Auflistung (Beispiel)

Dieses Beispiel erstellt ein neues TableDef-Objekt und fügt es der TableDefs-Auflistung des Nordwind Database-Objekts an. Dann durchläuft es die TableDefs-Auflistung und die Properties-Auflistung des neuen TableDef-Objekts.

Sub TableDefX()

Dim dbsNorthwind As Database

Dim tdfNew As TableDef

Dim tdfLoop As TableDef

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Neues TableDef-Objekt erstellen, Field-Objekte der

' Fields-Auflistung anfügen und das TableDef-Objekt

' der TableDefs-Auflistung von jedem

' Database-Objekts hinzufügen.

Set tdfNew = dbsNorthwind.CreateTableDef("NeuesTableDef")

tdfNew.Fields.Append tdfNew.CreateField("Datum", dbDate)

dbsNorthwind.TableDefs.Append tdfNew

With dbsNorthwind

Debug.Print .TableDefs.Count & _

" TableDefs in " & .Name

' Durchlaufen der TableDefs-Auflistung.

For Each tdfLoop In .TableDefs

Debug.Print "    " & tdfLoop.Name

Next tdfLoop

With tdfNew

Debug.Print "Eigenschaften von " & .Name

' Durchlaufen der Properties-Auflistung jedes

' neuen TableDef-Objekts; nur die

' Eigenschaften mit nicht-leeren Werten

' ausgeben.

For Each prpLoop In .Properties

Debug.Print "    " & prpLoop.Name & " - " & _

IIf(prpLoop = "", "[leer]", prpLoop)

Next prpLoop

End With

' Neues TableDef-Objekt löschen, da dies ein

' Beispiel ist.

.TableDefs.Delete tdfNew.Name

.Close

End With

End Sub


Connection-Objekt, Connections-Auflistung (Beispiel)

Dieses Beispiel zeigt das Connection-Objekt und die Connections-Auflistung, indem ein Microsoft Jet Database-Objekt und zwei ODBCDirect Connection-Objekte geöffnet werden und die Eigenschaften aufgelistet werden, die diesen Objekten zur Verfügung stehen.

Sub ConnectionObjectX()

Dim wrkJet as Workspace

Dim dbsNorthwind As Database

Dim wrkODBC As Workspace

Dim conPubs As Connection

Dim conPubs2 As Connection

Dim conLoop As Connection

Dim prpLoop As Property

' Microsoft Jet Database-Objekt öffnen.

Set wrkJet = CreateWorkspace("NewJetWorkspace", _

"Admin", "", dbUseJet)

Set dbsNorthwind = wrkJet.OpenDatabase("Nordwind.mdb")

' ODBCDirect Workspace-Objekt erstellen und

' Connection-Objekte öffnen.

Set wrkODBC = CreateWorkspace("NewODBCWorkspace", _

"Admin", "", dbUseODBC)

Set conPubs = wrkODBC.OpenConnection("Verb1", , , _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

Set conPubs2 = wrkODBC.OpenConnection("Verb2", , _

True, "ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

Debug.Print "Datenbankeigenschaften:"

With dbsNorthwind

' Properties-Auflistung des Database-Objekts

' durchlaufen.

For Each prpLoop In .Properties

On Error Resume Next

Debug.Print "    " & prpLoop.Name & " = " & _

prpLoop.Value

On Error GoTo 0

Next prpLoop

End With

' Connections-Auflistung durchlaufen.

For Each conLoop In wrkODBC.Connections

Debug.Print "Connection-Eigenschaften für " & _

conLoop.Name & ":"

With conLoop

' Eigenschaftswerte durch direktes Aufrufen

' jedes Property-Objekts ausgeben; das

' Connection-Objekt unterstützt keine

' Properties-Auflistung.

Debug.Print "    Connect = " & .Connect

' Property gibt ein Database-Objekt zurück.

Debug.Print "    Database[.Name] = " & _

.Database.Name

Debug.Print "    Name = " & .Name

Debug.Print "    QueryTimeout = " & .QueryTimeout

Debug.Print "    RecordsAffected = " & _

.RecordsAffected

Debug.Print "    StillExecuting = " & _

.StillExecuting

Debug.Print "    Transactions = " & .Transactions

Debug.Print "    Updatable = " & .Updatable

End With

Next conLoop

dbsNorthwind.Close

conPubs.Close

conPubs2.Close

wrkJet.Close

wrkODBC.Close

End Sub


Database-Objekt und Databases-Auflistung (Beispiel)

Dieses Beispiel öffnet ein neues Database-Objekt und ein vorhandenes Database-Objekt im standardmäßigem Workspace-Objekt. Dann werden die Databases-Auflistung und die Properties-Auflistung jedes Database-Objekts durchlaufen. Weitere Beispiele finden Sie in den Hilfethemen zu den Methoden und Eigenschaften, die unter Database-Objekt-Zusammenfassung aufgelistet werden.

Sub DatabaseObjectX()

Dim wrkJet As Workspace

Dim dbsNorthwind As Database

Dim dbsNew As Database

Dim dbsLoop As Database

Dim prpLoop As Property

Set wrkJet = CreateWorkspace("JetWorkspace", "Admin", _

"", dbUseJet)

' Sicherstellen, daß es nicht bereits eine Datei

' mit dem Namen der neuen Datenbank gibt.

If Dir("NeueDB.mdb") <> "" Then Kill "NeueDB.mdb"

' Neue Datenbank mit der angegebenen

' Sortierreihenfolge erstellen.

Set dbsNew = wrkJet.CreateDatabase("NeueDB.mdb", _

dbLangGeneral)

Set dbsNorthwind = wrkJet.OpenDatabase("Nordwind.mdb")

' Databases-Auflistung durchlaufen.

For Each dbsLoop In wrkJet.Databases

With dbsLoop

Debug.Print "Eigenschaften von " & .Name

' Properties-Auflistung jedes Database-

' Objekts durchlaufen.

For Each prpLoop In .Properties

If prpLoop.Name <> "" Then _

Debug.Print "    " & _

prpLoop.Name & " = " & prpLoop.Name

Next prpLoop

End With

Next dbsLoop

dbsNew.Close

dbsNorthwind.Close

wrkJet.Close

End Sub


Document-Objekt und Documents-Auflistung (Beispiel)

In diesem Beispiel wird erst die Documents-Auflistung des Tables-Containers und dann die Properties-Auflistung des ersten Document-Objektes in der Auflistung durchlaufen.

Sub DocumentX()

Dim dbsNorthwind As Database

Dim docLoop As Document

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind.Containers!Tables

Debug.Print "Dokumente in " & .Name & _

"-Container"

' Documents-Auflistung des Tables-

' Containers durchlaufen.

For Each docLoop In .Documents

Debug.Print "    " & docLoop.Name

Next docLoop

With .Documents(0)

' Properties-Auflistung des ersten Document-

' Objekts des Tables-Containers durchlaufen.

Debug.Print "Eigenschaft des " & .Name & _

"-Dokuments"

On Error Resume Next

For Each prpLoop In .Properties

Debug.Print "    " & prpLoop.Name & _

" = " & prpLoop

Next prpLoop

On Error GoTo 0

End With

End With

dbsNorthwind.Close

End Sub


Recordset-Objekt vom Typ Dynamisch (Beispiel)

In diesem Beispiel wird ein Recordset-Objekt vom Typ Dynamisch geöffnet, und dessen Datensätze werden durchlaufen.

Sub dbOpenDynamicX()

Dim wrkMain As Workspace

Dim conMain As Connection

Dim qdfTemp As QueryDef

Dim rstTemp As Recordset

Dim strSQL As String

Dim intLoop As Integer

' ODBC-Arbeitsbereich erstellen und Verbindung

' zur SQL Server-Datenbank öffnen.

Set wrkMain = CreateWorkspace("ODBCWorkspace", _

"Admin", "", dbUseODBC)

Set conMain = wrkMain.OpenConnection("Verleger", _

dbDriverNoPrompt, False, _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' Recordset-Objekt vom Typ Dynamisch öffnen.

Set rstTemp = _

conMain.OpenRecordset("Autoren", _

dbOpenDynamic)

With rstTemp

Debug.Print "Recordset-Objekt vom Typ Dynamisch: " & .Name

' Datensätze durchlaufen.

Do While Not .EOF

Debug.Print "        " & !A_nname & ", " & _

!A_vname

.MoveNext

Loop

.Close

End With

conMain.Close

wrkMain.Close

End Sub


Recordset-Objekt vom Typ Vorwärts (Beispiel)

Dieses Beispiel öffnet ein Recordset-Objekt vom Typ Vorwärts, zeigt dessen schreibgeschützte Eigenschaften und durchläuft mit der MoveNext-Methode schrittweise das Recordset-Objekt.

Sub dbOpenForwardOnlyX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim fldLoop As Field

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Recordset-Objekt vom Typ Vorwärts öffnen. Nur die

' Methoden MoveNext und Move dürfen zum Bewegen in

' der Datensatzgruppe verwendet werden.

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenForwardOnly)

With rstEmployees

Debug.Print "Recordset-Objekt vom Typ Vorwärts: " & _

.Name & ", Updatable = " & .Updatable

Debug.Print "    Field - DataUpdatable"

' Fields-Auflistung durchlaufen, Namen und

' DataUpdatable-Eigenschaften jedes Field-

' Objekts ausgeben.

For Each fldLoop In .Fields

Debug.Print "        " & _

fldLoop.Name & " - " & _

fldLoop.DataUpdatable

Next fldLoop

Debug.Print "    Daten"

' Datensatzgruppe durchlaufen.

Do While Not .EOF

Debug.Print "        " & !Vorname & " " & _

!Nachname

.MoveNext

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Workspace-Objekt, Workspaces-Auflistung (Beispiel)

Dieses Beispiel erstellt ein neues Microsoft Jet Workspace-Objekt sowie ein neues ODBCDirect Workspace-Objekt und fügt die Objekte danach der Workspaces-Auflistung an. Dann werden die Workspaces-Auflistung und die Properties-Auflistung jedes Workspace-Objekts durchlaufen. Weitere Beispiele finden Sie in den Hilfethemen zu den Methoden und Eigenschaften des Workspace-Objekts oder der Workspaces-Auflistung.

Sub WorkspaceX()

Dim wrkNewJet As Workspace

Dim wrkNewODBC As Workspace

Dim wrkLoop As Workspace

Dim prpLoop As Property

' Neuen Microsoft Jet-Arbeitsbereich erstellen.

Set wrkNewJet = CreateWorkspace("NewJetWorkspace", _

"Admin", "", dbUseJet)

Workspaces.Append wrkNewJet

' Neuen ODBCDirect-Arbeitsbereich erstellen.

Set wrkNewODBC = CreateWorkspace("NewODBCWorkspace", _

"Admin", "", dbUseODBC)

Workspaces.Append wrkNewODBC

' Workspaces-Auflistung durchlaufen.

For Each wrkLoop In Workspaces

With wrkLoop

Debug.Print "Eigenschaften von " & .Name

' Properties-Auflistung des neuen

' Workspace-Objekts durchlaufen.

For Each prpLoop In .Properties

On Error Resume Next

If prpLoop.Name <> "" Then Debug.Print "    " & _

prpLoop.Name & " = " & prpLoop.Name

On Error GoTo 0

Next prpLoop

End With

Next wrkLoop

wrkNewJet.Close

wrkNewODBC.Close

End Sub


AddNew-Methode (Beispiel)

Dieses Beispiel erstellt mit der AddNew-Methode einen neuen Datensatz mit dem angegebenen Namen. Die Funktion AddName wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub AddNewX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim strFirstName As String

Dim strLastName As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", dbOpenDynaset)

' Benutzer zur Dateneingabe auffordern.

strFirstName = Trim(InputBox( _

"Vorname eingeben:"))

strLastName = Trim(InputBox( _

"Nachname eingeben:"))

' Nur fortfahren, wenn der Benutzer einen

' Vornamen und einen Nachnamen eingegeben hat.

If strFirstName <> "" and strLastName <> "" Then

' Funktion aufrufen, die den Datensatz hinzufügt.

AddName rstEmployees, strFirstName, strLastName

' Die neu hinzugefügten Daten anzeigen.

With rstEmployee

Debug.Print "Neuer Datensatz: " & !Vorname & _

" " & !Nachname

' Neuen Datensatz löschen, da dies ein

' Beispiel ist.

.Delete

End With

Else

Debug.Print _

"Es muß eine Zeichenfolge für Vor- " & _

"und Nachname eingeben werden!"

End If

rstEmployees.Close

dbsNorthwind.Close

End Sub

Function AddName(rstTemp As Recordset, _

strFirst As String, strLast As String)

' Fügt einem Recordset-Objekt einen neuen Datensatz

' hinzu, wobei die übergebenen Daten der aufrufenden

' Funktion verwendet werden. Der neue Datensatz

' wird dann zum aktuellen Datensatz.

With rstTemp

.AddNew

!Vorname = strFirst

!Nachname = strLast

.Update

.Bookmark = .LastModified

End With

End Function


Append- und Delete-Methoden (Beispiel)

Dieses Beispiel verwendet entweder die Append-Methode oder die Delete-Methode um die Fields-Auflistung eines TableDef-Objekts zu verändern. Die Prozedur AppendDeleteField wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub AppendX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim fldLoop As Field

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfEmployees = dbsNorthwind.TableDefs!Personal

' Drei neue Felder hinzufügen.

AppendDeleteField tdfEmployees, "APPEND", _

"E-Mail", dbText, 50

AppendDeleteField tdfEmployees, "APPEND", _

"Http", dbText, 80

AppendDeleteField tdfEmployees, "APPEND", _

"Kontingent", dbInteger, 5

Debug.Print "Felder nach dem Anfügen "

Debug.Print , "Typ", "Größe", "Name"

' Fields-Auflistung durchlaufen, um die neuen

' Felder auszugeben.

For Each fldLoop In tdfEmployees.Fields

Debug.Print , fldLoop.Type, fldLoop.Size, fldLoop.Name

Next fldLoop

' Neu hinzugefügte Felder löschen.

AppendDeleteField tdfEmployees, "DELETE", "E-Mail"

AppendDeleteField tdfEmployees, "DELETE", "Http"

AppendDeleteField tdfEmployees, "DELETE", "Kontingent"

Debug.Print "Felder nach dem Löschvorgang"

Debug.Print , "Typ", "Größe", "Name"

' Fields-Auflistung durchlaufen, um zu zeigen,

' daß die neuen Felder gelöscht wurden.

For Each fldLoop In tdfEmployees.Fields

Debug.Print , fldLoop.Type, fldLoop.Size, fldLoop.Name

Next fldLoop

dbsNorthwind.Close

End Sub

Sub AppendDeleteField(tdfTemp As TableDef, _

strCommand As String, strName As String, _

Optional varType, Optional varSize)

With tdfTemp

' Erst überprüfen, ob das TableDef-Objekt

' aktualisierbar ist. Wenn dies nicht der Fall ist

' wird die Steuerung an die aufrufende Prozedur zurückgegeben.

If .Updatable = False Then

MsgBox "TableDef-Objekt nicht aktualisierbar! " & _

"Vorgang konnte nicht durchgeführt werden."

Exit Sub

End If

' Abhängig von den übergebenen Daten ein Feld

' der Fields-Auflistung des angegebenen

' TableDef-Objekts anfügen oder daraus löschen.

If strCommand = "APPEND" Then

.Fields.Append .CreateField(strName, _

varType, varSize)

Else

If strCommand = "DELETE" Then .Fields.Delete _

strName

End If

End With

End Sub


AppendChunk- und GetChunk-Methoden (Beispiel)

Dieses Beispiel verwendet die Methoden AppendChunk und GetChunk, um ein OLE-Objektfeld mit Daten aus einem anderen Datensatz aufzufüllen, wobei jeder Block 32 KB groß ist. In einer wirklichen Anwendung kann die Prozedur z.B. dazu verwendet werden, den Datensatz eines Angestellten (einschließlich dessen Foto) aus einer Tabelle in eine andere zu kopieren. In diesem Beispiel wird der Datensatz einfach in dieselbe Tabelle zurückkopiert. Beachten Sie, daß alle Abschnitte in einer einzigen AddNew-Update-Sequenz bearbeitet werden.

Sub AppendChunkX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim rstEmployees2 As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Zwei Datensätze der Tabelle Personal öffnen.

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenDynaset)

Set rstEmployees2 = rstEmployees.Clone

' Einen neuen Datensatz dem ersten Recordset-Objekt hinzufügen,

' und die Daten eines Datensatzes in das zweite Recordset-Objekt kopieren.

With rstEmployees

.AddNew

!Vorname = rstEmployees2!Vorname

!Nachname = rstEmployees2!Nachname

CopyLargeField rstEmployees2!Foto, !Foto

.Update

' Neuen Datensatz löschen, da dies ein Beispiel ist.

.Bookmark = .LastModified

.Delete

.Close

End With

rstEmployees2.Close

dbsNorthwind.Close

End Sub

Function CopyLargeField(fldSource As Field, _

fldDestination As Field)

' Größe des Abschnitts in Bytes festlegen.

Const conChunkSize = 32768

Dim lngOffset As Long

Dim lngTotalSize As Long

Dim strChunk As String

' Foto aus einem Recordset-Objekt in das andere kopieren,

' immer 32 KB große Blöcke, bis das ganze Feld

' kopiert ist.

lngTotalSize = fldSource.FieldSize

Do While lngOffset < lngTotalSize

strChunk = fldSource.GetChunk(lngOffset, conChunkSize)

fldDestination.AppendChunk strChunk

lngOffset = lngOffset + conChunkSize

Loop

End Function


BeginTrans-, CommitTrans-, Rollback-Methoden (Beispiel)

Dieses Beispiel ändert die Position aller Verkaufsrepräsentanten in der Tabelle "Personal" der Datenbank. Nachdem die BeginTrans-Methode ein Transaktion startet, die alle an der Tabelle "Personal" vorgenommenen Änderungen isoliert, speichert die CommitTrans-Methode die Änderungen. Mit der Rollback-Methode können Sie Änderungen rückgängig machen, die Sie bereits mit der Update-Methode gespeichert hatten. Außerdem ist die Haupttransaktion mit einer anderen Transaktion verschachtelt, die alle Änderungen, die Benutzer in diesem Beispiel machen, zurücksetzt.

Mindestens eine Tabelle bleibt gesperrt, während der Benutzer entscheidet, ob die Änderungen übernommen werden oder nicht. Diese Vorgehensweise wird daher nicht empfohlen, sondern nur als Beispiel vorgestellt.

Sub BeginTransX()

Dim strName As String

Dim strMessage As String

Dim wrkDefault As Workspace

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

' Standard-Arbeitsbereich bestimmen.

Set wrkDefault = DBEngine.Workspaces(0)

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

' Umschließende Transaktion starten.

wrkDefault.BeginTrans

' Haupttransaktion starten.

wrkDefault.BeginTrans

With rstEmployees

' Alle Datensatzgruppen durchlaufen und Benutzer

' fragen, ob sie die Position eines Angestellten

' ändern wollen.

Do Until .EOF

If !Position = "Verkaufsrepräsentant" Then

strName = !Nachname & ", " & !Vorname

strMessage = "Angestellter: " & strName & vbCr & _

"Position in Vertriebsmitarbeiter ändern?"

' Position des angegebenen Angestellten ändern.

If MsgBox(strMessage, vbYesNo) = vbYes Then

.Edit

!Position = "Vertriebsmitarbeiter"

.Update

End If

End If

.MoveNext

Loop

' Benutzer fragen, ob alle oben durchgeführten

' Änderungen übernommen werden sollen.

If MsgBox("Alle Änderungen übernehmen?", _

vbYesNo) = vbYes Then

wrkDefault.CommitTrans

Else

wrkDefault.Rollback

End If

' Aktuelle Daten in Datensatzgruppe ausgeben.

.MoveFirst

Do While Not .EOF

Debug.Print !Nachname & ", " & !Vorname & _

" - " & !Position

.MoveNext

Loop

' Alle vom Benutzer durchgeführten Änderungen

' zurücksetzen, da dies ein Beispiel ist.

wrkDefault.Rollback

.Close

End With

dbsNorthwind.Close

End Sub


Clone-Methode (Beispiel)

Dieses Beispiel erstellt mit der Clone-Methode Kopien eines Recordset-Objekts. Der Benutzer kann dann den Datensatzzeiger jeder Kopie frei festlegen.

Sub CloneX()

Dim dbsNorthwind As Database

Dim arstProducts(1 To 3) As Recordset

Dim intLoop As Integer

Dim strMessage As String

Dim strFind As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Wenn die folgende SQL-Anweisung häufig verwendet

' wird, soll ein ständiges QueryDef-Objekt erstellt

' werden, um das Leistungsverhalten zu verbessern.

Set arstProducts(1) = dbsNorthwind.OpenRecordset( _

"SELECT Artikelname FROM Artikel " & _

"ORDER BY Artikelname", dbOpenSnapshot)

' Zwei Kopien des ursprünglichen Recordset-Objekts

' erstellen.

Set arstProducts(2) = arstProducts(1).Clone

Set arstProducts(3) = arstProducts(1).Clone

Do While True

' Jedes Feld durchgehen, damit der Benutzer bei

' jedem Durchlauf eine andere Kopie desselben

' Recordset-Objekts sucht.

For intLoop = 1 To 3

' Die Suchzeichenfolge abrufen, während

' gezeigt wird, wo der aktuelle

' Datensatzzeiger des jeweiligen Recordset-

' Objekts sich befindet.

strMessage = _

"Recordset-Objekte aus der Tabelle Artikel:" & _

vbCr & _

"  1 - Original - Datensatzzeiger auf " & _

arstProducts(1)!Artikelname & vbCr & _

"  2 - Kopie - Datensatzzeiger auf " & _

arstProducts(2)!Artikelname & vbCr & _

"  3 - Kopie - Datensatzzeiger auf " & _

arstProducts(3)!Artikelname & vbCr & _

"Suchzeichenfolge eingeben: #" & intLoop & ":"

strFind = Trim(InputBox(strMessage))

If strFind = "" Then Exit Do

' Suchzeichenfolge suchen; wenn keine

' Entsprechung gefunden wird,

' zum letzten Datensatz springen.

With arstProducts(intLoop)

.FindFirst "Artikelname >= '" & strFind & "'"

If .NoMatch Then .MoveLast

End With

Next intLoop

Loop

arstProducts(1).Close

arstProducts(2).Close

arstProducts(3).Close

dbsNorthwind.Close

End Sub


Close-Methode (Beispiel)

Dieses Beispiel wendet die Close-Methode auf die beiden Objekte Recordset und Database an, die beide geöffnet wurden. Es zeigt außerdem, daß das Schließen eines Recordset-Objekts dazuführt, daß nicht gespeicherte Änderungen verlorengehen.

Sub CloseX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

' Änderungen an einem Datensatz ausführen, aber

' die Datensatzgruppe schließen, bevor die

' Änderungen gespeichert werden.

With rstEmployees

Debug.Print "Originaldaten"

Debug.Print "    Name - Durchwahl"

Debug.Print "    " & !Vorname & " " & _

!Nachname & " - " & [!Durchwahl Büro]

.Edit

[!Durchwahl Büro] = "9999"

.Close

End With

' Recordset-Objekt erneut öffnen, um zu zeigen, daß

' die Daten nicht geändert wurden.

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

With rstEmployees

Debug.Print "Daten nach dem Schließen"

Debug.Print "    Name - Durchwahl"

Debug.Print "    " & !Vorname & " " & _

!Nachname & " - " & [!Durchwahl Büro]

.Close

End With

dbsNorthwind.Close

End Sub


CompactDatabase-Methode (Beispiel)

Dieses Beispiel ändert mit der CompactDatabase-Methode die Sortierreihenfolge der Datenbank. Dieser Code kann nicht in einem Modul der Nordwind.mdb verwendet werden.

Sub CompactDatabaseX()

Dim dbsNorthwind As Database

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Eigenschaften der ursprünglichen Datenbank zeigen.

With dbsNorthwind

Debug.Print .Name & ", Version " & .Version

Debug.Print "    CollatingOrder = " & .CollatingOrder

.Close

End With

' Sicherstellen, daß nicht schon eine Datei

' mit dem Namen der komprimierten Datenbank

' existiert.

If Dir("NwindKorean.mdb") <> "" Then _

Kill "NwindKorean.mdb"

' Diese Anweisung erstellt eine komprimierte

' Version der Nordwind-Datenbank, die die

' Sortierreihenfolge der koreanischen Sprache

' verwendet.

DBEngine.CompactDatabase "Nordwind.mdb", _

"NwindKorean.mdb", dbLangKorean

Set dbsNorthwind = OpenDatabase("NwindKorean.mdb")

' Eigenschaften der komprimierten Datenbank

' ausgeben.

With dbsNorthwind

Debug.Print .Name & ", Version " & .Version

Debug.Print "    Sortierreihenfolge = " & .CollatingOrder

.Close

End With

End Sub

Dieses Beispiel ändert mit der CompactDatabase-Methode die Version der Datenbank. Zum Ausführen des Codes benötigen Sie die Nwind11.mdb-Datenbank aus Microsoft Jet, Version 1.1; dieser Code kann nicht in einem Modul der Nwind11.mdb verwendet werden.

Sub CompactDatabaseX2()

Dim dbsNorthwind As Database

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nwind11.mdb")

' Eigenschaften der ursprünglichen Datenbank

' ausgeben.

With dbsNorthwind

Debug.Print .Name & ", Version " & .Version

Debug.Print "    CollatingOrder = " & .CollatingOrder

.Close

End With

' Stellen Sie sicher, daß nicht bereits eine Datei

' mit dem Namen der komprimierten Datenbank

' existiert.

If Dir("Nwind20.mdb") <> "" Then _

Kill "Nwind20.mdb"

' Diese Anweisung erstellt die komprimierte und

' verschlüsselte Datenbank für Microsoft Jet,

' Version 2.0, aus der Datenbank für Microsoft Jet,

' Version 1.1.

DBEngine.CompactDatabase "Nwind11.mdb", _

"Nwind20.mdb", , dbEncrypt + dbVersion20

Set dbsNorthwind = OpenDatabase("Nwind20.mdb")

' Eigenschaft der komprimierten Datenbank ausgeben.

With dbsNorthwind

Debug.Print .Name & ", Version " & .Version

For Each prpLoop In .Properties

On Error Resume Next

If prpLoop.Name <> "" Then Debug.Print "    " & _

prpLoop.Name & " = " & prpLoop.Name

On Error GoTo 0

Next prpLoop

.Close

End With

End Sub


CreateDatabase-Methode (Beispiel)

Dieses Beispiel erstellt mit der CreateDatabase-Methode ein neues, verschlüsseltes Database-Objekt.

Sub CreateDatabaseX()

Dim wrkDefault As Workspace

Dim dbsNew As DATABASE

Dim prpLoop As Property

' Standardarbeitsbereich bestimmen.

Set wrkDefault = DBEngine.Workspaces(0)

' Stellen Sie sicher, daß nicht bereits eine Datei

' mit dem Namen der neuen Datenbank existiert.

If Dir("NeueDB.mdb") <> "" Then Kill "NeueDB.mdb"

' Eine neue verschlüsselte Datenbank mit der

' angegebenen Sortierreihenfolge erstellen.

Set dbsNew = wrkDefault.CreateDatabase("NeueDB.mdb", _

dbLangGeneral, dbEncrypt)

With dbsNew

Debug.Print "Eigenschaften von" & .Name

' Properties-Auflistung des neuen Database-

' Objekts durchlaufen.

For Each prpLoop In .Properties

If prpLoop <> "" Then Debug.Print "    " & _

prpLoop.Name & " = " & prpLoop

Next prpLoop

End With

dbsNew.Close

End Sub


CreateField-Methode (Beispiel)

Dieses Beispiel erstellt mit der CreateField-Methode drei neue Field-Objekte für ein neues TableDef-Objekt. Dann zeigt es die Eigenschaften der Field-Objekte an, die automatisch von der CreateField-Methode festgelegt werden. (Eigenschaften, deren Werte zum Zeitpunkt der Erstellung von Field leer sind, werden nicht gezeigt.)

Sub CreateFieldX()

Dim dbsNorthwind As Database

Dim tdfNew As TableDef

Dim fldLoop As Field

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfNew = dbsNorthwind.CreateTableDef("NeuTableDef")

' Neue Field-Objekte erstellen und dem neuen

' TableDef-Objekt anfügen.

With tdfNew

' Die CreateField-Methode legt eine Size-

' Eigenschaft für ein neues Field-Objekt fest,

' wenn keine angegeben wird.

.Fields.Append .CreateField("TextField", dbText)

.Fields.Append .CreateField("IntegerField", dbInteger)

.Fields.Append .CreateField("DateField", dbDate)

End With

dbsNorthwind.TableDefs.Append tdfNew

Debug.Print "Eigenschaften der neuen " & _

"Fields-Auflistung in " & tdfNew.Name

' Fields-Auflistung durchlaufen, um die

' Eigenschaften des neuen Field-Objekts auszugeben.

For Each fldLoop In tdfNew.Fields

Debug.Print "    " & fldLoop.Name

For Each prpLoop In fldLoop.Properties

' Eigenschaften, die in einem TableDef-Objekt

' nicht zulässig sind, lösen eine Fehler aus,

' wenn auf die Werte zugegriffen wird.

On Error Resume Next

Debug.Print "        " & prpLoop.Name & " - " & _

IIf(prpLoop = "", "[leer]", prpLoop)

On Error GoTo 0

Next prpLoop

Next fldLoop

' Neues TableDef-Objekt löschen, da dies

' ein Beispiel ist.

dbsNorthwind.TableDefs.Delete tdfNew.Name

dbsNorthwind.Close

End Sub


CreateIndex-Methode (Beispiel)

Dieses Beispiel erstellt mit der CreateIndex-Methode zwei neue Index-Objekte und fügt sie danach der Indexes-Auflistung des TableDef-Objekts der Tabelle "Personal" an. Dann wird die Indexes-Auflistung des TableDef-Objekts, die Fields-Auflistung des neuen Index-Objekts und die Properties-Auflistung des neuen Index-Objekts durchlaufen. Die Funktion CreateIndexOutput wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub CreateIndexX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim idxCountry As Index

Dim idxFirstName As Index

Dim idxLoop As Index

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfEmployees = dbsNorthwind!Personal

With tdfPersonal

' Erstes Index-Objekt erstellen, Field-Objekte

' erstellen und dem Index-Objekt anfügen und

' dann das Index-Objekt der Indexes-Auflistung

' des TableDef-Objekts anfügen.

Set idxCountry = .CreateIndex("LandIndex")

With idxCountry

.Fields.Append .CreateField("Land")

.Fields.Append .CreateField("Nachname")

.Fields.Append .CreateField("Vorname")

End With

.Indexes.Append idxCountry

' Zweites Index-Objekt erstellen, Field-Objekte

' erstellen und dem Index-Objekt anfügen und

' dann das Index-Objekt der Indexes-Auflistung

' des TableDef-Objekts anfügen.

Set idxFirstName = .CreateIndex

With idxFirstName

.Name = "VornameIndex"

.Fields.Append .CreateField("Vorname")

.Fields.Append .CreateField("Nachname")

End With

.Indexes.Append idxFirstName

' Auflistung aktualisieren, damit auf die neuen

' Indexes-Objekte zugegriffen werden kann.

.Indexes.Refresh

Debug.Print .Indexes.Count & " Indizes in " & _

.Name & " TableDef"

' Indexes-Auflistung durchlaufen.

For Each idxLoop In .Indexes

Debug.Print "    " & idxLoop.Name

Next idxLoop

' Bericht ausgeben.

CreateIndexOutput idxCountry

CreateIndexOutput idxFirstName

' Neue Index-Objekte löschen, da dies ein

' Beispiel ist.

.Indexes.Delete idxCountry.Name

.Indexes.Delete idxFirstName.Name

End With

dbsNorthwind.Close

End Sub

Function CreateIndexOutput(idxTemp As Index)

Dim fldLoop As Field

Dim prpLoop As Property

With idxTemp

' Fields-Auflistung des Index-Objekts

' durchlaufen.

Debug.Print "Fields in " & .Name

For Each fldLoop In .Fields

Debug.Print "    " & fldLoop.Name

Next fldLoop

' Properties-Auflistung des Index-Objekts

' durchlaufen.

Debug.Print "Properties von " & .Name

For Each prpLoop In .Properties

Debug.Print "    " & prpLoop.Name & " - " & _

IIf(prpLoop = "", "[leer]", prpLoop)

Next prpLoop

End With

End Function


CreateProperty-Methode (Beispiel)

Dieses Beispiel versucht, den Wert einer benutzerdefinierten Eigenschaft festzulegen. Wenn die Eigenschaft nicht existiert, wird mit der CreateProperty-Methode die neue Eigenschaft erstellt und ein Wert für sie festgelegt. Die Funktion SetProperty wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub CreatePropertyX()

Dim dbsNorthwind As Database

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Archive-Eigenschaft auf True festlegen.

SetProperty dbsNorthwind, "Archive", True

With dbsNorthwind

Debug.Print "Properties von " & .Name

' Properties-Auflistung der Nordwind-Datenbank

' durchlaufen.

For Each prpLoop In .Properties

If prpLoop.Name <> "" Then Debug.Print "    " & _

prpLoop.Name & " = " & prpLoop.Name

Next prpLoop

' Neue Eigenschaft löschen, da dies ein Beispiel

' ist.

.Properties.Delete "Archive"

.Close

End With

End Sub

Sub SetProperty(dbsTemp As Database, strName As String, _

booTemp As Boolean)

Dim prpNew As Property

Dim errLoop As Error

' Versuchen, die angegebene Eigenschaft festzulegen.

On Error GoTo Err_Property

dbsTemp.Properties("strName") = booTemp

On Error GoTo 0

Exit Sub

Err_Property:

' Fehler 3270 bedeutet, daß die Eigenschaft nicht

' gefunden wurde.

If DBEngine.Errors(0).Number = 3270 Then

' Eigenschaft erstellen, deren Wert festlegen

' und der Properties-Auflistung anfügen.

Set prpNew = dbsTemp.CreateProperty(strName, _

dbBoolean, booTemp)

dbsTemp.Properties.Append prpNew

Resume Next

Else

' Wenn ein anderer Fehler auftritt, Meldung

' ausgeben.

For Each errLoop In DBEngine.Errors

MsgBox "Fehlernummer: " & errLoop.Number & vbCr & _

errLoop.Description

Next errLoop

End

End If

End Sub


CreateQueryDef-Methode (Beispiel)

Dieses Beispiel erstellt mit der CreateQueryDef-Methode ein temporäres sowie ein beständiges QueryDef-Objekt und führt es aus. Die Funktion GetrstTemp wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub CreateQueryDefX()

Dim dbsNorthwind As Database

Dim qdfTemp As QueryDef

Dim qdfNew As QueryDef

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Temporäres QueryDef-Objekt erstellen.

Set qdfTemp = .CreateQueryDef("", _

"SELECT * FROM Personal")

' Recordset-Objekt öffnen und Bericht ausgeben.

GetrstTemp qdfTemp

' Beständiges QueryDef-Objekt.

Set qdfNew = .CreateQueryDef("NewQueryDef", _

"SELECT * FROM Kategorien")

' Recordset-Objekt öffnen und Bericht ausgeben.

GetrstTemp qdfNew

' Neues QueryDef-Objekt löschen, da dies ein

' Beispiel ist.

.QueryDefs.Delete qdfNew.Name

.Close

End With

End Sub

Function GetrstTemp(qdfTemp As QueryDef)

Dim rstTemp As Recordset

With qdfTemp

Debug.Print .Name

Debug.Print "    " & .SQL

' Recordset-Objekt aus QueryDef-Objekt öffnen.

Set rstTemp = .OpenRecordset(dbOpenSnapshot)

With rstTemp

' Recordset-Objekt auffüllen und Anzahl der Datensätze ausgeben.

.MoveLast

Debug.Print "    Anzahl der Datensätze = " & _

.RecordCount

Debug.Print

.Close

End With

End With

End Function


CreateRelation-Methode (Beispiel)

Dieses Beispiel erstellt mit der CreateRelation-Methode ein Relation-Objekt zwischen dem TableDef-Objekt Personal und einem neuen TableDef-Objekt mit dem Namen Abteilungen. Dieses Beispiel zeigt auch, wie durch Erstellen eines neuen Relation-Objekts ein notwendig gewordenes Index-Objekt in der Fremdtabelle erstellt wird (der Index AbteilungenPersonal in der Tabelle "Personal").

Sub CreateRelationX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim tdfNew As TableDef

Dim idxNew As Index

Dim relNew As Relation

Dim idxLoop As Index

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Neues Feld der Tabelle Personal hinzufügen.

Set tdfEmployees = .TableDefs!Personal

tdfEmployees.Fields.Append _

tdfEmployees.CreateField("Abt-Nr", dbInteger, 2)

' Neue Tabelle Abteilungen erstellen.

Set tdfNew = .CreateTableDef("Abteilungen")

With tdfNew

' Field-Objekte erstellen und der Fields-

' Auflistung des neuen TableDef-Objekts anfügen.

.Fields.Append .CreateField("Abt-Nr", dbInteger, 2)

.Fields.Append .CreateField("AbtName", dbText, 20)

' Index-Objekt für Tabelle Abteilungen erstellen.

Set idxNew = .CreateIndex("[Abt-NrIndex]")

' Field-Objekt erstellen und der Fields-

' Auflistung des neuen Index-Objekts anfügen.

idxNew.Fields.Append idxNew.CreateField("Abt-Nr")

' Der Index in der Primärtabelle muß die

' Unique-Eigenschaft haben ,um Teil eines

' Relation-Objekts zu sein.

idxNew.Unique = True

.Indexes.Append idxNew

End With

.TableDefs.Append tdfNew

' Relation-Objekt PersonalAbteilungen mit den

' Namen der beiden Tabellen in der Beziehung

' erstellen.

Set relNew = .CreateRelation("PersonalAbteilungen", _

tdfNew.Name, tdfEmployees.Name, _

dbRelationUpdateCascade)

' Field-Objekt für die Fields-Auflistung des

' neuen Relation-Objekts erstellen. Die

' Eigenschaften Name und ForeignName mit Hilfe der

' Felder, die für die Beziehung verwendet

' werden, festlegen.

relNew.Fields.Append relNew.CreateField("Abt-Nr")

relNew.Fields!DeptID.ForeignName = "[Abt-Nr]"

.Relations.Append relNew

' Bericht ausgeben

Debug.Print "Eigenschaften von " & _

relNew.Name & " Relation"

Debug.Print "    Table = " & relNew.Table

Debug.Print "    ForeignTable = " & _

relNew.ForeignTable

Debug.Print "Felder von " & relNew.Name _

& " Relation"

With relNew.Fields!DeptID

Debug.Print "    " & .Name

Debug.Print "        Name = " & .Name

Debug.Print "        ForeignName = " & .ForeignName

End With

Debug.Print "Indizes in " & tdfEmployees.Name _

& " TableDef"

For Each idxLoop In tdfEmployees.Indexes

Debug.Print "    " & idxLoop.Name & _

", Foreign = " & idxLoop.Foreign

Next idxLoop

' Neue Objekte löschen, da dies

' ein Beispiel ist.

.Relations.Delete relNew.Name

.TableDefs.Delete tdfNew.Name

tdfEmployees.Fields.Delete "[Abt-Nr]"

.Close

End With

End Sub


CreateTableDef-Methode (Beispiel)

Dieses Beispiel erstellt ein neues TableDef-Objekt in der Nordwind-Datenbank.

Sub CreateTableDefX()

Dim dbsNorthwind As Database

Dim tdfNew As TableDef

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Neues TableDef-Objekt erstellen.

Set tdfNew = dbsNorthwind.CreateTableDef("Kontakte")

With tdfNew

' Felder erstellen und dem neuen TableDef-Objekt

' anfügen. Dies muß erfolgen, bevor das

' TableDef-Objekt der TableDefs-Auflistung der

' Nordwind-Datenbank angefügt wird.

.Fields.Append .CreateField("Vorname", dbText)

.Fields.Append .CreateField("Nachname", dbText)

.Fields.Append .CreateField("Telefon", dbText)

.Fields.Append .CreateField("Bemerkungen", dbMemo)

Debug.Print "Eigenschaft des neuen TableDef-" & _

"Objekts vor dem Anfügen an die Auflistung :"

' Properties-Auflistung des neuen TableDef-

' Objekts durchlaufen.

For Each prpLoop In .Properties

On Error Resume Next

If prpLoop <> "" Then Debug.Print "    " & _

    prpLoop.Name & " = " & prpLoop

On Error GoTo 0

Next prpLoop

' Neues TableDef-Objekt der Nordwind-Datenbank

' anfügen.

dbsNorthwind.TableDefs.Append tdfNew

Debug.Print "Eigenschaft des neuen TableDef-" & _

"Objekts nach Anfügen der Auflistung :"

' Properties-Auflistung des neuen TableDef-

' Objekts durchlaufen.

For Each prpLoop In .Properties

On Error Resume Next

If prpLoop <> "" Then Debug.Print "    " & _

    prpLoop.Name & " = " & prpLoop

On Error GoTo 0

Next prpLoop

End With

' Neues TableDef-Objekt löschen, da dies ein

' Beispiel ist.

dbsNorthwind.TableDefs.Delete "Kontakte"

dbsNorthwind.Close

End Sub


Delete-Methode (Beispiel)

Dieses Beispiel löscht mit der Delete-Methode einen bestimmten Datensatz aus einem Recordset-Objekt. Die Prozedur DeleteRecord wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub DeleteX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim lngID As Long

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

' Temporären Datensatz zum Löschen hinzufügen.

With rstEmployees

.Index = "Primärschlüssel"

.AddNew

!Vorname = "Janelle"

!Nachname = "Tebbs"

.Update

.Bookmark = .LastModified

lngID = ![Personal-Nr]

End With

' Angestelltendatensatz mit der angegebenen

' Personal-Nr löschen.

DeleteRecord rstEmployees, lngID

rstEmployees.Close

dbsNorthwind.Close

End Sub

Sub DeleteRecord(rstTemp As Recordset, _

lngSeek As Long)

With rstTemp

.Seek "=", lngSeek

If .NoMatch Then

MsgBox "Kein Angestellter mit der Nummer " & _

lngSeek & " in Datei!"

Else

.Delete

MsgBox "Datensatz für den Angestellten " & _

"mit der Nummer " & lngSeek & " gelöscht!"

End If

End With

End Sub


Edit-Methode (Beispiel)

Dieses Beispiel ersetzt mit der Edit-Methode die aktuellen Daten des angegebenen Namens. Die Prozedur EditName wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub EditX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim strOldFirst As String

Dim strOldLast As String

Dim strFirstName As String

Dim strLastName As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenDynaset)

' Originaldaten speichern.

strOldFirst = rstEmployees!Vorname

strOldLast = rstEmployees!Nachname

' Neue Daten für Datensatz abrufen.

strFirstName = Trim(InputBox( _

"Vornamen eingeben:"))

strLastName = Trim(InputBox( _

"Nachnamen eingeben:"))

' Fortfahren, wenn der Benutzer in beiden Feldern

' Daten eingibt.

If strFirstName <> "" and strLastName <> "" Then

' Datensatz mit neuen Daten aktualisieren.

EditName rstEmployees, strFirstName, strLastName

With rstEmployees

' Alte und neue Daten ausgeben.

Debug.Print "Alte Daten: " & strOldFirst & _

" " & strOldLast

Debug.Print "Neue Daten: " & !Vorname & _

" " & !Nachname

' Originaldaten wiederherstellen, da dies ein

' Beispiel ist.

.Edit

!Vorname = strOldFirst

!Nachname = strOldLast

.Update

End With

Else

Debug.Print _

"Sie müssen eine Zeichenfolge für Vor- " & _

"und Nachnamen eingeben!"

End If

rstEmployees.Close

dbsNorthwind.Close

End Sub

Sub EditName(rstTemp As Recordset, _

strFirst As String, strLast As String)

' Änderungen an Datensatz durchführen und ein

' Lesezeichen setzen, damit derselbe Datensatz

' aktuell bleibt.

With rstTemp

.Edit

!Vorname = strFirst

!Nachname = strLast

.Update

.Bookmark = .LastModified

End With

End Sub


Execute-Methode (Beispiel)

Dieses Beispiel zeigt die Execute-Methode, wie sie in einem QueryDef-Objekt und einem Database-Objekt ausgeführt wird. Die Prozeduren ExecuteQueryDef und PrintOutput werden benötigt, damit die Prozedur ausgeführt werden kann.

Sub ExecuteX()

Dim dbsNorthwind As Database

Dim strSQLChange As String

Dim strSQLRestore As String

Dim qdfChange As QueryDef

Dim rstEmployees As Recordset

Dim errLoop As Error

' Zwei SQL-Anweisungen für Aktionsabfragen

' definieren.

strSQLChange = "UPDATE Personal SET Land = " & _

"'USA' WHERE Land = 'USA'"

strSQLRestore = "UPDATE Personal SET Land = " & _

"'USA' WHERE Land  = 'USA'"

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Temporäres QueryDef-Objekt erstellen.

Set qdfChange = dbsNorthwind.CreateQueryDef("", _

strSQLChange)

Set rstEmployees = dbsNorthwind.OpenRecordset( _

"SELECT Nachname, Land FROM Personal", _

dbOpenForwardOnly)

' Bericht mit Originaldaten ausgeben.

Debug.Print "Daten in Tabelle Personal " & _

"vor dem Ausführen der Abfrage.

PrintOutput rstEmployees

' Temporäres QueryDef-Objekt ausführen.

ExecuteQueryDef qdfChange, rstEmployees

' Bericht mit neuen Daten ausgeben.

Debug.Print "Daten in Tabelle Personal " & _

"nach dem Ausführen der Abfrage.

PrintOutput rstEmployees

' Aktionsabfrage zum Wiederherstellen der Daten

' ausführen. Fehler auffangen und Errors-Auflistung

' überprüfen, sofern notwendig.

On Error GoTo Err_Execute

dbsNorthwind.Execute strSQLRestore, dbFailOnError

On Error GoTo 0

' Die aktuellen Daten abrufen, indem erneut eine

' Abfrage auf der Datensatzgruppe durchgeführt

' wird.

rstEmployees.Requery

' Bericht mit wiederhergestellten Daten ausgeben.

Debug.Print "Daten nach Ausführung der " & _

"Abfrage, die die ursprünglichen " & _

"Informationen wiederherstellt."

PrintOutput rstEmployees

rstEmployees.Close

Exit Sub

Err_Execute:

' Benutzer über Fehler informieren, wenn diese

' durch Ausführen der Abfrage entstehen.

If DBEngine.Errors.Count > 0 Then

For Each errLoop In DBEngine.Errors

MsgBox "Fehlernummer: " & errLoop.Number & vbCr & _

errLoop.Description

Next errLoop

End If

Resume Next

End Sub

Sub ExecuteQueryDef(qdfTemp As QueryDef, _

rstTemp As Recordset)

Dim errLoop As Error

' Das angegebene QueryDef-Objekt ausführen. Fehler

' auffangen und die Errors-Auflistung überprüfen,

' sofern notwendig.

On Error GoTo Err_Execute

qdfTemp.Execute dbFailOnError

On Error GoTo 0

' Aktuellen Daten abrufen, indem erneut eine

' Abfrage auf der Datensatzgruppe ausgeführt wird.

rstTemp.Requery

Exit Sub

Err_Execute:

' Benutzer über Fehler informieren, wenn diese

' durch Ausführen der Abfrage entstehen.

If DBEngine.Errors.Count > 0 Then

For Each errLoop In DBEngine.Errors

MsgBox "Fehlernummer: " & errLoop.Number & vbCr & _

errLoop.Description

Next errLoop

End If

Resume Next

End Sub

Sub PrintOutput(rstTemp As Recordset)

' Recordset-Objekt durchlaufen.

Do While Not rstTemp.EOF

Debug.Print "    " & rstTemp!Nachname & _

", " & rstTemp!Land

rstTemp.MoveNext

Loop

End Sub


FindFirst-, FindLast-, FindNext-, FindPrevious-Methoden (Beispiel)

Dieses Beispiel bewegt mit den Methoden FindFirst, FindLast, FindNext und FindPrevious den Datensatzzeiger auf ein Recordset-Objekt, wobei diese Aktion auf den vorgegebenen Suchzeichenfolgen und Befehlen basiert. Die Funktion FindAny wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub FindFirstX()

Dim dbsNorthwind As Database

Dim rstCustomers As Recordset

Dim strCountry As String

Dim varBookmark As Variant

Dim strMessage As String

Dim intCommand As Integer

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstCustomers = dbsNorthwind.OpenRecordset( _

"SELECT Firma, Ort, Land " & _

"FROM Kunden ORDER BY Firma", _

dbOpenSnapshot)

Do While True

' Benutzer zur Eingabe auffordern und

' Suchzeichenfolge erstellen.

strCountry = _

Trim(InputBox("Zu suchendes Land eingeben."))

If strCountry = "" Then Exit Do

strCountry = "Land = '" & strCountry & "'"

With rstCustomers

' Datensatzgruppe auffüllen.

.MoveLast

' Ersten Datensatz suchen, der der

' Suchzeichenfolge entspricht. Schleife

' verlassen, wenn es keinen Datensatz gibt.

.FindFirst strCountry

If .NoMatch Then

MsgBox "Keine Datensätze gefunden mit " & _

strCountry & "."

Exit Do

End If

Do While True

' Lesezeichen des aktuellen Datensatzes speichern.

varBookmark = .Bookmark

' Benutzer zur Eingabe der gewünschten

' Methode auffordern.

strMessage = "Firma: " & !Firma & _

vbCr & "Ort: " & !Ort & ", " & _

!Land & vbCr & vbCr & _

strCountry & vbCr & vbCr & _

"[1 - FindFirst, 2 - FindLast, " & _

vbCr & "3 - FindNext, " & _

"4 - FindPrevious]"

intCommand = Val(Left(InputBox(strMessage), 1))

If intCommand < 1 Or intCommand > 4 Then Exit Do

' Ausgewählte Suchmethode verwenden. Wenn

' die Suche fehlschlägt, zum zuletzt

' aktuellen Datensatz zurückkehren.

If FindAny(intCommand, rstCustomers, _

strCountry) = False Then

.Bookmark = varBookmark

MsgBox "Keine Entsprechungen - " & _

"zurück zum aktuellen Datensatz."

End If

Loop

End With

Exit Do

Loop

rstCustomers.Close

dbsNorthwind.Close

End Sub

Function FindAny(intChoice As Integer, _

rstTemp As Recordset, _

strFind As String) As Boolean

' Die Find-Methode verwenden, die vom

' Benutzer ausgewählt wurde.

Select Case intChoice

Case 1

rstTemp.FindFirst strFind

Case 2

rstTemp.FindLast strFind

Case 3

rstTemp.FindNext strFind

Case 4

rstTemp.FindPrevious strFind

End Select

' Rückgabewerte basierend auf NoMatch-Eigenschaft

' festlegen.

FindAny = IIf(rstTemp.NoMatch, False, True)

End Function


GetRows-Methode (Beispiel)

Dieses Beispiel ruft mit der GetRows-Methode eine vorgegebene Anzahl an Zeilen aus einem Recordset-Objekt ab und füllt ein Feld mit den Ergebnisdaten auf. Die GetRows-Methode gibt in zwei Fällen weniger Daten als die erwünschte Anzahl an Zeilen zurück: Entweder wenn EOF erreicht wurde oder wenn GetRows einen Datensatz abrufen wollte, den ein anderer Benutzer gelöscht hat. Die Funktion gibt nur dann den Wert False zurück, wenn der zweite Fall eintritt. Die Funktion GetRowsOK wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub GetRowsX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim strMessage As String

Dim intRows As Integer

Dim avarRecords As Variant

Dim intRecord As Integer

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = dbsNorthwind.OpenRecordset( _

"SELECT Vorname, Nachname, Position " & _

"FROM Personal ORDER BY Nachname", dbOpenSnapshot)

With rstEmployees

Do While True

' Benutzer zur Eingabe der Zeilenanzahl

' auffordern.

strMessage = "Wie viele Zeilen sollen " & _

"abgerufen werden?"

intRows = Val(InputBox(strMessage))

If intRows <= 0 Then Exit Do

' Wenn GetRowsOK erfolgreich ist, dann die

' Ergebnisse ausgeben und angeben, ob das

' Ende der Datei erreicht wurde.

If GetRowsOK(rstEmployees, intRows, _

avarRecords) Then

If intRows > UBound(avarRecords, 2) + 1 Then

Debug.Print "(Nicht genügend " & _

"Datensätze im Recordset-Objekt " & _

"zum Abrufen von " & intRows & _

" Zeilen.)"

End If

Debug.Print UBound(avarRecords, 2) + 1 & _

" Datensätze gefunden."

' Abgerufene Daten ausgeben.

For intRecord = 0 To UBound(avarRecords, 2)

Debug.Print "    " & _

avarRecords(0, intRecord) & " " & _

avarRecords(1, intRecord) & ", " & _

avarRecords(2, intRecord)

Next intRecord

Else

' Annehmen, daß der GetRows-Fehler

' durch Datenänderungen eines anderen

' Benutzers auftrat, mit Requery das

' Recordset-Objekt aktualisieren und

' nochmals starten.

If .Restartable Then

If MsgBox("GetRows fehlgeschlagen - erneut versuchen?", _

vbYesNo) = vbYes Then

.Requery

Else

Debug.Print "GetRows fehlgeschlagen!"

Exit Do

End If

Else

Debug.Print "GetRows fehlgeschlagen! " & _

"Recordset kann nicht gestartet werden!"

Exit Do

End If

End If

' Da die GetRows-Methode den aktuellen

' Datensatzzeiger auf dem Datensatz beläßt,

' auf den zuletzt zugegriffen wurde,

' muß der Zeiger zurück auf den Anfang des

' Recordset-Objekts gesetzt werden, bevor

' eine neue Suche gestartet werden kann.

.MoveFirst

Loop

End With

rstEmployees.Close

dbsNorthwind.Close

End Sub

Function GetRowsOK(rstTemp As Recordset, _

intNumber As Integer, avarData As Variant) As Boolean

' Ergebnis der GetRows-Methode in Feld speichern.

avarData = rstTemp.GetRows(intNumber)

' False nur dann zurückgeben, wenn weniger als die

' gewünschte Anzahl an Zeilen zurückgegeben wurde,

' jedoch nicht, wenn nur das Ende des Recordset-

' Objekts erreicht wurde.

If intNumber > UBound(avarData, 2) + 1 And _

Not rstTemp.EOF Then

GetRowsOK = False

Else

GetRowsOK = True

End If

End Function


Move-Methode (Beispiel)

Dieses Beispiel positioniert mit der Move-Methode den Datensatzzeiger entsprechend der Eingabe des Benutzers.

Sub MoveX()

Dim dbsNorthwind As Database

Dim rstSuppliers As Recordset

Dim varBookmark As Variant

Dim strCommand As String

Dim lngMove As Long

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstSuppliers = _

dbsNorthwind.OpenRecordset("SELECT Firma, " & _

"Ort, Land FROM Lieferanten ORDER BY Firma", _

dbOpenDynaset)

With rstSuppliers

' Datensatzgruppe auffüllen.

.MoveLast

.MoveFirst

Do While True

' Informationen zum aktuellen Datensatz

' anzeigen und fragen, wie viele Datensätze

' verschoben werden sollen.

strCommand = InputBox( _

"Datensatz " & (.AbsolutePosition + 1) & " von " & _

.RecordCount & vbCr & "Firma: " & _

!Firma & vbCr & "Ort: " & !Ort & _

", " & !Land & vbCr & vbCr & _

"Anzahl der zu verschiebenden Datensätze " & _

"(positiv oder negativ).")

If strCommand = "" Then Exit Do

' Lesezeichen speichern, falls die Move-

' Methode nicht funktioniert.

varBookmark = .Bookmark

' Move-Methode benötigt Parameter des

' Datentyps Long.

lngMove = CLng(strCommand)

.Move lngMove

' BOF oder EOF auffangen.

If .BOF Then

MsgBox "Zuweit hinten! " & _

"Zum aktuellen Datensatz zurückkehren."

.Bookmark = varBookmark

End If

If .EOF Then

MsgBox "Hinter dem letzten " & _

"Datensatz! Zum aktuellen " & _

"Datensatz zurückkehren."

.Bookmark = varBookmark

End If

Loop

.Close

End With

dbsNorthwind.Close

End Sub


MoveFirst-, MoveLast-, MoveNext-, MovePrevious-Methoden (Beispiel)

Dieses Beispiel bewegt mit den Methoden MoveFirst, MoveLast, MoveNext und MovePrevious den Datensatzzeiger eines Recordset-Objekts aufgrund des gegebenen Befehls. Die Prozedur MoveAny wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub MoveFirstX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim strMessage As String

Dim intCommand As Integer

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = dbsNorthwind.OpenRecordset( _

"SELECT Vorname, Nachname FROM Personal " & _

"ORDER BY Nachname", dbOpenSnapshot)

With rstEmployees

' Recordset-Objekt auffüllen.

.MoveLast

.MoveFirst

Do While True

' Informationen zum aktuellen Datensatz

' zeigen und Benutzer zur Eingabe

' der Methode auffordern.

strMessage = "Name: " & !Vorname & " " & _

!Nachname & vbCr & "Datensatz " & _

(.AbsolutePosition + 1) & " of " & _

.RecordCount & vbCr & vbCr & _

"[1 - MoveFirst, 2 - MoveLast, " & vbCr & _

"3 - MoveNext, 4 - MovePrevious]"

intCommand = Val(Left(InputBox(strMessage), 1))

If intCommand < 1 Or intCommand > 4 Then Exit Do

' Methode entsprechend der Eingabe des

' Benutzers aufrufen.

MoveAny intCommand, rstEmployees

Loop

.Close

End With

dbsNorthwind.Close

End Sub

Sub MoveAny(intChoice As Integer, _

rstTemp As Recordset)

' Mit angegebener Methode nach BOF und EOF suchen.

With rstTemp

Select Case intChoice

Case 1

.MoveFirst

Case 2

.MoveLast

Case 3

.MoveNext

If .EOF Then

MsgBox "Datensatzgruppenende erreicht!"

.MoveLast

End If

Case 4

.MovePrevious

If .BOF Then

MsgBox "Datensatzgruppenanfang erreicht!"

.MoveFirst

End If

End Select

End With

End Sub


NewPassword-Methode (Beispiel)

Dieses Beispiel fordert den Benutzer zur Eingabe eines neuen Kennworts für den Benutzer Peter Schmidt auf. Wenn die eingegebene Zeichenfolge zwischen 1 und 14 Zeichen lang ist, ändert das Beispiel mit der NewPassword-Methode das Kennwort. Der Benutzer muß als Peter Schmidt oder als Mitglied der Gruppe Admins angemeldet sein.

Sub NewPasswordX()

Dim wrkDefault As Workspace

Dim usrNew As User

Dim grpNew As Group

Dim grpMember As Group

Dim strPassword As String

' Standardarbeitsbereich abrufen.

Set wrkDefault = DBEngine.Workspaces(0)

With wrkDefault

' Neuen Benutzer erstellen und anfügen.

Set usrNew = .CreateUser("Peter Schmidt", _

"abc123DEF456", "Kennwort1")

.Users.Append usrNew

' Neue Gruppe erstellen und anfügen.

Set grpNew = .CreateGroup("Buchhaltung", _

"UVW987xyz654")

.Groups.Append grpNew

' Neuen Benutzer als Mitglied der neuen Gruppe hinzufügen.

Set grpMember = usrNew.CreateGroup("Buchhaltung")

usrNew.Groups.Append grpMember

' Benutzer zur Eingabe des neuen Kennworts

' auffordern. Falls die Eingabe zu lang ist,

' Aufforderung wiederholen.

Do While True

strPassword = InputBox("Neues Kennwort:")

Select Case Len(strPassword)

Case 1 To 14

usrNew.NewPassword "Kennwort1", strPassword

MsgBox "Kennwort wurde geändert!"

Exit Do

Case Is > 14

MsgBox "Kennwort zu lang!"

Case 0

Exit Do

End Select

Loop

' Die neuen User- und Group-Objekte löschen, da

' dies nur ein Beispiel ist.

.Users.Delete "Peter Schmidt"

.Groups.Delete "Buchhaltung"

End With

End Sub


Refresh-Methode (Beispiel)

Dieses Beispiel aktualisiert mit Daten aus dem OrdinalPosition-Objekt mit der Refresh-Methode die Fields-Auflistung der Tabelle "Kategorien". Die Reihenfolge der Fields in der Auflistung ändert sich erst, nachdem die Refresh-Methode verwendet wurde.

Sub RefreshX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim aintPosition() As Integer

Dim astrFieldName() As String

Dim intTemp As Integer

Dim fldLoop As Field

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfEmployees = dbsNorthwind.TableDefs("Kategorien")

With tdfEmployees

' Originaldaten des OrdinalPosition-Objekts

' anzeigen und in einem Feld speichern.

Debug.Print _

"Orginaldaten von OrdinalPosition im TableDef-Objekt."

ReDim aintPosition(0 To .Fields.Count - 1) As Integer

ReDim astrFieldName(0 To .Fields.Count - 1) As String

For intTemp = 0 To .Fields.Count - 1

aintPosition(intTemp) = _

.Fields(intTemp).OrdinalPosition

astrFieldName(intTemp) = .Fields(intTemp).Name

Debug.Print , aintPosition(intTemp), _

astrFieldName(intTemp)

Next intTemp

' Daten von OrdinalPosition ändern.

For Each fldLoop In .Fields

fldLoop.OrdinalPosition = _

100 - fldLoop.OrdinalPosition

Next fldLoop

Set fldLoop = Nothing

' Neue Daten ausgeben.

Debug.Print "Daten von OrdinalPosition vor Refresh."

For Each fldLoop In .Fields

Debug.Print , fldLoop.OrdinalPosition, fldLoop.Name

Next fldLoop

.Fields.Refresh

' Neue Daten ausgeben, wobei gezeigt wird, wie

' sich die Reihenfolge der Felder geändert hat.

Debug.Print "Nach Refresh neue OrdinalPosition-Daten."

For Each fldLoop In .Fields

Debug.Print , fldLoop.OrdinalPosition, fldLoop.Name

Next fldLoop

' Originaldaten von OrdinalPosition

' wiederherstellen.

For intTemp = 0 To .Fields.Count - 1

.Fields(astrFieldName(intTemp)).OrdinalPosition = _

aintPosition(intTemp)

Next intTemp

End With

dbsNorthwind.Close

End Sub


RepairDatabase-Methode (Beispiel)

Dieses Beispiel versucht, die Nordwind.mdb-Datenbank zu reparieren. Diese Prozedur kann nicht in einem Modul der Nordwind.mdb ausgeführt werden.

Sub RepairDatabaseX()

Dim errLoop As Error

If MsgBox("Nordwind-Datenbank reparieren?", _

vbYesNo) = vbYes Then

On Error GoTo Err_Repair

DBEngine.RepairDatabase "Nordwind.mdb"

On Error GoTo 0

MsgBox "Reparatur abgeschlossen!"

End If

Exit Sub

Err_Repair:

For Each errLoop In DBEngine.Errors

MsgBox "Reparatur nicht erfolgreich!" & vbCr & _

"Fehlernummer: " & errLoop.Number & _

vbCr & errLoop.Description

Next errLoop

End Sub


Seek-Methode (Beispiel)

Dieses Beispiel zeigt die Seek-Methode, indem der Benutzer nach einem Produkt sucht. Die Suche basiert auf der Personalnummer.

Sub SeekX()

Dim dbsNorthwind As Database

Dim rstProducts As Recordset

Dim intFirst As Integer

Dim intLast As Integer

Dim strMessage As String

Dim strSeek As String

Dim varBookmark As Variant

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Recordset-Objekt vom Typ Tabelle muß geöffnet

' werden, um einen Index und darauffolgend die

' Seek-Methode verwenden zu können.

Set rstProducts = _

dbsNorthwind.OpenRecordset("Artikel", dbOpenTable)

With rstProducts

' Index festlegen.

.Index = "PrimaryKey"

' Höchste und niedrigste Artikel-Nr abrufen.

.MoveLast

intLast = ![Artikel-Nr]

.MoveFirst

intFirst = ![Artikel-Nr]

Do While True

' Aktuelle Datensatzinformationen anzeigen

' und Benutzer zur Eingabe der Personalnummer

' auffordern.

strMessage = "[Artikel-Nr]: " & _

![Artikel-Nr] & vbCr & _

"Name: " & !Artikelname & vbCr & vbCr & _

"Eingabe einer Artikel-Nr zwischen " & _

intFirst & " und " & intLast & "."

strSeek = InputBox(strMessage)

If strSeek = "" Then Exit Do

' Aktuelles Lesezeichen speichern, wenn

' Seek-Methode fehlschlägt.

varBookmark = .Bookmark

.Seek "=", Val(strSeek)

' Zum aktuellen Datensatz zurückkehren,

' wenn Seek-Methode fehlschlägt.

If .NoMatch Then

MsgBox "Nummer nicht gefunden!"

.Bookmark = varBookmark

End If

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Update-Methode (Beispiel)

Dieses Beispiel zeigt die Update-Methode zusammen mit der Edit-Methode.

Sub UpdateX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim strOldFirst As String

Dim strOldLast As String

Dim strMessage As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

With rstEmployees

.Edit

' Originaldaten speichern.

strOldFirst = !Vorname

strOldLast = !Nachname

' Daten in Bearbeitungspuffer ändern.

!Vorname = "Rita"

!Nachname = "Kobara"

' Inhalt des Puffers zeigen und Benutzer zur

' Eingabe auffordern.

strMessage = "Bearbeitung von:" & vbCr & _

"    Originaldaten = " & strOldFirst & " " & _

strOldLast & vbCr & "    Daten im Puffer = " & _

!Vorname & " " & !Nachname & vbCr & vbCr & _

"Mit Update-Methode die Originaldaten " & _

"im Recordset-Objekt durch gepufferten Daten ersetzen?"

If MsgBox(strMessage, vbYesNo) = vbYes Then

.Update

Else

.CancelUpdate

End If

' Ergebnisdaten ausgeben.

MsgBox "Daten in Datensatzgruppe = " & !Vorname & " " & _

!Nachname

' Ursprüngliche Daten wiederherstellen, da dies

' ein Beispiel ist.

If Not (strOldFirst = !Vorname And _

strOldLast = !Nachname) Then

.Edit

!Vorname = strOldFirst

!Nachname = strOldLast

.Update

End If

.Close

End With

dbsNorthwind.Close

End Sub

Dieses Beispiel zeigt die Update-Methode zusammen mit der AddNew-Methode.

Sub UpdateX2()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim strOldFirst As String

Dim strOldLast As String

Dim strMessage As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

With rstEmployees

.AddNew

!Vorname = "Heinz"

!Nachname = "Sornsin"

' Inhalt des Puffers anzeigen und Benutzer zur

' Eingabe auffordern.

strMessage = "AddNew wird ausgeführt:" & vbCr & _

"    Daten im Puffer = " & !Nachname & " " & _

!Nachname & vbCr & vbCr & _

"Mit Update Puffer in Datensatzgruppe speichern?"

If MsgBox(strMessage, vbYesNoCancel) = vbYes Then

.Update

' Zu neuem Datensatz wechseln und die

' Ergebnisdaten anzeigen.

.Bookmark = .LastModified

MsgBox "Daten in der Datensatzgruppe = " &  _

!Vorname & " " & !Nachname

' Neue Daten löschen, da dies ein

' Beispiel ist.

.Delete

Else

.CancelUpdate

MsgBox "Keine neuen Datensätze hinzugefügt."

End If

.Close

End With

dbsNorthwind.Close

End Sub


CancelUpdate-Methode (Beispiel)

Dieses Beispiel zeigt, wie die CancelUpdate-Methode zusammen mit der AddNew-Methode verwendet wird.

Sub CancelUpdateX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim intCommand As Integer

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = dbsNorthwind.OpenRecordset( _

"Personal", dbOpenDynaset)

With rstEmployees

.AddNew

!Vorname = "Kimberly"

!Nachname = "Bowen"

intCommand = MsgBox("Neuen Datensatz hinzufügen für " & _

!Vorname & " " & !Nachname & "?", vbYesNo)

If intCommand = vbYes Then

.Update

MsgBox "Datensatz hinzugefügt."

' Neuen Datensatz löschen, da dies ein

' Beispiel ist.

.Bookmark = .LastModified

.Delete

Else

.CancelUpdate

MsgBox "Datensatz nicht hinzugefügt."

End If

End With

dbsNorthwind.Close

End Sub

Dieses Beispiel zeigt, wie die CancelUpdate-Methode zusammen mit der Edit-Methode verwendet wird.

Sub CancelUpdateX2()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim strFirst As String

Dim strLast As String

Dim intCommand As Integer

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = dbsNorthwind.OpenRecordset( _

"Personal", dbOpenDynaset)

With rstEmployees

strFirst = !Vorname

strLast = !Nachname

.Edit

!Vorname = "Cora"

!Nachname = "Edmonds"

intCommand = MsgBox("Aktuellen Namen ersetzen durch " & _

!Vorname & " " & !Nachname & "?", vbYesNo)

If intCommand = vbYes Then

.Update

MsgBox "Datensatz verändert."

' Daten wiederherstellen, da dies ein

' Beispiel ist.

.Bookmark = .LastModified

.Edit

!Vorname = strFirst

!Nachname = strLast

.Update

Else

.CancelUpdate

MsgBox "Datensatz nicht verändert."

End If

.Close

End With

dbsNorthwind.Close

End Sub


CopyQueryDef-Methode (Beispiel)

Dieses Beispiel erstellt mit der CopyQueryDef-Methode eine Kopie eines QueryDef-Objekts aus einem vorhandenen Recordset-Objekt und verändert die Kopie, indem der SQL-Eigenschaft ein Abschnitt hinzugefügt wird. Wenn Sie ein permanentes QueryDef erstellen, können der SQL-Eigenschaft Leerzeichen, Semikolons oder Zeilenvorschübe hinzugefügt werden; diese zusätzlichen Zeichen müssen entfernt werden, bevor ein neuer Abschnitt der SQL-Anweisung angefügt werden kann.

Function CopyQueryNew(rstTemp As Recordset, _

strAdd As String) As QueryDef

Dim strSQL As String

Dim strRightSQL As String

Set CopyQueryNew = rstTemp.CopyQueryDef

With CopyQueryNew

' Zusätzliche Zeichen entfernen.

strSQL = .SQL

strRightSQL = Right(strSQL, 1)

Do While strRightSQL = " " Or strRightSQL = ";" Or _

strRightSQL = Chr(10) Or strRightSQL = vbCr

strSQL = Left(strSQL, Len(strSQL) - 1)

strRightSQL = Right(strSQL, 1)

Loop

.SQL = strSQL & strAdd

End With

End Function

Dieses Beispiel zeigt, wie CopyQueryNew() eventuell eingesetzt werden kann.

Sub CopyQueryDefX()

Dim dbsNorthwind As Database

Dim qdfEmployees As QueryDef

Dim rstEmployees As Recordset

Dim intCommand As Integer

Dim strOrderBy As String

Dim qdfCopy As QueryDef

Dim rstCopy As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set qdfEmployees = dbsNorthwind.CreateQueryDef( _

"NewQueryDef", "SELECT Vorname, Nachname, " & _

"Geburtsdatum FROM Personal")

Set rstEmployees = qdfEmployees.OpenRecordset( _

dbOpenForwardOnly)

Do While True

intCommand = Val(InputBox( _

"Wählen Sie das Feld aus, nach dem ein " & _

"neues Recordset sortiert werden soll: " & _

vbCr & "1 - Vorname" & vbCr & _

"2 - Nachname" & vbCr & "3 - Geburtsdatum" _

& vbCr & "[Abbrechen - Beenden]"))

Select Case intCommand

Case 1

strOrderBy = " ORDER BY Vorname"

Case 2

strOrderBy = " ORDER BY Nachname"

Case 3

strOrderBy = " ORDER BY Geburtsdatum"

Case Else

Exit Do

End Select

Set qdfCopy = CopyQueryNew(rstEmployees, strOrderBy)

Set rstCopy = qdfCopy.OpenRecordset(dbOpenSnapshot, _

dbForwardOnly)

With rstCopy

Do While Not .EOF

Debug.Print !Nachname & ", " & !Vorname & _

" - " & !Geburtsdatum

.MoveNext

Loop

.Close

End With

Exit Do

Loop

rstEmployees.Close

' Neues QueryDef-Objekt löschen, da dies ein

' Beispiel ist.

dbsNorthwind.QueryDefs.Delete qdfEmployees.Name

dbsNorthwind.Close

End Sub


CreateGroup-Methode (Beispiel)

Dieses Beispiel erstellt mit der CreateGroup-Methode ein neues Group-Objekt; dann wird der Benutzer "Admin" ein Mitglied des neuen Group-Objekts und führt dessen Eigenschaften und Benutzer auf.

Sub CreateGroupX()

Dim wrkDefault As Workspace

Dim grpNew As Group

Dim grpTemp As Group

Dim prpLoop As Property

Dim usrLoop As User

Set wrkDefault = DBEngine.Workspaces(0)

With wrkDefault

' Neue Gruppe erstellen und anfügen.

Set grpNew = .CreateGroup("NewGroup", _

"AAA123456789")

.Groups.Append grpNew

' Benutzer "Admin" der neuen Gruppe NewGroup

' als Mitglied hinzufügen, indem das

' entsprechende Group-Objekt erstellt wird und

' der Groups-Auflistung des Benutzers

' hinzugefügt wird.

Set grpTemp = .Users("Admin").CreateGroup("NewGroup")

.Users("Admin").Groups.Append grpTemp

Debug.Print "Eigenschaften von " & grpNew.Name

' Properties-Auflistung der neuen Gruppe

' durchlaufen.

' Die PID-Eigenschaft kann nicht gelesen werden.

For Each prpLoop In grpNew.Properties

On Error Resume Next

If prpLoop <> "" Then Debug.Print "    " & _

prpLoop.Name & " = " & prpLoop

On Error GoTo 0

Next prpLoop

Debug.Print "Users-Auflistung von " & grpNew.Name

' Users-Auflistung der neuen Gruppe durchlaufen.

For Each usrLoop In grpNew.Users

Debug.Print "    " & _

usrLoop.Name

Next usrLoop

' Neues Group-Objekt löschen, da dies ein

' Beispiel ist.

.Groups.Delete "NewGroup"

End With

End Sub


CreateUser-Methode; Password- und PID-Eigenschaften (Beispiel)

Dieses Beispiel erstellt mit der CreateUser-Methode und den Eigenschaften Password und PID ein neues User-Objekt; das neue User-Objekt wird dann Mitglied eines anderen Group-Objekts, und dessen Eigenschaften und Gruppen werden aufgelistet.

Sub CreateUserX()

Dim wrkDefault As Workspace

Dim usrNew As User

Dim grpNew As Group

Dim usrTemp As User

Dim prpLoop As Property

Dim grpLoop As Group

Set wrkDefault = DBEngine.Workspaces(0)

With wrkDefault

' Neues User-Objekt erstellen und anfügen.

Set usrNew = .CreateUser("NewUser")

usrNew.PID = "AAA123456789"

usrNew.Password = "NewPassword"

.Users.Append usrNew

' Neues Group-Objekt erstellen und anfügen.

Set grpNew = .CreateGroup("NewGroup", _

"AAA123456789")

.Groups.Append grpNew

' Den Benutzer "NewUser" als Mitglied der Gruppe

' "NewGroup" hinzufügen, indem das entsprechende

' User-Objekt erstellt wird und der Users-

' Auflistung der Gruppe hinzugefügt wird.

Set usrTemp = _

.Groups("NewGroup").CreateUser("NewUser")

.Groups("NewGroup").Users.Append usrTemp

Debug.Print "Eigenschaften von " & usrNew.Name

' Properties-Auflistung des NewUser-Objekts

' durchlaufen.

' Die PID-Eigenschaft kann nicht gelesen werden.

For Each prpLoop In usrNew.Properties

On Error Resume Next

If prpLoop <> "" Then Debug.Print "    " & _

prpLoop.Name & " = " & prpLoop

On Error GoTo 0

Next prpLoop

Debug.Print "Groups-Auflistung von " & usrNew.Name

' Groups-Auflistung des NewUser-Objekts durchlaufen.

For Each grpLoop In usrNew.Groups

Debug.Print "    " & _

grpLoop.Name

Next grpLoop

' Neue User- und Group-Objekte löschen, da dies

' ein Beispiel ist.

.Users.Delete "NewUser"

.Groups.Delete "NewGroup"

End With

End Sub


CreateWorkspace-Methode (Beispiel)

Dieses Beispiel erstellt mit der CreateWorkspace-Methode sowohl einen Microsoft Jet-Arbeitsbereich als auch einen ODBCDirect-Arbeitsbereich. Dann werden die Eigenschaften der beiden Arbeitsbereichstypen aufgelistet.

Sub CreateWorkspaceX()

Dim wrkODBC As Workspace

Dim wrkJet As Workspace

Dim wrkLoop As Workspace

Dim prpLoop As Property

' Einen ODBCDirect-Arbeitsbereich erstellen. Das

' Microsoft Jet-Datenbankmodul wird erst in den

' Speicher geladen, nachdem der Microsoft Jet-

' Arbeitsbereich erstellt wurde.

Set wrkODBC = CreateWorkspace("ODBCWorkspace", "Admin", _

"", dbUseODBC)

Workspaces.Append wrkODBC

DefaultType = dbUseJet

' Ein unbenanntes Workspace-Objekt des von der

' DefaultType-Eigenschaft des DBEngine-Objekts

' (dbUseJet) angegebenen Typs erstellen.

Set wrkJet = CreateWorkspace("", "Admin", "")

' Workspaces-Auflistung durchlaufen.

Debug.Print "Workspace-Objekte in Workspaces-Auflistung: "

For Each wrkLoop In Workspaces

Debug.Print "    " & wrkLoop.Name

Next wrkLoop

With wrkODBC

' Properties-Auflistung des ODBCDirect-

' Arbeitsbereichs.

Debug.Print "Eigenschaften von " & .Name

On Error Resume Next

For Each prpLoop In .Properties

Debug.Print "    " & prpLoop.Name & " = " & prpLoop

Next prpLoop

On Error GoTo 0

End With

With wrkJet

' Properties-Auflistung des Microsoft Jet-

' Arbeitsbereichs.

Debug.Print "Eigenschaften des " & _

"unbenannten Microsoft Jet-Arbeitsbereichs:"

On Error Resume Next

For Each prpLoop In .Properties

Debug.Print "    " & prpLoop.Name & " = " & prpLoop

Next prpLoop

On Error GoTo 0

End With

wrkODBC.Close

wrkJet.Close

End Sub


Idle-Methode (Beispiel)

Dieses Beispiel stellt mit der Idle-Methode sicher, daß eine Ausgabeprozedur auf die aktuellsten Daten in der Datenbank zugreifen kann. Die Prozedur IdleOutput wird zum Ausführen dieser Prozedur benötigt.

Sub IdleX()

Dim dbsNorthwind As Database

Dim strCountry As String

Dim strSQL As String

Dim rstOrders As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Benutzer zur Eingabe des Ländernamens auffordern

' und aus der Eingabe SQL-Anweisung erstellen.

strCountry = Trim(InputBox("Land eingeben:"))

strSQL = "SELECT * FROM Bestellungen WHERE Bestimmungsland = '" & _

strCountry & "' ORDER BY [Bestell-Nr]"

' Recordset-Objekt mit SQL-Anweisung öffnen.

Set rstOrders = dbsNorthwind.OpenRecordset(strSQL)

' Inhalt des Recordset-Objekts anzeigen.

IdleOutput rstOrders, strCountry

rstOrders.Close

dbsNorthwind.Close

End Sub

Sub IdleOutput(rstTemp As Recordset, strTemp As String)

' Idle-Methode aufrufen, um unerwünschte Sperren

' aufzuheben, ansstehende Schreibvorgänge zu

' erzwingen und den Speicher mit den

' aktuellen Daten der .mdb-Datei zu aktualisieren.

DBEngine.Idle dbRefreshCache

' Recordset-Objekt durchlaufen.

With rstTemp

Debug.Print "Bestellungen von " & strTemp & ":"

Debug.Print , "[Bestell-Nr]", "[Kunden-Code]", "Bestelldatum"

Do While Not .EOF

Debug.Print , ![Bestell-Nr], ![Kunden-Code], !Bestelldatum

.MoveNext

Loop

End With

End Sub


MakeReplica-Methode (Beispiel)

Diese Funktion erstellt mit der MakeReplica-Methode ein zusätzliches Replikat eines vorhandenen Entwurfs-Masters (Design Masters). Das Argument intOptions kann eine Kombination aus den Konstanten dbRepMakeReadOnly und dbRepMakePartial sein oder den Wert 0 haben. Um beispielsweise ein schreibgeschütztes Teilreplikat zu erstellen, sollten Sie den Wert dbRepMakeReadOnly + dbRepMakePartial als Wert von intOptions übergeben.

Function MakeAdditionalReplica(strReplicableDB As _

String, strNewReplica As String, intOptions As _

Integer) As Integer

Dim dbsTemp As Database

On Error GoTo ErrorHandler

Set dbsTemp = OpenDatabase(strReplicableDB)

' Wenn MakeAdditionalReplica keine Optionen

' übergeben werden, wird auch das Argument

' "Optionen" nicht angegeben, das in der

' Voreinstellung ein vollständiges Replikat

' mit Lese-/Schreibzugriff erzeugt. Ansonsten

' wird der Wert von intOptions verwendet.

If intOptions = 0 Then

dbsTemp.MakeReplica strNewReplica, _

"Replikat von " & strReplicableDB

Else

dbsTemp.MakeReplica strNewReplica, _

"Replikat von " & strReplicableDB, _

intOptions

End If

dbsTemp.Close

ErrorHandler:

Select Case Err

Case 0:

MakeAdditionalReplica = 0

Exit Function

Case Else:

MsgBox "Fehler " & Err & " : " & Error

MakeAdditionalReplica = Err

Exit Function

End Select

End Function


NextRecordset-Methode und DefaultCursorDriver-Eigenschaft (Beispiel)

Dieses Beispiel liest mit der NextRecordset-Methode die Daten einer SELECT-Verbundabfrage. Die DefaultCursorDriver-Eigenschaft muß auf dbUseODBCCursor festgelegt sein, damit die Abfrage ausgeführt werden kann. Die NextRecordset-Methode gibt True zurück, auch wenn einige SELECT-Anweisungen keine Datensätze zurückgeben; False wird nur zurückgegeben, wenn die einzelnen SQL-Abschnitte überprüft werden.

Sub NextRecordsetX()

Dim wrkODBC As Workspace

Dim conPubs As Connection

Dim rstTemp As Recordset

Dim intCount As Integer

Dim booNext As Boolean

' ODBCDirect Workspace-Objekt erstellen und

' Connection-Objekt öffnen. Die Einstellung

' DefaultCursorDriver wird benötigt, wenn

' SQL-Verbundanweisungen verwendet werden.

Set wrkODBC = CreateWorkspace("", _

"Admin", "", dbUseODBC)

wrkODBC.DefaultCursorDriver = dbUseODBCCursor

Set conPubs = wrkODBC.OpenConnection _

("Verleger", , , _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' SELECT-Verbundanweisung erstellen.

Set rstTemp = conPubs.OpenRecordset("SELECT * " & _

"FROM Autoren; " & _

"SELECT * FROM Buchhandlungen; " & _

"SELECT * FROM Job")

' Versuchen, die Ergebnisse aus allen drei SELECT-

' Anweisungen auszugeben.

booNext = True

intCount = 1

With rstTemp

Do While booNext

Debug.Print "Inhalt der Datensatzgruppe " & intCount

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

booNext = .NextRecordset

Debug.Print "    rstTemp.NextRecordset = " & _

booNext

intCount = intCount + 1

Loop

End With

rstTemp.Close

conPubs.Close

wrkODBC.Close

End Sub

Die gleiche Aufgabe kann auch ausgeführt werden, wenn eine vorbereitete Anweisung, die eine SQL-Verbundanweisung enthält, erstellt wird. Die CacheSize-Eigenschaft des QueryDef-Objekt muß auf den Wert 1 festgelegt werden, und das Recordset-Objekt muß vom Typ Vorwärts und schreibgeschützt sein.

Sub NextRecordsetX2()

Dim wrkODBC As Workspace

Dim conPubs As Connection

Dim qdfTemp As QueryDef

Dim rstTemp As Recordset

Dim intCount As Integer

Dim booNext As Boolean

' ODBCDirect Workspace-Objekt erstellen und

' Connection-Objekt öffnen. Die Einstellung von

' DefaultCursorDriver setting wird benötigt, wenn

' SQL-Verbundanweisungen verwendet werden.

Set wrkODBC = CreateWorkspace("", _

"Admin", "", dbUseODBC)

wrkODBC.DefaultCursorDriver = dbUseODBCCursor

Set conPubs = wrkODBC.OpenConnection("Verleger", , , _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' Temporäre gespeicherte Prozedur mit einer

' SELECT-Verbundanweisung erstellen.

Set qdfTemp = conPubs.CreateQueryDef("", _

"SELECT * FROM Autoren; " & _

"SELECT * FROM Buchhandlungen; " & _

"SELECT * FROM Job")

' CacheSize festlegen und Recordset-Objekt mit

' Argumenten öffnen, die den Zugriff auf mehrere

' Datensatzgruppen ermöglichen.

qdfTemp.CacheSize = 1

Set rstTemp = qdfTemp.OpenRecordset(dbOpenForwardOnly, _

dbReadOnly)

' Versuchen, Ergebnisse von jeder der drei SELECT-

' Anweisungen anzuzeigen.

booNext = True

intCount = 1

With rstTemp

Do While booNext

Debug.Print "Inhalt der Datensatzgruppe " & intCount

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

booNext = .NextRecordset

Debug.Print "    rstTemp.NextRecordset = " & _

booNext

intCount = intCount + 1

Loop

End With

rstTemp.Close

qdfTemp.Close

conPubs.Close

wrkODBC.Close

End Sub


OpenConnection-Methode (Beispiel)

Dieses Beispiel öffnet mit der OpenConnection-Methode mit verschiedenen Parametern drei unterschiedliche Connection-Objekte.

Sub OpenConnectionX()

Dim wrkODBC As Workspace

Dim conPubs As Connection

Dim conPubs2 As Connection

Dim conPubs3 As Connection

Dim conLoop As Connection

' ODBCDirect Workspace-Objekt erstellen.

Set wrkODBC = CreateWorkspace("NewODBCWorkspace", _

"Admin", "", dbUseODBC)

' Connection-Objekt mit den zusätzlichen

' Informationen aus der Verbindungszeichenfolge

' öffnen. Wenn die Informationen unzureichend sind,

' sollte ein Fehler aufgefangen und nicht das

' Dialogfeld des ODBC-Treiber-Managers angezeigt

' werden.

MsgBox "Connection1 öffnen..."

Set conPubs = wrkODBC.OpenConnection("Connection1", _

dbDriverNoPrompt, , _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' Schreibgeschütztes Connection-Objekt, das auf den

' von Ihnen eingegebenen Informationen im

' Dialogfeld ODBC-Treiber-Manager basiert, öffnen.

MsgBox "Connection2 öffnen..."

Set conPubs2 = wrkODBC.OpenConnection("Connection2", _

dbDriverPrompt, True, "ODBC;DSN=Verleger;")

' Schreibgeschütztes Connection-Objekt öffnen,

' indem nur die fehlenden Informationen in das

' Dialogfeld ODBC-Treiber-Manager eingegeben

' werden.

MsgBox "Connection3 öffnen..."

Set conPubs3 = wrkODBC.OpenConnection("Connection3", _

dbDriverCompleteRequired, True, _

"ODBC;DATABASE=Verleger;DSN=Verleger;")

' Connections-Auflistung durchlaufen.

For Each conLoop In wrkODBC.Connections

Debug.Print "Connection-Eigenschaften für " & _

conLoop.Name & ":"

With conLoop

' Eigenschaftswerte ausgeben, indem jedes

' Property-Objekt extra aufgerufen wird; das

' Connection-Objekt unterstützt die

' Properties-Auflistung nicht.

Debug.Print "    Connect = " & .Connect

' Eigenschaft gibt Database-Objekt zurück.

Debug.Print "    Database[.Name] = " & _

.Database.Name

Debug.Print "    Name = " & .Name

Debug.Print "    QueryTimeout = " & .QueryTimeout

Debug.Print "    RecordsAffected = " & _

.RecordsAffected

Debug.Print "    StillExecuting = " & _

.StillExecuting

Debug.Print "    Transactions = " & .Transactions

Debug.Print "    Updatable = " & .Updatable

End With

Next conLoop

conPubs.Close

conPubs2.Close

conPubs3.Close

wrkODBC.Close

End Sub


OpenDatabase-Methode (Beispiel)

Dieses Beispiel öffnet mit der OpenDatabase-Methode eine Microsoft Jet-Datenbank sowie zwei Microsoft Jet verbundene ODBC-Datenbanken.

Sub OpenDatabaseX()

Dim wrkJet As Workspace

Dim dbsNorthwind As Database

Dim dbsPubs As Database

Dim dbsPubs2 As Database

Dim dbsLoop As Database

Dim prpLoop As Property

' Microsoft Jet Workspace-Objekt erstellen.

Set wrkJet = CreateWorkspace("", "Admin", "", dbUseJet)

' Database-Objekt aus gespeicherter Microsoft Jet-

' Datenbank exklusiv öffnen.

MsgBox "Nordwind öffnen..."

Set dbsNorthwind = wrkJet.OpenDatabase("Nordwind.mdb", _

True)

' Schreibgeschütztes Database-Objekt basierend auf

' Informationen in der Verbindungszeichenfolge

' öffnen.

MsgBox "'Verleger' öffnen..."

Set dbsPubs = wrkJet.OpenDatabase("Verleger", _

dbDriverNoPrompt, True, _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' Schreibgeschütztes Database-Objekt öffnen, indem

' nur die fehlenden Informationen in das Dialogfeld

' ODBC-Treiber-Manager eingegeben werden.

MsgBox "Zweite Kopie von 'Verleger' öffnen..."

Set dbsPubs2 = wrkJet.OpenDatabase("Verleger", _

dbDriverCompleteRequired, True, _

"ODBC;DATABASE=Verleger;DSN=Verleger;")

' Databases-Auflistung durchlaufen.

For Each dbsLoop In wrkJet.Databases

Debug.Print "Database-Eigenschaften für " & _

dbsLoop.Name & ":"

On Error Resume Next

' Properties-Auflistung für jedes Database-

' Objekt durchlaufen.

For Each prpLoop In dbsLoop.Properties

If prpLoop.Name = "Connection" Then

' Eigenschaft gibt ein

' Connection-Objekt zurück.

Debug.Print "    Connection[.Name] = " & _

dbsLoop.Connection.Name

Else

Debug.Print "    " & prpLoop.Name & " = " & _

prpLoop

End If

Next prpLoop

On Error GoTo 0

Next dbsLoop

dbsNorthwind.Close

dbsPubs.Close

dbsPubs2.Close

wrkJet.Close

End Sub


OpenRecordset-Methode (Beispiel)

Dieses Beispiel öffnet mit der OpenRecordset-Methode fünf verschiedene Recordset-Objekte und zeigt deren Inhalt an. Die Prozedur OpenRecordsetOutput wird zum Ausführen der Prozedur benötigt.

Sub OpenRecordsetX()

Dim wrkJet As Workspace

Dim wrkODBC As Workspace

Dim dbsNorthwind As Database

Dim conPubs As Connection

Dim rstTemp As Recordset

Dim rstTemp2 As Recordset

' Microsoft Jet- und ODBCDirect-Arbeitsbereiche,

' Jet-Datenbank und ODBCDirect-Verbindung öffnen.

Set wrkJet = CreateWorkspace("", "Admin", "", dbUseJet)

Set wrkODBC = CreateWorkspace("", "Admin", "", dbUseODBC)

Set dbsNorthwind = wrkJet.OpenDatabase("Nordwind.mdb")

Set conPubs = wrkODBC.OpenConnection("", , , _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' Fünf verschiedene Recordset-Objekte öffnen und

' von jedem den Inhalt anzeigen.

Debug.Print "Recordset vom Typ Vorwärts öffnen," & _

"dessen Quelle ein QueryDef-Objekt ist..."

Set rstTemp = dbsNorthwind.OpenRecordset( _

"Die zehn teuersten Artikel", dbOpenForwardOnly)

OpenRecordsetOutput rstTemp

Debug.Print "Öffnet schreibgeschütztes Recordset " & _

"vom Typ Dynaset, dessen Quelle eine SQL-" & _

"Anweisung ist..."

Set rstTemp = dbsNorthwind.OpenRecordset( _

"SELECT * FROM Personal", dbOpenDynaset, dbReadOnly)

OpenRecordsetOutput rstTemp

' Mit der Filter-Eigenschaft beim nächsten Aufruf

' von OpenRecordset nur bestimmte Datensätze

' abrufen.

Debug.Print "Öffnet Datensatzgruppe aus vorhandenem " & _

"Recordset-Objekt, um Datensätze zu filtern ..."

rstTemp.Filter = "Nachname >= 'M'"

Set rstTemp2 = rstTemp.OpenRecordset()

OpenRecordsetOutput rstTemp2

Debug.Print "Öffnet Recordset vom Typ Dynamisch aus " & _

"einer ODBC-Verbindung..."

Set rstTemp = conPubs.OpenRecordset( _

"SELECT * FROM Buchhandlungen", dbOpenDynamic)

OpenRecordsetOutput rstTemp

' Mit der StillExecuting-Eigenschaft wird bestimmt,

' wann das Recordset-Objekt bearbeitet werden kann.

Debug.Print "Recordset vom Typ Snapshot öffnen, " & _

"das auf einer asynchronen Abfrage auf " & _

"eine ODBC-Verbindung basiert..."

Set rstTemp = conPubs.OpenRecordset("Verleger", _

dbOpenSnapshot, dbRunAsync)

Do While rstTemp.StillExecuting

Debug.Print "    [noch in Arbeit...]"

Loop

OpenRecordsetOutput rstTemp

rstTemp.Close

dbsNorthwind.Close

conPubs.Close

wrkJet.Close

wrkODBC.Close

End Sub

Sub OpenRecordsetOutput(rstOutput As Recordset)

' Angegebenes Recordset-Objekt durchlaufen.

With rstOutput

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

End With

End Sub


PopulatePartial-Methode (Beispiel)

Im folgenden Beispiel wird die PopulatePartial-Methode nach dem Ändern eines Replikatfilters verwendet.

Sub PopulatePartialX()

Dim tdfCustomers As TableDef

Dim strFilter As String

Dim dbsTemp As Database

' Teilreplikat im Exklusivmodus öffnen.

Set dbsTemp = OpenDatabase("F:\Umsatz\SJ96CA.MDB", True)

With dbsTemp

Set tdfCustomers = .TableDefs("Kunden")

' Mit vollständigem Replikat synchronisieren,

' bevor der Replikatfilter festgelegt wird.

.Synchronize "C:\Umsatz\SJ96.MDB"

strFilter = "Region = 'CA'"

tdfCustomers.ReplicaFilter = strFilter

' Datensätze aus dem vollständigen Replikat auffüllen.

.PopulatePartial "C:\Umsatz\SJ96.MDB"

.Close

End With

End Sub


RefreshLink-Methode (Beispiel)

Dieses Beispiel aktualisiert mit der RefreshLink-Methode die Daten in einer verknüpften Tabelle, nachdem die Verbindung von einer Datenquelle zu einer anderen geändert wurde. Die Prozedur RefreshLinkOutput wird zum Ausführen der Prozedur benötigt.

Sub RefreshLinkX()

Dim dbsCurrent As Database

Dim tdfLinked As TableDef

' Datenbank öffnen, der eine verknüpfte Tabelle

' angefügt werden kann.

Set dbsCurrent = OpenDatabase("DB1.mdb")

' Verknüpfte Tabelle erstellen, die auf eine

' Microsoft SQL Server-Datenbank verweist.

Set tdfLinked = _

dbsCurrent.CreateTableDef("Autorentabelle")

tdfLinked.Connect = _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger"

tdfLinked.SourceTableName = "Autoren"

dbsCurrent.TableDefs.Append tdfLinked

' Inhalt der verknüpften Tabelle anzeigen.

Debug.Print _

"Daten aus einer verknüpften Tabelle anzeigen, " & _

"die mit der ersten Quelle verbunden ist:"

RefreshLinkOutput dbsCurrent

' Verbindungsinformationen der verknüpften Tabelle

' ändern und die Verbindung aktualisieren, um die

' neuen Daten verfügbar zu machen.

tdfLinked.Connect = _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=NeueVerleger"

tdfLinked.RefreshLink

' Inhalt der verknüpften Tabelle anzeigen.

Debug.Print _

"Daten aus einer verknüpften Tabelle anzeigen, " & _

"die mit der zweiten Quelle verbunden ist:"

RefreshLinkOutput dbsCurrent

' Verknüpfte Tabelle löschen, da dies

' ein Beispiel ist.

dbsCurrent.TableDefs.Delete tdfLinked.Name

dbsCurrent.Close

End Sub

Sub RefreshLinkOutput(dbsTemp As Database)

Dim rstRemote As Recordset

Dim intCount As Integer

' Verknüpfte Tabelle öffnen.

Set rstRemote = _

dbsTemp.OpenRecordset("Autorentabelle")

intCount = 0

' Recordset-Objekt durchlaufen, aber nach 50

' Datensätzen anhalten.

With rstRemote

Do While Not .EOF And intCount < 50

Debug.Print , .Fields(0), .Fields(1)

intCount = intCount + 1

.MoveNext

Loop

If Not .EOF Then Debug.Print , "[weitere Datensätze ]"

.Close

End With

End Sub


RegisterDatabase-Methode (Beispiel)

Dieses Beispiel registriert mit der RegisterDatabase-Methode eine Microsoft SQL Server-Datenquelle mit dem Namen Verleger in der Windows-Registrierung.

Zum Erstellen, Verändern oder Löschen von Datenquellennamen wird vorzugsweise das Symbol ODBC in der Windows-Systemsteuerung verwendet.

Sub RegisterDatabaseX()

Dim dbsRegister As Database

Dim strDescription As String

Dim strAttributes As String

Dim errLoop As Error

' Schlüsselwörterzeichenfolgen erstellen.

strDescription = InputBox( "Beschreibung eingeben für " & _

"die zu registrierende Datenbank.")

strAttributes = "Database=Verleger" & _

vbCr & "Beschreibung=" & strDescription & _

vbCr & "OemToAnsi=No" & _

vbCr & "Server=Server1"

' Windows-Registrierung aktualisieren.

On Error GoTo Err_Register

DBEngine.RegisterDatabase "Verleger", "SQL Server", _

True, strAttributes

On Error GoTo 0

MsgBox "Verwenden Sie REGEDIT.EXE, um die " & _

"Änderungen anzuzeigen: " & _

"HKEY_CURRENT_USER\" & _

"Software\ODBC\ODBC.INI"

Exit Sub

Err_Register:

' Benutzer benachrichtigen, wenn Fehler durch

' unzulässige Daten auftreten.

If DBEngine.Errors.Count > 0 Then

For Each errLoop In DBEngine.Errors

MsgBox "Fehlernummer: " & errLoop.Number & _

vbCr & errLoop.Description

Next errLoop

End If

Resume Next

End Sub


Requery-Methode (Beispiel)

Dieses Beispiel zeigt, wie mit der Requery-Methode eine Abfrage aktualisiert werden kann, nachdem zugrundeliegende Daten geändert wurden.

Sub RequeryX()

Dim dbsNorthwind As Database

Dim qdfTemp As QueryDef

Dim rstView As Recordset

Dim rstChange As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set qdfTemp = dbsNorthwind.CreateQueryDef("", _

"PARAMETERS Länder Text; " & _

"SELECT Vorname, Nachname, Land FROM " & _

"Personal WHERE Land = [Länder] " & _

"ORDER BY Nachname")

qdfTemp.Parameters!Länder = "USA"

Debug.Print "Daten nach der ersten Abfrage, " & _

"[Länder] = USA"

Set rstView = qdfTemp.OpenRecordset

Do While Not rstView.EOF

Debug.Print "    " & rstView!Vorname & " " & _

rstView!Nachname & ", " & rstView!Land

rstView.MoveNext

Loop

' Zugrundeliegende Daten ändern.

Set rstChange = dbsNorthwind.OpenRecordset("Personal")

rstChange.AddNew

rstChange!Vorname = "Nina"

rstChange!Nachname = "Roberts"

rstChange!Land = "USA"

rstChange.Update

rstView.Requery

Debug.Print "Nach Ändern der " & _

"zugrundeliegenden Daten erneute Abfrage"

Set rstView = qdfTemp.OpenRecordset

Do While Not rstView.EOF

Debug.Print "    " & rstView!Vorname & " " & _

rstView!Nachname & ", " & rstView!Land

rstView.MoveNext

Loop

' Ursprüngliche Daten wiederherstellen, da dies ein

' Beispiel ist.

rstChange.Bookmark = rstChange.LastModified

rstChange.Delete

rstChange.Close

rstView.Close

dbsNorthwind.Close

End Sub

Dieses Beispiel zeigt, wie mit der Requery-Methode eine Abfrage aktualisiert werden kann, nachdem die Abfrageparameter geändert wurden.

Sub RequeryX2()

Dim dbsNorthwind As Database

Dim qdfTemp As QueryDef

Dim prmCountry As Parameter

Dim rstView As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set qdfTemp = dbsNorthwind.CreateQueryDef("", _

"PARAMETERS Länder Text; " & _

"SELECT Vorname, Nachname, Land FROM " & _

"Personal WHERE Land = [Länder] " & _

"ORDER BY Nachname")

Set prmCountry = qdfTemp.Parameters!Länder

qdfTemp.Parameters!Länder = "USA"

Debug.Print "Daten nach erster Abfrage, " & _

"[Länder] = USA"

Set rstView = qdfTemp.OpenRecordset

Do While Not rstView.EOF

Debug.Print "    " & rstView!Vorname & " " & _

rstView!Nachname & ", " & rstView!Land

rstView.MoveNext

Loop

' Abfrageparameter ändern.

qdfTemp.Parameters!Länder = "UK"

' QueryDef-Argument muß in Anführungszeichen

' eingeschlossen werden, damit

' das Ergebnis-Recordset den geänderten

' Abfrageparameter berücksichtigt.

rstView.Requery qdfTemp

Debug.Print "Nach Ändern des Parameters " & _

"erneute Abfrage, [Länder] = UK"

Do While Not rstView.EOF

Debug.Print "    " & rstView!Vorname & " " & _

rstView!Nachname & ", " & rstView!Land

rstView.MoveNext

Loop

rstView.Close

dbsNorthwind.Close

End Sub


SetOption-Methode (Beispiel)

Dieses Beispiel ändert mit der SetOption-Methode die Werte von zwei Registrierungsschlüsseln entsprechend der Eingabe des Benutzers. Die SetOption-Methode überschreibt gespeicherte Registrierungswerte nur für aktuelle Anwendungen. Die gespeicherten Einstellungen bleiben unverändert; sie sind die Werte, die Benutzer mit REGEDIT.EXE anzeigen können.

Sub SetOptionX()

Dim intExclusiveDelay As Integer

Dim intSharedDelay As Integer

' Benutzer zur Eingabe der neuen Werte für

' Registrierungsschlüssel ExclusiveAsyncDelay

' und SharedAsyncDelay auffordern.

intExclusiveDelay = Val(InputBox("Neuer Wert " & _

"für den Registrierungsschlüssel" & _

"ExclusiveAsyncDelay (in Millisekunden):"))

intSharedDelay = Val(InputBox("Neuer Wert " & _

"für den Registrierungsschlüssel " & _

"SharedAsyncDelay (in Millisekunden):"))

If intExclusiveDelay > 0 And intSharedDelay > 0 Then

' Werte der Registrierungsschlüssel ändern.

SetOption dbExclusiveAsyncDelay, intExclusiveDelay

SetOption dbSharedAsyncDelay, intSharedDelay

MsgBox "Registrierungsschlüssel für die " & _

"Dauer des Programms auf die neuen " & _

"Werte geändert."

Else

MsgBox "Registrierungsschlüssel unverändert."

End If

End Sub


Synchronize-Methode (Beispiel)

In diesen vier Beispielen wird mit der Synchronize-Methode der einseitige und der beidseitige Austausch von Informationen zwischen zwei Elementen in einer Replikatsgruppe gezeigt. Sie funktionieren, wenn Sie die Nordwind.mdb zu einem Entwurfs-Master (Design Master) konvertiert haben (siehe Replicable-Eigenschaft) und daraus ein Replikat erstellt haben. Der Replikatname wird als NWREPLICA.MDB angegeben. Ändern Sie den Replikatnamen entsprechend Ihren Anforderungen, oder erstellen Sie mit der MakeReplica-Methode ein Replikat, sofern benötigt.

Dieses Beispiel sendet die Änderungen des Nordwind-Entwurfs-Master (Design Master) an Nwreplica. Passen Sie die Pfade entsprechend an.

Sub SendChangeToReplicaX()

Dim dbsNorthwind As Database

' Replizierbare Datenbank Nordwind.mdb öffnen.

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Daten oder Strukturveränderungen an das Replikat

' senden.

dbsNorthwind.Synchronize "Nwreplica.mdb", _

dbRepExportChanges

dbsNorthwind.Close

End Sub

In diesem Beispiel erhält die replizierbare Datenbank Nordwind.mdb Änderungen vom Replikat im Pfad Nwreplica. Führen Sie diese Prozedur von der Datenbank aus, die die Änderungen erhält.

Sub ReceiveChangeX()

Dim dbsNorthwind As Database

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Daten vom Replikat an den Entwurfs-Master (Design

' Master) senden.

dbsNorthwind.Synchronize "Nwreplica.mdb", _

dbRepImportChanges

dbsNorthwind.Close

End Sub

In diesem Beispiel werden die Änderungen sowohl von der replizierbaren Datenbank Nordwind als auch von einem Replikat ausgetauscht. Dies ist das Standardargument für diese Methode.

Sub TwoWayExchangeX()

Dim dbsNorthwind As Database

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Änderungen, die in dem jeweiligen Replikat

' vorgenommen wurden, an das andere Replikat

' senden.

dbsNorthwind.Synchronize "Nwreplica.mdb", _

dbRepImpExpChanges

dbsNorthwind.Close

End Sub

Im folgenden Code-Beispiel werden zwei Datenbanken über das Internet synchronisiert.

Sub InternetSynchronizeX()

Dim dbsTemp As Database

Set dbsTemp = OpenDatabase("C:\Daten\BestEing.mdb")

' Lokale Datenbank mit dem Replikat auf dem

' Internet Server synchronisieren.

dbsTemp.Synchronize _

"www.firma1.server1.de" _

& "/Dateien/Bestellungen.mdb", _

dbRepImpExpChanges + dbRepSyncInternet

dbsTemp.Close

End Sub


AbsolutePosition-Eigenschaft (Beispiel)

Dieses Beispiel verwendet die AbsolutePosition-Eigenschaft, um den Verlauf einer Schleife, die alle Datensätze eines Recordset-Objekts aufzählt, zu verfolgen.

Sub AbsolutePositionX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim strMessage As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' AbsolutePosition funktioniert nur mit

' Dynaset oder Snapshot.

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenSnapshot)

With rstEmployees

' Recordset auffüllen.

.MoveLast

.MoveFirst

' Recordset durchlaufen.

Do While Not .EOF

' Informationen zum aktuellen Datensatz

' anzeigen. 1 zum Wert von AbsolutePosition

' addieren, da die Werte mit Null beginnen.

strMessage = "Personal: " & !Nachname & vbCr & _

"(Datensatz " & (.AbsolutePosition + 1) & _

" von " & .RecordCount & ")"

If MsgBox(strMessage, vbOKCancel) = vbCancel _

Then Exit Do

.MoveNext

Loop

.Close

End With

dbsNorthwind.Close

End Sub


AllowZeroLength-Eigenschaft (Beispiel)

In diesem Beispiel ermöglicht die AllowZeroLength-Eigenschaft dem Benutzer, den Wert eines Field-Objekts auf eine leere Zeichenfolge zu setzen. So kann der Benutzer zwischen einem Datensatz, in dem Daten nicht bekannt sind, und einem Datensatz, in dem Daten nicht angewendet werden können, unterscheiden.

Sub AllowZeroLengthX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim fldTemp As Field

Dim rstEmployees As Recordset

Dim strMessage As String

Dim strInput As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfEmployees = dbsNorthwind.TableDefs("Personal")

' Ein neues Field-Objekt erstellen und dieses der

' Fields-Auflistung in der Tabelle Personal anfügen.

Set fldTemp = tdfEmployees.CreateField("FaxTelefon", _

dbText, 24)

fldTemp.AllowZeroLength = True

tdfEmployees.Fields.Append fldTemp

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

With rstEmployees

' Benutzer zur Eingabe auffordern.

.Edit

strMessage = "Faxnummer eingeben für " & _

!Vorname & " " & !Nachname & "." & vbCr & _

"[? - unbekannt, X - Kein Fax vorhanden]"

strInput = UCase(InputBox(strMessage))

If strInput <> "" Then

Select Case strInput

Case "?"

!FaxTelefon = Null

Case "X"

! FaxTelefon = ""

Case Else

! FaxTelefon = strInput

End Select

.Update

' Bericht ausgeben.

Debug.Print "Name - Faxnummer"

Debug.Print !Vorname & " " & !Nachname & " - ";

If IsNull(!FaxTelefon) Then

Debug.Print "[Unbekannt]"

Else

If ! FaxTelefon = "" Then

Debug.Print "[Kein Fax vorhanden]"

Else

Debug.Print ! FaxTelefon

End If

End If

Else

.CancelUpdate

End If

.Close

End With

' Neue Felder löschen, da dies ein Beispiel ist.

tdfEmployees.Fields.Delete fldTemp.Name

dbsNorthwind.Close

End Sub


BOF- und EOF-Eigenschaften (Beispiel)

Dieses Beispiel zeigt, wie sich Benutzer mit den Eigenschaften BOF und EOF in einem Recordset-Objekt vorwärts und rückwärts bewegen können.

Sub BOFX()

Dim dbsNorthwind As Database

Dim rstCategories As Recordset

Dim strMessage As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstCategories = _

dbsNorthwind.OpenRecordset("Kategorien", _

dbOpenSnapshot)

With rstCategories

' Recordset auffüllen.

.MoveLast

.MoveFirst

Do While True

' Informationen zum aktuellen Datensatz anzeigen

' und Benutzer zur Eingabe auffordern.

strMessage = "Kategorie: " & !Kategoriename & _

vbCr & "(Datensatz " & (.AbsolutePosition + 1) & _

" von " & .RecordCount & ")" & vbCr & vbCr & _

" 1 eingeben, um vorwärts zu gehen, 2 eingeben, um rückwärts zu gehen:"

' Vorwärts oder Rückwärts bewegen und BOF oder EOF markieren.

Select Case InputBox(strMessage)

Case 1

.MoveNext

If .EOF Then

MsgBox _

"Dateiende!" & vbCr & _

"Zeiger wird auf den letzten Datensatz gesetzt."

.MoveLast

End If

Case 2

.MovePrevious

If .BOF Then

MsgBox _

"Dateianfang!" & vbCr & _

"Zeiger wird auf den ersten Datensatz gesetzt."

.MoveFirst

End If

Case Else

Exit Do

End Select

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Bookmark- und Bookmarkable-Eigenschaften (Beispiel)

Dieses Beispiel verwendet die Eigenschaften Bookmark und Bookmarkable, die es Benutzern ermöglicht, einen Datensatz in einem Recordset zu markieren, um später dorthin zurückzukehren.

Sub BookmarkX()

Dim dbsNorthwind As Database

Dim rstCategories As Recordset

Dim strMessage As String

Dim intCommand As Integer

Dim varBookmark As Variant

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstCategories = _

dbsNorthwind.OpenRecordset("Kategorien", _

dbOpenSnapshot)

With rstCategories

If .Bookmarkable = False Then

Debug.Print "Recordset hat keine Bookmarkable-Eigenschaft!"

Else

' Recordset auffüllen.

.MoveLast

.MoveFirst

Do While True

' Informationen zum aktuellen Datensatz ausgeben

' und Benutzer zur Eingabe auffordern.

strMessage = "Kategorie: " & !Kategoriename & _

" (Datensatz " & (.AbsolutePosition + 1) & _

" von " & .RecordCount & ")" & vbCr & _

"Befehl eingeben:" & vbCr & _

"[1 - Nächster / 2 - Vorheriger /" & vbCr & _

"3 - Lesezeichen setzen / 4 - Gehe zu Lesezeichen]"

intCommand = Val(InputBox(strMessage))

Select Case intCommand

' Vorwärts oder rückwärts gehen, BOF

' oder EOF überspringen und mit dem

' jeweils anderen Ende fortfahren.

Case 1

.MoveNext

If .EOF Then .MoveLast

Case 2

.MovePrevious

If .BOF Then .MoveFirst

' Lesezeichen des aktuellen Datensatzes speichern.

Case 3

varBookmark = .Bookmark

' Zum Datensatz gehen, der durch das gespeicherte

' Lesezeichen angezeigt wird.

Case 4

If IsEmpty(varBookmark) Then

MsgBox "Keine Bookmark-Eigenschaft festgelegt!"

Else

.Bookmark = varBookmark

End If

Case Else

Exit Do

End Select

Loop

End If

.Close

End With

dbsNorthwind.Close

End Sub


Count-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die Count-Eigenschaft zusammen mit drei verschiedenen Auflistungen aus der Nordwind-Datenbank. Die Eigenschaft erhält die Anzahl der Objekte in jeder Auflistung und setzt die Höchstgrenze für die Schleifen fest, die die Auflistungen durchlaufen. Eine andere Möglichkeit, durch diese Auflistungen zu gehen, ohne die Count-Eigenschaft zu verwenden, ist die Verwendung von For Each...Next-Anweisungen.

Sub CountX()

Dim dbsNorthwind As Database

Dim intloop As Integer

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Informationen zu TableDefs-Auflistung ausgeben.

Debug.Print .TableDefs.Count & _

" TableDefs in Nordwind-Datenbank"

For intloop = 0 To .TableDefs.Count - 1

Debug.Print "    " & .TableDefs(intloop).Name

Next intloop

' Informationen zu QueryDefs-Auflistung ausgeben.

Debug.Print .QueryDefs.Count & _

" QueryDefs in Nordwind-Datenbank"

For intloop = 0 To .QueryDefs.Count - 1

Debug.Print "    " & .QueryDefs(intloop).Name

Next intloop

' Informationen zu Relations-Auflistung ausgeben.

Debug.Print .Relations.Count & _

" Relations-Auflistung in Nordwind"

For intloop = 0 To .Relations.Count - 1

Debug.Print "    " & .Relations(intloop).Name

Next intloop

.Close

End With

End Sub


DataUpdatable-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die DataUpdatable-Eigenschaft, die das erste Feld aus sechs verschiedenen Recordset-Objekten verwendet. Die Funktion DataOutput wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub DataUpdatableX()

Dim dbsNorthwind As Database

Dim rstNorthwind As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Bericht über Recordset-Objekt vom Typ Tabelle öffnen und ausgeben.

Set rstNorthwind = .OpenRecordset("Personal")

DataOutput rstNorthwind

' Bericht über Recordset-Objekt vom Typ Dynaset öffnen und ausgeben.

Set rstNorthwind = .OpenRecordset("Personal", _

dbOpenDynaset)

DataOutput rstNorthwind

' Bericht über Recordset-Objekt vom Typ Snapshot öffnen und ausgeben.

Set rstNorthwind = .OpenRecordset("Personal", _

dbOpenSnapshot)

DataOutput rstNorthwind

' Bericht über Recordset-Objekt vom Typ Vorwärts öffnen und ausgeben.

Set rstNorthwind = .OpenRecordset("Personal", _

dbOpenForwardOnly)

DataOutput rstNorthwind

' Bericht über ein Recordset-Objekt basierend auf

' einer Auswahlabfrage öffnen und ausgeben.

Set rstNorthwind = _

.OpenRecordset("Artikel")

Set rstNorthwind = _

.OpenRecordset("Liste der aktuellen Artikel")

DataOutput rstNorthwind

' Bericht über ein Recordset-Objekt basierend auf einer Auswahlabfrage,

' die das Gesamtergebnis ermittelt, öffnen und ausgeben.

Set rstNorthwind = .OpenRecordset("Bestellungen")

Set rstNorthwind = .OpenRecordset("Bestellzwischensummen")

DataOutput rstNorthwind

.Close

End With

End Sub

Function DataOutput(rstTemp As Recordset)

With rstTemp

Debug.Print "Datensatz: " & .Name & ", ";

Select Case .Type

Case dbOpenTable

Debug.Print "dbOpenTable"

Case dbOpenDynaset

Debug.Print "dbOpenDynaset"

Case dbOpenSnapshot

Debug.Print "dbOpenSnapshot"

Case dbOpenForwardOnly

Debug.Print "dbOpenForwardOnly"

End Select

Debug.Print "    Feld: " & .Fields(0).Name & ", " & _

"DataUpdatable = " & .Fields(0).DataUpdatable

Debug.Print

.Close

End With

End Function


DateCreated-, LastUpdated-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die Eigenschaften DateCreated und LastUpdated, wie sie einem vorhandenen TableDef-Objekt ein neues Field-Objekt hinzufügen, und wie mit den Eigenschaften ein neues TableDef-Objekt erstellt wird. Die Funktion DateOutput wird benötigt, damit diese Prozedur ausgeführt werden kann.

Sub DateCreatedX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim tdfNewTable As TableDef

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

Set tdfEmployees = .TableDefs!Personal

With tdfEmployees

' Aktuelle Informationen zur Tabelle

' Personal ausgeben.

DateOutput "Aktuelle Eigenschaften ", tdfEmployees

' Ein Feld erstellen und der Tabelle Personal anfügen.

.Fields.Append .CreateField("NeuesFeld", dbDate)

' Neue Informationen zur Tabelle Personal

' ausgeben.

DateOutput "Nach Erstellen eines neuen Field-Objekts ", _

tdfEmployees

' Neues Field-Objekt löschen, da dies ein Beispiel ist.

.Fields.Delete "NeuesFeld"

End With

' Neues TableDef-Objekt erstellen und an

' Nordwind-Datenbank anfügen.

Set tdfNewTable = .CreateTableDef("NewTableDef")

With tdfNewTable

.Fields.Append .CreateField("NeuesFeld", dbDate)

End With

.TableDefs.Append tdfNewTable

' Informationen zu neuem TableDef-Objekt ausgeben.

DateOutput "Nach Erstellen einer neuen Tabelle ", tdfNewTable

' Neues TableDef-Objekt löschen, da dies ein

' Beispiel ist.

.TableDefs.Delete tdfNewTable.Name

.Close

End With

End Sub

Function DateOutput(strTemp As String, _

tdfTemp As TableDef)

' Informationen zu den Eigenschaften DateCreated und

' LastUpdated zum angegebenen TableDef-Objekt ausgeben.

Debug.Print strTemp

Debug.Print "    TableDef: " & tdfTemp.Name

Debug.Print "        DateCreated = " & _

tdfTemp.DateCreated

Debug.Print "        LastUpdated = " & _

tdfTemp.LastUpdated

Debug.Print

End Function


DefaultValue-Eigenschaft (Beispiel)

Dieses Beispiel verwendet die DefaultValue-Eigenschaft, um Benutzer auf den normalen Wert eines Feldes aufmerksam zu machen, während sie zur Eingabe aufgefordert werden. Außerdem zeigt es, wie neue Datensätze mit DefaulValue aufgefüllt werden, wenn keine andere Eingabe erfolgt. Die Funktion DefaultPrompt wird benötigt, damit diese Prozedur ausgeführt werden kann.

Sub DefaultValueX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim strOldDefault As String

Dim rstEmployees As Recordset

Dim strMessage As String

Dim strCode As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfEmployees = dbsNorthwind.TableDefs!Personal

' Ursprüngliche DefaultValue-Informationen speichern und

' einen neuen Wert für die Eigenschaft festlegen.

strOldDefault = _

tdfEmployees.Fields!PLZ.DefaultValue

tdfEmployees.Fields!PLZ.DefaultValue = "44147"

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenDynaset)

With rstEmployees

' Recordset-Objekt neuen Datensatz hinzufügen.

.AddNew

!Vorname = "Bernd"

!Nachname = "Oberg"

' Benutzereingabe bestimmen. Wenn der Benutzer Daten eingibt,

' werden diese in das Feld eingetragen.

' Andernfalls wird das Feld mit den Informationen der

' DefaultValue-Eigenschaft aufgefüllt.

strMessage = "Postleitzahl eingeben für " & vbCr & _

!Vorname & " " & !Nachname & ":"

strCode = DefaultPrompt(strMessage, !PLZ)

If strCode <> "" Then !PLZ = strCode

.Update

' Zum neuen Datensatz gehen und Informationen ausgeben.

.Bookmark = .LastModified

Debug.Print "    Vorname = " & !Vorname

Debug.Print "    Nachname = " & !Nachname

Debug.Print "    PLZ = " & !PLZ

' Neuen Datensatz löschen, da dies ein Beispiel ist.

.Delete

.Close

End With

' Ursprüngliche DefaultValue-Eigenschaft wiederherstellen,

' da dies ein Beispiel ist.

tdfEmployees.Fields!PLZ.DefaultValue = _

strOldDefault

dbsNorthwind.Close

End Sub

Function DefaultPrompt(strPrompt As String, _

fldTemp As Field) As String

Dim strFullPrompt As String

' Benutzer zur Eingabe der neuen DefaultValue-Einstellungen für das

' angegebene Field-Objekt auffordern.

strFullPrompt = strPrompt & vbCr & _

"[Voreinstellung = " & fldTemp.DefaultValue & _

", Abbrechen - Voreinstellung verwenden]"

DefaultPrompt = InputBox(strFullPrompt)

End Function


DistinctCount-Eigenschaft (Beispiel)

Dieses Beispiel zeigt mit der DistinctCount-Eigenschaft, wie in einem Index-Objekt die Anzahl der eindeutigen Werte festgestellt werden kann. Dieser Wert ist jedoch nur unmittelbar nachdem der Index erstellt wurde fehlerfrei. Er bleibt korrekt, wenn kein Schlüssel verändert oder keine neuen Schlüssel hinzugefügt oder alte Schlüssel entfernt werden, andernfalls ist dieser Wert nicht zuverlässig. (Wenn die Prozedur mehrfach ausgeführt wird, können Sie die Auswirkungen der DistinctCount-Eigenschaft auf die Werte der vorhandenen Index-Objekte sehen.)

Sub DistinctCountX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim idxCountry As Index

Dim idxLoop As Index

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfEmployees = dbsNorthwind!Personal

With tdfEmployees

' Neues Index-Objekt erstellen und an

' Tabelle Personal anfügen.

Set idxCountry = .CreateIndex("LandIndex")

idxCountry.Fields.Append _

idxCountry.CreateField("Land")

.Indexes.Append idxCountry

' Die Auflistung muß aktualisiert werden, damit

' die neuen Daten der DistinctCount-Eigenschaft verfügbar sind.

.Indexes.Refresh

' Indexes-Auflistung durchlaufen, um die aktuellen Werte der

' DistinctCount-Eigenschaft zu zeigen.

Debug.Print "Indexes-Objekt vor Hinzufügen eines neuen Datensatzes."

For Each idxLoop In .Indexes

Debug.Print "    DistinctCount = " & _

idxLoop.DistinctCount & ", Name = " & _

idxLoop.Name

Next idxLoop

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

' Neuen Datensatz der Tabelle Personal hinzufügen.

With rstEmployees

.AddNew

!Vorname = "April"

!Nachname = "LaMonte"

!Land = "Kanada"

.Update

End With

' Indexes-Auflistung durchlaufen, um veränderte

' DistinctCount-Werte zu zeigen.

Debug.Print "Indexes-Objekt nach Hinzufügen neuer Datensätze und " & _

"Aktualisieren des Indexes-Objekt"

.Indexes.Refresh

For Each idxLoop In .Indexes

Debug.Print "    DistinctCount = " & _

idxLoop.DistinctCount & ", Name = " & _

idxLoop.Name

Next idxLoop

' Neuen Datensatz löschen, da dies ein Beispiel ist.

With rstEmployees

.Bookmark = .LastModified

.Delete

.Close

End With

' Neues Index-Objekt löschen, da dies ein Beispiel ist.

.Indexes.Delete idxCountry.Name

End With

dbsNorthwind.Close

End Sub


EditMode-Eigenschaft (Beispiel)

Dieses Beispiel zeigt den Wert der EditMode-Eigenschaft unter verschiedenen Einstellungen. Die Funktion EditModeOutput wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub EditModeX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenDynaset)

' EditMode-Eigenschaft in verschiedenen

' Bearbeitungsstati zeigen.

With rstEmployees

EditModeOutput "Vor Edit oder AddNew:", .EditMode

.Edit

EditModeOutput "Nach Edit:", .EditMode

.Update

EditModeOutput "Nach Update:", .EditMode

.AddNew

EditModeOutput " Nach AddNew:", .EditMode

.CancelUpdate

EditModeOutput " Nach CancelUpdate:", .EditMode

.Close

End With

dbsNorthwind.Close

End Sub

Function EditModeOutput(strTemp As String, _

intEditMode As Integer)

' Bericht basierend auf dem Wert der

' EditMode-Eigenschaft ausgeben.

Debug.Print strTemp

Debug.Print "    EditMode = ";

Select Case intEditMode

Case dbEditNone

Debug.Print "dbEditNone"

Case dbEditInProgress

Debug.Print "dbEditInProgress"

Case dbEditAdd

Debug.Print "dbEditAdd"

End Select

End Function


FieldSize-Eigenschaft (Beispiel)

Dieses Beispiel verwendet die FieldSize-Eigenschaft, um eine Reihe von Bytes, die von den Field-Objekten vom Typ Memo und Long Binary verwendet werden, in zwei unterschiedlichen Tabellen aufzulisten.

Sub FieldSizeX()

Dim dbsNorthwind As Database

Dim rstCategories As Recordset

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstCategories = _

dbsNorthwind.OpenRecordset("Kategorien", _

dbOpenDynaset)

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenDynaset)

Debug.Print _

"Feldgrößen der Datensätze in der Tabelle Kategorien."

With rstCategories

Debug.Print "    Kategoriename - " & _

"Beschreibung (Bytes) - Abbildung (Bytes)"

' Datensatzgruppe Kategorien durchlaufen und die

' Größe des Feldes Abbildung eines

' jeden Datensatzes in Bytes ausgeben.

Do While Not .EOF

Debug.Print "        " & !Kategoriename & " - " & _

!Beschreibung.FieldSize & " - " & _

!Abbildung.FieldSize

.MoveNext

Loop

.Close

End With

Debug.Print " Feldgrößen der Datensätze in der Tabelle Personal."

With rstEmployees

Debug.Print "    Nachname - Bemerkungen (Bytes) - " & _

"Foto (Bytes)"

' Die Datensatzgruppe Personal durchlaufen und die

' Größe des Feldes Foto eines

' jeden Datensatzes in Bytes ausgeben.

Do While Not .EOF

Debug.Print "        " & !Nachname & " - " & _

!Bemerkungen.FieldSize & " - " & !Foto.FieldSize

.MoveNext

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Filter-Eigenschaft (Beispiel)

Dieses Beispiel erstellt mit der Filter-Eigenschaft aus einem vorhandenen Recordset-Objekt ein neues Recordset-Objekt, basierend auf einer vorgegebenen Bedingung. Die Funktion FilterField wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub FilterX()

Dim dbsNorthwind As Database

Dim rstOrders As Recordset

Dim intOrders As Integer

Dim strCountry As String

Dim rstOrdersCountry As Recordset

Dim strMessage As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstOrders = dbsNorthwind.OpenRecordset("Bestellungen", _

dbOpenSnapshot)

'Recordset auffüllen.

rstOrders.MoveLast

intOrders = rstOrders.RecordCount

' Benutzer zur Eingabe auffordern.

strCountry = Trim(InputBox( _

"Ein Land für den Filter eingeben.:"))

If strCountry <> "" Then

' Recordset-Objekt mit Filter öffnen.

Set rstOrdersCountry = _

FilterField(rstOrders, "Bestimmungsland", strCountry)

With rstOrdersCountry

' Bevor Recordset-Objekt aufgefüllt wird, RecordCount-Eigenschaft überprüfen;

' sonst kann ein Fehler auftreten.

If .RecordCount <> 0 Then .MoveLast

' Anzahl der Datensätze des ursprünglichen

' und des gefilterten Recordset-Objekts

' ausgeben.

strMessage = "Bestellungen im ursprünglichen Datensatz: " & _

vbCr & intOrders & vbCr & _

" Bestellungen im gefilterten Datensatz (Land = '" & _

strCountry & "'): " & vbCr & .RecordCount

MsgBox strMessage

.Close

End With

End If

rstOrders.Close

dbsNorthwind.Close

End Sub

Function FilterField(rstTemp As Recordset, _

strField As String, strFilter As String) As Recordset

' Den Filter auf das angegebene Recordset-Objekt setzen,

' und dann ein neues Recordset-Objekt öffnen.

rstTemp.Filter = strField & " = '" & strFilter & "'"

Set FilterField = rstTemp.OpenRecordset

End Function

Anmerkung   Wenn Sie sehen wollen, wie sich der Filter auf rstOrders auswirkt, müssen Sie dessen Filter-Eigenschaften setzen und dann ein zweites Recordset-Objekt öffnen, daß auf rstOrders basiert.

Anmerkung   Wenn Sie die Daten kennen, die Sie auswählen möchten, ist es meistens einfacher, ein Recordset mit einer SQL-Anweisung zu erstellen. Dieses Beispiel zeigt, wie Sie ein einzelnes Recordset-Objekt erstellen können und Datensätze aus einem bestimmten Land erhalten können.

Sub FilterX2()

Dim dbsNorthwind As Database

Dim rstOrders As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Recordset-Objekt öffnen, das Datensätze aus einer

' Tabelle auswählt, die auf dem Bestimmungsland basiert.

Set rstOrders = _

dbsNorthwind.OpenRecordset("SELECT * " & _

"FROM Bestellungen WHERE Bestimmungsland = 'USA'", _

dbOpenSnapshot)

rstOrders.Close

dbsNorthwind.Close

End Sub


Foreign-Eigenschaft (Beispiel)

Dieses Beispiel zeigt, wie die Foreign-Eigenschaft anzeigt, welche Index-Objekte in einem TableDef-Objekt Fremdschlüssel-Indizes sind. Diese Indizes werden von dem Microsoft Jet-Datenbankmodul erstellt, wenn ein Relation-Objekt erstellt wird. Der Standardname eines Fremdschlüsselindizes ist der Name der Primärtabelle zusammen mit dem Namen der Fremdtabelle. Die Funktion ForeignOutput wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub ForeignX()

Dim dbsNorthwind As Database

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Bericht über Fremdschlüssel-Indizes in zwei

' TableDef-Objekten und einem QueryDef-Objekt ausgeben.

ForeignOutput .TableDefs!Artikel

ForeignOutput .TableDefs!Bestellungen

ForeignOutput .TableDefs!Bestelldetails

.Close

End With

End Sub

Function ForeignOutput(tdfTemp As TableDef)

Dim idxLoop As Index

With tdfTemp

Debug.Print "Index-Objekt in " & .Name & " TableDef"

' Die Indexes-Auflistung des angegebenen

' TableDef-Objekts durchlaufen.

For Each idxLoop In .Indexes

Debug.Print "    " & idxLoop.Name

Debug.Print "        Foreign = " & idxLoop.Foreign

Next idxLoop

End With

End Function


ForeignName-, ForeignTable- und Table-Eigenschaften (Beispiel)

Dieses Beispiel zeigt, wie die Eigenschaften Table, ForeignTable und ForeignName die Begriffe eines Relation-Objekts zwischen zwei Tabellen definieren.

Sub ForeignNameX()

Dim dbsNorthwind As Database

Dim relLoop As Relation

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Debug.Print "Relation"

Debug.Print "                     Tabelle - Feld"

Debug.Print "    Primary (Eins)   ";

Debug.Print ".Table - .Fields(0).Name"

Debug.Print "    Foreign (Viele)  ";

Debug.Print ".ForeignTable - .Fields(0).ForeignName"

' Die Relations-Auflistung der Nordwind -Datenbank

' wird durchlaufen, um die Eigenschaftswerte der

' Relation-Objekte und deren Field-Objekte auszugeben.

For Each relLoop In dbsNorthwind.Relations

With relLoop

Debug.Print

Debug.Print .Name & " Relation"

Debug.Print "                     Tabelle - Feld"

Debug.Print "    Primary (Eins)   ";

Debug.Print .Table & " - " & .Fields(0).Name

Debug.Print "    Foreign (Viele)  ";

Debug.Print .ForeignTable & " - " & _

.Fields(0).ForeignName

End With

Next relLoop

dbsNorthwind.Close

End Sub


IgnoreNulls-Eigenschaft (Beispiel)

Dieses Beispiel setzt die IgnoreNulls-Eigenschaft eines neuen Index-Objekts auf den Wert True oder False, abhängig von der Eingabe des Benutzers, und zeigt dann die Auswirkungen auf ein Recordset-Objekt, dessen Schlüsselfelder einen Null-Wert enthalten.

Sub IgnoreNullsX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim idxNew As Index

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfEmployees = dbsNorthwind!Personal

With tdfEmployees

' Neues Index-Objekt erstellen.

Set idxNew = .CreateIndex("NeuerIndex")

idxNew.Fields.Append idxNew.CreateField("Land")

' Die IgnoreNulls-Eigenschaft des neuen Index-Objekts

' abhängig von der Benutzereingabe festlegen.

Select Case MsgBox("IgnoreNulls auf den Wert True festlegen?", _

vbYesNoCancel)

Case vbYes

idxNew.IgnoreNulls = True

Case vbNo

idxNew.IgnoreNulls = False

Case Else

dbsNorthwind.Close

End

End Select

' Neues Index-Objekt der Indexes-Auflistung

' der Tabelle Personal anfügen.

.Indexes.Append idxNew

.Indexes.Refresh

End With

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

With rstEmployees

' Neuen Datensatz der Tabelle Personal hinzufügen.

.AddNew

!Vorname = "Gert"

!Nachname = "Haarsager"

.Update

' Mit dem neuen Index die Reihenfolge der Datensätze festlegen.

.Index = idxNew.Name

.MoveFirst

Debug.Print "Index = " & .Index & _

", IgnoreNulls = " & idxNew.IgnoreNulls

Debug.Print "    Land - Name"

' Recordset durchlaufen. Der Wert der

' IgnoreNulls-Eigenschaft legt fest, ob der neu

' hinzugefügte Datensatz in der Ausgabe angezeigt wird.

Do While Not .EOF

Debug.Print "        " & _

IIf(IsNull(!Land), "[Null]", !Land) & _

" - " & !Vorname & " " & !Nachname

.MoveNext

Loop

' Neuen Datensatz löschen, da dies ein Beispiel ist.

.Index = ""

.Bookmark = .LastModified

.Delete

.Close

End With

' Neues Index-Objekt löschen, da dies ein Beispiel ist.

tdfEmployees.Indexes.Delete idxNew.Name

dbsNorthwind.Close

End Sub


Index-Eigenschaft (Beispiel)

Dieses Beispiel verwendet die Index-Eigenschaft, um verschiedene Sortierreihenfolgen der Datensätze eines Recordset-Objekts vom Typ Tabelle festzulegen.

Sub IndexPropertyX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim rstEmployees As Recordset

Dim idxLoop As Index

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

Set tdfEmployees = dbsNorthwind.TableDefs!Personal

With rstEmployees

' Indexes-Auflistung der Tabelle Personal durchlaufen.

For Each idxLoop In tdfEmployees.Indexes

.Index = idxLoop.Name

Debug.Print "Index = " & .Index

Debug.Print "        Personal-Nr - PLZ - Name"

.MoveFirst

' Recordset durchlaufen, um Reihenfolge der Datensätze zu zeigen.

Do While Not .EOF

Debug.Print "        " & ![Personal-Nr] & " - " & _

!PLZ & " - " & !Vorname & " " & _

!Nachname

.MoveNext

Loop

Next idxLoop

.Close

End With

dbsNorthwind.Close

End Sub


LastModified-Eigenschaft (Beispiel)

Dieses Beispiel setzt mit der LastModified-Eigenschaft den aktuellen Datensatzzeiger sowohl auf einen gerade veränderten Datensatz als auch auf einen neu erstellten Datensatz.

Sub LastModifiedX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim strFirst As String

Dim strLast As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenDynaset)

With rstEmployees

' Aktuelle Daten speichern.

strFirst = !Vorname

strLast = !Nachname

' Daten im aktuellen Datensatz ändern.

.Edit

!Vorname = "Julie"

!Nachname = "Warren"

.Update

' Aktuellen Datensatzzeiger auf den zuletzt geänderten

' oder hinzugefügten Datensatz setzen.

.Bookmark = .LastModified

Debug.Print _

"Daten im Datensatz in LastModified nach Edit: " & _

!Vorname & " " & !Nachname

' Ursprüngliche Daten wiederherstellen, da dies ein Beispiel ist.

.Edit

!Vorname = strFirst

!Nachname = strLast

.Update

' Neuen Datensatz hinzufügen.

.AddNew

!Vorname = "Robert"

!Nachname = "Hartmann"

.Update

' Aktuellen Datensatzzeiger auf den zuletzt geänderten

' oder hinzugefügten Datensatz setzen.

.Bookmark = .LastModified

Debug.Print _

"Daten im Datensatz in LastModified nach AddNew: " & _

!Vorname & " " & !Nachname

' Neuen Datensatz löschen, da dies ein Beispiel ist.

.Delete

.Close

End With

dbsNorthwind.Close

End Sub


LockEdits-Eigenschaft (Beispiel)

Dieses Beispiel zeigt das vollständige Sperren, indem die LockEdits-Eigenschaft auf den Wert True festgelegt wird, und zeigt dann das eingeschränkte Sperren, indem die LockEdits-Eigenschaft auf den Wert False festgelegt wird. Außerdem zeigt es, welche Fehlerbehandlung in einer Mehrbenutzerdatenbankumgebung erforderlich ist, um ein Feld zu verändern. Die Funktionen PessimisticLock und OptimisticLock werden benötigt, damit diese Prozeduren ausgeführt werden können.

Sub LockEditsX()

Dim dbsNorthwind As Database

Dim rstCustomers As Recordset

Dim strOldName As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstCustomers = _

dbsNorthwind.OpenRecordset("Kunden", _

dbOpenDynaset)

With rstCustomers

' Ursprüngliche Daten speichern.

strOldName = !Firma

If MsgBox("Vollständiges Sperren zeigen...", _

vbOKCancel) = vbOK Then

' Daten sollten bearbeitet werden, die

' gesperrt sind.

If PessimisticLock(rstCustomers, !Firma, _

"Acme-Lebensmittel") Then

MsgBox "Datensatz erfolgreich bearbeitet."

' Ursprüngliche Daten wiederherstellen...

.Edit

!Firma = strOldName

.Update

End If

End If

If MsgBox("Eingeschränktes Sperren zeigen...", _

vbOKCancel) = vbOK Then

' Versuch der Modifizierung von Daten mit

' eingeschränktem Sperren

If OptimisticLock(rstCustomers, !Firma, _

"Acme-Lebensmittel ") Then

MsgBox "Datensatz erfolgreich bearbeitet."

' Ursprüngliche Daten wiederherstellen...

.Edit

!Firma = strOldName

.Update

End If

End If

.Close

End With

dbsNorthwind.Close

End Sub

Function PessimisticLock(rstTemp As Recordset, _

fldTemp As Field, strNew As String) As Boolean

dim ErrLoop as Error

PessimisticLock = True

With rstTemp

.LockEdits = True

' Wenn LockEdits den Wert True hat, werden Fehler aufgefangen,

' wenn die Edit-Methode aufgerufen wird.

On Error GoTo Err_Lock

.Edit

On Error GoTo 0

' Wenn die Edit-Methode noch ausgeführt wird, werden keine

' Fehler ausgelöst: Sie können die Daten verändern.

If .EditMode = dbEditInProgress Then

fldTemp = strNew

.Update

.Bookmark = .LastModified

Else

' Aktuellen Datensatz abrufen, um Änderungen

' anderer Benutzer zu sehen.

.Move 0

End If

End With

Exit Function

Err_Lock:

If DBEngine.Errors.Count > 0 Then

' Errors-Auflistung durchlaufen.

For Each errLoop In DBEngine.Errors

MsgBox "Fehlernummer: " & errLoop.Number & _

vbCr & errLoop.Description

Next errLoop

PessimisticLock = False

End If

Resume Next

End Function

Function OptimisticLock(rstTemp As Recordset, _

fldTemp As Field, strNew As String) As Boolean

dim ErrLoop as Error

OptimisticLock = True

With rstTemp

.LockEdits = False

.Edit

fldTemp = strNew

' Wenn die LockEdits-Eigenschaft den Wert False hat, werden Fehler aufgefangen,

' wenn Sie die Update-Methode aufrufen.

On Error GoTo Err_Lock

.Update

On Error GoTo 0

' Wenn die Edit-Methode nicht ausgeführt wird, werden keine Fehler ausgelöst;

' sie können dann die Daten bearbeiten.

If .EditMode = dbEditNone Then

' Aktuellen Datensatzzeiger auf den zuletzt

' veränderten Datensatz setzen.

.Bookmark = .LastModified

Else

.CancelUpdate

' Aktuellen Datensatz abrufen, um Änderungen

' anderer Benutzer anzuzeigen.

.Move 0

End If

End With

Exit Function

Err_Lock:

If DBEngine.Errors.Count > 0 Then

' Errors-Auflistung durchlaufen.

For Each errLoop In DBEngine.Errors

MsgBox "Fehlernummer: " & errLoop.Number & _

vbCr & errLoop.Description

Next errLoop

OptimisticLock = False

End If

Resume Next

End Function


NoMatch-Eigenschaft (Beispiel)

Dieses Beispiel legt mit der NoMatch-Eigenschaft fest, ob die Methoden Seek und FindFirst erfolgreich waren, und gibt eine Meldung aus, wenn sie erfolglos waren. Die Prozeduren SeekMatch und FindMatch werden benötigt, damit die Prozedur ausgeführt werden kann.

Sub NoMatchX()

Dim dbsNorthwind As Database

Dim rstProducts As Recordset

Dim rstCustomers As Recordset

Dim strMessage As String

Dim strSeek As String

Dim strCountry As String

Dim varBookmark As Variant

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Voreinstellung ist dbOpenTable; sie wird benötigt,

' falls die Index-Eigenschaft verwendet wird.

Set rstProducts = dbsNorthwind.OpenRecordset("Artikel")

With rstProducts

.Index = "PrimaryKey"

Do While True

' Aktuelle Datensatzinformationen zeigen;

' Benutzer zur Eingabe auffordern.

strMessage = "NoMatch-Eigenschaft mit Seek-Methode" & vbCr & _

"Artikel-Nr: " & ![Artikel-Nr] & vbCr & _

"Artikelname: " & !Artikelname & vbCr & _

"NoMatch = " & .NoMatch & vbCr & vbCr & _

"Geben Sie eine Artikel-Nr ein."

strSeek = InputBox(strMessage)

If strSeek = "" Then Exit Do

' Prozedur aufrufen, die einen Datensatz aufgrund

' der vom Benutzer angegebenen Kennummer sucht.

SeekMatch rstProducts, Val(strSeek)

Loop

.Close

End With

Set rstCustomers = dbsNorthwind.OpenRecordset( _

"SELECT Firma, Land FROM Kunden " & _

"ORDER BY Firma", dbOpenSnapshot)

With rstCustomers

Do While True

' Aktuelle Datensatzinformation anzeigen;

' Benutzer zur Eingabe auffordern.

strMessage = "NoMatch-Eigenschaft mit FindFirst-Methode" & _

vbCr & "Kundenname: " & !Firma & _

vbCr & "Land: " & !Land & vbCr & _

"NoMatch = " & .NoMatch & vbCr & vbCr & _

"Land eingeben, nach dem gesucht werden soll."

strCountry = Trim(InputBox(strMessage))

If strCountry = "" Then Exit Do

' Prozedur aufrufen, die einen Datensatz aufgrund

' der Eingabe eines Landes durch den Benutzer findet.

FindMatch rstCustomers, _

"Land = '" & strCountry & "'"

Loop

.Close

End With

dbsNorthwind.Close

End Sub

Sub SeekMatch(rstTemp As Recordset, _

intSeek As Integer)

Dim varBookmark As Variant

Dim strMessage As String

With rstTemp

' Aktuellen Ort des Datensatzes speichern.

varBookmark = .Bookmark

.Seek "=", intSeek

' Wenn die Seek-Methode fehlschlägt, den Benutzer benachrichtigen und

' zum letzten aktuellen Datensatz zurückkehren.

If .NoMatch Then

strMessage = _

"Nicht gefunden! Zurückkehren zum aktuellen Datensatz. " & _

vbCr & vbCr & "NoMatch = " & .NoMatch

MsgBox strMessage

.Bookmark = varBookmark

End If

End With

End Sub

Sub FindMatch(rstTemp As Recordset, _

strFind As String)

Dim varBookmark As Variant

Dim strMessage As String

With rstTemp

' Ort des aktuellen Datensatzes speichern.

varBookmark = .Bookmark

.FindFirst strFind

' Wenn Find-Methode fehlschlägt, Benutzer benachrichtigen und

' zum zuletzt aktuellen Datensatz zurückkehren.

If .NoMatch Then

strMessage = _

"Nicht gefunden! Zurückkehren zum aktuellen Datensatz." & _

vbCr & vbCr & "NoMatch = " & .NoMatch

MsgBox strMessage

.Bookmark = varBookmark

End If

End With

End Sub


OrdinalPosition-Eigenschaft (Beispiel)

Dieses Beispiel ändert die Werte der OrdinalPosition-Eigenschaft in der Tabelle "Personal" des TableDef-Objekts, um die Field-Reihenfolge in einem daraus hervorgehenden Recordset-Objekt steuern zu können. Indem die OrdinalPosition-Eigenschaft aller Field-Objekte auf 1 festgelegt wird, sortieren alle daraus hervorgehenden Recordset-Objekte die Fields-Objekte in alphabetischer Reihenfolge. Beachten Sie, daß die Werte der OrdinalPosition-Eigenschaft in den Recordset-Objekten nicht den Werten im TableDef-Objekt entsprechen, sondern nur das Ergebnis der Änderungen im TableDef-Objekt wiedergeben.

Sub OrdinalPositionX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim aintPosition() As Integer

Dim astrFieldName() As String

Dim intTemp As Integer

Dim fldTemp As Field

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfEmployees = dbsNorthwind.TableDefs("Personal")

With tdfEmployees

' Ursprüngliche Daten mit der OrdinalPosition-Eigenschaft anzeigen und speichern.

Debug.Print _

"Ursprüngliche Daten mit OrdinalPosition-Eigenschaft in TableDef-Objekt."

ReDim aintPosition(0 To .Fields.Count - 1) As Integer

ReDim astrFieldName(0 To .Fields.Count - 1) As String

For intTemp = 0 To .Fields.Count - 1

aintPosition(intTemp) = _

.Fields(intTemp).OrdinalPosition

astrFieldName(intTemp) = .Fields(intTemp).Name

Debug.Print , aintPosition(intTemp), _

astrFieldName(intTemp)

Next intTemp

' Daten mit OrdinalPosition-Eigenschaft ändern.

For Each fldTemp In .Fields

fldTemp.OrdinalPosition = 1

Next fldTemp

' Neues Recordset-Objekt öffnen, um zu zeigen, wie Daten mit der Eigenschaft

' OrdinalPosition die Reihenfolge der Datensätze beeinflussen.

Debug.Print _

"Daten mit OrdinalPosition-Eigenschaft aus dem daraus hervorgehendem Recordset-Objekt."

Set rstEmployees = dbsNorthwind.OpenRecordset( _

"SELECT * FROM Personal")

For Each fldTemp In rstEmployees.Fields

Debug.Print , fldTemp.OrdinalPosition, fldTemp.Name

Next fldTemp

rstEmployees.Close

' Ursprüngliche Daten wiederherstellen, da dies

' ein Beispiel ist.

For intTemp = 0 To .Fields.Count - 1

.Fields(astrFieldName(intTemp)).OrdinalPosition = _

aintPosition(intTemp)

Next intTemp

End With

dbsNorthwind.Close

End Sub


PercentPosition-Eigenschaft (Beispiel)

Dieses Beispiel zeigt mit der PercentPosition-Eigenschaft die Position des aktuellen Datensatzzeigers in Relation zum Anfang des Recordset-Objekts.

Sub PercentPositionX()

Dim dbsNorthwind As Database

Dim rstProducts As Recordset

Dim strFind As String

Dim strMessage As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Die PercentPosition-Eigenschaft funktioniert nur mit Daten vom Typ Dynaset oder Snapshot.

Set rstProducts = dbsNorthwind.OpenRecordset( _

"SELECT Artikelname FROM Artikel " & _

"ORDER BY Artikelname", dbOpenSnapshot)

With rstProducts

' Recordset durchlaufen.

.MoveLast

.MoveFirst

Do While True

' Aktuelle Datensatzinformationen anzeigen,

' und Benutzer zur Eingabe auffordern.

strMessage = "Artikel: " & !Artikelname & vbCr & _

"Der Datensatzzeiger ist " & _

Format(.PercentPosition, "##0.0") & _

"% von der " & vbCr & _

"Anfang des Recordset-Objekts." & vbCr & _

"Geben Sie eine Suchzeichenfolge " & _

"für einen Artikelnamen ein."

strFind = Trim(InputBox(strMessage))

If strFind = "" Then Exit Do

' Es wird ein Datensatz gesucht, der mit der Suchzeichenfolge übereinstimmt.

.FindFirst "Artikelname >= '" & strFind & "'"

If .NoMatch Then .MoveLast

Loop

.Close

End With

dbsNorthwind.Close

End Sub


Primary-Eigenschaft (Beispiel)

Dieses Beispiel bestimmt mit der Primary-Eigenschaft einen neuen Index in einem neuen TableDef-Objekt als den primären Index der Tabelle. Beachten Sie, daß durch das Festlegen der Primary-Eigenschaft auf True auch die Eigenschaften Unique und Required den Wert True erhalten.

Sub PrimaryX()

Dim dbsNorthwind As Database

Dim tdfNew As TableDef

Dim idxNew As Index

Dim idxLoop As Index

Dim fldLoop As Field

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Ein neues TableDef-Objekt erstellen und der

' TableDefs-Auflistung in der Nordwind-Datenbank anfügen.

Set tdfNew = dbsNorthwind.CreateTableDef("NeueTabelle")

tdfNew.Fields.Append tdfNew.CreateField("AnzFeld", _

dbLong, 20)

tdfNew.Fields.Append tdfNew.CreateField("TextFeld", _

dbText, 20)

dbsNorthwind.TableDefs.Append tdfNew

With tdfNew

' Ein neues Index-Objekt erstellen und der

' Indexes-Auflistung des neuen TableDef-Objekts anfügen.

Set idxNew = .CreateIndex("AnzIndex")

idxNew.Fields.Append idxNew.CreateField("AnzFeld")

idxNew.Primary = True

.Indexes.Append idxNew

Set idxNew = .CreateIndex("TextIndex")

idxNew.Fields.Append idxNew.CreateField("TextFeld")

.Indexes.Append idxNew

Debug.Print .Indexes.Count & " Indexes-Objekte in " & _

.Name & " TableDef"

' Indexes-Auflistung durchlaufen.

For Each idxLoop In .Indexes

With idxLoop

Debug.Print "    " & .Name

' Fields-Auflistung eines jeden Index-

' Objekts durchlaufen.

Debug.Print "        Fields"

For Each fldLoop In .Fields

Debug.Print "            " & fldLoop.Name

Next fldLoop

' Properties-Auflistung eines jeden

' Index-Objekts durchlaufen.

Debug.Print "        Properties"

For Each prpLoop In .Properties

Debug.Print "            " & prpLoop.Name & _

" = " & IIf(prpLoop = "", "[empty]", _

prpLoop)

Next prpLoop

End With

Next idxLoop

End With

dbsNorthwind.TableDefs.Delete tdfNew.Name

dbsNorthwind.Close

End Sub


RecordCount-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die RecordCount-Eigenschaft mit verschiedenen Arten des Recordset-Objekts, bevor und nachdem es aufgefüllt wurde.

Sub RecordCountX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Recordset-Objekt vom Typ Tabelle öffnen und

' RecordCount-Eigenschaft zeigen.

Set rstEmployees = .OpenRecordset("Personal")

Debug.Print _

"Datensatzobjekt vom Typ Tabelle aus der Tabelle Personal "

Debug.Print "    RecordCount = " & _

rstEmployees.RecordCount

rstEmployees.Close

' Recordset-Objekt vom Typ Dynaset öffnen und

' RecordCount-Eigenschaft zeigen, bevor Recordset-Objekt aufgefüllt wird.

Set rstEmployees = .OpenRecordset("Personal", _

dbOpenDynaset)

Debug.Print "Datensatzgruppe vom Typ Dynaset " & _

"aus der Tabelle Personal vor MoveLast"

Debug.Print "    RecordCount = " & _

rstEmployees.RecordCount

' RecordCount-Eigenschaft anzeigen, nachdem das

' Recordset-Objekt aufgefüllt wurde.

rstEmployees.MoveLast

Debug.Print "Datensatzgruppe vom Typ Dynaset " & _

"aus der Tabelle Personal nach MoveLast"

Debug.Print "    RecordCount = " & _

rstEmployees.RecordCount

rstEmployees.Close

' Recordset-Objekt vom Typ Snapshot öffnen und

' RecordCount-Eigenschaft vor dem Auffüllen des Recordset-Objekts zeigen.

Set rstEmployees = .OpenRecordset("Personal", _

dbOpenSnapshot)

Debug.Print "Datensatzgruppe vom Typ Snapshot " & _

"aus der Tabelle Personal bevor MoveLast"

Debug.Print "    RecordCount = " & _

rstEmployees.RecordCount

' RecordCount-Eigenschaft nach dem Auffüllen des

' Recordset-Objekts zeigen.

rstEmployees.MoveLast

Debug.Print "Datensatzgruppe vom Typ Snapshot " & _

"aus der Tabelle Employees nach MoveLast"

Debug.Print "    RecordCount = " & _

rstEmployees.RecordCount

rstEmployees.Close

' Recordset-Objekt vom Typ Vorwärts öffnen

' und RecordCount-Eigenschaft vor dem Auffüllen

' des Recordset-Objekts zeigen.

Set rstEmployees = .OpenRecordset("Personal", _

dbOpenForwardOnly)

Debug.Print "Datensatzgruppe vom Typ Vorwärts " & _

"aus der Tabelle Personal vor MoveLast"

Debug.Print "    RecordCount = " & _

rstEmployees.RecordCount

' RecordCount-Eigenschaft zeigen, nachdem die

' MoveNext-Methode aufgerufen wurde.

rstEmployees.MoveNext

Debug.Print "Datensatzgruppe vom Typ Vorwärts " & _

"aus der Tabelle Personal nach MoveNext-Methode"

Debug.Print "    RecordCount = " & _

rstEmployees.RecordCount

rstEmployees.Close

.Close

End With

End Sub


RecordsAffected-Eigenschaft (Beispiel)

Dieses Beispiel verwendet die RecordsAffected-Eigenschaft zusammen mit Aktionsabfragen, die auf einem Database-Objekt und einem QueryDef-Objekt ausgeführt werden. Die Funktion RecordsAffectedOutput wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub RecordsAffectedX()

Dim dbsNorthwind As Database

Dim qdfTemp As QueryDef

Dim strSQLChange As String

Dim strSQLRestore As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Bericht über Inhalt der Tabelle Personal

' ausgeben.

Debug.Print _

"Anzahl der Datensätze in Tabelle Personal: " & _

.TableDefs!Personal.RecordCount

RecordsAffectedOutput dbsNorthwind

' Aktionsabfrage definieren und ausführen.

strSQLChange = "UPDATE Personal " & _

"SET Land = 'Vereinigte Staaten' " & _

"WHERE Land = 'USA'"

.Execute strSQLChange

' Bericht über Inhalt der Tabelle Personal

' ausgeben.

Debug.Print _

"RecordsAffected-Eigenschaft nach Ausführen der Abfrage " & _

"aus Datenbank: " & .RecordsAffected

RecordsAffectedOutput dbsNorthwind

' Andere Aktionsabfrage definieren und ausführen.

strSQLRestore = "UPDATE Personal " & _

"SET Land = 'USA' " & _

"WHERE Land = 'Vereinigte Staaten'"

Set qdfTemp = .CreateQueryDef("", strSQLRestore)

qdfTemp.Execute

' Bericht über Inhalt der Tabelle Personal

' ausgeben.

Debug.Print _

"RecordsAffected-Eigenschaft nach Ausführen der Abfrage " & _

"from QueryDef: " & qdfTemp.RecordsAffected

RecordsAffectedOutput dbsNorthwind

.Close

End With

End Sub

Function RecordsAffectedOutput(dbsNorthwind As Database)

Dim rstEmployees As Recordset

' Recordset-Objekt aus der Tabelle Personal öffnen.

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

With rstEmployees

' Recordset durchlaufen.

.MoveFirst

Do While Not .EOF

Debug.Print "    " & !Nachname & ", " & !Land

.MoveNext

Loop

.Close

End With

End Function


Restartable-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die Restartable-Eigenschaft mit verschiedenen Recordset-Objekten.

Sub RestartableX()

Dim dbsNorthwind As Database

Dim rstTemp As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Recordset-Objekt vom Typ Tabelle öffnen

' und dessen Restartable-Eigenschaft ausgeben.

Set rstTemp = .OpenRecordset("Personal", dbOpenTable)

Debug.Print _

"Datensatzgruppe vom Typ Tabelle aus der Tabelle Personal "

Debug.Print "    Restartable = " & rstTemp.Restartable

rstTemp.Close

' Recordset-Objekt aus einer SQL-Anweisung

' öffnen und dessen Restartable-Eigenschaft ausgeben.

Set rstTemp = _

.OpenRecordset("SELECT * FROM Personal")

Debug.Print "Recordset-Objekt basierend auf SQL-Anweisung"

Debug.Print "    Restartable = " & rstTemp.Restartable

rstTemp.Close

' Recordset-Objekt aus gespeichertem QueryDef-Objekt öffnen und

' dessen Restartable-Eigenschaft ausgeben.

Set rstTemp = .OpenRecordset("Artikel")

Set rstTemp = .OpenRecordset("Liste der aktuellen Artikel")

Debug.Print _

"Recordset-Objekt basierend auf beständigem QueryDef-Objekt(" & _

rstTemp.Name & ")"

Debug.Print "    Restartable = " & rstTemp.Restartable

rstTemp.Close

.Close

End With

End Sub


Size-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die Size-Eigenschaft, indem es die Namen und Größen der Field-Objekte in der Tabelle "Personal" aufzählt.

Sub SizeX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim fldNew As Field

Dim fldLoop As Field

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfEmployees = dbsNorthwind.TableDefs!Personal

With tdfEmployees

' Neues Field-Objekt erstellen und der Tabelle

' Personal anfügen.

Set fldNew = .CreateField("FaxTelefon")

fldNew.Type = dbText

fldNew.Size = 20

.Fields.Append fldNew

Debug.Print "TableDef: " & .Name

Debug.Print "    Field.Name - Field.Type - Field.Size"

' Fields-Auflistung durchlaufen; Feldnamen,

' Typen und Größen ausgeben.

For Each fldLoop In .Fields

Debug.Print "        " & fldLoop.Name & " - " & _

fldLoop.Type & " - " & fldLoop.Size

Next fldLoop

' Neues Feld löschen, da dies ein Beispiel ist.

.Fields.Delete fldNew.Name

End With

dbsNorthwind.Close

End Sub


Sort-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die Sort-Eigenschaft, indem es deren Wert ändert und ein neues Recordset-Objekt erstellt. Die Funktion SortOutput wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub SortX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim rstSortEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenDynaset)

With rstEmployees

SortOutput "Ursprüngliches Recordset-Objekt:", rstEmployees

.Sort = "Nachname, Vorname"

' Bericht ausgeben, der Sort-Eigenschaft und Reihenfolge der Datensätze zeigt.

SortOutput _

"Recordset-Objekt nachdem Sort-Eigenschaft geändert wurde:", _

rstEmployees

' Neues Recordset-Objekt aus vorhandenem öffnen.

Set rstSortEmployees = .OpenRecordset

' Bericht ausgeben, der Sort-Eigenschaft und Reihenfolge der Datensätze zeigt.

SortOutput "Neues Recordset:", rstSortEmployees

rstSortEmployees.Close

.Close

End With

dbsNorthwind.Close

End Sub

Function SortOutput(strTemp As String, _

rstTemp As Recordset)

With rstTemp

Debug.Print strTemp

Debug.Print "    Sort = " & _

IIf(.Sort <> "", .Sort, "[Leer]")

.MoveFirst

' Recordset durchlaufen.

Do While Not .EOF

Debug.Print "        " & !Nachname & _

", " & !Vorname

.MoveNext

Loop

End With

End Function

Anmerkung   Wenn Sie die Daten kennen, die Sie auswählen möchten, ist es meistens einfacher, ein Recordset-Objekt mit einer SQL-Anweisung zu erstellen. Dieses Beispiel zeigt, wie Sie ein einzelnes Recordset-Objekt erstellen können und das gleiche Ergebnis wie im vorhergehenden Beispiel erhalten.

Sub SortX2()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Recordset-Objekt aus einer SQL-Anweisung öffnen,

' die eine Sortierreihenfolge angibt.

Set rstEmployees = _

dbsNorthwind.OpenRecordset("SELECT * " & _

"FROM Personal ORDER BY Nachname, Vorname", _

dbOpenDynaset)

dbsNorthwind.Close

End Sub


SourceField-, SourceTable-Eigenschaften (Beispiel)

Dieses Beispiel zeigt die SourceField- und SourceTable-Eigenschaften, indem es ein Recordset-Objekt öffnet, das aus Feldern aus zwei Tabellen erstellt wurde.

Sub SourceFieldX()

Dim dbsNorthwind As Database

Dim rstProductCategory As Recordset

Dim fldLoop As Field

Dim strSQL As String

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Recordset-Objekt aus einer SQL-Anweisung öffnen,

' die Felder aus zwei verschiedenen Tabellen verwendet.

strSQL = "SELECT [Artikel-Nr] AS ArtNr, " & _

"Artikelname AS ArtName, " & _

"Kategorien.[Kategorie-Nr] AS KatNr, " & _

"Kategoriename AS KatName " & _

"FROM Kategorien INNER JOIN Artikel ON " & _

"Kategorien.[Kategorie-Nr] = Artikel.[Kategorie-Nr] " & _

"ORDER BY Artikelname"	Set rstProductCategory = _

dbsNorthwind.OpenRecordset(strSQL)

Debug.Print "Field - SourceTable - Sourcefield"

' Fields-Auflistung des Recordset-Objekts durchlaufen,

' Name, ursprüngliche Tabelle und ursprünglichen Namen ausgeben.

For Each fldLoop In rstProductCategory.Fields

Debug.Print "    " & fldLoop.Name & " - " & _

fldLoop.SourceTable & " - " & fldLoop.SourceField

Next fldLoop

rstProductCategory.Close

dbsNorthwind.Close

End Sub


SQL-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die SQL-Eigenschaft, indem es die SQL-Eigenschaft eines temporären QueryDef-Objekts einstellt, ändert und die Ergebnisse vergleicht. Die Funktion SQLOutput wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub SQLX()

Dim dbsNorthwind As Database

Dim qdfTemp As QueryDef

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set qdfTemp = dbsNorthwind.CreateQueryDef("")

' Recordset-Objekt mit temporärem QueryDef-Objekt

' öffnen und Bericht ausgeben.

SQLOutput "SELECT * FROM Personal " & _

"WHERE Land = 'USA' " & _

"ORDER BY Nachname", qdfTemp

' Recordset-Objekt mit temporärem QueryDef-Objekt

' öffnen und Bericht ausgeben.

SQLOutput "SELECT * FROM Personal " & _

"WHERE Land = 'UK' " & _

"ORDER BY Nachname", qdfTemp

dbsNorthwind.Close

End Sub

Function SQLOutput(strSQL As String, qdfTemp As QueryDef)

Dim rstEmployees As Recordset

' SQL-Eigenschaft des temporären QueryDef-Objekts festlegen

'und ein Recordset-Objekt öffnen.

qdfTemp.SQL = strSQL

Set rstEmployees = qdfTemp.OpenRecordset

Debug.Print strSQL

With rstEmployees

' Recordset durchlaufen.

Do While Not .EOF

Debug.Print "    " & !Vorname & " " & _

!Nachname & ", " & !Land

.MoveNext

Loop

.Close

End With

End Function


Type-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die Type-Eigenschaft, indem es den Namen der Konstanten zurückgibt, die dem Wert der Type-Eigenschaft von vier unterschiedlichen Recordset-Objekten entspricht. Die Funktion RecordsetType wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub TypeX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Default is dbOpenTable.

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

Debug.Print _

"Datensatzgruppe vom Typ Tabelle (Tabelle Personal): " & _

RecordsetType(rstEmployees.Type)

rstEmployees.Close

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenDynaset)

Debug.Print _

"Datensatzgruppe vom Typ Dynaset (Tabelle Personal): " & _

RecordsetType(rstEmployees.Type)

rstEmployees.Close

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenSnapshot)

Debug.Print _

"Datensatzgruppe vom Typ Snapshot (Tabelle Personal): " & _

RecordsetType(rstEmployees.Type)

rstEmployees.Close

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal", _

dbOpenForwardOnly)

Debug.Print _

"Datensatzgruppe vom Typ Vorwärts (Tabelle Personal): " & _

RecordsetType(rstEmployees.Type)

rstEmployees.Close

dbsNorthwind.Close

End Sub

Function RecordsetType(intType As Integer) As String

Select Case intType

Case dbOpenTable

RecordsetType = "dbOpenTable"

Case dbOpenDynaset

RecordsetType = "dbOpenDynaset"

Case dbOpenSnapshot

RecordsetType = "dbOpenSnapshot"

Case dbOpenForwardOnly

RecordsetType = "dbOpenForwardOnly"

End Select

End Function

Dieses Beispiel zeigt die Type-Eigenschaft, indem es den Namen der Konstanten zurückgibt, die dem Wert der Type-Eigenschaft aller Field-Objekte in der Tabelle "Personal" entspricht. Die Funktion FieldType wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub TypeX2()

Dim dbsNorthwind As Database

Dim fldLoop As Field

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Debug.Print "Fields in TableDef-Objekt der Tabelle Personal:"

Debug.Print "    Type - Name"

' Fields-Auflistung der Tabelle Personal durchlaufen.

For Each fldLoop In _

dbsNorthwind.TableDefs!Personal.Fields

Debug.Print "        " & FieldType(fldLoop.Type) & _

" - " & fldLoop.Name

Next fldLoop

dbsNorthwind.Close

End Sub

Function FieldType(intType As Integer) As String

Select Case intType

Case dbBoolean

FieldType = "dbBoolean"

Case dbByte

FieldType = "dbByte"

Case dbInteger

FieldType = "dbInteger"

Case dbLong

FieldType = "dbLong"

Case dbCurrency

FieldType = "dbCurrency"

Case dbSingle

FieldType = "dbSingle"

Case dbDouble

FieldType = "dbDouble"

Case dbDate

FieldType = "dbDate"

Case dbText

FieldType = "dbText"

Case dbLongBinary

FieldType = "dbLongBinary"

Case dbMemo

FieldType = "dbMemo"

Case dbGUID

FieldType = "dbGUID"

End Select

End Function

Dieses Beispiel zeigt die Type-Eigenschaft, indem es den Namen der Konstanten zurückgibt, die dem Wert der Type-Eigenschaft aller QueryDef-Objekte in der Nordwind-Datenbank entspricht. Die Funktion QueryDefType wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub TypeX3()

Dim dbsNorthwind As Database

Dim qdfLoop As QueryDef

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Debug.Print "QueryDef-Objekt in Nordwind Datenbank:"

Debug.Print "    Type - Name"

' QueryDefs-Auflistung der Nordwind-Datenbank durchlaufen.

For Each qdfLoop In dbsNorthwind.QueryDefs

Debug.Print "        " & _

QueryDefType(qdfLoop.Type) & " - " & qdfLoop.Name

Next qdfLoop

dbsNorthwind.Close

End Sub

Function QueryDefType(intType As Integer) As String

Select Case intType

Case dbQSelect

QueryDefType = "dbQSelect"

Case dbQAction

QueryDefType = "dbQAction"

Case dbQCrosstab

QueryDefType = "dbQCrosstab"

Case dbQDelete

QueryDefType = "dbQDelete"

Case dbQUpdate

QueryDefType = "dbQUpdate"

Case dbQAppend

QueryDefType = "dbQAppend"

Case dbQMakeTable

QueryDefType = "dbQMakeTable"

Case dbQDDL

QueryDefType = "dbQDDL"

Case dbQSQLPassThrough

QueryDefType = "dbQSQLPassThrough"

Case dbQSetOperation

QueryDefType = "dbQSetOperation"

Case dbQSPTBulk

QueryDefType = "dbQSPTBulk"

End Select

End Function


Unique-Eigenschaft (Beispiel)

Dieses Beispiel legt die Unique-Eigenschaft eines neuen Index-Objekts auf True fest und fügt das Index-Objekt an die Indexes-Auflistung der Tabelle "Personal" an. Dann wird die Indexes-Auflistung des TableDef-Objekts und die Properties-Auflistung jedes Index-Objekts aufgezählt. Das neue Index-Objekt läßt nur einen Datensatz mit einer bestimmten Kombination aus Land, Nachname und Vorname im TableDef-Objekt zu.

Sub UniqueX()

Dim dbsNorthwind As Database

Dim tdfEmployees As TableDef

Dim idxNew As Index

Dim idxLoop As Index

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfEmployees = dbsNorthwind!Personal

With tdfEmployees

' Neues Index-Objekt erstellen und der Indexes-

' Auflistung der Tabelle Personal anfügen.

Set idxNew = .CreateIndex("NeuIndex")

With idxNew

.Fields.Append .CreateField("Land")

.Fields.Append .CreateField("Nachname")

.Fields.Append .CreateField("Vorname")

.Unique = True

End With

.Indexes.Append idxNew

.Indexes.Refresh

Debug.Print .Indexes.Count & " Indexes-Objekt in " & _

.Name & " TableDef"

' Indexes-Auflistung der Tabelle Personal durchlaufen.

For Each idxLoop In .Indexes

Debug.Print "    " & idxLoop.Name

' Properties-Auflistung jedes

' Index-Objekts durchlaufen.

For Each prpLoop In idxLoop.Properties

Debug.Print "        " & prpLoop.Name & _

" = " & IIf(prpLoop = "", "[leer]", prpLoop)

Next prpLoop

Next idxLoop

' Neues Index-Objekt löschen, da dies ein Beispiel ist.

.Indexes.Delete idxNew.Name

End With

dbsNorthwind.Close

End Sub


Updatable-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die Updatable-Eigenschaft für ein Database-Objekt, vier verschiedene Arten von Recordset-Objekten, ein TableDef-Objekt sowie ein QueryDef-Objekt.

Sub UpdatableX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

Debug.Print .Name

Debug.Print "    Updatable = " & .Updatable

' Standardeinstellung ist dbOpenTable.

Set rstEmployees = .OpenRecordset("Personal")

Debug.Print _

"Datensatzgruppe vom Typ Tabelle aus der Tabelle Personal"

Debug.Print "    Updatable = " & _

rstEmployees.Updatable

rstEmployees.Close

Set rstEmployees = .OpenRecordset("Personal", _

dbOpenDynaset)

Debug.Print _

"Datensatzgruppe vom Typ Dynaset aus der Tabelle Personal"

Debug.Print "    Updatable = " & _

rstEmployees.Updatable

rstEmployees.Close

Set rstEmployees = .OpenRecordset("Personal", _

dbOpenSnapshot)

Debug.Print _

"Datensatzgruppe vom Typ Snapshot aus der Tabelle Personal "

Debug.Print "    Updatable = " & _

rstEmployees.Updatable

rstEmployees.Close

Set rstEmployees = .OpenRecordset("Personal", _

dbOpenForwardOnly)

Debug.Print _

"Datensatzgruppe vom Typ Vorwärts aus der Tabelle Personal "

Debug.Print "    Updatable = " & _

rstEmployees.Updatable

rstEmployees.Close

Debug.Print "'" & .TableDefs(0).Name & "' TableDef"

Debug.Print "    Updatable = " & _

.TableDefs(0).Updatable

Debug.Print "'" & .QueryDefs(0).Name & "' QueryDef"

Debug.Print "    Updatable = " & _

.QueryDefs(0).Updatable

.Close

End With

End Sub


V1xNullBehavior-Eigenschaft (Beispiel)

Dieses Beispiel konvertiert eine Datenbankdatei aus Microsoft Jet, Version 1.1, in eine Datenbankdatei für Microsoft Jet, Version 3.0. Während der Konvertierung wird die V1xNullBehavior-Eigenschaft erstellt und der Properties-Auflistung der neuen Datenbank hinzugefügt. Die Properties-Auflistungen beider Datenbankdateien werden aufgeführt, um die Änderungen aufzeigen zu können. Zum Abschluß wird die V1xNullBehavior-Eigenschaft gelöscht. Dies setzt voraus, daß alle Anwendungen so verändert werden, daß sie Null-Werte in leeren Text- und Memofeldern anstelle von leeren Zeichenfolgen speichern.

Anmerkung   Diese Prozedur kann nur ausgeführt werden, wenn Sie über die Datei "Nwind11.mdb" aus Microsoft Jet, Version 1.1, verfügen.

Sub V1xNullBehaviorX()

Dim dbsNorthwind As Database

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nwind11.mdb")

With dbsNorthwind

Debug.Print .Name & ", Version " & .Version

' Properties-Auflistung der Nordwind-

' Datenbank durchlaufen.

For Each prpLoop In .Properties

On Error Resume Next

If prpLoop <> "" Then Debug.Print "    " & _

prpLoop.Name & " = " & prpLoop

On Error GoTo 0

Next prpLoop

.Close

End With

DBEngine.CompactDatabase "Nwind11.mdb", _

"Nwind30.mdb", , dbVersion30

Set dbsNorthwind = OpenDatabase("Nwind30.mdb")

With dbsNorthwind

Debug.Print .Name & ", Version " & .Version

' Properties-Auflistung der komprimierten

' Datenbank durchlaufen. Die V1xNullBehavior-Eigenschaft

' kann nicht explizit angesprochen werden, d.h.

' dbsNorthwind.V1xNullBehavior, aber es kann

' in Schleifen oder durch Zeichenfolgenverweise

' darauf zugegriffen werden, also

' dbsNorthwind.Properties("V1xNullBehavior").

For Each prpLoop In .Properties

On Error Resume Next

If prpLoop <> "" Then Debug.Print "    " & _

prpLoop.Name & " = " & prpLoop

On Error GoTo 0

Next prpLoop

.Properties.Delete "V1xNullBehavior"

.Close

End With

End Sub


ValidateOnSet-Eigenschaft (Beispiel)

Dieses Beispiel zeigt mit der ValidateOnSet-Eigenschaft, wie Fehler während der Dateneingabe aufgefangen werden können. Die Funktion ValidateData wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub ValidateOnSetX()

Dim dbsNorthwind As Database

Dim fldDays As Field

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Neues Field-Objekt erstellen und der Fields-

' Auflistung der Tabelle Personal anfügen.

Set fldDays = _

dbsNorthwind.TableDefs!Personal.CreateField( _

"Urlaubstage", dbInteger, 2)

fldDays.ValidationRule = "BETWEEN 1 AND 20"

fldDays.ValidationText = _

"Zahl muß zwischen 1 und 20 liegen!"

dbsNorthwind.TableDefs!Personal.Fields.Append fldDays

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

With rstEmployees

Do While True

' Add new record.

.AddNew

' Benutzer zur Eingabe in 3 Felder auffordern.

' Überprüfen, ob Daten nicht die Gültigkeitsregeln

' eines der Felder verletzen.

If ValidateData(!Vorname, _

"Vornamen eingeben.") = False Then Exit Do

If ValidateData(!Nachname, _

"Nachnamen eingeben.") = False Then Exit Do

If ValidateData(!Urlaubstage, _

"Urlaubstage eingeben.") = False Then Exit Do

.Update

.Bookmark = .LastModified

Debug.Print !Vorname & " " & !Nachname & _

" - " & "Urlaubstage = " & !Urlaubstage

' Datensatz löschen, da dies ein Beispiel ist.

.Delete

Exit Do

Loop

' AddNew-Methode abbrechen, wenn Gültigkeitsregeln

' nicht eingehalten wurden.

If .EditMode <> dbEditNone Then .CancelUpdate

.Close

End With

' Neues Feld löschen, da dies ein Beispiel ist.

dbsNorthwind.TableDefs!Personal.Fields.Delete _

fldDays.Name

dbsNorthwind.Close

End Sub

Function ValidateData(fldTemp As Field, _

strMessage As String) As Boolean

Dim strInput As String

Dim errLoop As Error

ValidateData = True

' ValidateOnSet-Eigenschaft ist für Field-Objekte

' in Recordset-Objekte mit Lese/Schreibzugriff.

fldTemp.ValidateOnSet = True

Do While True

strInput = InputBox(strMessage)

If strInput = "" Then Exit Do

' Fehler auffangen, wenn der Wert des Field-Objekts festgelegt wird.

On Error GoTo Err_Data

If fldTemp.Type = dbInteger Then

fldTemp = Val(strInput)

Else

fldTemp = strInput

End If

On Error GoTo 0

If Not IsNull(fldTemp) Then Exit Do

Loop

If strInput = "" Then ValidateData = False

Exit Function

Err_Data:

If DBEngine.Errors.Count > 0 Then

' Errors-Auflistung durchlaufen. Die

' Description-Eigenschaft des letzten Error-Objekts

' wird auf die ValidationText-Eigenschaft des

' entsprechenden Felds festgelegt.

For Each errLoop In DBEngine.Errors

MsgBox "Fehlernummer: " & errLoop.Number & _

vbCr & errLoop.Description

Next errLoop

End If

Resume Next

End Function


ValidationRule- und ValidationText-Eigenschaften (Beispiel)

Dieses Beispiel erstellt ein neues Field-Objekt im angegebenen TableDef-Objekt und legt die Eigenschaften ValidationRule und ValidationText basierend auf den übergebenen Daten fest. Es zeigt, wie die ValidationRule- und ValidationText-Eigenschaften während einer Dateneingabe verwendet werden. Die Funktion SetValidation wird benötigt, damit die Prozedur ausgeführt werden kann.

Sub ValidationRuleX()

Dim dbsNorthwind As Database

Dim fldDays As Field

Dim rstEmployees As Recordset

Dim strMessage As String

Dim strDays As String

Dim errLoop As Error

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Ein neues Feld für das TableDef-Objekt

' der Tabelle Personal mit den gegebenen Eigenschaftseinstellungen erstellen.

Set fldDays = _

SetValidation(dbsNorthwind.TableDefs!Personal, _

"Urlaubstage", dbInteger, 2, "BETWEEN 1 AND 20", _

"Die Zahl muß zwischen 1 und 20 liegen!")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

With rstEmployees

' Recordset durchlaufen. Bei jedem Datensatz das neue Feld

' mit den vom Benutzer eingegebenen Daten auffüllen.

Do While Not .EOF

.Edit

strMessage = "Urlaubstage eingeben für " & _

!Vorname & " " & !Nachname & vbCr & _

"[" & !Urlaubstage.ValidationRule & "]"

Do While True

' Benutzer zur Eingabe auffordern.

strDays = InputBox(strMessage)

If strDays = "" Then

.CancelUpdate

Exit Do

End If

!Urlaubstage = Val(strDays)

' Da die Voreinstellung der ValidateOnSet-Eigenschaft der Wert False ist,

' werden die Daten im Puffer mit der

' ValidationRule-Eigenschaft während der

' Aktualisierung überprüft.

On Error GoTo Err_Rule

.Update

On Error GoTo 0

' Wenn die Update-Methode erfolgreich war,

' das Ergebnis der Datenänderung ausgeben.

If .EditMode = dbEditNone Then

Debug.Print !Vorname & " " & !Nachname & _

    " - " & "Urlaubstage = " & _

    !Urlaubstage

Exit Do

End If

Loop

If strDays = "" Then Exit Do

.MoveNext

Loop

.Close

End With

' Neues Feld löschen, da dies ein Beispiel ist.

dbsNorthwind.TableDefs!Personal.Fields.Delete _

fldDays.Name

dbsNorthwind.Close

Exit Sub

Err_Rule:

If DBEngine.Errors.Count > 0 Then

' Errors-Auflistung durchlaufen.

For Each errLoop In DBEngine.Errors

MsgBox "Fehlernummer: " & _

errLoop.Number & vbCr & _

errLoop.Description

Next errLoop

End If

Resume Next

End Sub

Function SetValidation(tdfTemp As TableDef, _

strFieldName As String, intType As Integer, _

intLength As Integer, strRule As String, _

strText As String) As Field

' Neues Feld erstellen und der Fields-Auflistung

' aus dem angegebenen TableDef-Objekt anfügen.

Set SetValidation = tdfTemp.CreateField(strFieldName, _

intType, intLength)

SetValidation.ValidationRule = strRule

SetValidation.ValidationText = strText

tdfTemp.Fields.Append SetValidation

End Function


Value-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die Value-Eigenschaft zusammen mit Field- und Property-Objekten.

Sub ValueX()

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Dim fldLoop As Field

Dim prpLoop As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set rstEmployees = _

dbsNorthwind.OpenRecordset("Personal")

With rstEmployees

Debug.Print "Fieldwerte in rstEmployees"

' Die Fields-Auflistung der Tabelle Personal

' durchlaufen.

For Each fldLoop In .Fields

Debug.Print "    " & fldLoop.Name & " = ";

Select Case fldLoop.Type

Case dbLongBinary

Debug.Print "[LongBinary]"

Case dbMemo

Debug.Print "[Memo]"

Case Else

' Da Value die Standardeigenschaft

' eines Field-Objekts ist, ist die

' Verwendung des eigentlichen Schlüsselworts optional.

Debug.Print fldLoop.Value

End Select

Next fldLoop

Debug.Print "Value-Eigenschaft von Property in rstEmployees"

' Die Properties-Auflistung des

' Recordset-Objekts durchlaufen.

For Each prpLoop In .Properties

On Error Resume Next

' Da Value die Standardeigenschaft eines

' Property-Objekts ist, ist die

' Verwendung des eigentlichen Schlüsselworts optional.

If prpLoop <> "" Then Debug.Print "    " & _

prpLoop.Name & " = " & prpLoop.Value

On Error GoTo 0

Next prpLoop

.Close

End With

dbsNorthwind.Close

End Sub


AllPermissions-, Permissions- und SystemDB-Eigenschaften (Beispiel)

Dieses Beispiel zeigt mit den Eigenschaften SystemDB, AllPermissions und Permissions, wie Benutzer verschiedene Ebenen der Berechtigungen haben können, abhängig von der jeweiligen Berechtigung der Gruppe, der sie angehören.

Sub AllPermissionsX()

' Sicherstellen, daß die Microsoft Jet-Arbeitsgruppeninformationsdatei

' verfügbar ist.

DBEngine.SystemDB = "system.mdw"

Dim dbsNorthwind As Database

Dim ctrLoop As Container

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Durchlaufen der Containers-Auflistung und Anzeigen des

' Benutzers und der Berechtigungsgruppe, der dieser Benutzer angehört.

For Each ctrLoop In dbsNorthwind.Containers

With ctrLoop

Debug.Print "Container: " & .Name

Debug.Print "User: " & .UserName

Debug.Print "    Permissions: " & .Permissions

Debug.Print "    AllPermissions: " & _

.AllPermissions

End With

Next ctrLoop

dbsNorthwind.Close

End Sub


Attributes-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die Attributes-Eigenschaft für die Field-, Relation- und TableDef-Objekte der Nordwind-Datenbank an.

Sub AttributesX()

Dim dbsNorthwind As Database

Dim fldLoop As Field

Dim relLoop As Relation

Dim tdfloop As TableDef

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Zeigt die Attribute des Feldes eines

' TableDef-Objekts an.

Debug.Print "Attribute des Feldes in " & _

.TableDefs(0).Name & " Tabelle:"

For Each fldLoop In .TableDefs(0).Fields

Debug.Print "    " & fldLoop.Name & " = " & _

fldLoop.Attributes

Next fldLoop

' Zeigt die Attribute der Beziehungen der

' Nordwind-Datenbank an.

Debug.Print "Attribute der Beziehungen in " & _

.Name & ":"

For Each relLoop In .Relations

Debug.Print "    " & relLoop.Name & " = " & _

relLoop.Attributes

Next relLoop

' Zeigt die Attribute der Tabelle der

' Nordwind-Datenbank an.

Debug.Print "Attribute der Tabellen in " & .Name & ":"

For Each tdfloop In .TableDefs

Debug.Print "    " & tdfloop.Name & " = " & _

tdfloop.Attributes

Next tdfloop

.Close

End With

End Sub


BatchCollisionCount-Eigenschaft und Update-Methode (Beispiel)

Dieses Beispiel verwendet die BatchCollisionCount-Eigenschaft und die Update-Methode, um die Stapelaktualisierung zu demonstrieren, bei der jede Kollision durch das Erzwingen einer Stapelaktualisierung gelöst wird.

Sub BatchX()

Dim wrkMain As Workspace

Dim conMain As Connection

Dim rstTemp As Recordset

Dim intLoop As Integer

Dim strPrompt As String

Set wrkMain = CreateWorkspace("ODBCWorkspace", _

"Admin", "", dbUseODBC)

' Die Einstellung von DefaultCursorDriver ist für

' Stapelaktualisierung erforderlich.

wrkMain.DefaultCursorDriver = dbUseClientBatchCursor

Set conMain = wrkMain.OpenConnection("Verleger", _

dbDriverNoPrompt, False, _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' Das folgende Sperrargument ist für die

' Stapelaktualisierung erforderlich.

Set rstTemp = conMain.OpenRecordset( _

"SELECT * FROM Tantiemen_tab", dbOpenDynaset, 0, _

dbOptimisticBatch)

With rstTemp

' Daten in lokaler Datensatzgruppe verändern.

Do While Not .EOF

.Edit

If !Tantiemen <= 20 Then

!Tantiemen = !Tantiemen - 4

Else

!Tantiemen = !Tantiemen + 2

End If

.Update

.MoveNext

Loop

' Stapelaktualisierung versuchen.

.Update dbUpdateBatch

' Bei Konflikten hat der Benutzer die Option,

' die Änderungen zu erzwingen oder den Konflikt

' selbst zu lösen.

If .BatchCollisionCount > 0 Then

strPrompt = "Es treten Konflikte auf. " & vbCr & _

"Möchten Sie, daß das Programm mit den " & _

vbCr & "lokalen Daten die Aktualisierung erzwingt?"

If MsgBox(strPrompt, vbYesNo) = vbYes Then _

.Update dbUpdateBatch, True

End If

.Close

End With

conMain.Close

wrkMain.Close

End Sub


BatchSize- und UpdateOptions-Eigenschaften (Beispiel)

Dieses Beispiel verwendet die Eigenschaften BatchSize und UpdateOptions, um für ein bestimmtes Recordset-Objekt jeden Aspekt einer beliebigen Stapelaktualisierung zu kontrollieren.

Sub BatchSizeX()

Dim wrkMain As Workspace

Dim conMain As Connection

Dim rstTemp As Recordset

Set wrkMain = CreateWorkspace("ODBCWorkspace", _

"Admin", "", dbUseODBC)

' Die Einstellung für DefaultCursorDriver ist für

' Stapelaktualisierung erforderlich.

wrkMain.DefaultCursorDriver = dbUseClientBatchCursor

Set conMain = wrkMain.OpenConnection("Verleger", _

dbDriverNoPrompt, False, _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' Das folgende Sperrargument ist für

' Stapelaktualisierung erforderlich.

Set rstTemp = conMain.OpenRecordset( _

"SELECT * FROM Tantiemen_tab", dbOpenDynaset, 0, _

dbOptimisticBatch)

With rstTemp

' Die Anzahl der Anweisungen, die während einer Stapelaktualisierung

' an den Server gesendet werden, erhöhen,

' wodurch die Häufigkeit des Server-Zugriffs für

' die Aktualisierung reduziert wird.

.BatchSize = 25

' UpdateOptions-Eigenschaft ändern, damit der

' WHERE-Abschnitt einer Stapelanweisung an den

' Server alle aktualisierten Spalten beinhaltet,

' zusätzlich zu den Schlüsselspalten. Außerdem

' werden alle Veränderungen an den Datensätzen

' durchgeführt, indem der Originaldatensatz

' gelöscht wird, und eine veränderte Version hinzugefügt wird,

' anstatt den Originaldatensatz zu verändern.

.UpdateOptions = dbCriteriaModValues + _

dbCriteriaDeleteInsert

' Stapelaktualisierung mit den obigen, neuen

' Einstellungen ausführen.

' ...

.Close

End With

conMain.Close

wrkMain.Close

End Sub


CollatingOrder-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die CollatingOrder-Eigenschaft für die Nordwind-Datenbank und deren Felder in einer Tabelle an.

Sub CollatingOrderX()

Dim dbsNorthwind As Database

Dim fldLoop As Field

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Sortierreihenfolge der Nordwind-Datenbank zeigen.

Debug.Print "Sortierreihenfolge von " & .Name & " = " & _

.CollatingOrder

' Sortierreihenfolge der Felder eines TableDef-Objekts zeigen.

Debug.Print "Sortierreihenfolge der Felder in " & _

.TableDefs(0).Name & " table:"

For Each fldLoop In .TableDefs(0).Fields

Debug.Print "    " & fldLoop.Name & " = " & _

fldLoop.CollatingOrder

Next fldLoop

.Close

End With

End Sub


ConflictTable-Eigenschaft (Beispiel)

Dieses Beispiel listet mit der ConflictTable-Eigenschaft dieTabellennamen auf, die während einer Synchronisierung Konflikte hervorgerufen haben.

Sub ConflictTableX()

Dim dbsNorthwind As Database

Dim tdfTest As TableDef

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' TableDefs-Auflistung durchlaufen und deren

' ConflictTable-Eigenschaft überprüfen.

For Each tdfTest In dbsNorthwind.TableDefs

If tdfTest.ConflictTable <> "" Then _

Debug.Print tdfTest.Name & " verursachte einen Konflikt."

Next tdfTest

dbsNorthwind.Close

End Sub

Dieses Beispiel öffnet sowohl ein Recordset-Objekt aus einer Konflikttabelle als auch eines aus der Tabelle, die den Konflikt ausgelöst hat. Die Datensätze dieser Tabelle werden dann mit dem Feld RequieredDate, das die Informationen aus einer Tabelle in die andere kopiert, immer abhängig vom aktuellsten Datensatz, verarbeitet.

Sub ConflictTableX2(dbsResolve As Database)

Dim tdfTest As TableDef

Dim rstSource As Recordset

Dim rstConflict As Recordset

Dim fldLoop As Field

Set tdfTest = dbsResolve.TableDefs("Bestellungen")

If tdfTest.ConflictTable <> "" Then

Set rstSource = dbsResolve.OpenRecordset( _

tdfTest.Name, dbOpenTable)

Set rstConflict = dbsResolve.OpenRecordset( _

tdfTest.ConflictTable, dbOpenTable)

rstSource.Index = "[d_Guid]"

rstConflict.MoveFirst

Do Until rstConflict.EOF

rstSource.Seek "=", rstConflict![s_Guid]

If Not rstSource.NoMatch Then

If rstSource!RequiredDate < _

rstConflict!RequiredDate Then

On Error Resume Next

For Each fldLoop in rstConflict.Fields

fldLoop = rstSource(fldLoop.Name)

Next fldLoop

On Error Goto 0

End If

End If

rstConflict.Delete

rstConflict.MoveNext

Loop

rstConflict.Close

rstSource.Close

End If

End Sub


Connect- und SourceTableName-Eigenschaften (Beispiel)

Dieses Beispiel verknüpft mit den Eigenschaften Connect und SourceTableName mehrere externe Tabellen zu einer Microsoft Jet-Datenbank. Die Funktion ConnectOutput wird benötigt, um diese Prozedur auszuführen.

Sub ConnectX()

Dim dbsTemp As Database

Dim strMenu As String

Dim strInput As String

' Eine Microsoft Jet-Datenbank, die mit einer

' Tabelle verknüpft werden soll, öffnen.

Set dbsTemp = OpenDatabase("DB1.mdb")

' Menütext erstellen.

strMenu = "Nummer der Datenquelle eingeben:" & vbCr

strMenu = strMenu & _

"   1. Microsoft Jet-Datenbank" & vbCr

strMenu = strMenu & _

"   2. Microsoft FoxPro 3.0-Tabelle" & vbCr

strMenu = strMenu & _

"   3. dBASE-Tabelle" & vbCr

strMenu = strMenu & _

"   4. Paradox-Tabelle" & vbCr

strMenu = strMenu & _

"   M. (siehe Auswahl 5-9)"

' Benutzer zur Auswahl auffordern:

strInput = InputBox(strMenu)

If UCase(strInput) = "M" Then

' Menütext erstellen.

strMenu = "Nummer der Datenquelle eingeben:" & vbCr

strMenu = strMenu & _

"   5. Microsoft Excel-Tabellenblatt" & vbCr

strMenu = strMenu & _

"   6. Lotus-Tabellenblatt" & vbCr

strMenu = strMenu & _

"   7. Comma-Delimited Text (CSV)" & vbCr

strMenu = strMenu & _

"   8. HTML-Tabelle" & vbCr

strMenu = strMenu & _

"   9. Microsoft Exchange-Ordner"

' Benutzer zur Auswahl auffordern.

strInput = InputBox(strMenu)

End If

' Die ConnectOutput-Prozedur aufrufen. Das dritte

' Argument wird für die Zeichenfolge Connect string

' und das vierte Argument wird als SourceTableName verwendet.

Select Case Val(strInput)

Case 1

ConnectOutput dbsTemp, _

"JetTabelle", _

";DATABASE=C:\My Documents\Nordwind.mdb", _

"Personal"

Case 2

ConnectOutput dbsTemp, _

"FoxProTabelle", _

"FoxPro 3.0;DATABASE=C:\FoxPro30\Beispiele", _

"Q1Sales"

Case 3

ConnectOutput dbsTemp, _

"dBASETabelle", _

"dBase IV;DATABASE=C:\dBASE\Beispiele", _

"Konten"

Case 4

ConnectOutput dbsTemp, _

"ParadoxTabelle", _

"Paradox 3.X;DATABASE=C:\Paradox\Beispiele", _

"Konten"

Case 5

ConnectOutput dbsTemp, _

"ExcelTabelle", _

"Excel 5.0;" & _

"DATABASE=C:\Excel\Beispiele\Q1Sales.xls", _

"Januarverkäufe"

Case 6

ConnectOutput dbsTemp, _

"LotusTabelle", _

"Lotus WK3;" & _

"DATABASE=C:\Lotus\Beispiele\Verkauf.xls", _

"THIRDQTR"

Case 7

ConnectOutput dbsTemp, _

"CSVTable", _

"Text;DATABASE=C:\Beispiele", _

"Beispiel.txt"

Case 8

ConnectOutput dbsTemp, _

"HTMLTable", _

"HTML Import;DATABASE=http://" & _

"www.server1.com/Beispiele/Seite1.html", _

"Q1SalesData"

Case 9

ConnectOutput dbsTemp, _

"ExchangeTabelle", _

"Exchange 4.0;MAPILEVEL=" & _

"Mailbox - Michelle Wortman (Exchange)" & _

"|Personen\Wichtig;", _

"Jerry Wheeler"

End Select

dbsTemp.Close

End Sub

Sub ConnectOutput(dbsTemp As Database, _

strTable As String, strConnect As String, _

strSourceTable As String)

Dim tdfLinked As TableDef

Dim rstLinked As Recordset

Dim intTemp As Integer

' Neues TableDef-Objekt erstellen, die Connect- und

' SourceTableName-Eigenschaften - basierend auf den

' übergebenen Argumenten - festlegen, und sie der

'TableDefs-Auflistung anfügen.

Set tdfLinked = dbsTemp.CreateTableDef(strTable)

tdfLinked.Connect = strConnect

tdfLinked.SourceTableName = strSourceTable

dbsTemp.TableDefs.Append tdfLinked

Set rstLinked = dbsTemp.OpenRecordset(strTable)

Debug.Print "Dateien aus der verknüpften Tabelle:"

' Ersten drei Datensätze der verknüpften Tabelle anzeigen.

intTemp = 1

With rstLinked

Do While Not .EOF And intTemp <= 3

Debug.Print , .Fields(0), .Fields(1)

intTemp = intTemp + 1

.MoveNext

Loop

If Not .EOF Then Debug.Print , "[Zusätzliche Datensätze]"

.Close

End With

' Verknüpfte Tabelle löschen, da dies ein Beispiel ist.

dbsTemp.TableDefs.Delete strTable

End Sub


Container-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die Container-Eigenschaft zusammen mit Document-Objekten.

Sub ContainerPropertyX()

Dim dbsNorthwind As Database

Dim ctrLoop As Container

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Containernamen des ersten Document-Objekts in der

' jeweils zugehörigen Documents-Auflistung eines Document-Objekts anzeigen.

For Each ctrLoop In dbsNorthwind.Containers

Debug.Print "Document: " & ctrLoop.Documents(0).Name

Debug.Print "    Container = " & _

ctrLoop.Documents(0).Container

Next ctrLoop

dbsNorthwind.Close

End Sub


Database-Eigenschaft (Beispiel)

Dieses Beispiel zeigt mit der Database-Eigenschaft, wie Code, der auf ODBC-Daten mit dem Microsoft Jet-Datenbankmodul zugreift, konvertiert werden kann, damit ODBCDirect Connection-Objekte verwendet werden können.

Die Prozedur OldDatabaseCode greift mit einer Microsoft Jet-verbundenen Datenquelle auf eine ODBC-Datenbank zu.

Sub OldDatabaseCode()

Dim wrkMain As Workspace

Dim dbsPubs As Database

Dim prpLoop As Property

' Microsoft Jet Workspace-Objekt erstellen.

Set wrkMain = CreateWorkspace("", "Admin", "", dbUseJet)

' Database-Objekt öffnen, basierend auf den

' Informationen in der Verbindungszeichenfolge.

Set dbsPubs = wrkMain.OpenDatabase("Verleger", _

dbDriverNoPrompt, False, _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' Properties-Auflistung des Database-Objekts

' durchlaufen.

With dbsPubs

Debug.Print "Database-Eigenschaften von" & _

.Name & ":"

On Error Resume Next

For Each prpLoop In .Properties

If prpLoop.Name = "Connection" Then

' Eigenschaft gibt ein Connection-Objekt zurück.

Debug.Print "    Connection[.Name] = " & _

.Connection.Name

Else

Debug.Print "    " & prpLoop.Name & " = " & _

prpLoop

End If

Next prpLoop

On Error GoTo 0

End With

dbsPubs.Close

wrkMain.Close

End Sub

Das Beispiel NewDatabaseCode öffnet ein Connection-Objekt in einem ODBCDirect-Arbeitsbereich. Die Database-Eigenschaft eines Connection-Objekts wird einer Objektvariablen mit demselben Datenquellennamen wie in der alten Prozedur zugewiesen. Der darausfolgende Code muß nicht geändert werden, sofern keine spezifischen Microsoft Jet-Arbeitsbereichs-Merkmale verändert werden.

Sub NewDatabaseCode()

Dim wrkMain As Workspace

Dim conPubs As Connection

Dim dbsPubs As Database

Dim prpLoop As Property

' ODBCDirect Workspace-Objekt anstelle eines

' Microsoft Jet Workspace-Objekt erstellen.

Set wrkMain = CreateWorkspace("", "Admin", "", dbUseODBC)

' Connection-Objekt basierend auf den Informationen

' in der Verbindungszeichenfolge öffnen.

Set conPubs = wrkMain.OpenConnection("Verleger", _

dbDriverNoPrompt, False, _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' Database-Eigenschaft derselben Objektvariablen

' wie im alten Code zuweisen.

Set dbsPubs = conPubs.Database

' Properties-Auflistung des Database-Objekts

' durchlaufen. Ab hier ist der Code derselbe wie im

' alten Beispiel.

With dbsPubs

Debug.Print "Database-Eigenschaft von " & _

.Name & ":"

On Error Resume Next

For Each prpLoop In .Properties

If prpLoop.Name = "Connection" Then

' Eigenschaft gibt ein Connection-Objekt zurück.

Debug.Print "    Connection[.Name] = " & _

.Connection.Name

Else

Debug.Print "    " & prpLoop.Name & " = " & _

prpLoop

End If

Next prpLoop

On Error GoTo 0

End With

dbsPubs.Close

wrkMain.Close

End Sub


DefaultType-Eigenschaft (Beispiel)

Dieses Beispiel bestimmt mit der DefaultType-Eigenschaft im voraus, welcher Typ eines Workspace-Objekts erstellt wird, wenn die CreateWorkspace-Methode aufgerufen wird. Die Funktion TypeOutput wird benötigt, um diese Prozedur auszuführen.

Sub DefaultTypeX()

Dim wrkODBC As Workspace

Dim wrkJet As Workspace

Dim prpLoop As Property

' DefaultType-Eigenschaft festlegen und Workspace-

' Objekt erstellen, ohne den Typ anzugeben.

DBEngine.DefaultType = dbUseODBC

Set wrkODBC = CreateWorkspace("ODBCWorkspace", _

"Admin", "")

Debug.Print "DBEngine.DefaultType = " & _

TypeOutput(DBEngine.DefaultType)

With wrkODBC

' Properties-Auflistung des Workspace-Objekts durchlaufen.

Debug.Print "Eigenschaft von" & .Name

On Error Resume Next

For Each prpLoop In .Properties

Debug.Print "    " & prpLoop.Name & " = " & prpLoop

If prpLoop.Name = "Typ" Then Debug.Print _

"        (" & TypeOutput(prpLoop.Value) & ")"

Next prpLoop

On Error GoTo 0

End With

' DefaultType-Eigenschaft festlegen und Workspace-

' Objekt erstellen, ohne den Typ anzugeben.

DBEngine.DefaultType = dbUseJet

Set wrkJet = CreateWorkspace("JetWorkspace", "Admin", "")

Debug.Print "DBEngine.DefaultType = " & _

TypeOutput(DBEngine.DefaultType)

With wrkJet

' Properties-Auflistung des Workspace-Objekts durchlaufen.

Debug.Print "Eigenschaft von" & .Name

On Error Resume Next

For Each prpLoop In .Properties

Debug.Print "    " & prpLoop.Name & " = " & prpLoop

If prpLoop.Name = "Typ" Then Debug.Print _

"        (" & TypeOutput(prpLoop.Value) & ")"

Next prpLoop

On Error GoTo 0

End With

wrkODBC.Close

wrkJet.Close

End Sub

Function TypeOutput(intTemp As Integer) As String

If intTemp = dbUseJet Then

TypeOutput = "dbUseJet"

Else

TypeOutput = "dbUseODBC"

End If

End Function


DefaultUser- und DefaultPassword-Eigenschaft (Beispiel)

Dieses Beispiel legt die Eigenschaften DefaultUser und DefaultPassword fest; sie bestimmen die Einstellungen für das standardmäßige Workspace-Objekt.

Sub DefaultUserX()

' DefaultUser- und DefaultPassword-Eigenschaften

' des DBEngine-Objekts festlegen.

DBEngine.DefaultUser = "NewUser"

DBEngine.DefaultPassword = ""

Debug.Print _

"DBEngine.DefaultUser auf 'NewUser' festlegen..."

Debug.Print _

"DBEngine.DefaultPassword festlegen auf " & _

"[Zeichenfolge der Länge Null]..."

Dim wrkJet As Workspace

Dim wrkLoop As Workspace

Dim prpLoop As Property

Set wrkJet = CreateWorkspace("JetWorkspace", "admin", _

"", dbUseJet)

' Workspaces-Auflistung durchlaufen.

On Error Resume Next

For Each wrkLoop In Workspaces

Debug.Print "Workspace: " & wrkLoop.Name

' Properties-Auflistung eines jeden Workspace-

' Objekts durchlaufen.

For Each prpLoop In wrkLoop.Properties

Debug.Print "    " & prpLoop.Name & " = " & prpLoop

Next prpLoop

Next wrkLoop

On Error GoTo 0

wrkJet.Close

End Sub


DesignMasterID-Eigenschaft (Beispiel)

Dieses Beispiel legt die DesignMasterID-Eigenschaft auf die ReplicaID-Eigenschaft einer anderen Datenbank fest und macht diese Datenbank so zum Entwurfs-Master (Design Master) für die Replikatgruppe. Der alte und der neue Entwurfs-Master (Design Master) werden synchronisiert, um die Entwurfsänderungen abzugleichen. Damit der Code funktioniert, müssen ein Entwurfs-Master (Design Master) und ein Replikat erstellt, deren Namen und Pfade angegeben und der Code in einer Datenbank ausgeführt werden, die weder der alte noch der neue Entwurfs-Master (Design Master) ist.

Sub SetNewDesignMaster(strOldDM as String, _

strNewDM as String)

Dim dbsOld As Database

Dim dbsNew As Database

' Aktuellen Entwurfs-Master (Design Master) im

' Exklusivmodus öffnen.

Set dbsOld = OpenDatabase(strOldDM, True)

' Datenbank, die der neue Entwurfs-Master

' (Design Master) werden ' soll, öffnen.

Set dbsNew = OpenDatabase(strNewDM)

' Neue Datenbank wird zum Entwurfs-Master (Design

' Master).

dbsOld.DesignMasterID = dbsNew.ReplicaID

' Alten Entwurfs-Master (Design Master) mit dem

' neuen  synchronisieren und beidseitigen Austausch

' ermöglichen.

dbsOld.Synchronize strNewDM, dbRepImpExpChanges

dbsOld.Close

dbsNew.Close

End Sub


Direction-Eigenschaft (Beispiel)

Dieses Beispiel konfiguriert mit der Direction-Eigenschaft die Parameter einer Abfrage auf einer ODBC-Datenquelle.

Sub DirectionX()

Dim wrkMain As Workspace

Dim conMain As Connection

Dim qdfTemp As QueryDef

Dim rstTemp As Recordset

Dim strSQL As String

Dim intLoop As Integer

' ODBC-Arbeitsbereich erstellen und eine Verbindung

' zu einer Microsoft SQL Server-Datenbank öffnen.

Set wrkMain = CreateWorkspace("ODBCWorkspace", _

"Admin", "", dbUseODBC)

Set conMain = wrkMain.OpenConnection("Verleger", _

dbDriverNoPrompt, False, _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' SQL-Zeichenfolge zum Aufrufen der gespeicherten

' Prozedur getempsperjob festlegen.

strSQL = "{ call getempsperjob (?, ?) }"

Set qdfTemp = conMain.CreateQueryDef("", strSQL)

With qdfTemp

' Angeben, daß die zwei Abfrageparameter der

' gespeicherten Prozedur nur Informationen übergeben.

.Parameters(0).Direction = dbParamInput

.Parameters(1).Direction = dbParamInput

' Die Ausgangswerte den Parametern zuweisen.

.Parameters(0) = "0877"

.Parameters(1) = 0

Set rstTemp = .OpenRecordset()

With rstTemp

' Alle zulässigen Werte mit dem zweiten Parameter

' durchlaufen. Die Datensatzgruppe bei jeden

' Wert erneut abfragen, um das richtige

' Ergebnis zu erhalten, und dann den Inhalt

' der Datensatzgruppe ausgeben.

For intLoop = 1 To 14

qdfTemp.Parameters(1) = intLoop

.Requery

Debug.Print "Verleger = " & _

qdfTemp.Parameters(0) & _

", Position = " & intLoop

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

Next intLoop

.Close

End With

End With

conMain.Close

wrkMain.Close

End Sub


Error-Objekt, Errors-Auflistung und Description-, Number-, Source-, HelpFile- und HelpContext-Eigenschaften (Beispiel)

Dieses Beispiel erzwingt einen Fehler, fängt ihn auf und zeigt die Eigenschaften Description, Number, Source, HelpContext und HelpFile des daraus resultierenden Error-Objekts an.

Sub DescriptionX()

Dim dbsTest As Database

On Error GoTo ErrorHandler

' Absichtlich einen Fehler auslösen.

Set dbsTest = OpenDatabase("KeineDatenbank")

Exit Sub

ErrorHandler:

Dim strError As String

Dim errLoop As Error

' Errors-Auflistung durchlaufen und die

' Eigenschaften eines jeden Error-Objekts anzeigen.

For Each errLoop In Errors

With errLoop

strError = _

"Error #" & .Number & vbCr

strError = strError & _

"    " & .Description & vbCr

strError = strError & _

"    (Source: " & .Source & ")" & vbCr

strError = strError & _

"Press F1 to see topic " & .HelpContext & vbCr

strError = strError & _

"    in der Datei" & .HelpFile & "."

End With

MsgBox strError

Next

Resume Next

End Sub


Inherit-Eigenschaft (Beispiel)

In diesem Beispiel wird die Inherit-Eigenschaft des Tabellen-Containers auf True festgelegt, damit alle danach erstellten Document-Objekte im Container Tabellen dieselben Sicherheitseinstellungen wie der Container Tabellen haben.

Sub InheritX()

Dim dbsNorthwind As Database

Dim conTables As Container

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set conTables = dbsNorthwind.Containers("Tables")

' Wenn die Inherit-Eigenschaft des Containers

' Tabellen auf True festgelegt ist und dessen

' Berechtigungen festgelegt werden, erhält jedes

' neue Document-Objekt in dem Container die

' gleichen Berechtigungseinstellungen.

conTables.Inherit = True

conTables.Permissions = dbSecWriteSec

dbsNorthwind.Close

End Sub


Inherited-Eigenschaft (Beispiel)

In diesem Beispiel wird mit der Inherited-Eigenschaft bestimmt, ob ein benutzerdefiniertes Property-Objekt für ein Recordset-Objekt oder ein zugrundeliegendes Objekt erstellt wurde.

Sub InheritedX()

Dim dbsNorthwind As Database

Dim tdfTest As TableDef

Dim rstTest As Recordset

Dim prpNew As Property

Dim prpLoop As Property

' Eine neue Eigenschaft für ein gespeichertes

' TableDef-Objekt erstellen und dann eine

' Datensatzgruppe in dem TableDef-Objekt öffnen.

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set tdfTest = dbsNorthwind.TableDefs(0)

Set prpNew = tdfTest.CreateProperty("NeueEigenschaft", _

dbBoolean, True)

tdfTest.Properties.Append prpNew

Set rstTest = tdfTest.OpenRecordset(dbOpenForwardOnly)

' Namen und Inherited-Eigenschaft des neuen

' Property-Objekts im TableDef-Objekt zeigen.

Debug.Print "NeueEigenschaft von " & tdfTest.Name & _

" TableDef:"

Debug.Print "    Inherited = " & _

tdfTest.Properties("NeueEigenschaft").Inherited

' Namen und Inherited-Eigenschaft des neuen

' Property-Objekts im Recordset-Objekt zeigen.

Debug.Print "NeueEigenschaft von " & rstTest.Name & _

" Recordset:"

Debug.Print "    Inherited = " & _

rstTest.Properties("NeueEigenschaft").Inherited

' Neues TableDef-Objekt löschen, da dies ein

' Beispiel ist.

tdfTest.Properties.Delete prpNew.Name

dbsNorthwind.Close

End Sub


IniPath-Eigenschaft (Beispiel)

Dieses Beispiel legt den Pfad in der IniPath-Eigenschaft für einen Anwendungsschlüssel in der Windows-Registrierung fest.

Sub IniPathX()

' Die IniPath-Eigenschaft ändern, um auf einen

' anderen Abschnitt für Einstellungsinformationen

' in der Windows-Registrierung zu zeigen.

Debug.Print "Ursprüngliche IniPath-Einstellung = " & _

IIf(DBEngine.IniPath = "", "[Leer]", _

DBEngine.IniPath)

DBEngine.IniPath = _

"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\" & _

"Jet\3.5\ISAM Formats\FoxPro 3.0"

Debug.Print "Neue IniPath-Einstellung = " & _

IIf(DBEngine.IniPath = "", "[Leer]", _

DBEngine.IniPath)

End Sub


IsolateODBCTrans-Eigenschaft (Beispiel)

In diesem Beispiel werden drei ODBCDirect-Arbeitsbereiche geöffnet und deren IsolateODBCTrans-Eigenschaften auf True festgelegt, damit mehrere Transaktionen an denselben Datenquellen voneinander isoliert werden.

Sub IsolateODBCTransX()

DBEngine.DefaultType = dbUseJet

Dim wrkJet1 As Workspace

Dim wrkJet2 As Workspace

Dim wrkJet3 As Workspace

' Drei ODBCDirect-Arbeitsbereiche öffnen, um

' Transaktionen, die auf dieselben ODBC-

' Datenquellen zugreifen, voneinander zu trennen.

Set wrkJet1 = CreateWorkspace("", "Admin", "")

wrkJet1.IsolateODBCTrans = True

Set wrkJet2 = CreateWorkspace("", "Admin", "")

wrkJet2.IsolateODBCTrans = True

Set wrkJet3 = CreateWorkspace("", "Admin", "")

wrkJet3.IsolateODBCTrans = True

wrkJet1.Close

wrkJet2.Close

wrkJet3.Close

End Sub


KeepLocal-Eigenschaft (Beispiel)

Im folgenden Beispiel wird die KeepLocal-Eigenschaft einer Properties-Auflistung eines Document-Objekts für das Utilities-Modul in der Nordwind-Datenbank angefügt. Die Eigenschaft wird für ein Objekt (z.B. eine Tabelle) festgelegt, bevor eine Datenbank replizierbar gemacht wurde. Wenn die Datenbank zu einem Entwurfs-Master (Design Master) konvertiert wurde, wird das Objekt, für das Sie festgelegt haben, daß es lokal bleiben soll, nicht auf die anderen Elemente der Replikatgruppe verteilt. Geben Sie den Pfad für die Datei Nordwind.mdb Ihrem Computer entsprechend an.

Sub KeepLocalNWObjectX()

Dim dbsNorthwind As Database

Dim docTemp As Document

Dim prpTemp As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set docTemp = dbsNorthwind.Containers("Module"). _

Documents("Dienstprogramme")

Set prpTemp = docTemp.CreateProperty("KeepLocal", _

dbText, "T")

docTemp.Properties.Append prpTemp

dbsNorthwind.Close

End Sub

Der folgende Code legt die KeepLocal-Eigenschaft für das TableDef-Objekt auf "T" fest. Wenn die KeepLocal-Eigenschaft nicht vorhanden ist, wird sie erstellt und der Properties-Auflistung der Tabelle angefügt, und sie erhält den Wert "T".

Sub SetKeepLocal(tdfTemp As TableDef)

On Error GoTo ErrHandler

tdfTemp.Properties("KeepLocal") = "T"

On Error GoTo 0

Exit Sub

ErrHandler:

Dim prpNew As Property

If Err.Number = 3270 Then

Set prpNew = tdfTemp.CreateProperty("KeepLocal", _

dbText, "T")

tdfTemp.Properties.Append prpNew

Else

MsgBox "Fehler " & Err & ": " & Error

End If

End Sub


LoginTimeout-Eigenschaft (Beispiel)

Dieses Beispiel legt die LoginTimeout-Eigenschaft des DBEngine-Objekts auf 120 Sekunden fest. Dann werden drei ODBCDirect-Arbeitsbereiche geöffnet und deren Standardeinstellungen für die LoginTimeout-Eigenschaften, die vom DBEngine-Objekt übernommen wurden, werden verändert.

Sub LoginTimeoutX()

' Die Voreinstellung des Wert LoginTimeout ändern.

DBEngine.LoginTimeout = 120

Dim wrkODBC1 As Workspace

Dim wrkODBC2 As Workspace

Dim wrkODBC3 As Workspace

Set wrkODBC1 = CreateWorkspace("", "Admin", "", _

dbUseODBC)

Set wrkODBC2 = CreateWorkspace("", "Admin", "", _

dbUseODBC)

Set wrkODBC3 = CreateWorkspace("", "Admin", "", _

dbUseODBC)

' Die LoginTimeout-Eigenschaft der jeweiligen

' ODBCDirect-Arbeitsbereiche auf 60 Sekunden, die

' Standardzeit (120 Sekunden) und keine Wartezeit festlegen.

wrkODBC1.LoginTimeout = 60

wrkODBC2.LoginTimeout = -1

wrkODBC2.LoginTimeout = 0

wrkODBC1.Close

wrkODBC2.Close

wrkODBC3.Close

End Sub


LogMessages- und ReturnsRecords-Eigenschaften (Beispiel)

Dieses Beispiel erstellt mit den Eigenschaften LogMessages und ReturnsRecords eine Pass-Through-Abfrage, die Daten und Meldungen zurückgibt, die vom Remote Server generiert wurden.

Sub LogMessagesX()

Dim wrkJet As Workspace

Dim dbsCurrent As Database

Dim qdfTemp As QueryDef

Dim prpNew As Property

Dim rstTemp As Recordset

' Microsoft Jet Workspace-Objekt erstellen.

Set wrkJet = CreateWorkspace("", "Admin", "", dbUseJet)

Set dbsCurrent = wrkJet.OpenDatabase("DB1.mdb")

' QueryDef-Objekt erstellen, das alle Meldungen des

' Servers protokolliert und in einer Tabelle ablegt.

Set qdfTemp = dbsCurrent.CreateQueryDef("NeuQueryDef")

qdfTemp.Connect = _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger"

qdfTemp.SQL = "SELECT * FROM Buchhandlungen"

qdfTemp.ReturnsRecords = True

Set prpNew = qdfTemp.CreateProperty("LogMessages", _

dbBoolean, True)

qdfTemp.Properties.Append prpNew

' Abfrage ausführen und Ergebnisse anzeigen.

Set rstTemp = qdfTemp.OpenRecordset()

Debug.Print "Inhalt der Datensatzgruppe:"

With rstTemp

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

.Close

End With

' Neues QueryDef-Objekt löschen, da dies ein Beispiel ist.

dbsCurrent.QueryDefs.Delete qdfTemp.Name

dbsCurrent.Close

wrkJet.Close

End Sub


MaxRecords-Eigenschaft (Beispiel)

Dieses Beispiel legt mit der MaxRecords-Eigenschaft fest, wie viele Datensätze von einer Abfrage auf eine ODBC-Datenquelle zurückgegeben werden.

Sub MaxRecordsX()

Dim dbsCurrent As Database

Dim qdfPassThrough As QueryDef

Dim qdfLocal As QueryDef

Dim rstTemp As Recordset

' Datenbank öffnen, aus der QueryDef-Objekte

' erstellt werden können.

Set dbsCurrent = OpenDatabase("DB1.mdb")

' Pass-Through-Abfrage erstellen, um Daten aus

' einer SQL Server-Datenbank abzurufen.

Set qdfPassThrough = _

dbsCurrent.CreateQueryDef("")

' Die Eigenschaften der neuen Abfrage festlegen,

' dabei die Anzahl der Datensätze, die

' zurückgegeben werden können, auf 20 begrenzen.

qdfPassThrough.Connect = _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger"

qdfPassThrough.SQL = "SELECT * FROM Titel"

qdfPassThrough.ReturnsRecords = True

qdfPassThrough.MaxRecords = 20

Set rstTemp = qdfPassThrough.OpenRecordset()

' Abfrageergebnisse anzeigen.

Debug.Print "Abfrageergebnisse:"

With rstTemp

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

.Close

End With

dbsCurrent.Close

End Sub


Name-Eigenschaft (Beispiel)

Dieses Beispiel benennt mit der Name-Eigenschaft ein neu erstelltes Objekt, um zu zeigen, welche Objekte in einer vorgegebenen Auflistung sind, und um ein Objekt aus einer Auflistung zu löschen.

Sub NameX()

Dim dbsNorthwind As Database

Dim qdfNew As QueryDef

Dim qdfLoop As QueryDef

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Ein neues, permanentes QueryDef-Objekt

' erstellen, und dieses der QueryDefs-Auflistung anfügen.

Set qdfNew = .CreateQueryDef()

qdfNew.Name = "NewQueryDef"

qdfNew.SQL = "SELECT * FROM Personal"

.QueryDefs.Append qdfNew

' QueryDefs-Auflistung durchlaufen, um die Namen

' der QueryDef-Objekte anzuzeigen.

Debug.Print "Abfragenamen in " & .Name

For Each qdfLoop In .QueryDefs

Debug.Print "    " & qdfLoop.Name

Next qdfLoop

' Neues QueryDef-Objekt löschen, da dies ein

' Beispiel ist.

.QueryDefs.Delete qdfNew.Name

.Close

End With

End Sub


ODBCTimeout- und QueryTimeout-Eigenschaften (Beispiel)

Dieses Beispiel zeigt mit den Eigenschaften ODBCTimeout und QueryTimeout wie die Einstellung QueryTimeout eines Database-Objekts die Standardeinstellung ODBCTimeout aller QueryDef-Objekte festlegt, die aus einem Database-Objekt erstellt wurden.

Sub ODBCTimeoutX()

Dim dbsCurrent As Database

Dim qdfStores As QueryDef

Dim rstStores As Recordset

Set dbsCurrent = OpenDatabase("Nordwind.mdb")

' Voreingestelltes QueryTimeout der Northwind-

' Datenbank ändern.

Debug.Print "Voreingestellter QueryTimeout-Wert für Datenbank: " & _

dbsCurrent.QueryTimeout

dbsCurrent.QueryTimeout = 30

Debug.Print "Neuer QueryTimeout-Wert für Datenbank: " & _

dbsCurrent.QueryTimeout

' Neues QueryDef-Objekt erstellen.

Set qdfStores = dbsCurrent.CreateQueryDef("Buchhandlungen", _

"SELECT * FROM Buchhandlungen")

qdfStores.Connect = _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger"

' Die Voreinstellung der ODBCTimeout-Einstellung

' des neuen QueryDef-Objekts verändern.

Debug.Print "Voreinstellung des ODBCTimeout-Werts für das QueryDef-Objekt: " & _

qdfStores.ODBCTimeout

qdfStores.ODBCTimeout = 0

Debug.Print "Neuer ODBCTimeout-Wert für das QueryDef-Objekt: " & _

qdfStores.ODBCTimeout

' Abfrage ausführen und die Ergebnisse anzeigen.

Set rstStores = qdfStores.OpenRecordset()

Debug.Print "Inhalt der Datensatzgruppe:"

With rstStores

Do While Not .EOF

Debug.Print , .Fields(0), .Fields(1)

.MoveNext

Loop

.Close

End With

' Neues QueryDef-Objekt löschen, da dies ein

' Beispiel ist.

dbsCurrent.QueryDefs.Delete qdfStores.Name

dbsCurrent.Close

End Sub


Owner- und SystemDB-Eigenschaften (Beispiel)

Dieses Beispiel zeigt mit den Eigenschaften Owner und SystemDB die Eigentümer von verschiedenen Document-Objekten.

Sub OwnerX()

' Sicherstellen, daß die Microsoft Jet-

' Arbeitsgruppendatei verfügbar ist.

DBEngine.SystemDB = "system.mdw"

Dim dbsNorthwind As Database

Dim ctrLoop As Container

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

Debug.Print "Document-Eigentümer:"

' Containers-Auflistung durchlaufen und die

' Eigentümer des ersten Document-Objekt in

' Documents-Auflistung eines Containers zeigen.

For Each ctrLoop In .Containers

With ctrLoop

Debug.Print "    [" & .Documents(0).Name & _

"] in [" & .Name & _

"] Container Eigentum von [" & _

.Documents(0).Owner & "]"

End With

Next ctrLoop

.Close

End With

End Sub


PartialReplica-Eigenschaft (Beispiel)

Im folgenden Code-Beispiel werden mit der PartialReplica-Eigenschaft alle Datensätze repliziert, die Aufträge von Kunden in Kalifornien enthalten.

Sub PartialReplicaX()

' Annahmen: dbsTemp ist das Teilreplikat, und es

' bestehen bereits entsprechende Beziehungen

' zwischen den Tabellen.

Dim tdfOrders As TableDef

Dim relCustOrd As Relation

Dim dbsTemp As Database

Dim relLoop As Relation

Set dbsTemp = OpenDatabase("Nordwind.mdb")

Set tdfOrders = dbsTemp.TableDefs("Aufträge")

' Das Relation-Objekt "Kunden zu Aufträgen" suchen.

For Each relLoop In dbsTemp.Relations

If relLoop.Table = "Kunden" And _

relLoop.ForeignTable = "Aufträge" Then

' Die PartialReplica-Eigenschaft des

' Relation-Objekts auf True festlegen.

relLoop.PartialReplica = True

Exit For

End If

Next relLoop

End Sub

Anmerkung   Wenn Sie den Replikatfilter und eine replizierte Beziehung auf dieselbe Tabelle festgelegt haben, funktionieren die beiden zusammen als logischer OR-Operator, nicht als AND-Operator. Im vorangegangenen Beispiel sind die während der Synchronisierung ausgetauschten Datensätze alles Aufträge über $1000 oder alles Aufträge aus dem Gebiet Kalifornien, es sind aber nicht alle Aufträge aus dem Gebiet Kalifornien über $1000.


Prepare-Eigenschaft (Beispiel)

Dieses Beispiel gibt mit der Prepare-Eigenschaft an, daß eine Abfrage direkt ausgeführt werden soll und daß nicht zuerst eine temporär gespeicherte Prozedur auf dem Server erstellt wird.

Sub PrepareX()

Dim wrkODBC As Workspace

Dim conPubs As Connection

Dim qdfTemp As QueryDef

Dim rstTemp As Recordset

' ODBCDirect Workspace-Objekt erstellen und

' Connection-Objekt öffnen.

Set wrkODBC = CreateWorkspace("", _

"Admin", "", dbUseODBC)

Set conPubs = wrkODBC.OpenConnection("Verleger", , , _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

Set qdfTemp = conPubs.CreateQueryDef("")

With qdfTemp

' Da diese Abfrage nur einmal ausgeführt wird,

' muß die ODBC SQLExecDirect API-Funktion angegeben

' werden. Wenn diese Eigenschaft nicht vor der

' SQL-Eigenschaft festgelegt wird, dann wird

' die ODBC SQLPrepare API-Funktion aufgerufen,

' die jegliche Steigerung im Leistungsverhalten aufhebt.

.Prepare = dbQUnprepare

.SQL = "UPDATE Tantiemen_tab " & _

"SET royalty = Tantiemen_tab * 2 " & _

"WHERE Titel_id LIKE 'BU____' OR " & _

"Titel_id LIKE 'PC____'"

.Execute

End With

Debug.Print "Abfrageergebnisse:"

' Datensatzgruppe mit den veränderten Datensätzen öffnen.

Set rstTemp = conPubs.OpenRecordset( _

"SELECT * FROM Tantiemen_tab " & _

"WHERE Titel_id LIKE 'BU____' OR " & _

"Titel_id LIKE 'PC____'")

' Datensatzgruppe durchlaufen.

With rstTemp

Do While Not .EOF

Debug.Print , !Titel_id, !U_bereich, _

!O_bereich, !Tantiemen_tab

.MoveNext

Loop

.Close

End With

conPubs.Close

wrkODBC.Close

End Sub


RecordStatus- und DefaultCursorDriver-Eigenschaften (Beispiel)

Dieses Beispiel zeigt mit den Eigenschaften RecordStatus und DefaultCursorDriver, wie Änderungen an einem lokalen Recordset-Objekt während einer Stapelaktualisierung verfolgt werden. Die Funktion RecordStatusOutput wird benötigt, um die Prozedur auszuführen.

Sub RecordStatusX()

Dim wrkMain As Workspace

Dim conMain As Connection

Dim rstTemp As Recordset

Set wrkMain = CreateWorkspace("ODBCWorkspace", _

"Admin", "", dbUseODBC)

' Die Einstellung der DefaultCursorDriver-Eigenschaft

' wird für die Stapelaktualisierung benötigt.

wrkMain.DefaultCursorDriver = dbUseClientBatchCursor

Set conMain = wrkMain.OpenConnection("Verleger", _

dbDriverNoPrompt, False, _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' Das folgende Sperrargument wird für die

' Stapelaktualisierung benötigt.

Set rstTemp = conMain.OpenRecordset( _

"SELECT * FROM Autoren", dbOpenDynaset, 0, _

dbOptimisticBatch)

With rstTemp

.MoveFirst

Debug.Print "Ursprünglicher Datensatz: " & !A_nname

Debug.Print , RecordStatusOutput2(.RecordStatus)

.Edit

!A_nname = "Bowen"

.Update

Debug.Print "Bearbeiteter Datensatz: " & !A_nname

Debug.Print , RecordStatusOutput2(.RecordStatus)

.AddNew

!A_nname = "NeuerName"

.Update

Debug.Print "Neuer Datensatz: " & !!A_nname

Debug.Print , RecordStatusOutput(.RecordStatus)

.Delete

Debug.Print , RecordStatusOutput(.RecordStatus)

' Lokale Datensatzgruppe schließen, ohne die

' Daten auf dem Server zu aktualisieren.

.Close

End With

conMain.Close

wrkMain.Close

End Sub

Function RecordStatusOutput(lngTemp As Long) As String

Dim strTemp As String

strTemp = ""

' Ausgabezeichenfolge, basierend auf dem Wert

' von RecordStatus, erstellen.

If lngTemp = dbRecordUnmodified Then _

strTemp = "[dbRecordUnmodified]"

If lngTemp = dbRecordModified Then _

strTemp = "[dbRecordModified]"

If lngTemp = dbRecordNew Then _

strTemp = "[dbRecordNew]"

If lngTemp = dbRecordDeleted Then _

strTemp = "[dbRecordDeleted]"

If lngTemp = dbRecordDBDeleted Then _

strTemp = "[dbRecordDBDeleted]"

RecordStatusOutput = strTemp

End Function


Replicable-Eigenschaft (Beispiel)

Dieses Beispiel beschreibt zwei Situationen, in denen die Replicable-Eigenschaft verwendet wird: in einer Datenbank und bei einem Objekt in derselben Datenbank.

Dieses Beipiel macht aus der Nordwind.mdb eine replizierbare Datenbank. Sie sollten vor Ausführen des Codes eine Sicherungskopie der Nordwind-Datenbank machen; außerdem muß der Pfad für die Nordwind-Datenbank auf dem Computer angegeben werden.

Sub MakeDesignMasterX()

Dim dbsNorthwind As Database

Dim prpNew As Property

' Datenbank im Exklusivmodus öffnen.

Set dbsNorthwind = OpenDatabase("Nordwind.mdb", _

True)

With dbsNorthwind

' Wenn die Replicable-Eigenschaft nicht

' vorhanden ist, diese erstellen.

' Fehlerbehandlung deaktivieren, falls die

' Eigenschaft vorhanden ist.

On Error Resume Next

Set prpNew = .CreateProperty("Replicable", _

dbText, "T")

.Properties.Append prpNew

' Replicable-Eigenschaft der Datenbank auf den

' Wert True festlegen.

.Properties("Replicable") = "T"

.Close

End With

End Sub

Dieses Beispiel erstellt ein neues TableDef-Objekt und macht es replizierbar. Die Datenbank muß vorher schon replizierbar sein, damit die Prozedur funktioniert.

Sub CreateReplLocalTableX()

Dim dbsNorthwind As Database

Dim tdfNew As TableDef

Dim fldNew As Field

Dim prpNew As Property

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Neues TableDef-Objekt mit Namen "Steuern" erstellen.

Set tdfNew = dbsNorthwind.CreateTableDef("Steuern")

' Textfeld mit Namen "Höhe" definieren.

Set fldNew = tdfNew.CreateField("Höhe", dbText, 3)

' Neues Feld dem TableDef-Objekt anfügen.

tdfNew.Fields.Append fldNew

' Neues TableDef-Objekt der Datenbank hinzufügen.

dbsNorthwind.TableDefs.Append tdfNew

' Neue Replicable-Eigenschaft für neues TableDef-

' Objekt erstellen.

Set prpNew = tdfNew.CreateProperty("Replicable", _

dbText, "T")

' Replicable-Eigenschaft dem neuen TableDef-Objekt

' anfügen.

tdfNew.Properties.Append prpNew

dbsNorthwind.Close

End Sub

Im folgenden Code wird die Replicable-Eigenschaft für das angegebene TableDef-Objekt auf den Wert "T" festgelegt. Wenn die Eigenschaft nicht vorhanden ist, wird sie erstellt, der Properties-Auflistung der Tabelle angefügt, und sie erhält den Wert "T".

Sub SetReplicable(tdfTemp As TableDef)

On Error GoTo ErrHandler

tdfTemp.Properties("Replicable") = "T"

On Error GoTo 0

Exit Sub

ErrHandler:

Dim prpNew As Property

If Err.Number = 3270 Then

Set prpNew = tdfTemp.CreateProperty("Replicable", _

dbText, "T")

tdfTemp.Properties.Append prpNew

Else

MsgBox "Fehler " & Err & ": " & Error

End If

End Sub


ReplicaFilter-Eigenschaft (Beispiel)

Im folgenden Beispiel repliziert die ReplicaFilter-Eigenschaft nur die Datensätze der Kunden aus der Region Kalifornien.

Sub ReplicaFilterX()

' Dieses Beispiel geht davon aus, daß die momentan

' geöffnete Datenbank das Replikat ist.

Dim tdfCustomers As TableDef

Dim strFilter As String

Dim dbsTemp As Database

Set dbsTemp = OpenDatabase("Nordwind.mdb")

Set tdfCustomers = dbsTemp.TableDefs("Kunden")

' Mit vollständigem Replikat synchronisieren,

' bevor der Replikatfilter festgelegt wird.

dbsTemp.Synchronize "C:\Verkäufe\SJ96.MDB"

strFilter = "Region = 'CA'"

tdfCustomers.ReplicaFilter = strFilter

dbsTemp.PopulatePartial "C:\Verkäufe\SJ96.MDB"

' Jetzt den Replikatfilter entfernen (nur für

' Beispielzwecke).

tdfCustomers.ReplicaFilter = False

' Datenbank wieder auffüllen.

dbsTemp.PopulatePartial "C:\Verkäufe\Daten96.MDB"

End Sub


ReplicaID-Eigenschaft (Beispiel)

Dieses Beispiel erstellt ein Replikat aus dem Entwurfs-Master (Design Master) der Nordwind.mdb und gibt dann die ReplicaID-Eigenschaft des Replikats zurück, die von dem Microsoft Jet-Datenbankmodul automatisch erstellt wird. (Wenn Sie bisher den Entwurfs-Master (Design Master) der Nordwind-Datenbank erstellt haben, sehen Sie unter Replicable-Eigenschaft nach, oder ändern Sie den Namen der Datenbank im Code, so daß ein vorhandener Entwurfs-Master (Design Master) verwendet wird.)

Sub MakeReplicaReplicaIDX()

Dim dbsNorthwind As Database

Dim prpReplicaID As Property

Dim dbsReplica As Database

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

' Neues Replikat erstellen.

dbsNorthwind.MakeReplica "Neureplik2.mdb", _

"zweites Replikat"

dbsNorthwind.Close

' Öffnet das neue Replikat, um die ReplicaID festzulegen.

Set dbsReplica = OpenDatabase("Neureplik2.mdb")

Debug.Print dbsReplica.ReplicaID

dbsReplica.Close

End Sub


Required-Eigenschaft (Beispiel)

Dieses Beispiel bestimmt mit der Required-Eigenschaft, welche Felder in drei verschiedenen Tabellen Daten enthalten müssen, damit ein neuer Datensatz hinzugefügt werden kann. Die Funktion RequiredOutput wird benötigt, um diese Prozedur auszuführen.

Sub RequiredX()

Dim dbsNorthwind As Database

Dim tdfloop As TableDef

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

With dbsNorthwind

' Zeigen, welche Felder in der Fields-Auflistung

' der drei verschiedenen TableDef-Objekte benötigt werden.

RequiredOutput .TableDefs("Kategorien")

RequiredOutput .TableDefs("Kunden")

RequiredOutput .TableDefs("Personal")

.Close

End With

End Sub

Sub RequiredOutput(tdfTemp As TableDef)

Dim fldLoop As Field

' Fields-Auflistung des angegebenen TableDef-Objekts

' durchlaufen und die Required-Eigenschaft zeigen.

Debug.Print "Fields in " & tdfTemp.Name & ":"

For Each fldLoop In tdfTemp.Fields

Debug.Print , fldLoop.Name & ", Required = " & _

fldLoop.Required

Next fldLoop

End Sub


StillExecuting-Eigenschaft und Cancel-Methode (Beispiel)

Dieses Beispiel öffnet mit der StillExecuting-Eigenschaft und der Cancel-Methode ein Connection-Objekt asynchron.

Sub CancelConnectionX()

Dim wrkMain As Workspace

Dim conMain As Connection

Dim sngTime As Single

Set wrkMain = CreateWorkspace("ODBCWorkspace", _

"Admin", "", dbUseODBC)

' Verbindung asynchron öffnen.

Set conMain = wrkMain.OpenConnection("Verleger", _

dbDriverNoPrompt + dbRunAsync, False, _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

sngTime = Timer

' Fünf Sekunden warten.

Do While Timer - sngTime < 5

Loop

' Wenn die Verbindung nicht hergestellt wurde,

' Benutzer fragen, ob weiterhin gewartet werden

' soll. Wenn nicht, dann die Verbindung

' abbrechen und die Prozedur beenden.

Do While conMain.StillExecuting

If MsgBox("Bisher keine Verbindung—Weiterhin warten?", _

vbYesNo) = vbNo Then

conMain.Cancel

MsgBox "Verbindung abgebrochen!"

wrkMain.Close

Exit Sub

End If

Loop

With conMain

' Connection-Objekt conMain verwenden.

.Close

End With

wrkMain.Close

End Sub

Dieses Beispiel führt mit der StillExecuting-Eigenschaft und der Cancel-Methode das QueryDef-Objekt asynchron aus.

Sub CancelQueryDefX()

Dim wrkMain As Workspace

Dim conMain As Connection

Dim qdfTemp As QueryDef

Dim sngTime As Single

Set wrkMain = CreateWorkspace("ODBCWorkspace", _

"Admin", "", dbUseODBC)

Set conMain = wrkMain.OpenConnection("Verleger", _

dbDriverNoPrompt, False, _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

Set qdfTemp = conMain.CreateQueryDef("")

With qdfTemp

.SQL = "UPDATE Tantiemen_tab " & _

"SET Tantiemen_tab = Tantiemen_tab * 2 " & _

"WHERE Titel_id LIKE 'BU____' OR " & _

"Titel_id LIKE 'PC____'"

' Abfrage asynchron ausführen.

.Execute dbRunAsync

sngTime = Timer

' Fünf Sekunden warten.

Do While Timer - sngTime < 5

Loop

' Wenn die Abfrage noch nicht beendet ist,

' Benutzer fragen, ob weiterhin gewartet werden soll.

' Wenn nicht, Abfrage abbrechen und Prozedur beenden.

Do While .StillExecuting

If MsgBox( _

"Abfrage wird noch ausgeführt—Weiterhin warten?", _

vbYesNo) = vbNo Then

.Cancel

MsgBox "Abfrage abgebrochen!"

Exit Do

End If

Loop

End With

conMain.Close

wrkMain.Close

End Sub

Dieses Beispiel bewegt sich mit der StillExecuting-Eigenschaft und der Cancel-Methode asychron zum letzten Datensatz eines Recordset-Objekts.

Sub CancelRecordsetX()

Dim wrkMain As Workspace

Dim conMain As Connection

Dim rstTemp As Recordset

Dim sngTime As Single

Set wrkMain = CreateWorkspace("ODBCWorkspace", _

"Admin", "", dbUseODBC)

Set conMain = wrkMain.OpenConnection("Verleger", _

dbDriverNoPrompt, False, _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

Set rstTemp = conMain.OpenRecordset( _

"SELECT * FROM Tantiemen_tab", dbOpenDynaset)

With rstTemp

' MoveLast-Methode asynchron aufrufen.

.MoveLast dbRunAsync

sngTime = Timer

' Fünf Sekunden warten.

Do While Timer - sngTime < 5

Loop

' Wenn MoveLast nicht beendet ist, dann Benutzer

' fragen, ob weiterhin gewartet werden soll.

' Wenn nicht, MoveLast abbrechen und Prozedur abbrechen.

Do While .StillExecuting

If MsgBox( _

"Noch nicht beim letzten Datensatz. Weiterhin warten?", _

vbYesNo) = vbNo Then

.Cancel

MsgBox "MoveLast abgebrochen!"

conMain.Close

wrkMain.Close

Exit Sub

End If

Loop

' Datensatzgruppe verwenden.

.Close

End With

conMain.Close

wrkMain.Close

End Sub


Transactions-Eigenschaft (Beispiel)

Dieses Beispiel zeigt die Transactions-Eigenschaft in Microsoft Jet- und in ODBCDirect-Arbeitsbereichen.

Sub TransactionsX()

Dim wrkJet As Workspace

Dim wrkODBC As Workspace

Dim dbsNorthwind As Database

Dim conPubs As Connection

Dim rstTemp As Recordset

' Microsoft Jet- und ODBCDirect-Arbeitsbereiche,

' Microsoft Jet-Datenbank und ODBCDirect-Verbindung öffnen.

Set wrkJet = CreateWorkspace("", "Admin", "", dbUseJet)

Set wrkODBC = CreateWorkspace("", "Admin", "", dbUseODBC)

Set dbsNorthwind = wrkJet.OpenDatabase("Nordwind.mdb")

Set conPubs = wrkODBC.OpenConnection("", , , _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger")

' Zwei verschiedene Recordset-Objekte öffnen und

' für jedes die Transactions-Eigenschaft anzeigen.

Debug.Print "Microsoft Jet-Recordset vom Typ Tabelle öffnen" & _

"..."

Set rstTemp = dbsNorthwind.OpenRecordset( _

"Personal", dbOpenTable)

Debug.Print "    Transactions = " & rstTemp.Transactions

Debug.Print "Recordset vom Typ Vorwärts öffnen" & _

"dessen Quelle eine SQL-Anweisung ist..."

Set rstTemp = dbsNorthwind.OpenRecordset( _

"SELECT * FROM Personal", dbOpenForwardOnly)

Debug.Print "    Transactions = " & rstTemp.Transactions

' Transactions-Eigenschaft eines Connection-Objekts

' in einem ODBCDirect-Arbeitsbereich anzeigen.

Debug.Print "Testen der Transaction-Eigenschaft einer" & _

"ODBC-Verbindung..."

Debug.Print "    Transactions = " & conPubs.Transactions

rstTemp.Close

dbsNorthwind.Close

conPubs.Close

wrkJet.Close

wrkODBC.Close

End Sub


UserName-Eigenschaft (Beispiel)

Dieses Beispiel ändert mit der UserName-Eigenschaft die Berechtigungen eines Benutzers für ein Objekt sowie dessen Berechtigung, diesem Objekt neue Daten hinzuzufügen.

Sub UserNameX()

' Sicherstellen, daß die Microsoft Jet-

' Arbeitsgruppeninformationsdatei verfügbar ist.

DBEngine.SystemDB = "system.mdw"

Dim dbsNorthwind As Database

Dim docTemp As Document

Set dbsNorthwind = OpenDatabase("Nordwind.mdb")

Set docTemp = _

dbsNorthwind.Containers("Tabellen").Documents(0)

' Berechtigungen von NeuBenutzer im ersten

' Document-Objekt im Container Tabelle ändern.

With docTemp

.UserName = "NeuBenuter"

.Permissions = dbSecRetrieveData

If (.Permissions And dbSecInsertData) = _

dbSecInsertData Then

Debug.Print .UserName & " darf Daten einfügen."

Else

Debug.Print .UserName & " darf Daten nicht einfügen."

End If

End With

dbsNorthwind.Close

End Sub


Version-Eigenschaft (Beispiel)

Dieses Beispiel bestimmt mit der Version-Eigenschaft das Microsoft Jet-Datenbankmodul im Speicher, eine Microsoft Jet-Datenbank und eine ODBC-Verbindung.

Sub VersionX()

Dim wrkJet As Workspace

Dim dbsNorthwind As Database

Dim wrkODBC As Workspace

Dim conPubs As Connection

' Microsoft Jet Database-Objekt öffnen.

Set wrkJet = CreateWorkspace("NeueJetWorkspace", _

"Admin", "", dbUseJet)

Set dbsNorthwind = wrkJet.OpenDatabase("Nordwind.mdb")

' ODBCDirect Workspace-Objekt erstellen und

' Connection-Objekte öffnen.

Set wrkODBC = CreateWorkspace("NeueDBCWorkspace", _

"Admin", "", dbUseODBC)

Set conPubs = wrkODBC.OpenConnection("Connection1", , , _

"ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

' Drei verschiedene Verwendungsmöglichkeiten der

' Version-Eigenschaft zeigen.

Debug.Print "Version von DBEngine (Microsoft Jet " & _

"im Speicher) = " & DBEngine.Version

Debug.Print "Version des Microsoft Jet-Datenbankmoduls " & _

"mit dem " & dbsNorthwind.Name & _

" erstellt wurde = " & dbsNorthwind.Version

Debug.Print "Version der ODBCDirect-Auflistung" & _

"(Verwenden der Database-Eigenschaft) = " & _

conPubs.Database.Version

dbsNorthwind.Close

conPubs.Close

wrkJet.Close

wrkODBC.Close

End Sub


Connect- und ReturnsRecords-Eigenschaften (Beispiel) (Client/Server)

Dieses Beispiel verwendet die Eigenschaften Connect und ReturnsRecords, um die Titel der fünf meistverkauften Bücher, basierend auf den diesjährigen Verkaufszahlen aus einer Microsoft SQL Server-Datenbank auszuwählen. Wenn die Verkaufszahlen gleich sein sollten, wird im Beispiel die Liste vergrößert, die die Ergebnisse der Abfrage anzeigt und eine Meldung wird ausgegeben, in der dies begründet wird.

Sub ClientServerX1()

Dim dbsCurrent As Database

Dim qdfPassThrough As QueryDef

Dim qdfLocal As QueryDef

Dim rstTopFive As Recordset

Dim strMessage As String

' Eine Datenbank öffnen, aus der QueryDef-Objekte

' erstellt werden können.

Set dbsCurrent = OpenDatabase("DB1.mdb")

' Eine Pass-Through-Abfrage erstellen, um Daten von

' einer Microsoft SQL Server-Datenbank abzurufen.

Set qdfPassThrough = _

dbsCurrent.CreateQueryDef("AlleTitel")

qdfPassThrough.Connect = _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger"

qdfPassThrough.SQL = "SELECT * FROM Titel " & _

"ORDER BY Verkäufe DESC"

qdfPassThrough.ReturnsRecords = True

' Ein temporäres QueryDef-Objekt erstellen, um

' Daten aus der Pass-Through-Abfrage abzurufen.

Set qdfLocal = dbsCurrent.CreateQueryDef("")

qdfLocal.SQL = "SELECT TOP 5 Titel FROM AlleTitel"

Set rstTopFive = qdfLocal.OpenRecordset()

' Abfrageergebnisse anzeigen.

With rstTopFive

strMessage = _

"Die fünf meistverkauften Bücher:" & vbCr

Do While Not .EOF

strMessage = strMessage & "    " & !Titel & _

vbCr

.MoveNext

Loop

If .RecordCount > 5 Then

strMessage = strMessage & _

"(Es gab identische Zahlen, daher " & _

"gibt es " & _

vbCr & .RecordCount & _

" Bücher in der Liste.)"

End If

MsgBox strMessage

.Close

End With

' Neue Pass-Through-Abfrage löschen, da dies ein

' Beispiel ist.

dbsCurrent.QueryDefs.Delete "AlleTitel"

dbsCurrent.Close

End Sub


CreateQueryDef-Methode, OpenRecordset-Methode und SQL-Eigenschaft (Beispiel) (Client/Server)

Dieses Beispiel erstellt mit den Methoden CreateQueryDef und OpenRecordset sowie der SQL-Eigenschaft eine Abfrage, in der die Tabelle der Titel in der Microsoft SQL Server-Beispieldatenbank Verleger ermittelt werden und der Titel und Bezeichner des meistverkauften Buches wird zurückzugeben. Dann wird die Tabelle der Autoren abgefragt und der Benutzer angewiesen, jedem Autor, basierend auf dessen Tantiemenanteil, einen Bonus anzuweisen. (Der gesamte Bonus beträgt 1000 DM, und jeder Autor sollte einen Teil dieser Summe erhalten.)

Sub ClientServerX2()

Dim dbsCurrent As Database

Dim qdfBestSellers As QueryDef

Dim qdfBonusEarners As QueryDef

Dim rstTopSeller As Recordset

Dim rstBonusRecipients As Recordset

Dim strAuthorList As String

' Eine Datenbank öffnen, aus der QueryDef-Objekte erstellt

' werden können.

Set dbsCurrent = OpenDatabase("DB1.mdb")

' Ein temporäres QueryDef-Objekt erstellen, um

' Daten von einer Microsoft SQL Server-Datenbank

' abzurufen.

Set qdfBestSellers = dbsCurrent.CreateQueryDef("")

With qdfBestSellers

.Connect = "ODBC;DATABASE=Verleger;UID=sa;PWD=;" & _

 "DSN=Verleger"

.SQL = "SELECT Titel, Titel_Id FROM Titel " & _

"ORDER BY Verkäufe DESC"

Set rstTopSeller = .OpenRecordset()

rstTopSeller.MoveFirst

End With

' Temporäres QueryDef-Objekt erstellen, um Daten

' von einer Microsoft SQL Server-Datenbank

' basierend auf den Ergebnissen der ersten

' Abfrage abzurufen.

Set qdfBonusEarners = dbsCurrent.CreateQueryDef("")

With qdfBonusEarners

.Connect = "ODBC;DATABASE=Verleger;UID=sa;PWD=;" & _

"DSN=Verleger"

.SQL = "SELECT * FROM Titelautor " & _

"WHERE Titel_Id = '" & _

rstTopSeller!Titel_Id & "'"

Set rstBonusRecipients = .OpenRecordset()

End With

' Erstellen der auszugebenden Zeichenfolge.

With rstBonusRecipients

Do While Not .EOF

strAuthorList = strAuthorList & "    " & _

!A_id & ":  $" & (10 * !Anteil) & vbCr

.MoveNext

Loop

End With

' Ergebnisse anzeigen.

MsgBox "Diesen Autoren einen Betrag in" & _

" folgender Höhe anweisen:" & vbCr & _

strAuthorList & _

" (für hervorragende Verkaufszahlen von " & _

rstTopSeller!Titel & "."

rstTopSeller.Close

dbsCurrent.Close

End Sub


CreateTableDef-Methode, FillCache-Methode sowie CacheSize-, CacheStart- und SourceTableName-Eigenschaften (Beispiel)
CreateTableDef-Methode, FillCache-Methode sowie CacheSize-, CacheStart- und SourceTableName-Eigenschaften (Beispiel) (Client/Server)

Dieses Beispiel durchläuft mit den Methoden CreateTableDef und FillCache sowie den CacheSize-, CacheStart- und SourceTableName-Eigenschaften die Datensätze in einer verknüpften Tabelle zweimal. Danach werden die Datensätze zweimal mit einem Zwischenspeicher für 50 Datensätze durchlaufen. Anschließend zeigt das Beispiel die Leistungsstatistik für die nicht zwischengespeicherten und die zwischengespeicherten Durchläufe der verknüpften Tabelle an.

Sub ClientServerX3()

Dim dbsCurrent As Database

Dim tdfRoyalties As TableDef

Dim rstRemote As Recordset

Dim sngStart As Single

Dim sngEnd As Single

Dim sngNoCache As Single

Dim sngCache As Single

Dim intLoop As Integer

Dim strTemp As String

Dim intRecords As Integer

' Eine Datenbank öffnen, der eine verknüpfte

' Tabelle angefügt werden kann.

Set dbsCurrent = OpenDatabase("DB1.mdb")

' Eine verknüpfte Tabelle erstellen, die mit einer

' Microsoft SQL Server-Datenbank verbunden wird.

Set tdfRoyalties = _

dbsCurrent.CreateTableDef("Tantiemen")

tdfRoyalties.Connect = _

"ODBC;DATABASE=Verleger;UID=sa;PWD=;DSN=Verleger"

tdfRoyalties.SourceTableName = "Tantiemen"

dbsCurrent.TableDefs.Append tdfRoyalties

Set rstRemote = _

dbsCurrent.OpenRecordset("Tantiemen")

With rstRemote

' Recordset-Objekt zweimal durchlaufen und

' die Dauer aufzeichnen.

sngStart = Timer

For intLoop = 1 To 2

.MoveFirst

Do While Not .EOF

' Eine einfache Operation zum Testen

' des Leistungsverhaltens ausführen.

strTemp = !Titel_id

.MoveNext

Loop

Next intLoop

sngEnd = Timer

sngNoCache = sngEnd - sngStart

' Die ersten 50 Datensätze zwischenspeichern.

.MoveFirst

.CacheSize = 50

.FillCache

sngStart = Timer

' Recordset-Objekt zweimal durchlaufen und

' die Dauer aufzeichnen.

For intLoop = 1 To 2

intRecords = 0

.MoveFirst

Do While Not .EOF

' Eine einfache Operation zum Testen

' des Leistungsverhaltens ausführen.

strTemp = !Titel_Id

' Datensätze zählen. Wenn der

' Zwischenspeicher

' voll ist, den Zwischenspeicher auf

' die nächsten 50 Datensätze zurücksetzen.

intRecords = intRecords + 1

.MoveNext

If intRecords Mod 50 = 0 Then

.CacheStart = .Bookmark

.FillCache

End If

Loop

Next intLoop

sngEnd = Timer

sngCache = sngEnd - sngStart

' Ergebnisse des Leistungstests anzeigen.

MsgBox "Zwischenspeichern der Ergebnisse " & _

"des Leistungstests:" & vbCr & _

"    Ohne Zwischenspeicher: " & _

Format(sngNoCache, _

"##0.000") & " Sekunden" & vbCr & _

"    Zwischenspeicher für 50 Datensätze: " & _

Format(sngCache, _

"##0.000") & " Sekunden"

.Close

End With

' Verknüpfte Tabelle löschen, da dies

' ein Beispiel ist.

dbsCurrent.TableDefs.Delete tdfRoyalties.Name

dbsCurrent.Close

End Sub