{"id":55000728,"date":"2026-10-01T00:00:00","date_gmt":"2026-10-01T00:00:00","guid":{"rendered":"http:\/\/access-basics.de\/728"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"VBA_basics_Datenzugriff_mit_Recordsets","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html","title":{"rendered":"VBA [basics]: Datenzugriff mit Recordsets"},"content":{"rendered":"<p class='introduction'>Eine Prozedur, die Daten einer Tabelle verarbeiten soll, muss diese Daten zuerst lesen k&ouml;nnen. Danach soll sie vielleicht einzelne Datens&auml;tze &auml;ndern, neue anlegen oder vorhandene l&ouml;schen, ohne dass daf&uuml;r ein Formular ge&ouml;ffnet ist. Daf&uuml;r verwenden wir in VBA ein Recordset. Das ist die Menge der Datens&auml;tze einer Tabelle, einer Abfrage oder einer SQL-Anweisung, die wir &uuml;ber ein Objekt ansprechen. Wie Du ein Recordset &ouml;ffnest, seine Datens&auml;tze durchl&auml;ufst, einen Datensatz suchst und Datens&auml;tze anlegst, &auml;nderst und l&ouml;schst, liest Du in diesem Artikel.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels findest Du in der Datenbank <b>VBABasics_DatenzugriffMitRecordsets.accdb<\/b>. Sie enth&auml;lt die Tabelle <b>tblPersonen<\/b> mit den Feldern <b>PersonID<\/b> (Autowert), <b>Vorname<\/b>, <b>Nachname<\/b>, <b>Ort<\/b>, <b>Geburtsdatum<\/b> und <b>Aktiv<\/b> sowie zehn Datens&auml;tze (siehe Bild 4). Das Modul <b>mdlRecordsetBeispiele<\/b> enth&auml;lt alle Prozeduren dieses Artikels.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_728_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_728_002.png\" alt=\"Die Beispieltabelle tblPersonen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Die Beispieltabelle tblPersonen<\/p>\n<h2>Datenbank und Recordset<\/h2>\n<p>Wenn eine VBA-Prozedur auf die Daten einer Tabelle zugreift, ben&ouml;tigen wir zwei Objekte. Das erste ist ein <b>Database<\/b>-Objekt, das die Datenbank darstellt. Das zweite ist ein <b>Recordset<\/b>-Objekt. Es h&auml;lt die Datens&auml;tze bereit, und &uuml;ber seine Eigenschaften und Methoden lesen und bearbeiten wir sie.<\/p>\n<p>Beide Objekte geh&ouml;ren zur Bibliothek DAO (Data Access Objects). Der Verweis auf diese Bibliothek ist in einer neu angelegten Access-Datenbank bereits gesetzt. Aktuelle Access-Versionen verwenden daf&uuml;r standardm&auml;&szlig;ig die Bibliothek <b>Microsoft Office 16.0 Access database engine Object Library<\/b>. Wie Du die Verweise Deines VBA-Projekts ansehen kannst, liest Du im Artikel <b>VBA [basics]: Mit Verweisen arbeiten (www.access-basics.de\/686)<\/b>.<\/p>\n<p>Daneben gibt es die Bibliothek ADO (ActiveX Data Objects), die ebenfalls ein <b>Recordset<\/b>-Objekt enth&auml;lt. Auf diese Bibliothek gehen wir in diesem Artikel nicht ein. Sind beide Bibliotheken eingebunden, entscheidet die Reihenfolge der Verweise, welcher Typ gemeint ist. Mit dem Pr&auml;fix <b>DAO.<\/b> in der Deklaration ist der Typ eindeutig, etwa bei <b>Dim rst As DAO.Recordset<\/b>.<\/p>\n<p>Die Funktion <b>CurrentDb<\/b> liefert das Objekt der aktuell ge&ouml;ffneten Datenbank. Wir speichern es in einer Variablen vom Typ <b>DAO.Database<\/b>.<\/p>\n<h2>Ein Recordset &ouml;ffnen und durchlaufen<\/h2>\n<p>Die Prozedur <b>PersonenAusgeben<\/b> &ouml;ffnet die Tabelle <b>tblPersonen<\/b> als Recordset und gibt von jedem Datensatz die <b>PersonID<\/b> und den Namen im Direktbereich aus (siehe Listing 10).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>PersonenAusgeben()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"tblPersonen\")\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         <span style=\"color:blue;\">Debug.Print<\/span> rst!PersonID & \": \" & rst!Vorname & \" \" & rst!Nachname\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     rst.Close\r\n     <span style=\"color:blue;\">Set<\/span> rst = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 1: Alle Personen im Direktbereich ausgeben<\/p>\n<p>Die Variable <b>db<\/b> nimmt mit <b>Set db = CurrentDb<\/b> den Verweis auf die Datenbank auf. Die Methode <b>OpenRecordset<\/b> &ouml;ffnet die Tabelle <b>tblPersonen<\/b> und liefert das Recordset. Der Datensatzzeiger markiert den aktuellen Datensatz. Er steht nach dem &Ouml;ffnen auf dem ersten Datensatz, sofern das Recordset Datens&auml;tze enth&auml;lt.<\/p>\n<p>Die Schleife kennen wir aus dem Artikel <b>VBA [basics]: Schleifen mit For, Do und While (www.access-basics.de\/709)<\/b>. Die Eigenschaft <b>EOF<\/b> (End Of File) hat den Wert <b>True<\/b>, sobald der Datensatzzeiger hinter dem letzten Datensatz steht. Die Methode <b>MoveNext<\/b> bewegt den Zeiger auf den n&auml;chsten Datensatz. Ohne diesen Aufruf bliebe die Schleife auf dem ersten Datensatz stehen.<\/p>\n<p>Achte unbedingt darauf, diesen Befehl innerhalb von Schleifen immer zu setzen, da die Schleife sonst zu einer Endlos-Schleife wird.<\/p>\n<p>Auf die Felder des aktuellen Datensatzes greifen wir mit dem Ausrufezeichen (<b>!<\/b>) und dem Feldnamen zu, etwa mit <b>rst!Nachname<\/b>. Gleichwertig ist <b>rst.Fields(&#8222;Nachname&#8220;).Value<\/b>. Diese Schreibweise nutzen wir, wenn der Feldname in einer Variablen steht.<\/p>\n<p>Zum Schluss schlie&szlig;en wir das Recordset mit <b>rst.Close<\/b>. Mit <b>Set rst = Nothing<\/b> und <b>Set db = Nothing<\/b> geben wir die Objektvariablen frei.<\/p>\n<p>Beim Verlassen der Prozedur gibt VBA lokale Objektvariablen ebenfalls frei. Wir schlie&szlig;en das Recordset trotzdem selbst, denn so steht im Code, wann die Datens&auml;tze nicht mehr ben&ouml;tigt werden.<\/p>\n<p>Im Direktbereich geben wir den Namen der Prozedur ein und best&auml;tigen mit der Eingabetaste. Den Direktbereich &ouml;ffnen wir im VBA-Editor mit der Tastenkombination <b>Strg + G<\/b>. Die Prozedur gibt zehn Zeilen aus (siehe Bild 5).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_728_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_728_001.png\" alt=\"Die Ausgabe von PersonenAusgeben im Direktbereich\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Die Ausgabe von PersonenAusgeben im Direktbereich<\/p>\n<p>Hinweis: Prozeduren ohne Parameter kannst Du auch einfach aufrufen, indem Du die Einf&uuml;gemarke an einer beliebigen Stelle innerhalt der Prozedur im VBA-Editor platzierst und die Taste <b>F5 <\/b>bet&auml;tigst. F&uuml;r Prozeduren mit Parametern gelingt dies jedoch nicht.<\/p>\n<h2>Tabelle, Abfrage oder SQL-Anweisung als Datenquelle<\/h2>\n<p>Das erste Argument von <b>OpenRecordset<\/b> nimmt den Namen einer Tabelle, den Namen einer Abfrage oder eine SQL-Anweisung entgegen.<\/p>\n<p>Mit einer SQL-Anweisung laden wir nur die Felder und Datens&auml;tze, die wir ben&ouml;tigen. Die Prozedur <b>PersonenAusOrt<\/b> gibt die Personen eines Orts nach dem Nachnamen sortiert aus (siehe Listing 9).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>PersonenAusOrt(strOrt<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     strSQL = \"SELECT Vorname, Nachname FROM tblPersonen WHERE Ort = '\" & <span style=\"color:blue;\">Replace<\/span>(strOrt, \"'\", \"''\") \"' ORDER BY Nachname\"\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(strSQL, dbOpenSnapshot)\r\n     <span style=\"color:blue;\">If <\/span>rst.EOF<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> \"Keine Personen in \" & strOrt\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n             <span style=\"color:blue;\">Debug.Print<\/span> rst!Nachname & \", \" & rst!Vorname\r\n             rst.Move<span style=\"color:blue;\">Next<\/span>\r\n         <span style=\"color:blue;\">Loop<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     rst.Close\r\n     <span style=\"color:blue;\">Set<\/span> rst = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 2: Die Personen eines Orts mit einer SQL-Anweisung ausgeben<\/p>\n<p>Die Variable <b>strSQL<\/b> nimmt die SQL-Anweisung auf. Die Bedingung <b>WHERE Ort = &#8218;&#8230;&#8216;<\/b> verwendet den Wert des Parameters <b>strOrt<\/b>. Weil <b>Ort<\/b> ein Textfeld ist, fassen wir den Wert in Apostrophe (<b>&#8218;<\/b>) ein. Die Funktion <b>Replace<\/b> verdoppelt Apostrophe im Wert. Damit endet der Text bei einem Ort wie <b>Sant&#8217;Agata<\/b> nicht vorzeitig am Apostroph. Das zweite Argument <b>dbOpenSnapshot<\/b> legt den Typ des Recordsets fest. Es gibt vier Typen:<\/p>\n<ul>\n<li><b>dbOpenTable<\/b>: &ouml;ffnet eine lokale Tabelle direkt. Das ist der Standard, wenn wir den Namen einer lokalen Tabelle &uuml;bergeben.<\/li>\n<li><b>dbOpenDynaset<\/b>: liefert Datens&auml;tze, die wir &auml;ndern k&ouml;nnen. Das ist der Standard bei Abfragen, SQL-Anweisungen und verkn&uuml;pften Tabellen.<\/li>\n<li><b>dbOpenSnapshot<\/b>: liefert eine schreibgesch&uuml;tzte Momentaufnahme der Datens&auml;tze.<\/li>\n<li><b>dbOpenForwardOnly<\/b>: liefert eine schreibgesch&uuml;tzte Momentaufnahme, die wir nur vorw&auml;rts durchlaufen k&ouml;nnen.<\/li>\n<\/ul>\n<p>Wollen wir die Datens&auml;tze nur lesen, gen&uuml;gt <b>dbOpenSnapshot<\/b>. Wollen wir sie &auml;ndern, ben&ouml;tigen wir <b>dbOpenDynaset<\/b> oder den Standardtyp einer lokalen Tabelle.<\/p>\n<p>Enth&auml;lt das Recordset keinen Datensatz, haben die Eigenschaften <b>EOF<\/b> und <b>BOF<\/b> (Beginning Of File) beide den Wert <b>True<\/b>. <b>BOF<\/b> zeigt an, dass der Datensatzzeiger vor dem ersten Datensatz steht. Deshalb pr&uuml;ft <b>PersonenAusOrt<\/b> mit <b>If rst.EOF Then<\/b> zuerst, ob das Recordset leer ist.<\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000\"><a style=\"color: #ff0000\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000728\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Passwort<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Angemeldet bleiben<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000728?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000728\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"8c89613262\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Anmelden\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine Prozedur, die Daten einer Tabelle verarbeiten soll, muss diese Daten zuerst lesen k&ouml;nnen. Danach soll sie vielleicht einzelne Datens&auml;tze &auml;ndern, neue anlegen oder vorhandene l&ouml;schen, ohne dass daf&uuml;r ein Formular ge&ouml;ffnet ist. Daf&uuml;r verwenden wir in VBA ein Recordset. Das ist die Menge der Datens&auml;tze einer Tabelle, einer Abfrage oder einer SQL-Anweisung, die wir &uuml;ber ein Objekt ansprechen. Wie Du ein Recordset &ouml;ffnest, seine Datens&auml;tze durchl&auml;ufst, einen Datensatz suchst und Datens&auml;tze anlegst, &auml;nderst und l&ouml;schst, liest Du in diesem Artikel.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[662026,66052026,44000011],"tags":[],"class_list":["post-55000728","post","type-post","status-publish","format-standard","hentry","category-662026","category-66052026","category-VBAGrundlagen"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"Eine Prozedur, die Daten einer Tabelle verarbeiten soll, muss diese Daten zuerst lesen k\u00f6nnen. Danach soll sie vielleicht einzelne Datens\u00e4tze \u00e4ndern, neue anlegen oder vorhandene l\u00f6schen, ohne dass daf\u00fcr ein Formular ge\u00f6ffnet ist. Daf\u00fcr verwenden wir in VBA ein Recordset. Das ist die Menge der Datens\u00e4tze einer Tabelle, einer Abfrage oder einer SQL-Anweisung, die wir \u00fcber ein Objekt ansprechen. Wie Du ein Recordset \u00f6ffnest, seine Datens\u00e4tze durchl\u00e4ufst, einen Datensatz suchst und Datens\u00e4tze anlegst, \u00e4nderst und l\u00f6schst, liest Du in diesem Artikel.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Andr\u00e9 Minhorst\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Access [basics] - DAS ACCESS-MAGAZIN F\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"VBA [basics]: Datenzugriff mit Recordsets - Access [basics]\" \/>\n\t\t<meta property=\"og:description\" content=\"Eine Prozedur, die Daten einer Tabelle verarbeiten soll, muss diese Daten zuerst lesen k\u00f6nnen. Danach soll sie vielleicht einzelne Datens\u00e4tze \u00e4ndern, neue anlegen oder vorhandene l\u00f6schen, ohne dass daf\u00fcr ein Formular ge\u00f6ffnet ist. Daf\u00fcr verwenden wir in VBA ein Recordset. Das ist die Menge der Datens\u00e4tze einer Tabelle, einer Abfrage oder einer SQL-Anweisung, die wir \u00fcber ein Objekt ansprechen. Wie Du ein Recordset \u00f6ffnest, seine Datens\u00e4tze durchl\u00e4ufst, einen Datensatz suchst und Datens\u00e4tze anlegst, \u00e4nderst und l\u00f6schst, liest Du in diesem Artikel.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png\" \/>\n\t\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t\t<meta property=\"og:image:height\" content=\"127\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-01T00:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"-001-11-30T00:00:00+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"VBA [basics]: Datenzugriff mit Recordsets - Access [basics]\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Eine Prozedur, die Daten einer Tabelle verarbeiten soll, muss diese Daten zuerst lesen k\u00f6nnen. Danach soll sie vielleicht einzelne Datens\u00e4tze \u00e4ndern, neue anlegen oder vorhandene l\u00f6schen, ohne dass daf\u00fcr ein Formular ge\u00f6ffnet ist. Daf\u00fcr verwenden wir in VBA ein Recordset. Das ist die Menge der Datens\u00e4tze einer Tabelle, einer Abfrage oder einer SQL-Anweisung, die wir \u00fcber ein Objekt ansprechen. Wie Du ein Recordset \u00f6ffnest, seine Datens\u00e4tze durchl\u00e4ufst, einen Datensatz suchst und Datens\u00e4tze anlegst, \u00e4nderst und l\u00f6schst, liest Du in diesem Artikel.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html#blogposting\",\"name\":\"VBA [basics]: Datenzugriff mit Recordsets - Access [basics]\",\"headline\":\"VBA [basics]: Datenzugriff mit Recordsets\",\"author\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/author\\\/andreminhorst-com#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"..\\\/tl_files\\\/images\\\/pic_728_002.png\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html\\\/#articleImage\"},\"datePublished\":\"2026-10-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"inLanguage\":\"de-DE\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html#webpage\"},\"articleSection\":\"2026, 5\\\/2026, VBA-Grundlagen\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-basics.de\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2026#listItem\",\"name\":\"2026\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2026#listItem\",\"position\":2,\"name\":\"2026\",\"item\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2026\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2026\\\/5\\\/2026#listItem\",\"name\":\"5\\\/2026\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2026\\\/5\\\/2026#listItem\",\"position\":3,\"name\":\"5\\\/2026\",\"item\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2026\\\/5\\\/2026\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html#listItem\",\"name\":\"VBA [basics]: Datenzugriff mit Recordsets\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2026#listItem\",\"name\":\"2026\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html#listItem\",\"position\":4,\"name\":\"VBA [basics]: Datenzugriff mit Recordsets\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/category\\\/2026\\\/5\\\/2026#listItem\",\"name\":\"5\\\/2026\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/#organization\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"url\":\"https:\\\/\\\/access-basics.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/access-basics.de\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/logo400.png\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html\\\/#organizationLogo\",\"width\":400,\"height\":127},\"image\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/author\\\/andreminhorst-com#author\",\"url\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/author\\\/andreminhorst-com\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Andr\\u00e9 Minhorst\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html#webpage\",\"url\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html\",\"name\":\"VBA [basics]: Datenzugriff mit Recordsets - Access [basics]\",\"description\":\"Eine Prozedur, die Daten einer Tabelle verarbeiten soll, muss diese Daten zuerst lesen k\\u00f6nnen. Danach soll sie vielleicht einzelne Datens\\u00e4tze \\u00e4ndern, neue anlegen oder vorhandene l\\u00f6schen, ohne dass daf\\u00fcr ein Formular ge\\u00f6ffnet ist. Daf\\u00fcr verwenden wir in VBA ein Recordset. Das ist die Menge der Datens\\u00e4tze einer Tabelle, einer Abfrage oder einer SQL-Anweisung, die wir \\u00fcber ein Objekt ansprechen. Wie Du ein Recordset \\u00f6ffnest, seine Datens\\u00e4tze durchl\\u00e4ufst, einen Datensatz suchst und Datens\\u00e4tze anlegst, \\u00e4nderst und l\\u00f6schst, liest Du in diesem Artikel.\",\"inLanguage\":\"de-DE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/VBA_basics_Datenzugriff_mit_Recordsets.html#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/author\\\/andreminhorst-com#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/index.php\\\/author\\\/andreminhorst-com#author\"},\"datePublished\":\"2026-10-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-basics.de\\\/#website\",\"url\":\"https:\\\/\\\/access-basics.de\\\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"inLanguage\":\"de-DE\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-basics.de\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"VBA [basics]: Datenzugriff mit Recordsets - Access [basics]","description":"Eine Prozedur, die Daten einer Tabelle verarbeiten soll, muss diese Daten zuerst lesen k\u00f6nnen. Danach soll sie vielleicht einzelne Datens\u00e4tze \u00e4ndern, neue anlegen oder vorhandene l\u00f6schen, ohne dass daf\u00fcr ein Formular ge\u00f6ffnet ist. Daf\u00fcr verwenden wir in VBA ein Recordset. Das ist die Menge der Datens\u00e4tze einer Tabelle, einer Abfrage oder einer SQL-Anweisung, die wir \u00fcber ein Objekt ansprechen. Wie Du ein Recordset \u00f6ffnest, seine Datens\u00e4tze durchl\u00e4ufst, einen Datensatz suchst und Datens\u00e4tze anlegst, \u00e4nderst und l\u00f6schst, liest Du in diesem Artikel.","canonical_url":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html#blogposting","name":"VBA [basics]: Datenzugriff mit Recordsets - Access [basics]","headline":"VBA [basics]: Datenzugriff mit Recordsets","author":{"@id":"https:\/\/access-basics.de\/index.php\/author\/andreminhorst-com#author"},"publisher":{"@id":"https:\/\/access-basics.de\/#organization"},"image":{"@type":"ImageObject","url":"..\/tl_files\/images\/pic_728_002.png","@id":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html\/#articleImage"},"datePublished":"2026-10-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00","inLanguage":"de-DE","mainEntityOfPage":{"@id":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html#webpage"},"isPartOf":{"@id":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html#webpage"},"articleSection":"2026, 5\/2026, VBA-Grundlagen"},{"@type":"BreadcrumbList","@id":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/access-basics.de\/#listItem","position":1,"name":"Home","item":"https:\/\/access-basics.de\/","nextItem":{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/category\/2026#listItem","name":"2026"}},{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/category\/2026#listItem","position":2,"name":"2026","item":"https:\/\/access-basics.de\/index.php\/category\/2026","nextItem":{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/category\/2026\/5\/2026#listItem","name":"5\/2026"},"previousItem":{"@type":"ListItem","@id":"https:\/\/access-basics.de\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/category\/2026\/5\/2026#listItem","position":3,"name":"5\/2026","item":"https:\/\/access-basics.de\/index.php\/category\/2026\/5\/2026","nextItem":{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html#listItem","name":"VBA [basics]: Datenzugriff mit Recordsets"},"previousItem":{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/category\/2026#listItem","name":"2026"}},{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html#listItem","position":4,"name":"VBA [basics]: Datenzugriff mit Recordsets","previousItem":{"@type":"ListItem","@id":"https:\/\/access-basics.de\/index.php\/category\/2026\/5\/2026#listItem","name":"5\/2026"}}]},{"@type":"Organization","@id":"https:\/\/access-basics.de\/#organization","name":"Access [basics]","description":"DAS ACCESS-MAGAZIN F\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN","url":"https:\/\/access-basics.de\/","logo":{"@type":"ImageObject","url":"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png","@id":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html\/#organizationLogo","width":400,"height":127},"image":{"@id":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/access-basics.de\/index.php\/author\/andreminhorst-com#author","url":"https:\/\/access-basics.de\/index.php\/author\/andreminhorst-com","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","@id":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","width":96,"height":96,"caption":"Andr\u00e9 Minhorst"}},{"@type":"WebPage","@id":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html#webpage","url":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html","name":"VBA [basics]: Datenzugriff mit Recordsets - Access [basics]","description":"Eine Prozedur, die Daten einer Tabelle verarbeiten soll, muss diese Daten zuerst lesen k\u00f6nnen. Danach soll sie vielleicht einzelne Datens\u00e4tze \u00e4ndern, neue anlegen oder vorhandene l\u00f6schen, ohne dass daf\u00fcr ein Formular ge\u00f6ffnet ist. Daf\u00fcr verwenden wir in VBA ein Recordset. Das ist die Menge der Datens\u00e4tze einer Tabelle, einer Abfrage oder einer SQL-Anweisung, die wir \u00fcber ein Objekt ansprechen. Wie Du ein Recordset \u00f6ffnest, seine Datens\u00e4tze durchl\u00e4ufst, einen Datensatz suchst und Datens\u00e4tze anlegst, \u00e4nderst und l\u00f6schst, liest Du in diesem Artikel.","inLanguage":"de-DE","isPartOf":{"@id":"https:\/\/access-basics.de\/#website"},"breadcrumb":{"@id":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html#breadcrumblist"},"author":{"@id":"https:\/\/access-basics.de\/index.php\/author\/andreminhorst-com#author"},"creator":{"@id":"https:\/\/access-basics.de\/index.php\/author\/andreminhorst-com#author"},"datePublished":"2026-10-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00"},{"@type":"WebSite","@id":"https:\/\/access-basics.de\/#website","url":"https:\/\/access-basics.de\/","name":"Access [basics]","description":"DAS ACCESS-MAGAZIN F\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN","inLanguage":"de-DE","publisher":{"@id":"https:\/\/access-basics.de\/#organization"}}]},"og:locale":"de_DE","og:site_name":"Access [basics] - DAS ACCESS-MAGAZIN F\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN","og:type":"article","og:title":"VBA [basics]: Datenzugriff mit Recordsets - Access [basics]","og:description":"Eine Prozedur, die Daten einer Tabelle verarbeiten soll, muss diese Daten zuerst lesen k\u00f6nnen. Danach soll sie vielleicht einzelne Datens\u00e4tze \u00e4ndern, neue anlegen oder vorhandene l\u00f6schen, ohne dass daf\u00fcr ein Formular ge\u00f6ffnet ist. Daf\u00fcr verwenden wir in VBA ein Recordset. Das ist die Menge der Datens\u00e4tze einer Tabelle, einer Abfrage oder einer SQL-Anweisung, die wir \u00fcber ein Objekt ansprechen. Wie Du ein Recordset \u00f6ffnest, seine Datens\u00e4tze durchl\u00e4ufst, einen Datensatz suchst und Datens\u00e4tze anlegst, \u00e4nderst und l\u00f6schst, liest Du in diesem Artikel.","og:url":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html","og:image":"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png","og:image:secure_url":"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png","og:image:width":400,"og:image:height":127,"article:published_time":"2026-10-01T00:00:00+00:00","article:modified_time":"-001-11-30T00:00:00+00:00","twitter:card":"summary_large_image","twitter:title":"VBA [basics]: Datenzugriff mit Recordsets - Access [basics]","twitter:description":"Eine Prozedur, die Daten einer Tabelle verarbeiten soll, muss diese Daten zuerst lesen k\u00f6nnen. Danach soll sie vielleicht einzelne Datens\u00e4tze \u00e4ndern, neue anlegen oder vorhandene l\u00f6schen, ohne dass daf\u00fcr ein Formular ge\u00f6ffnet ist. Daf\u00fcr verwenden wir in VBA ein Recordset. Das ist die Menge der Datens\u00e4tze einer Tabelle, einer Abfrage oder einer SQL-Anweisung, die wir \u00fcber ein Objekt ansprechen. Wie Du ein Recordset \u00f6ffnest, seine Datens\u00e4tze durchl\u00e4ufst, einen Datensatz suchst und Datens\u00e4tze anlegst, \u00e4nderst und l\u00f6schst, liest Du in diesem Artikel.","twitter:image":"https:\/\/access-basics.de\/wp-content\/uploads\/2021\/02\/logo400.png"},"aioseo_meta_data":{"post_id":"55000728","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2026-10-26 18:09:51","updated":"2026-10-26 18:09:51","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/access-basics.de\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/access-basics.de\/index.php\/category\/2026\" title=\"2026\">2026<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/access-basics.de\/index.php\/category\/2026\/5\/2026\" title=\"5\/2026\">5\/2026<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tVBA &#91;basics&#93;: Datenzugriff mit Recordsets\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/access-basics.de\/"},{"label":"2026","link":"https:\/\/access-basics.de\/index.php\/category\/2026"},{"label":"5\/2026","link":"https:\/\/access-basics.de\/index.php\/category\/2026\/5\/2026"},{"label":"VBA [basics]: Datenzugriff mit Recordsets","link":"https:\/\/access-basics.de\/index.php\/VBA_basics_Datenzugriff_mit_Recordsets.html"}],"_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000728","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000728"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000728\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000728"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000728"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}