{"id":55000375,"date":"2006-08-01T00:00:00","date_gmt":"2021-02-11T20:58:50","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=375"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"DAO_Teil_2_Recordsets_in_Aktion","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/","title":{"rendered":"DAO, Teil 2: Recordsets in Aktion"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/25de30200a6f41989e9228be6ee3de42\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<h3>Zusammenfassung<\/h3>\n<p>Erfahren Sie, wie Sie in Datensatzgruppen navigieren und die Inhalte manipulieren.<\/p>\n<h3>Techniken<\/h3>\n<p>VBA, DAO<\/p>\n<h3>Voraussetzungen<\/h3>\n<p>Access 97 und h&ouml;her<\/p>\n<h3>Beispieldatei<\/h3>\n<p>DAO2.mdb<\/p>\n<h3><\/h3>\n<p><b>Andr&eacute; Minhorst, Duisburg<\/b><\/p>\n<p><b>Hat man einmal ein Recordset-Objekt erzeugt und mit den ben&ouml;tigten Daten gef&uuml;llt, m&ouml;chte man auch damit arbeiten. Die Bibliothek DAO (Data Access Objects) greift einem dabei t&uuml;chtig unter die Arme &#8211; doch das Navigieren in Datensatzgruppen und das Anlegen, Bearbeiten oder L&ouml;schen von Datens&auml;tzen ger&auml;t damit zur Flei&szlig;arbeit.<\/b><\/p>\n<p>Navigieren bedeutet in Zusammenhang mit Datensatzgruppen, dass man den Datensatzzeiger auf einen der Datens&auml;tze verschiebt. Nach dem &ouml;ffnen befindet sich dieser Zeiger auf dem ersten Datensatz der Datensatzgruppe &#8211; sofern diese &uuml;berhaupt einen Datensatz enth&auml;lt.<\/p>\n<p>Leere Datensatzgruppen f&uuml;hren manchmal zu Problemen, also erfahren Sie zun&auml;chst, wie Sie solche zuverl&auml;ssig identifizieren. Der Datensatzzeiger kann im Falle einer leeren Datensatzgruppe ja theoretisch auch auf keinen Datensatz zeigen &#8211; was sich auch bemerkbar macht, wenn man nach dem &ouml;ffnen eines leeren Recordsets versucht, den Inhalt des aktuellen Datensatzes zu lesen: Dann gibt es n&auml;mlich eine Fehlermeldung.<\/p>\n<p><b>EOF und BOF<\/b><\/p>\n<p>Das Recordset-Objekt hat keine spezielle Eigenschaft, mit der Sie den &#8222;leeren&#8220; Zustand testen k&ouml;nnen. Stattdessen ben&ouml;tigen Sie f&uuml;r diese Pr&uuml;fung zwei Eigenschaften, die auf den ersten Blick gar nicht danach aussehen, also ob sie das Fehlen jeglicher Datens&auml;tze best&auml;tigen k&ouml;nnten. Die beiden Eigenschaften hei&szlig;en EOF und BOF und liefern einen Booleschen Wert. Im Falle der Eigenschaft EOF lautet dieser Wert True, wenn sich der Datensatzzeiger hinter dem letzten Datensatz befindet, und BOF liefert True, wenn der Datensatzzeiger vor dem ersten Datensatz ins Leere zeigt.<\/p>\n<p>Das ganze kann man sich wie in Bild 1 vorstellen: Im ersten Kasten zeigt der Datensatzzeiger auf den ersten Datensatz, dementsprechend haben die beiden Eigenschaften EOF und BOF den Wert False. Verschiebt man den Datensatzzeiger von dort aus eine Position nach oben (oder nach vorne, je nach Sichtweise), befindet sich dieser vor dem ersten Datensatz &#8211; die Eigenschaft BOF liefert den Wert True zur&uuml;ck. Befindet sich der Datensatzzeiger hinter dem letzten Datensatz, hat wiederum EOF den Wert True.<\/p>\n<p>Fehlt schlie&szlig;lich noch die Variante mit einer leeren Datensatzgruppe: Zugegebenerma&szlig;en f&auml;llt es hier schwer, eine Datensatzposition zu beschreiben. Laut Access nimmt der Datensatzzeiger direkt beide Positionen ein, die nicht auf einem Datensatz zeigen, denn BOF und EOF haben beide den Wert True.<\/p>\n<p><IMG height=\"200\" src=\"..\/fileadmin\/_temp_\/{B7313808-0CF0-492E-A7DD-0446C97BAA8B}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Der Datensatzzeiger an verschiedenen Positionen im gef&uuml;llten und im leeren Recordset<\/span><\/b><\/p>\n<p>Eine leere Datensatzgruppe weist man dementsprechend mit den fettgedruckten Anweisungen aus Quellcode 1 nach.<\/p>\n<p><b>Quellcode 1: Diese Routine meldet eine leere Datensatzgruppe.<\/b><\/p>\n<pre>Public Sub Datensatzzeiger()\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset( _        \"Artikel_Leer\", dbOpenDynaset)\r\n    If rst.EOF And rst.BOF Then\r\n        MsgBox \"Die Datensatzgruppe ist leer.\"\r\n    End If\r\n    rst.Close\r\n    Set rst = Nothing\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<h3>Hinweis<\/h3>\n<p>In den folgenden Codebeispielen lassen wir h&auml;ufig wiederkehrende Zeilen wie die Deklaration der Objektvariablen oder deren Freigabe aus Platzgr&uuml;nden weg. Die vollst&auml;ndigen Routinen finden Sie im Modul mdlDAO2 der Beispieldatenbank. <\/p>\n<p><b>Move!<\/b><\/p>\n<p>Wenn Sie sichergestellt haben, dass Sie es nicht mit einer leeren Datensatzgruppe zu tun haben, k&ouml;nnen Sie je nach der Art des Recordsets darin navigieren. Dabei kommt es darauf an, mit welchem Parameter f&uuml;r den Typ des Recordsets Sie beim &ouml;ffnen angeben &#8211; mehr dazu im ersten Teil dieser Beitragsreihe (Shortlink 354). In der Regel setzt man die Option dbOpenDynaset ein &#8211; Sie k&ouml;nnen den Datensatzzeiger vorw&auml;rts und r&uuml;ckw&auml;rts durch solche Recordsets bewegen und in den meisten F&auml;llen die enthaltenen Daten &auml;ndern.<\/p>\n<p>Verantwortlich f&uuml;r die passenden Schritte sind die vier Methoden MoveNext, MovePrevious, MoveLast und MoveFirst.<\/p>\n<p>Dabei ist die MoveNext-Methode die popul&auml;rste. Das liegt daran, dass man meist ein komplettes Recordset Datensatz f&uuml;r Datensatz durchl&auml;uft &#8211; und zwar von vorne nach hinten (s. Quellcode 2).<\/p>\n<p>Das Durchlaufen der Datens&auml;tze erfolgt meist innerhalb einer Do While-Schleife. Deren Abbruchbedingung lautet Not rst.EOF &#8211; sprich: solange der Datensatzzeiger sich nicht hinter dem letzten Datensatz befindet. Bekannterma&szlig;en befindet sich dieser Zeiger nach dem &ouml;ffnen des Recordsets auf dem ersten Datensatz (abh&auml;ngig von der gew&auml;hlten Sortierung). Innerhalb der Schleife sollte man also zun&auml;chst die Anweisungen einf&uuml;gen, die die gew&uuml;nschten Aktionen mit dem Datensatz durchf&uuml;hren, und vor dem Ende der Schleife den Datensatzzeiger weiterschieben (rst.MoveNext).<\/p>\n<p><b>Quellcode 2: Alle Datens&auml;tze eines Recordsets durchlaufen<\/b><\/p>\n<pre>Public Sub DatensaetzeDurchlaufen()\r\n    ''...\r\n    Set rst = db.OpenRecordset(\"Personal\", _        dbOpenDynaset)\r\n    Do While Not rst.EOF\r\n        ''etwas mit dem Datensatz tun\r\n        rst.MoveNext\r\n    Loop\r\n    ''...<\/pre>\n<h3>Vor und zur&uuml;ck<\/h3>\n<p>Wozu ben&ouml;tigt man die &uuml;brigen Move&#8230;-Methoden, wenn man doch mit MoveNext schon die komplette Datensatzgruppe durchlaufen kann Zum datensatzweisen Vor- und Zur&uuml;ckspringen jedenfalls sehr selten. Die MoveFirst-Methode kommt hin und wieder zum Einsatz, wenn man die gleiche Datensatzgruppe gleich mehrere Male hintereinander durchlaufen m&ouml;chte. Dann springt man zwischen den Durchl&auml;ufen mit dieser Methode wieder an die erste Stelle (s. Quellcode 3).<\/p>\n<p><b>Quellcode 3: Eine Datensatzgruppe zwei Mal durchlaufen<\/b><\/p>\n<pre>Public Sub DatensaetzeZweiMalDurchlaufen()\r\n    ''...\r\n    Do While Not rst.EOF\r\n        ''etwas mit dem Datensatz tun\r\n        rst.MoveNext\r\n    Loop\r\n    rst.MoveFirst\r\n    Do While Not rst.EOF\r\n        ''etwas mit dem Datensatz tun\r\n        rst.MoveNext\r\n    Loop\r\n    ''...<\/pre>\n<h3>Datens&auml;tze z&auml;hlen<\/h3>\n<p>Eine weitere Einsatzm&ouml;glichkeit f&uuml;r die MoveLast- und die MoveFirst-Methode ist das Z&auml;hlen von Datens&auml;tzen. Prinzipiell gibt es dazu zwar die RecordCount-Eigenschaft von Datens&auml;tzen, allerdings arbeitet diese anders als erwartet. Die Routine aus Quellcode 4 gibt beispielsweise nicht wie erwartet den Wert 9 als Anzahl der Personal-Datens&auml;tze aus, sondern den Wert 1.<\/p>\n<p><b>Quellcode 4: Falsches Z&auml;hlen von Datens&auml;tzen<\/b><\/p>\n<pre>Public Sub DatensaetzeZaehlenFalsch()\r\n    ''...\r\n    Set rst = db.OpenRecordset(\"Personal\", _        dbOpenDynaset)\r\n    Debug.Print \"Anzahl Datens&auml;tze: \" _        & rst.RecordCount\r\n    ''...<\/pre>\n<p>Der Grund ist, dass die RecordCount-Eigenschaft nur die Datens&auml;tze z&auml;hlt, auf die die Routine bereits zugegriffen hat. Im vorliegenden Fall hat die Routine auf Anhieb nur den ersten Datensatz geladen &#8211; daher das Ergebnis 1. Wenn Sie vor dem Z&auml;hlen per MoveNext auf den zweiten Datensatz springen, gibt die RecordCount-Eigenschaft den Wert 2 zur&uuml;ck. Sie m&uuml;ssen also zum letzten Datensatz springen, um mit RecordCount die korrekte Anzahl Datens&auml;tze zu ermitteln &#8211; das erledigt die MoveLast-Methode. Nach dem Z&auml;hlen m&uuml;ssen Sie wieder zum ersten Datensatz springen, um wie gewohnt mit der Datensatzgruppe arbeiten zu k&ouml;nnen (s. Quellcode 5).<\/p>\n<p><b>Quellcode 5: Korrektes Z&auml;hlen der Datens&auml;tze eines Recordsets<\/b><\/p>\n<pre>Public Sub DatensaetzeZaehlen()\r\n    ''...\r\n    Set rst = db.OpenRecordset(\"Personal\", _        dbOpenDynaset)\r\n    rst.MoveLast\r\n    Debug.Print \"Anzahl Datens&auml;tze: \" _        & rst.RecordCount\r\n    rst.MoveFirst\r\n    ''etwas mit dem Datensatz tun\r\n    ''...<\/pre>\n<p><!--30percent--><\/p>\n<p>Wenn das Recordset nur eine einzige Tabelle als Datenherkunft hat, k&ouml;nnen Sie die RecordCount-Eigenschaft in Verbindung mit dem Parameter acOpenTable beim &ouml;ffnen der Datensatzgruppe verwenden (s. Quellcode 6).<\/p>\n<p><b>Quellcode 6: Datens&auml;tze z&auml;hlen im Table-Recordset<\/b><\/p>\n<pre>Public Sub DatensaetzeZaehlenTable()\r\n    ''...\r\n    Set rst = db.OpenRecordset(\"Personal\", _        dbOpenTable)\r\n    Debug.Print \"Anzahl Datens&auml;tze: \" _        & rst.RecordCount\r\n    ''...<\/pre>\n<h3>Move individuell<\/h3>\n<p>Neben den bereits vorgestellten Methoden via MoveFirst und MoveLast gibt es noch eine weitere Variante, um den Datensatzzeiger zu bewegen: Die Methode Move hat zwei Parameter, die genau festlegen, auf welchen Datensatz der Zeiger positioniert werden soll. <\/p>\n<p>Dabei legt der erste Parameter fest, um wieviel Datens&auml;tze der Datensatzzeiger vor- oder zur&uuml;ckspringen soll &#8211; hier sind nur positive oder negative Ganzzahlen zul&auml;ssig. Der zweite Parameter legt den Startpunkt fest &#8211; dazu sp&auml;ter mehr.<\/p>\n<p>Die Routine aus Quellcode 6 l&auml;sst den zweiten Parameter der Move-Methode leer. Daher startet sie mit dem aktuellen (also dem ersten) Datensatz und springt dann solange um je f&uuml;nf Datens&auml;tze weiter, bis sie das Ende des Recordsets erreicht.<\/p>\n<p>Das bedeutet, dass der jeweils aktuelle Datensatz Ausgangspunkt f&uuml;r die n&auml;chste Bewegung ist.<\/p>\n<p><b>Quellcode 6: Jeden f&uuml;nften Datensatz eines Recordsets anspringen<\/b><\/p>\n<pre>Public Sub MoveInFuenferSchritten()\r\n    ''...\r\n    Set rst = db.OpenRecordset(\"Artikel\", _        dbOpenDynaset)\r\n    Do While Not rst.EOF\r\n        ''etwas mit dem Datensatz tun\r\n        rst.Move 5\r\n    Loop\r\n    ''...<\/pre>\n<p>M&ouml;chte man einen bestimmten Datensatz als Ausgangspunkt f&uuml;r die Move-Methode verwenden, muss man den Datensatz mit einem Lesezeichen (Bookmark) versehen und dieses als zweiten Parameter der Move-Methode angeben.<\/p>\n<p>Um die Bookmark-Eigenschaft eines bestimmten Datensatzes zu speichern, muss man den Datensatzzeiger aber ohnehin auf diesen Datensatz setzen &#8211; und dann kann man den Datensatzzeiger auch direkt von dort per Move weiterbewegen.<\/p>\n<p><b>Lesezeichen<\/b><\/p>\n<p>Lesezeichen machen generell nur Sinn, wenn Sie sich einen Datensatz &#8222;merken&#8220; m&ouml;chten, um sp&auml;ter, wenn der Datensatzzeiger sich l&auml;ngst auf einer anderen Position befindet, zu dem gemerkten Datensatz zur&uuml;ckzukehren.<\/p>\n<p>Die Bookmark-Eigenschaft eines Recordsets liefert einen Wert zur&uuml;ck, den Sie etwa in einer Variant-Variablen speichern k&ouml;nnen. Um sp&auml;ter zu dem so &#8222;gemerkten&#8220; Datensatz zur&uuml;ckzukehren, weisen Sie der Bookmark-Eigenschaft diesen Variant-Wert erneut zu.<\/p>\n<p>Die Routine aus Quellcode 7 zeigt, wie das funktioniert. Beachten Sie:<\/p>\n<li>Der Inhalt der Eigenschaft Bookmark stimmt nicht mit der etwa in der Datenblattansicht angezeigten Datensatznummer &uuml;berein.<\/li>\n<li>Sie k&ouml;nnen die den Wert der Eigenschaft Bookmark f&uuml;r beliebig viele Datens&auml;tze in passenden Variablen speichern und diese anschlie&szlig;end durch Zuweisen eines der gespeicherten Werte wieder ansteuern.<\/li>\n<li>Recordsets, die Daten aus verkn&uuml;pften Tabellen anderer Datenbanksysteme enthalten, unterst&uuml;tzen nicht unbedingt die Bookmark-Eigenschaft. Das l&auml;sst sich aber leicht mit der Eigenschaft Bookmarkable pr&uuml;fen.<\/li>\n<p><b>Quellcode 7: Datensatz per Bookmark merken<\/b><\/p>\n<pre>Public Sub BookmarkBeispiel()\r\n    ''...\r\n    Set rst = db.OpenRecordset(\"Artikel\", _        dbOpenDynaset)\r\n    ''zu einem beliebigen Datensatz navigieren\r\n    ''...\r\n    ''Datensatz mit Lesezeichen merken\r\n    varBookmark = rst.Bookmark\r\n    ''zu einem anderen Datensatz navigieren\r\n    ''...\r\n    ''zum gemerkten Datensatz zur&uuml;ck\r\n    rst.Bookmark = varBookmark\r\n    ''...<\/pre>\n<p><b>Position des Datensatzzeigers verfolgen<\/b><\/p>\n<p>F&uuml;r manche Anwendungsf&auml;lle ist die aktuelle Position des Datensatzzeigers interessant. Diese l&auml;sst sich sowohl absolut als auch prozentual ermitteln. Ein Einsatzgebiet sind etwa umfangreiche &auml;nderungen am Datenbestand, die eine Anzeige des Fortschritts erfordern.<\/p>\n<p>Quellcode 8 zeigt die einfachste denkbare Fortschrittsanzeige: Sie verwendet die Eigenschaft PercentPosition des Recordsets, um die aktuelle Position des Datensatzzeigers festzustellen und gibt diese passend formatiert in der Statusleiste des Access-Fensters aus. Dabei durchl&auml;uft die Routine eine Datensatzgruppe, die auf der Tabelle Bestellungen basiert.<\/p>\n<p>Damit dies nicht zu schnell geht, ist eine kleine Bremse eingebaut: ein Aufruf der API-Funktion Sleep, die eine dem per Parameter &uuml;bergebenen Zahlenwert in der Einheit Millisekunden entsprechende Pause macht. Wichtig ist hier wie auch beim Z&auml;hlen von Datens&auml;tzen: Die Eigenschaft PercentPosition bezieht sich auf die beim Aufruf bekannte Anzahl von Datens&auml;tzen.<\/p>\n<p>Um garantiert die richtigen Prozentzahlen zu erhalten, sollte man den Datensatzzeiger daher zuvor auf den letzten und zur&uuml;ck auf den ersten Datensatz bewegen.<\/p>\n<p><b>Quellcode 8: Einfache Fortschrittsanzeige mit PercentPosition<\/b><\/p>\n<pre>Declare Sub Sleep Lib \"kernel32\" _    (ByVal dwMilliseconds As Long)\r\nPublic Sub Fortschritt()\r\n    ''...\r\n    Set rst = db.OpenRecordset( _        \"Bestellungen\", dbOpenDynaset)\r\n    rst.MoveLast\r\n    rst.MoveFirst\r\n    Do While Not rst.EOF\r\n        Sleep 20\r\n        SysCmd acSysCmdSetStatus, _           \"Fortschritt: \" _           & Format(rst.PercentPosition, _           \"0\") & \"%\"\r\n        rst.MoveNext\r\n    Loop\r\n    ''...<\/pre>\n<p>Die Eigenschaft AbsolutPosition arbeitet &auml;hnlich, gibt jedoch eine Zahl zur&uuml;ck, die der Datensatznummer in der Datenblattansicht entspricht.<\/p>\n<p>Nachdem Sie sich nun blind vorw&auml;rts und r&uuml;ckw&auml;rts durch die Datens&auml;tze eines Recordsets bewegen k&ouml;nnen, sollen Sie auch etwas mit den enthaltenen Daten anstellen: n&auml;mlich Daten lesen, neue Daten anlegen und vorhandene Daten bearbeiten oder l&ouml;schen.<\/p>\n<p><b>Daten lesen<\/b><\/p>\n<p>Jedes Recordset enth&auml;lt eine Auflistung mit den Feldern der zugrunde liegenden Tabelle(n). &uuml;ber diese greifen Sie auf die darin enthaltenen Daten zu.<\/p>\n<p>Quellcode 9 zeigt eine einfache Methode, auf die Felder eines Recordsets zuzugreifen. Da der Zugriff direkt nach dem &ouml;ffnen des Recordsets erfolgt und der Datensatzzeiger nicht zu einem anderen Datensatz bewegt wurde, geben die nachfolgenden Anweisungen die Daten der Felder aus dem ersten Datensatz aus.<\/p>\n<p>Der Zugriff erfolgt in diesem Beispiel mit der Aufrufezeichen-Syntax &uuml;ber eine sehr einfache Form: rst!Vorname gibt so beispielsweise den Inhalt des Feldes Vorname des aktuellen Datensatzes des Recordsets rst zur&uuml;ck.<\/p>\n<p><b>Quellcode 9: Ausgeben des ersten Datensatzes des Recordsets<\/b><\/p>\n<pre>Public Sub DatensatzAusgeben()\r\n    ''...\r\n    Set rst = db.OpenRecordset(\"Personal\", _        dbOpenDynaset)\r\n    Debug.Print \"P.-Nr: \" & rst![Personal-Nr]\r\n    Debug.Print \"Vorname: \" & rst!Vorname\r\n    Debug.Print \"Nachname: \" & rst!Nachname\r\n    ''...<\/pre>\n<h3>Hinweis<\/h3>\n<p>In der Routine aus Quellcode 9 erfolgt der Bezug auf das Feld Personal-Nr in eckigen Klammern: [Personal-Nr]. Dies ist immer dann erforderlich, wenn der Feldname nicht-alphanumerische Zeichen wie einen Bindestrich oder ein Leerzeichen enth&auml;lt. <\/p>\n<h3>Schreibweisen zum Referenzieren von Feldern<\/h3>\n<p>Die ausf&uuml;hrlichste Schreibweise, auf ein Feld eines Recordsets zuzugreifen, ist die folgende:<\/p>\n<pre>rst.Fields(\"Vorname\").Value<\/pre>\n<p>Vorname ist n&auml;mlich eigentlich ein Element der Fields-Auflistung. Da Fields die Standardauflistung des Recordset-Objekts ist, kann man dies folgenderma&szlig;en abk&uuml;rzen:<\/p>\n<pre>rst(\"Vorname\").Value<\/pre>\n<p>Value ist wiederum die Standardeigenschaft des Field-Objekts und kann daher weggelassen werden:<\/p>\n<pre>rst(\"Vorname\")<\/pre>\n<p>Und den Rest k&ouml;nnen Sie mit der Ausrufezeichen-Schreibweise noch weiter eindampfen:<\/p>\n<pre>rst!Vorname<\/pre>\n<p>Und wenn Sie auf diese Weise auf mehrere Elemente des Recordsets zugreifen, spart die With-Schreibweise noch mehr Schreibarbeit &#8211; wie folgendes Beispiel zeigt:<\/p>\n<pre>With rst\r\n    Debug.Print \"Personal-Nr: \" _        & ![Personal-Nr]\r\n    Debug.Print \"Vorname: \" & !Vorname\r\n    Debug.Print \"Nachname: \" & !Nachname\r\nEnd With<\/pre>\n<p>Eine weitere M&ouml;glichkeit ist das Referenzieren eines Feldes &uuml;ber seine Ordinalzahl:<\/p>\n<pre>rst(1)<\/pre>\n<p>Die Lesbarkeit bleibt hier allerdings auf der Strecke.<\/p>\n<h3>Alle Felder anzeigen<\/h3>\n<p>Wenn Sie einmal alle Felder eines Datensatzes anzeigen m&ouml;chten und Ihnen die Schreibarbeit zu viel ist, k&ouml;nnen Sie die Felder in einer For-Each-Schleife durchlaufen. Das sieht dann wie in Quellcode 10 aus; das Ergebnis liefert Abb. 2.<\/p>\n<p><b>Quellcode 10: Ausgeben aller Felder eines Datensatzes und ihrer Werte<\/b><\/p>\n<pre>Public Sub AlleFelderAusgeben()\r\n    Dim fld As DAO.Field\r\n    ''...\r\n    Set rst = db.OpenRecordset(\"Personal\", _        dbOpenDynaset)\r\n    For Each fld In rst.Fields\r\n        Debug.Print fld.Name & \": \" _            & fld.Value\r\n    Next fld\r\n    ''...<\/pre>\n<h3>Hinweis<\/h3>\n<p>Die Techniken f&uuml;r den Zugriff auf die Felder eines Datensatzes lassen sich nat&uuml;rlich in alle weiter oben vorgestellten Routinen einsetzen, die die Navigation in Datensatzgruppen veranschaulichen &#8211; beispielsweise &uuml;berall dort, wo Sie den Kommentar &#8222;etwas mit dem Datensatz tun&#8220; finden. <\/p>\n<p><b>Datensatz anlegen<\/b><\/p>\n<p>Zum Anlegen eines neuen Datensatzes m&uuml;ssen Sie zugegebenerma&szlig;en gar nicht gro&szlig; navigieren: Sie f&uuml;gen ihn einfach mit einigen Anweisungen hinzu. Die Routine aus Quellcode 11 enth&auml;lt die wichtigsten Schritte:<\/p>\n<li>Die AddNew-Methode leitet das Anlegen eines neuen Datensatzes ein.<\/li>\n<li>Die folgenden Anweisungen wie etwa rst!Nachname = &#8222;Minhorst&#8220; f&uuml;llen die Felder mit den passenden Daten.<\/li>\n<li>Die Update-Methode schlie&szlig;t das Anlegen ab und speichert den Datensatz in der oder den zugrunde liegenden Tabellen.<\/li>\n<p><b>Quellcode 11: Anlegen eines neuen Datensatzes<\/b><\/p>\n<pre>Public Sub NeuerDatensatz()\r\n    ''...\r\n    Set rst = db.OpenRecordset(\"Personal\", _        dbOpenDynaset)\r\n    With rst\r\n        .AddNew\r\n        !Nachname = \"Minhorst\"\r\n        !Vorname = \"Andr&eacute;\"\r\n        !Position = \"Chef\"\r\n        !Anrede = \"Herr Doktor\"\r\n        .Update\r\n    End With\r\n    ''...<\/pre>\n<p><b>Datens&auml;tze bearbeiten<\/b><\/p>\n<p>Das Bearbeiten &auml;hnelt dem Hinzuf&uuml;gen eines Datensatzes. Es gibt allerdings zwei wichtige Unterschiede: Sie m&uuml;ssen vorher den zu bearbeitenden Datensatz ausw&auml;hlen (sofern es sich nicht um den ersten Datensatz des Recordsets handelt), und Sie verwenden nicht die Anweisung AddNew zum Anlegen eines Datensatzes, sondern Edit. Mit diesem Kommando &auml;ndern Sie den Status des Datensatzes zum Bearbeiten.<\/p>\n<p>Die Routine aus Quellcode 12 verwendet die FindFirst-Methode (mehr dazu im n&auml;chsten Teil dieser Beitragsreihe), um zu einem bestimmten Datensatz zu navigieren und &auml;ndert ein Feld in diesem Datensatz.<\/p>\n<p><IMG height=\"333\" src=\"..\/fileadmin\/_temp_\/{B7313808-0CF0-492E-A7DD-0446C97BAA8B}\/pic002.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Ausgabe aller Felder eines Datensatzes und ihrer Inhalte<\/span><\/b><\/p>\n<p>Wichtig ist dabei die Abfolge aus dem vorbereitenden Edit, der eigentlichen &auml;nderung durch Zuweisung der neuen Daten an die passenden Felder und schlie&szlig;lich das &uuml;bernehmen der &auml;nderungen mit der Update-Anweisung.<\/p>\n<p><b>Quellcode 12: &auml;ndern eines vorhandenen Datensatzes<\/b><\/p>\n<pre>Public Sub DatensatzBearbeiten()\r\n    ''...\r\n    Set rst = db.OpenRecordset(\"Personal\", _        dbOpenDynaset)\r\n    rst.FindFirst \"Nachname = ''Minhorst''\"\r\n    If Not rst.NoMatch Then\r\n        With rst\r\n            .Edit\r\n            !Position = \"Oberster Chef\"\r\n            .Update\r\n        End With\r\n    End If\r\n    ''...<\/pre>\n<p><b>Quellcode 12: Massenweise Datensatz&auml;nderungen<\/b><\/p>\n<pre>Public Sub MehrereDatensaetzeBearbeiten()\r\n    ''...\r\n    Set rst = db.OpenRecordset(\"Artikel\", _        dbOpenDynaset)\r\n    Do While Not rst.EOF\r\n        With rst\r\n            .Edit\r\n            !Einzelpreis = !Einzelpreis * 1.05\r\n            .Update\r\n        End With\r\n        rst.MoveNext\r\n    Loop\r\n    ''...<\/pre>\n<p><b>Quellcode 13: Aktualisieren mehrere Datens&auml;tze auf einen Rutsch<\/b><\/p>\n<pre>Public Sub MehrereDatensaetzeBearbeitenSQL()\r\n    Dim db As DAO.Database\r\n    Set db = CurrentDb\r\n    db.Execute \"UPDATE Artikel SET \" _        & \"Einzelpreis = Einzelpreis * 1.05\"\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p><b>Quellcode 14: L&ouml;schen eines Datensatzes<\/b><\/p>\n<pre>Public Sub DatensatzLoeschen()\r\n    ''...\r\n    Set rst = db.OpenRecordset(\"Personal\", dbOpenDynaset)\r\n    rst.FindFirst \"Nachname = ''Minhorst''\"\r\n    If Not rst.NoMatch Then\r\n        rst.Delete\r\n    End If\r\n    ''...<\/pre>\n<h3>Massenweise &auml;nderungen &#8230;<\/h3>\n<p>Nat&uuml;rlich k&ouml;nnen Sie mit DAO auch mehrere Datens&auml;tze durchlaufen und &auml;ndern. Quellcode 12 zeigt ein Beispiel daf&uuml;r: Die enthaltene Routine erh&ouml;ht die Einzelpreis aller Artikel um 5 %. Hier sehen Sie au&szlig;erdem, dass man durchaus in einer Zeile lesend auf einen Feldwert zugreifen und diesen kurz darauf &auml;ndern kann.<\/p>\n<h3>&#8230; lieber per SQL-Aktionsabfrage<\/h3>\n<p>Bevor Sie massenhaft &auml;nderungen von Daten per DAO durchf&uuml;hren, sollten Sie vorher genau pr&uuml;fen, ob dies nicht auch mit einer SQL-Aktionsabfrage m&ouml;glich ist. Diese funktioniert n&auml;mlich in der Regel sehr viel schneller. Im vorliegenden Fall geht das, wie Quellcode 13 zeigt.<\/p>\n<p><b>L&ouml;schen von Datens&auml;tzen<\/b><\/p>\n<p>Das L&ouml;schen von Datens&auml;tzen erfolgt ganz einfach mit der Delete-Methode. Wiederum sollte man nat&uuml;rlich vorher zu dem Datensatz navigieren, der gel&ouml;scht werden soll, wie die Routine aus Quellcode 14 zeigt.<\/p>\n<p><b>Bearbeiten unm&ouml;glich<\/b><\/p>\n<p>Unter Umst&auml;nden k&ouml;nnen Sie dem Recordset gar keine Daten hinzuf&uuml;gen oder dessen Daten &auml;ndern. Das h&auml;ngt auch davon ab, wie Sie die Datensatzgruppe ge&ouml;ffnet haben und &#8211; wenn mehrere Tabellen beteiligt sind &#8211; wie diese miteinander verkn&uuml;pft sind. Ohne hier ins Detail zu gehen: Es gibt zwei M&ouml;glichkeiten, zu pr&uuml;fen, ob ein Recordset bearbeitbar ist. Die erste L&ouml;sung verwendet dazu VBA: Dabei hilft die Recordset-Eigenschaft Updateable. Wenn Sie die Datens&auml;tze bearbeiten k&ouml;nnen, liefert diese Eigenschaft den Wert True zur&uuml;ck. Wenn dies nicht der Fall ist und Sie nicht wissen, woran es liegt, greifen Sie zum zweiten L&ouml;sungsansatz: Legen Sie eine Abfrage an, die der Datenherkunft des Recordsets entspricht. Enth&auml;lt die Datenherkunft mehrere Tabellen, k&ouml;nnen Sie so unter Umst&auml;nden erkennen, ob eine ungl&uuml;ckliche Zusammenstellung von Tabellen und Verkn&uuml;pfungen das Aktualisieren verhindert.<\/p>\n<p>Die n&auml;chste Folge dieser Beitragsreihe besch&auml;ftigt sich mit dem Filtern und Sortieren von Datens&auml;tzen. Au&szlig;erdem lernen Sie M&ouml;glichkeiten kennen, effektiv in Datensatzgruppen zu suchen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DAO00.mdb<\/p>\n<p>DAO97.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/874DB402-06FB-485D-AC9A-57B95B6B1E7B\/aiu_375.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hat man einmal ein Recordset-Objekt erzeugt und mit den ben&ouml;tigten Daten gef&uuml;llt, m&ouml;chte man auch damit arbeiten. Die Bibliothek DAO (Data Access Objects) greift einem dabei t&uuml;chtig unter die Arme &#8211; doch das Navigieren in Datensatzgruppen und das Anlegen, Bearbeiten oder L&ouml;schen von Datens&auml;tzen ger&auml;t damit zur Flei&szlig;arbeit.<\/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,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662006,66042006,44000035,44000025],"tags":[],"class_list":["post-55000375","post","type-post","status-publish","format-standard","hentry","category-662006","category-66042006","category-Datenzugriff_programmieren","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>DAO, Teil 2: Recordsets in Aktion - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DAO, Teil 2: Recordsets in Aktion\" \/>\n<meta property=\"og:description\" content=\"Hat man einmal ein Recordset-Objekt erzeugt und mit den ben&ouml;tigten Daten gef&uuml;llt, m&ouml;chte man auch damit arbeiten. Die Bibliothek DAO (Data Access Objects) greift einem dabei t&uuml;chtig unter die Arme - doch das Navigieren in Datensatzgruppen und das Anlegen, Bearbeiten oder L&ouml;schen von Datens&auml;tzen ger&auml;t damit zur Flei&szlig;arbeit.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T20:58:50+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg01.met.vgwort.de\/na\/25de30200a6f41989e9228be6ee3de42\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"16\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"DAO, Teil 2: Recordsets in Aktion\",\"datePublished\":\"2021-02-11T20:58:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/\"},\"wordCount\":2708,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/25de30200a6f41989e9228be6ee3de42\",\"articleSection\":[\"2006\",\"4\\\/2006\",\"Datenzugriff programmieren\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/\",\"name\":\"DAO, Teil 2: Recordsets in Aktion - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/25de30200a6f41989e9228be6ee3de42\",\"datePublished\":\"2021-02-11T20:58:50+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/25de30200a6f41989e9228be6ee3de42\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/25de30200a6f41989e9228be6ee3de42\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/DAO_Teil_2_Recordsets_in_Aktion\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DAO, Teil 2: Recordsets in Aktion\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"DAO, Teil 2: Recordsets in Aktion - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/","og_locale":"de_DE","og_type":"article","og_title":"DAO, Teil 2: Recordsets in Aktion","og_description":"Hat man einmal ein Recordset-Objekt erzeugt und mit den ben&ouml;tigten Daten gef&uuml;llt, m&ouml;chte man auch damit arbeiten. Die Bibliothek DAO (Data Access Objects) greift einem dabei t&uuml;chtig unter die Arme - doch das Navigieren in Datensatzgruppen und das Anlegen, Bearbeiten oder L&ouml;schen von Datens&auml;tzen ger&auml;t damit zur Flei&szlig;arbeit.","og_url":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T20:58:50+00:00","og_image":[{"url":"http:\/\/vg01.met.vgwort.de\/na\/25de30200a6f41989e9228be6ee3de42","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"16\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"DAO, Teil 2: Recordsets in Aktion","datePublished":"2021-02-11T20:58:50+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/"},"wordCount":2708,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/25de30200a6f41989e9228be6ee3de42","articleSection":["2006","4\/2006","Datenzugriff programmieren","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/","url":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/","name":"DAO, Teil 2: Recordsets in Aktion - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/25de30200a6f41989e9228be6ee3de42","datePublished":"2021-02-11T20:58:50+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/25de30200a6f41989e9228be6ee3de42","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/25de30200a6f41989e9228be6ee3de42"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/DAO_Teil_2_Recordsets_in_Aktion\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"DAO, Teil 2: Recordsets in Aktion"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000375","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000375"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000375\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000375"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000375"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000375"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}