DetailPage-MSS-KB

Knowledge Base

Artikel-ID: 281998 - Geändert am: Donnerstag, 22. Januar 2004 - Version: 4.1

Dieser Artikel wurde zuvor veröffentlicht unter D281998
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
281998  (http://support.microsoft.com/kb/281998/EN-US/ ) How to Bind Microsoft Access Forms to ADO Recordsets
Fortgeschritten: Erfordert Fachkenntnisse in den Bereichen Codierung und Interoperabilität sowie Mehrbenutzerfähigkeiten.

Dieser Artikel bezieht sich auf Microsoft Access-Datenbanken (.mdb) sowie auf Microsoft Access-Projekte (.adp).

Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt die Anforderungen, die erfüllt sein müssen, um ein aktualisierbares Formular zu erstellen, das an ein ADO-Objekt (ADO = ActiveX Data Objects) des Typs Recordset gebunden ist.

Weitere Informationen

Um ein Microsoft Access-Formular an ein Recordset zu binden, müssen Sie die Eigenschaft Recordset des Formulars auf ein gültiges DAO- oder ADO-Objekt des Typs Recordset festlegen.

Die Eigenschaft Recordset wurde in Microsoft Access 2000 eingeführt und bietet Ihnen die Möglichkeit, Formulare an DAO- oder ADO-Objekte des Typs Recordset zu binden. Das Aktualisieren von Formularen in Access 2000 wird jedoch nur dann unterstützt, wenn die ADO-Verbindung mit den Providern "MSDataShape" und "SQL Server OLEDB" geöffnet wird. Weitere Informationen zu dieser in Access 2000 geltenden Beschränkung finden Sie im folgenden Artikel der Microsoft Knowledge Base:
227053  (http://support.microsoft.com/kb/227053/DE/ ) Auf ADO-Recordsets basierende Formulare sind schreibgeschützt
In Microsoft Access 2002 oder höher können Sie ein aktualisierbares Formular erstellen, das an ein ADO-Recordset gebunden ist, welches andere OLEDB-Provider verwendet. Damit ein an ein ADO-Recordset gebundenes Formular aktualisierbar ist, müssen diverse allgemeine Anforderungen erfüllt sein. Diese allgemeinen Anforderungen sind:
  1. Das zugrunde liegende ADO-Recordset muss aktualisierbar sein.
  2. Das Recordset muss ein Feld oder mehrere Felder enthalten, das/die eindeutig indiziert ist/sind, wie zum Beispiel der Primärschlüssel einer Tabelle.
Die weiteren Anforderungen, die für die Aktualisierbarkeit erfüllt sein müssen, variieren von Provider zu Provider. Dieser Artikel beschreibt die sonstigen Anforderungen bei Verwendung der Provider Microsoft SQL Server, Jet, ODBC und Oracle OLEDB.

Anforderungen für Microsoft SQL Server

Es gibt zwei Hauptanforderungen, die erfüllt sein müssen, um die Aktualisierbarkeit zu unterstützen, wenn Sie ein Formular an ein ADO-Recordset binden, das Microsoft SQL Server-Daten verwendet:
  • Für die Verbindung eines ADO-Recordsets muss der Microsoft Access 10.0 OLEDB-Provider als Dienstanbieter eingesetzt werden.
  • Für die Verbindung eines ADO-Recordsets muss der Microsoft SQL Server OLEDB-Provider als Datenanbieter verwendet werden.
Hinweis: Microsoft Access 10.0 OLEDB ist ein OLEDB-Dienstanbieter, der speziell für die Verwendung in Microsoft Access entwickelt wurde. Er ist nicht für die Verwendung in anderen Anwendungen als Microsoft Access gedacht und wird von diesen auch nicht unterstützt.

Wenn Sie ADO-Recordsets in Microsoft Access erstellen, können Sie wählen, welche ADO-Verbindung durch das Recordset genutzt wird. Ihr ADO-Code kann die ADO-Verbindung verwenden, die Microsoft Access für die SQL Server-Datenbank verwendet, die aktuell in einer Access-Projektdatei (ADP) geöffnet ist; oder Sie können auf programmatischem Wege eine ADO-Verbindung zu einer anderen SQL Server-Datenbank herstellen.

Nutzung der von Microsoft Access verwendeten ADO-Verbindung

Wenn Sie eine Access-Projektdatei (.adp) einsetzen, die mit einer Microsoft SQL Server-Datenbank verbunden ist, ist es möglich, dass Ihr ADO-Code dieselbe ADO-Verbindung nutzt wie Microsoft Access. Diese Verbindung wird durch die Eigenschaft CurrentProject.AccessConnection repräsentiert.

Das folgende Beispiel veranschaulicht die Bindung eines Formulars an ein ADO-Recordset, das auf SQL Server-Daten basiert und dieselbe ADO-Verbindung verwendet wie Microsoft Access.
  1. Öffnen Sie das Beispielprojekt "NordwindCS.adp".
  2. Öffnen Sie das Formular "Kunden" in der Entwurfsansicht.
  3. Löschen Sie die Eigenschaft RecordSource des Formulars, um die Bindung des Formulars aufzuheben.
  4. Legen Sie die Eigenschaft OnOpen des Formulars auf die folgende Ereignisprozedur fest:
     Private Sub Form_Open(Cancel As Integer)    Dim cn As ADODB.Connection    Dim rs As ADODB.Recordset              'Use the ADO connection that Access uses    Set cn = CurrentProject.AccessConnection     'Create an instance of the ADO Recordset class, and    'set its properties    Set rs = New ADODB.Recordset    With rs       Set .ActiveConnection = cn       .Source = "SELECT * FROM Customers"       .LockType = adLockOptimistic       .CursorType = adOpenKeyset       .Open     End With        'Set the form's Recordset property to the ADO recordset    Set Me.Recordset = rs     Set rs = Nothing    Set cn = Nothing End Sub 					
  5. Speichern Sie das Formular, und schließen Sie es dann.
  6. Öffnen Sie das Formular "Kunden" in der Formularansicht.
  7. Fügen Sie einen Datensatz in das Formular ein bzw. bearbeiten oder löschen Sie einen Datensatz in dem Formular.
Beachten Sie, dass das Formular an ein aktualisierbares Recordset gebunden ist, das auf SQL Server-Daten basiert.

Öffnen einer separaten ADO-Verbindung

In bestimmten Situationen müssen Sie eventuell Ihre eigene ADO-Verbindung zu SQL Server einrichten und verwalten. Dies müssten Sie beispielsweise tun, wenn Sie selbst geschriebenen Code in einer Access-Datenbank (.mdb) oder einer Access-Projektdatei (.adp) verwenden, die mit einer anderen SQL Server-Datenbank verbunden sind als Ihre Anwendung. Wenn Sie sich für diese Vorgehensweise entscheiden, empfiehlt Microsoft, die von Ihnen geöffnete ADO-Verbindung zu schließen, wenn sie nicht mehr benötigt wird. Sie könnten zum Beispiel die ADO-Verbindung im Ereignis "UnLoad" des Formulars schließen.

Das folgende Beispiel zeigt, wie Sie Ihre eigene ADO-Verbindung zu einer Microsoft SQL Server-Datenbank öffnen und dann ein Formular daran binden können:
  1. Öffnen Sie die Beispieldatenbank "Nordwind.mdb".
  2. Öffnen Sie das Formular "Kunden" in der Entwurfsansicht.
  3. Löschen Sie die Eigenschaft RecordSource des Formulars, um die Bindung des Formulars aufzuheben.
  4. Legen Sie die Eigenschaft OnOpen des Formulars auf die folgende Ereignisprozedur fest:
     Private Sub Form_Open(Cancel As Integer)    Dim cn As ADODB.Connection    Dim rs As ADODB.Recordset              'Create a new ADO Connection object    Set cn = New ADODB.Connection     'Use the Access 10 and SQL Server OLEDB providers to    'open the Connection    'You will need to replace MySQLServer with the name    'of a valid SQL Server    With cn       .Provider = "Microsoft.Access.OLEDB.10.0"       .Properties("Data Provider").Value = "SQLOLEDB"       .Properties("Data Source").Value = "MySQLServer"       .Properties("User ID").Value = "sa"       .Properties("Password").Value = ""       .Properties("Initial Catalog").Value = "NorthwindCS"       .Open    End With     'Create an instance of the ADO Recordset class, and    'set its properties    Set rs = New ADODB.Recordset    With rs       Set .ActiveConnection = cn       .Source = "SELECT * FROM Customers"       .LockType = adLockOptimistic       .CursorType = adOpenKeyset       .Open     End With        'Set the form's Recordset property to the ADO recordset    Set Me.Recordset = rs    Set rs = Nothing    Set cn = Nothing End Sub 					
  5. Fügen Sie den folgenden Code zu dem Ereignis "UnLoad" des Formulars hinzu:
    Private Sub Form_Unload(Cancel As Integer)
       'Close the ADO connection we opened
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
    					
  6. Speichern Sie das Formular, und schließen Sie es dann.
  7. Öffnen Sie das Formular "Kunden" in der Formularansicht.
  8. Fügen Sie einen Datensatz in das Formular ein bzw. bearbeiten oder löschen Sie einen Datensatz in dem Formular.
Beachten Sie, dass das Formular an ein aktualisierbares Recordset gebunden ist, das auf SQL Server-Daten basiert.

Anforderungen für Microsoft Jet

Es ist zwar möglich, ein Formular an ein ADO-Recordset zu binden, das Daten aus einer Jet-Datenbank verwendet, Microsoft empfiehlt jedoch, lieber DAO einzusetzen. DAO ist hoch optimiert für Jet und funktioniert in Verbindung mit einer Jet-Datenbank in der Regel schneller als ADO.

Wenn Sie ein Formular an ein ADO-Recordset binden, das Microsoft Jet-Daten verwendet, gibt es zwei Alternativen:
  • Die Eigenschaft ActiveConnection des Recordsets muss den Dienstanbieter Microsoft Access 10.0 OLEDB und den Datenanbieter Microsoft Jet 4.0 OLEDB verwenden, und das Recordset muss einen serverseitigen Cursor haben.

    -oder-
  • Die Eigenschaft ActiveConnection des Recordsets muss nur den Datenanbieter Microsoft Jet 4.0 OLEDB verwenden, und das Recordset muss einen clientseitigen Cursor haben.
Ähnlich wie in dem vorstehenden Abschnitt "Microsoft SQL Server" haben Sie die Wahl, welche ADO-Verbindung das Recordset verwendet, wenn eine Jet-Datenbank eingesetzt wird. Ihr ADO-Code kann die ADO-Verbindung verwenden, die Microsoft Access für die Jet-Datenbankdatei (.mdb) verwendet, die aktuell geöffnet ist, oder Sie können auf programmatischem Wege eine ADO-Verbindung zu einer separaten Jet-Datenbankdatei herstellen.

Nutzung der von Microsoft Access verwendeten ADO-Verbindung

Wenn Sie den Code in derselben Microsoft Access-Datenbank (.mdb) schreiben, welche die Daten enthält, die Sie für Ihr Recordset benötigen, ist es möglich, dass Ihr ADO-Code dieselbe ADO-Verbindung nutzt wie Microsoft Access. Diese Verbindung wird durch die Eigenschaft CurrentProject.AccessConnection repräsentiert. Das folgende Beispiel veranschaulicht die Bindung eines Formulars an ein ADO-Recordset in einer Jet-Datenbank, wobei die ADO-Verbindung verwendet wird, die aktuell auch Microsoft Access verwendet.
  1. Öffnen Sie die Beispieldatenbank "Nordwind.mdb".
  2. Öffnen Sie das Formular "Kunden" in der Entwurfsansicht.
  3. Löschen Sie die Eigenschaft RecordSource des Formulars, um die Bindung des Formulars aufzuheben.
  4. Legen Sie die Eigenschaft OnOpen des Formulars auf die folgende Ereignisprozedur fest:
     Private Sub Form_Open(Cancel As Integer)    Dim cn As ADODB.Connection    Dim rs As ADODB.Recordset                     Set cn = CurrentProject.AccessConnection     'Create an instance of the ADO Recordset class, and    'set its properties    Set rs = New ADODB.Recordset    With rs       Set .ActiveConnection = cn       .Source = "SELECT * FROM Customers"       .LockType = adLockOptimistic       .CursorType = adOpenKeyset       .CursorLocation = adUseServer       .Open     End With        'Set the form's Recordset property to the ADO recordset    Set Me.Recordset = rs    Set rs = Nothing    Set cn = Nothing End Sub 					
  5. Speichern Sie das Formular, und schließen Sie es dann.
  6. Öffnen Sie das Formular "Kunden" in der Formularansicht.
  7. Fügen Sie einen Datensatz in das Formular ein bzw. bearbeiten oder löschen Sie einen Datensatz in dem Formular.
Beachten Sie , dass das Formular an ein aktualisierbares Recordset gebunden ist, das Jet-Daten verwendet.

Öffnen einer separaten ADO-Verbindung

In bestimmten Situationen müssen Sie eventuell Ihre eigene ADO-Verbindung zu einer Jet-Datenbank einrichten und verwalten. Diese Vorgehensweise wäre zum Beispiel dann geboten, wenn Sie Ihren Code in einer anderen Datenbank als der Datenbank schreiben, in der sich die Daten befinden, auf die Sie zugreifen müssen. Wenn Sie sich für diese Vorgehensweise entscheiden, empfiehlt Microsoft, die von Ihnen geöffnete ADO-Verbindung zu schließen, wenn sie nicht mehr benötigt wird. Sie könnten zum Beispiel die ADO-Verbindung im Ereignis "UnLoad" des Formulars schließen.

Das folgende Beispiel demonstriert, wie Sie Ihre eigene ADO-Verbindung zu einer Microsoft Jet-Datenbank öffnen und dann ein Formular daran binden können:
  1. Erstellen Sie eine neue (leere) Datenbank.
  2. Importieren Sie das Formular "Kunden" aus der Datenbank "Nordwind.mdb".
  3. Öffnen Sie das Formular "Kunden" in der Entwurfsansicht.
  4. Löschen Sie die Eigenschaft RecordSource des Formulars, um die Bindung des Formulars aufzuheben.
  5. Legen Sie die Eigenschaft OnOpen des Formulars auf die folgende Ereignisprozedur fest:
     Private Sub Form_Open(Cancel As Integer)    Dim cn As ADODB.Connection    Dim rs As ADODB.Recordset              'Create a new ADO Connection object    Set cn = New ADODB.Connection     With cn       .Provider = "Microsoft.Access.OLEDB.10.0"       .Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"       .Properties("Data Source").Value = _           "C:\Program Files\Microsoft Office\Office10" & _           "\Samples\Northwind.mdb"       .Open    End With     'Create an instance of the ADO Recordset class, and    'set its properties    Set rs = New ADODB.Recordset    With rs       Set .ActiveConnection = cn       .Source = "SELECT * FROM Customers"       .LockType = adLockOptimistic       .CursorType = adOpenKeyset       .Open     End With        'Set the form's Recordset property to the ADO recordset    Set Me.Recordset = rs    Set rs = Nothing    Set cn = Nothing End Sub 					
  6. Fügen Sie den folgenden Code zu dem Ereignis "UnLoad" des Formulars hinzu:
     Private Sub Form_Unload(Cancel As Integer)    'Close the ADO connection we opened    Dim cn As ADODB.Connection    Set cn = Me.Recordset.ActiveConnection    cn.Close    Set cn = Nothing End Sub 					
  7. Speichern Sie das Formular, und schließen Sie es dann.
  8. Öffnen Sie das Formular "Kunden" in der Formularansicht.
  9. Fügen Sie einen Datensatz in das Formular ein bzw. bearbeiten oder löschen Sie einen Datensatz in dem Formular.
Beachten Sie, dass das Formular an ein aktualisierbares Recordset gebunden ist, das Jet-Daten verwendet.

Anforderungen für ODBC

Wenn Sie ein Formular an ein ADO-Recordset binden, das Daten aus einer ODBC-Datenbank verwendet, gibt es zwei Hauptanforderungen:
  • Für die durch das Recordset verwendete ADO-Verbindung muss der Microsoft OLEDB-Provider für ODBC eingesetzt werden.
  • Das ADO-Recordset muss einen Client-Cursor haben.
Das folgende Beispiel zeigt, wie Sie eine ADO-Verbindung zu einer ODBC-Datenbank öffnen und dann ein Formular daran binden können.

Hinweis: Bei den folgenden Schritten wird davon ausgegangen, dass die ODBC-Datenbank eine Tabelle mit dem Namen "KUNDEN" enthält, die ihrer Struktur nach identisch ist mit der Tabelle "Kunden" in der Beispieldatenbank "Nordwind.mdb". Außerdem wird vorausgesetzt, dass Sie einen ODBC-DSN mit dem Namen "MyDSN" erstellt haben, der den ODBC-Treiber verwendet, den Sie für die Verbindung zu der Backend-Datenbank benötigen.
  1. Öffnen Sie die Beispieldatenbank "Nordwind.mdb".
  2. Öffnen Sie das Formular "Kunden" in der Entwurfsansicht.
  3. Löschen Sie die Eigenschaft RecordSource des Formulars, um die Bindung des Formulars aufzuheben.
  4. Legen Sie die Eigenschaft OnOpen des Formulars auf die folgende Ereignisprozedur fest:
     Private Sub Form_Open(Cancel As Integer)    Dim cn As ADODB.Connection    Dim rs As ADODB.Recordset    Dim strConnection As String     strConnection = "ODBC;DSN=MyDSN;UID=sa;PWD=;DATABASE=Northwind"    'Create a new ADO Connection object    Set cn = New ADODB.Connection     With cn       .Provider = "MSDASQL"       .Properties("Data Source").Value = strConnection       .Open    End With     'Create an instance of the ADO Recordset class, and    'set its properties    Set rs = New ADODB.Recordset    With rs       Set .ActiveConnection = cn       .Source = "SELECT * FROM Customers"       .LockType = adLockOptimistic       .CursorType = adOpenKeyset       .CursorLocation = adUseClient       .Open     End With        'Set the form's Recordset property to the ADO recordset    Set Me.Recordset = rs    Set rs = Nothing    Set cn = Nothing End Sub 					
  5. Fügen Sie den folgenden Code zu dem Ereignis "UnLoad" des Formulars hinzu:
     Private Sub Form_Unload(Cancel As Integer)    'Close the ADO connection we opened    Dim cn As ADODB.Connection    Set cn = Me.Recordset.ActiveConnection    cn.Close    Set cn = Nothing End Sub 					
  6. Speichern Sie das Formular, und schließen Sie es dann.
  7. Öffnen Sie das Formular "Kunden" in der Formularansicht.
  8. Fügen Sie einen Datensatz in das Formular ein bzw. bearbeiten oder löschen Sie einen Datensatz in dem Formular.
Beachten Sie, dass das Formular an ein aktualisierbares Recordset gebunden ist, das auf ODBC-Daten basiert.

Anforderungen für Oracle

Wenn Sie ein Formular an ein ADO-Recordset binden, das Daten aus einer Oracle-Datenbank verwendet, gibt es zwei Hauptanforderungen:

  • Für die durch das Recordset verwendete ADO-Verbindung muss der Microsoft OLEDB-Provider für Oracle eingesetzt werden.
  • Das ADO-Recordset muss einen Client-Cursor haben.
Das folgende Beispiel demonstriert, wie Sie eine ADO-Verbindung zu einer Oracle-Datenbank öffnen und dann ein Formular daran binden können.

Hinweis: Bei den folgenden Schritten wird davon ausgegangen, dass die Oracle-Datenbank eine Tabelle mit dem Namen "KUNDEN" enthält, die ihrer Struktur nach identisch ist mit der Tabelle "Kunden" in der Beispieldatenbank "Nordwind.mdb".
  1. Öffnen Sie die Beispieldatenbank "Nordwind.mdb".
  2. Öffnen Sie das Formular "Kunden" in der Entwurfsansicht.
  3. Löschen Sie die Eigenschaft RecordSource des Formulars, um die Bindung des Formulars aufzuheben.
  4. Legen Sie die Eigenschaft OnOpen des Formulars auf die folgende Ereignisprozedur fest:
     Private Sub Form_Open(Cancel As Integer)    Dim cn As ADODB.Connection    Dim rs As ADODB.Recordset              'Create a new ADO Connection object    Set cn = New ADODB.Connection     With cn       .Provider = "MSDAORA"       .Properties("Data Source").Value = "MyOracleServer"       .Properties("User ID").Value = "username"       .Properties("Password").Value = "password"                 .Open    End With     'Create an instance of the ADO Recordset class, and    'set its properties    Set rs = New ADODB.Recordset    With rs       Set .ActiveConnection = cn       .Source = "SELECT * FROM Customers"       .LockType = adLockOptimistic       .CursorType = adOpenKeyset       .CursorLocation = adUseClient        .Open     End With       'Set the form's Recordset property to the ADO recordset    Set Me.Recordset = rs    Set rs = Nothing    Set cn = Nothing End Sub 					
  5. Fügen Sie den folgenden Code zu dem Ereignis "UnLoad" des Formulars hinzu:
     Private Sub Form_Unload(Cancel As Integer)    'Close the ADO connection we opened    Dim cn As ADODB.Connection    Set cn = Me.Recordset.ActiveConnection    cn.Close    Set cn = Nothing End Sub 					
  6. Speichern Sie das Formular, und schließen Sie es dann.
  7. Öffnen Sie das Formular "Kunden" in der Formularansicht.
  8. Fügen Sie einen Datensatz in das Formular ein bzw. bearbeiten oder löschen Sie einen Datensatz in dem Formular.
Beachten Sie, dass das Formular an ein aktualisierbares Recordset gebunden ist, das auf Oracle-Daten basiert.

Informationsquellen

Weitere Informationen finden Sie in folgendem Artikel der Microsoft Knowledge Base:
281784  (http://support.microsoft.com/kb/281784/DE/ ) Unterschiede zwischen den Eigenschaften "Connection" und "AccessConnection"
Die in diesem Artikel erwähnten Fremdanbieterprodukte werden von einem Lieferanten hergestellt, der von Microsoft unabhängig ist. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Keywords: 
kbhowto KB281998
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Freigeben
Weitere Supportoptionen
Microsoft Community-Supportforen
Kontaktieren Sie uns direkt
Zertifizierten Partner finden
Microsoft Store