{"id":55001601,"date":"2026-06-01T00:00:00","date_gmt":"2026-05-05T20:49:11","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1601"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Detailformular_und_Datenblatt_mit_ADODBRecordset","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/","title":{"rendered":"Detailformular und Datenblatt mit ADODB-Recordset"},"content":{"rendered":"<p><b>Access bietet von Haus aus eine komfortable Datenbindung f&uuml;r Formulare: Man tr&auml;gt eine Tabelle oder Abfrage als Datensatzquelle ein, bindet die Steuerelemente &uuml;ber ihren Steuerelementinhalt an Felder &#8211; und Access erledigt den Rest. Wer jedoch sicherstellen m&ouml;chte, dass seine Tabellen nicht von au&szlig;en ausgelesen werden k&ouml;nnen, darf keine Tabellen oder Tabellenverkn&uuml;pfungen mehr im Frontend haben. Wir m&uuml;ssen uns also nach einer Alternative umsehen. Dazu entfernen wir alle kritischen Elemente aus dem Frontend und bauen die Formulare um. Aber wie greifen wir auf die Daten zu? Dazu nutzen wir die Recordset-Eigenschaft von Formularen und Steuerelementen. Diese k&ouml;nnen ein per VBA zusammengestelltes Recordset nutzen. In diesem ersten Teil zeigen wir, wie das mit einfachen Detailformularen und in der Datenblattansicht funktioniert. Danach bauen wir unser Wissen aus und besch&auml;ftigen uns mit Haupt- und Unterformularen und Steuerelementen wie dem Kombinations- und dem Listenfeld.<\/b><\/p>\n<h2>ADODB statt DAO<\/h2>\n<p>Warum nutzen wir in diesem Artikel ADODB statt DAO? Weil es flexibler ist, gerade wenn wir die vorgestellten Techniken auch f&uuml;r den Zugriff auf SQL Server-Datenbanken nutzen wollen.<\/p>\n<h2>Beispieldatenbank: Frontend mit kennwortgesch&uuml;tztem Backend<\/h2>\n<p>Als Beispiel nutzen wir eine Frontend-Datenbank, die aktuell noch &uuml;ber Tabellenverkn&uuml;pfungen auf die Tabellen eines Backends zugreift. Dieses ist wiederum per Kennwort gesch&uuml;tzt.<\/p>\n<p>Das ist ein wichtiger Baustein im Hinblick auf die Sicherheit der Daten, denn wenn der Benutzer Zugriff auf das Backend hat, kann er dieses theoretisch auch einfach kopieren. In diesem Fall w&auml;ren die geplanten Sicherheitsma&szlig;nahmen im Frontend nutzlos.<\/p>\n<p>Unser Frontend enth&auml;lt zu Beginn noch die Verkn&uuml;pfungen zu den Tabellen im Backend, die wir mit dem Bordmitteln von Access hinzugef&uuml;gt haben (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1601_001.png\" alt=\"Datenbank mit Tabellenverkn&uuml;pfungen\" width=\"649,559\" height=\"364,7922\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Datenbank mit Tabellenverkn&uuml;pfungen<\/span><\/b><\/p>\n<h2>ADODB-Bibliothek referenzieren<\/h2>\n<p>Wir k&ouml;nnen mit Early Binding oder Late Binding auf die Elemente der ADODB-Bibliothek zugreifen.<\/p>\n<p>Zum Programmieren nutzen wir allerdings Early Binding, da wir so IntelliSense verwenden k&ouml;nnen. Dazu f&uuml;gen wir dem VBA-Projekt einen entsprechenden Verweis hinzu (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1601_002.png\" alt=\"Verweis auf die ADODB-Bibliothek\" width=\"499,5589\" height=\"393,8207\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Verweis auf die ADODB-Bibliothek<\/span><\/b><\/p>\n<h2>VBA-Funktionen f&uuml;r den Zugriff auf Connection und Recordset<\/h2>\n<p>Wir werden immer wieder den gleichen Code verwenden, um die Recordset-Eigenschaften von Formularen und Steuerelementen mit Daten zu f&uuml;llen. Daher legen wir gleich ein paar Funktionen an, welche diese Aufgabe erledigen und rufen diese einfach vom Formular aus auf.<\/p>\n<p>Das Modul <b>mdlADODB<\/b> enth&auml;lt alle Hilfsfunktionen, die wir f&uuml;r den Zugriff auf die Datenbank ben&ouml;tigen. Wir legen es einmalig an und verwenden es in allen Formularen der Anwendung. Die erste Konstante steuert, welches Backend verwendet wird:<\/p>\n<pre>'Art der Verbindung:\r\n'1 = CurrentProject.Connection\r\n'2 = Access-Backend (.accdb)\r\n'3 = SQL Server\r\n<span style=\"color:blue;\">Private <\/span>Const cIntConnection<span style=\"color:blue;\"> As Integer<\/span> = 2<\/pre>\n<p>Mit dem Wert <b>1 <\/b>nutzen wir <b>CurrentProject.Connection<\/b> &#8211; also die Verbindung, die Access f&uuml;r das aktuelle Frontend ohnehin offen h&auml;lt. Das ist sinnvoll, wenn Frontend und Backend dieselbe Datenbank sind oder wenn die Tabellen des Backends per Tabellenverkn&uuml;pfung eingebunden sind. Mit dem Wert <b>2<\/b> &ouml;ffnen wir eine eigene ADODB-Verbindung auf eine kennwortgesch&uuml;tzte Access-Backend-Datenbank. Mit dem Wert <b>3<\/b> verbinden wir uns mit einem SQL Server. Der Wechsel des Backends ist damit auf eine einzige Zeile reduziert.<\/p>\n<p>Die Verbindungsstrings f&uuml;r die beiden echten Verbindungen stehen als Konstanten im Modul. F&uuml;r das Access-Backend erg&auml;nzen wir den Provider-String sp&auml;ter um den Dateipfad und das Kennwort:<\/p>\n<pre>'Verbindungsstring f&uuml;r Access-Backend (ACE-Provider)\r\n<span style=\"color:blue;\">Private <\/span>Const strCnnAccess<span style=\"color:blue;\"> As String<\/span> = _\r\n    \"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"\r\n'Verbindungsstring f&uuml;r SQL Server (Windows-Authentifiz.)\r\n<span style=\"color:blue;\">Private <\/span>Const strCnnSQLServer<span style=\"color:blue;\"> As String<\/span> = _\r\n    \"Provider=MSOLEDBSQL;Server=amvDesktop2023;\" & _\r\n    \"Database=ADODBRecordsets;Trusted_Connection=Yes;\"<\/pre>\n<p>F&uuml;r das Access-Backend ben&ouml;tigen wir zus&auml;tzlich den Dateinamen der Backend-Datenbank sowie das Kennwort. Beides steht ebenfalls als Konstante im Modul. Den vollst&auml;ndigen Pfad ermitteln wir zur Laufzeit per <b>GetDBPfad<\/b>, damit die Anwendung auch nach einem Verschieben von Frontend und Backend in einen anderen Ordner weiterhin funktioniert:<\/p>\n<pre>'Dateiname des Access-Backends\r\n<span style=\"color:blue;\">Private <\/span>Const strDBName<span style=\"color:blue;\"> As String<\/span> = _\r\n    \"FormulareMitADODBRecordset_BE.accdb\"\r\n'Datenbankpasswort des Access-Backends\r\n<span style=\"color:blue;\">Private <\/span>Const strDBPasswort<span style=\"color:blue;\"> As String<\/span> = \"kennwort\"\r\n<span style=\"color:blue;\">Private Function <\/span>GetDBPfad()<span style=\"color:blue;\"> As String<\/span>\r\n    GetDBPfad = CurrentProject.Path & \"\\\" & strDBName\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Nur der Dateiname steht fest im Code &#8211; der Ordner wird immer zur Laufzeit aus <b>CurrentProject.Path<\/b> abgeleitet. Wer Backend und Frontend in getrennten Ordnern betreibt, tr&auml;gt stattdessen einfach den vollst&auml;ndigen Pfad als Konstante ein.<\/p>\n<p><b>CurrentProject.Path <\/b>kann auch durch einen festen Pfad ersetzt werden. Alternativ kann man die Funktion auch so umbauen, dass der Pfad beispielsweise aus der Registry eingelesen wird. Wenn dort kein Pfad gespeichert ist, k&ouml;nnte man diesen per Datei-Dialog abfragen.<\/p>\n<h2>Die Funktion GetConnection<\/h2>\n<p>Die Funktion <b>GetConnection<\/b> ist der zentrale Baustein des Moduls. Sie gibt abh&auml;ngig von <b>cIntConnection<\/b> eine ge&ouml;ffnete <b>ADODB.Connection<\/b> zur&uuml;ck.<\/p>\n<p>Alle anderen Funktionen des Moduls &#8211; und alle Formulare der Anwendung &#8211; rufen ausschlie&szlig;lich diese eine Funktion auf, um eine Verbindung zu erhalten (siehe Listing 1).<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>GetConnection()<span style=\"color:blue;\"> As <\/span>ADODB.Connection\r\n    <span style=\"color:blue;\">Dim <\/span>cnn<span style=\"color:blue;\"> As <\/span>ADODB.Connection\r\n    <span style=\"color:blue;\">Dim <\/span>strConn<span style=\"color:blue;\"> As String<\/span>\r\n    Select Case cIntConnection\r\n        <span style=\"color:blue;\">Case <\/span>1\r\n            'CurrentProject.Connection wiederverwenden\r\n            <span style=\"color:blue;\">Set<\/span> GetConnection = CurrentProject.Connection\r\n            <span style=\"color:blue;\">Exit Function<\/span>\r\n        <span style=\"color:blue;\">Case <\/span>2\r\n            'Access-Backend: Verbindungsstring zusammenstellen\r\n            strConn = strCnnAccess & GetDBPfad()\r\n            <span style=\"color:blue;\">If <\/span>strDBPasswort &lt;&gt; \"\"<span style=\"color:blue;\"> Then<\/span>\r\n                strConn = strConn & \";Jet OLEDB:Database Password=\" & strDBPasswort\r\n            <span style=\"color:blue;\">End If<\/span>\r\n        <span style=\"color:blue;\">Case <\/span>3\r\n            'SQL Server: Verbindungsstring direkt verwenden\r\n            strConn = strCnnSQLServer\r\n    <span style=\"color:blue;\">End Select<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> cnn = <span style=\"color:blue;\">New<\/span> ADODB.Connection\r\n    cnn.Open strConn\r\n    <span style=\"color:blue;\">Set<\/span> GetConnection = cnn\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Die Funktion GetConnection<\/span><\/b><\/p>\n<p>Bei <b>Case 1<\/b> verlassen wir die Funktion sofort per <b>Exit Function<\/b>: <b>CurrentProject.Connection<\/b> ist bereits offen und geh&ouml;rt Access &#8211; wir d&uuml;rfen sie weder &uuml;ber <b>cnn.Open<\/b> &ouml;ffnen noch sp&auml;ter schlie&szlig;en.<\/p>\n<p>Bei den Werten <b>2 <\/b>und <b>3 <\/b>stellen wir zun&auml;chst den Verbindungsstring zusammen und &ouml;ffnen am Ende gemeinsam eine neue Verbindung. Diese neue Verbindung m&uuml;ssen wir sp&auml;ter auch wieder schlie&szlig;en &#8211; dazu gleich mehr.<\/p>\n<p>Beim Access-Backend erg&auml;nzen wir den Provider-String um den Pfad aus <b>GetDBPfad()<\/b> und, falls vorhanden, um das Kennwort.<\/p>\n<p>Der Schl&uuml;ssel f&uuml;r das Datenbankpasswort lautet <b>Jet OLEDB:Database Password<\/b> &#8211; dieser Name stammt noch aus der Zeit des Jet-Datenbankmoduls und wird vom neueren ACE-Provider unver&auml;ndert weiterverwendet.<\/p>\n<h2>Die Funktion GetRecordset<\/h2>\n<p>Die zweite Hilfsfunktion <b>GetRecordset<\/b> &ouml;ffnet ein Recordset auf Basis eines SQL-Strings und gibt es zur&uuml;ck. Sie kapselt die immer gleichen Schritte &#8211; Verbindung holen, Recordset anlegen, Cursor konfigurieren, &ouml;ffnen &#8211; so dass wir in den Formularen nur noch den SQL-String &uuml;bergeben m&uuml;ssen (siehe Listing 2).<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>GetRecordset(ByVal strSQL<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> ByVal lngCursorType<span style=\"color:blue;\"> As Long<\/span> = adOpenStatic, _\r\n        <span style=\"color:blue;\">Optional<\/span> ByVal lngLockType<span style=\"color:blue;\"> As Long<\/span> = adLockOptimistic) _\r\n       <span style=\"color:blue;\"> As <\/span>ADODB.Recordset\r\n    <span style=\"color:blue;\">Dim <\/span>cnn<span style=\"color:blue;\"> As <\/span>ADODB.Connection\r\n    <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>ADODB.Recordset\r\n    <span style=\"color:blue;\">Set<\/span> cnn = GetConnection()\r\n    <span style=\"color:blue;\">Set<\/span> rst = <span style=\"color:blue;\">New<\/span> ADODB.Recordset\r\n    rst.CursorLocation = adUseClient\r\n    rst.Open strSQL, cnn, lngCursorType, lngLockType\r\n    <span style=\"color:blue;\">Set<\/span> GetRecordset = rst\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Die Funktion GetRecordset<\/span><\/b><\/p>\n<p>Cursor- und Sperrtyp sind als optionale Parameter mit sinnvollen Standardwerten ausgelegt. <b>adOpenStatic<\/b> liefert einen statischen Cursor, der alle Daten einmalig in den Arbeitsspeicher l&auml;dt. Das ist die Voraussetzung f&uuml;r <b>adUseClient<\/b>, denn clientseitige Cursor unterst&uuml;tzen nur statische oder Forward-Only-Cursor. <b>adLockOptimistic<\/b> sperrt den Datensatz erst beim <b>Update<\/b>-Aufruf kurz, was Konflikte im Mehrbenutzerbetrieb minimiert.<\/p>\n<p>Warum <b>adUseClient<\/b> fest und nicht als Parameter? Weil wir das Recordset anschlie&szlig;end an die <b>Recordset<\/b>-Eigenschaft eines Formulars binden wollen &#8211; und Access erwartet daf&uuml;r zwingend einen clientseitigen Cursor. Wer ein Recordset nur lesend durchlaufen m&ouml;chte, ohne es ans Formular zu binden, kann zwar auch einen serverseitigen Cursor verwenden, aber f&uuml;r den Zweck dieser Beitragsreihe ist <b>adUseClient<\/b> die richtige Wahl.<\/p>\n<p>Ein wichtiges Detail: <b>cnn<\/b> ist hier eine lokale Variable. Bei <b>adUseClient<\/b> ist das kein Problem &#8211; ADODB trennt das Recordset nach dem &Ouml;ffnen intern von der Verbindung, sodass die Connection freigegeben werden kann, ohne das Recordset zu beeintr&auml;chtigen.<\/p>\n<p>Das Recordset lebt danach eigenst&auml;ndig im Speicher. Bei einem serverseitigen Cursor w&auml;re das anders: Dort muss die Verbindung so lange offen bleiben, wie das Recordset verwendet wird.<\/p>\n<h2>Die Testprozedur<\/h2>\n<p>Bevor wir das Modul in Formularen einsetzen, pr&uuml;fen wir mit einer einfachen Testprozedur, ob Verbindung und Recordset korrekt funktionieren. <b>Test_GetRecordset <\/b>&ouml;ffnet ein Recordset mit den ersten zehn Datens&auml;tzen der Tabelle <b>tblKunden<\/b> und gibt <b>KundeID<\/b> und <b>Firma<\/b> im Direktbereich aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Test_GetRecordset()\r\n    <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>ADODB.Recordset\r\n    <span style=\"color:blue;\">Set<\/span> rst = GetRecordset( _\r\n        \"SELECT TOP 10 * FROM tblKunden\")\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!KundeID, rst!Firma\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 Sub<\/span><\/pre>\n<p>Wir stellen <b>cIntConnection<\/b> auf den gew&uuml;nschten Wert, dr&uuml;cken <b>F5<\/b> im VBA-Editor und pr&uuml;fen im Direktbereich, ob die Daten korrekt ausgegeben werden. Liefert die Prozedur Ergebnisse, sind Verbindungsstring, Pfad und Kennwort korrekt &#8211; wir k&ouml;nnen mit der Implementierung der Formulare beginnen. Voraussetzung ist, dass es eine entsprechende Backend-Datenbank oder SQL Server-Datenbank gibt.<\/p>\n<h2>Detailformular mit Recordset f&uuml;llen<\/h2>\n<p>Damit kommen wir zum eigentlich Kern &#8211; dem F&uuml;llen der Recordset-Eigenschaft eines Formulars mit dem Ergebnis der Funktion <b>GetRecordset<\/b>.<\/p>\n<p>Um dieses einfach erstellen zu k&ouml;nnen, ist es wichtig, dass die Tabellen noch in der Datenbank liegen oder entsprechende Tabellenverkn&uuml;pfungen vorhanden sind. Auf diese Weise k&ouml;nnen wir das Formular schnell &uuml;ber die Eigenschaft <b>Datensatzquelle <\/b>mit der Tabelle verkn&uuml;pfen und die Steuerelemente als gebundene Steuerelemente aus der Feldliste in das Formular ziehen.<\/p>\n<p>Die Bindung der Steuerelemente an die Datensatzquelle funktioniert n&auml;mlich nach dem Zuweisen eines Recordsets genauso wie mit einer direkt f&uuml;r die Eigenschaft <b>Datensatzquelle <\/b>angegebenen Tabelle oder Abfrage.<\/p>\n<p>Dazu legen wir ein neues, leeres Formular namens <b>frmKunden <\/b>an und f&uuml;gen Datensatzquelle und Steuerelemente wie in Bild 3 hinzu.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1601_003.png\" alt=\"Ausstatten des Formulars mit gebundenen Steuerelementen\" width=\"649,559\" height=\"436,5036\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Ausstatten des Formulars mit gebundenen Steuerelementen<\/span><\/b><\/p>\n<p>Nun folgen die entscheidenden Schritte:<\/p>\n<ul>\n<li>Wir leeren die Eigenschaft <b>Datensatzquelle <\/b>wieder.<\/li>\n<li>Dann f&uuml;gen wir f&uuml;r das Ereignis <b>Beim &Ouml;ffnen <\/b>die Ereignisprozedur aus Listing 3 hinzu.<\/li>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n    <span style=\"color:blue;\">Set<\/span> Me.Recordset = GetRecordset(\"SELECT * FROM tblKunden\")\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Das Ereignis Beim &Ouml;ffnen<\/span><\/b><\/p>\n<\/ul>\n<p>&Ouml;ffnen wir das Formular nun in der Formularansicht, zeigt dieses die Daten wie in einem herk&ouml;mmlichen gebundenen Formular an. Wir k&ouml;nnen in den Datens&auml;tzen bl&auml;ttern, neue Datens&auml;tze anlegen, vorhandene Datens&auml;tze bearbeiten und l&ouml;schen.<\/p>\n<p>Ein erstes Problem tritt auf, wenn wir &uuml;ber die eingebaute Funktion &uuml;ber das Kontextmen&uuml; nach einen Feld sortieren oder filtern wollen. Beim Versuch, zu sortieren, erscheint die Fehlermeldung aus Bild 4.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1601_005.png\" alt=\"Fehler beim Versuch, die Datens&auml;tze im Formular zu sortieren\" width=\"424,5589\" height=\"191,6983\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Fehler beim Versuch, die Datens&auml;tze im Formular zu sortieren<\/span><\/b><\/p>\n<p>Wenn wir filtern wollen, zum Beispiel nach einem bestimmten Nachnamen, erscheint die Meldung aus Bild 5.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1601_006.png\" alt=\"Fehler beim Versuch, im Formular zu filtern\" width=\"424,5589\" height=\"210,5154\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Fehler beim Versuch, im Formular zu filtern<\/span><\/b><\/p>\n<p>Das sind zwei typische Fehler bei der ADODB-Recordset-Bindung in Kombination mit der eingebauten Access-Suche\/Filter-Funktion.<\/p>\n<p><b>Geben Sie einen g&uuml;ltigen Wert ein<\/b> tritt auf, wenn Access intern versucht, &uuml;ber die Datensatzquelle des Formulars zu filtern, aber keine SQL-Datensatzquelle findet (weil wir keine eingetragen haben, sondern das Recordset per Code gesetzt haben).<\/p>\n<p><b>Der Datenprovider konnte nicht initialisiert werden<\/b> tritt auf, wenn Access versucht, den eingebauten Filter- oder Suchmechanismus auf ein ADODB-Recordset anzuwenden, was nicht unterst&uuml;tzt wird.<\/p>\n<p>Diese Funktionen setzen eine klassische DAO-gebundene Datensatzquelle voraus. Die Fehler treten bei allen drei Verbindungsarten auf, also bei Recordsets auf Basis der lokalen Datenbank, der Backend-Datenbank und auch beim SQL Server.<\/p>\n<p>Wer allerdings den Aufwand nicht scheut, seine Datenbank auf die hier beschriebene Art zu sch&uuml;tzen, wird sicher auch benutzerdefinierte Elemente zur Steuerung von Funktionen wie der Sortierung oder der Filterung programmieren.<\/p>\n<p>Daher sehen wir das erst einmal nicht als Problem an. In einem weiteren Beitrag namens <b>Filtern und Sortieren von Formularen mit Recordsets <\/b>(<b>www.access-im-unternehmen.de\/****<\/b>) zeigen wir eine L&ouml;sung, wie sich dies mit eigenen Funktionen abbilden l&auml;sst.<\/p>\n<h2>Tabellen aus dem Frontend entfernen<\/h2>\n<p>Um das Frontend sicher zu machen, k&ouml;nnen wir nun die noch vorhandenen Tabellen oder Tabellenverkn&uuml;pfungen aus dem Frontend entfernen.<\/p>\n<p>Diese k&ouml;nnen wir sp&auml;ter jederzeit wieder hinzuf&uuml;gen, beispielsweise wenn wir weitere Formulare anlegen wollen.<\/p>\n<p>&Ouml;ffnen wir das Formular <b>frmKunden <\/b>nun erneut, stellen wir allerdings fest, dass die <b>Anrede <\/b>nicht mehr angezeigt wird &#8211; und auch die Auswahlliste ist leer (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1601_008.png\" alt=\"Die Anreden werden nicht mehr angezeigt.\" width=\"424,5589\" height=\"235,1935\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Die Anreden werden nicht mehr angezeigt.<\/span><\/b><\/p>\n<p>Das Problem ist schnell gefunden. Wir haben das Feld <b>AnredeID <\/b>als Nachschlagefeld mit der Tabelle <b>tblAnreden <\/b>als Datensatzherkunft in der Tabelle <b>tblKunden <\/b>angelegt. Beim Hinzuf&uuml;gen des Feldes in das Formular wurden die Eigenschaften des Nachschlagefeldes in das Kombinationsfeld f&uuml;r dieses Feld &uuml;bernommen. <\/p>\n<p>Die Tabelle <b>tblAnreden <\/b>ist allerdings nicht mehr in der lokalen Datenbank vorhanden, daher kann das Kombinationsfeld auch keine Daten anzeigen. <\/p>\n<p>Kombinations- und Listenfelder haben aber auch eine <b>Recordset<\/b>-Eigenschaft, sodass wir die Tabelle <b>tblAnreden <\/b>leicht zuweisen k&ouml;nnen. Dazu benennen wir das Steuerelement <b>AnredeID <\/b>erst einmal in <b>cboAnredeID <\/b>um.<\/p>\n<p>Die Ereignisprozedur <b>Form_Open <\/b>erweitern wir um die folgende Anweisung:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> Me.cboAnredeID.Recordset = GetRecordset( _\r\n    \"SELECT * FROM tblAnreden\")<\/pre>\n<p>&Ouml;ffnen wir das Formular erneut, erscheinen auch die Anreden wieder &#8211; sowohl als ausgew&auml;hlter Eintrag im Kombinationsfeld als auch in der Auswahlliste (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1601_009.png\" alt=\"Nach dem Setzen des Recordsets erscheinen auch die Anreden wieder.\" width=\"424,5589\" height=\"255,0812\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Nach dem Setzen des Recordsets erscheinen auch die Anreden wieder.<\/span><\/b><\/p>\n<h2>Datenblattansicht mit Recordset<\/h2>\n<p>Nun testen wir, ob wir auch in der Datenblattansicht eines Formulars mit einem Recordset arbeiten k&ouml;nnen. Dazu kopieren wir einfach das Formular <b>frmKunden <\/b>in ein neues Formular namens <b>frmKunden_Datenblatt<\/b>.<\/p>\n<p>Hier nehmen wir lediglich eine &Auml;nderung vor: Wir stellen die Eigenschaft <b>Standardansicht <\/b>des Formulars auf <b>Datenblatt <\/b>ein.<\/p>\n<p>Nach dem &Ouml;ffnen des Formular scheint auf den ersten Blick alles zu funktionieren. Allerdings gibt es wieder ein Problem mit dem Suchen und Filtern.<\/p>\n<p>Die Befehle des Popupmen&uuml;s, das erscheint, wenn man auf das nach unten zeigende Dreieck im Spaltenkopf zeigt, funktionieren nicht und liefern die von der Detailansicht bekannten Fehlermeldungen (siehe Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1601_010.png\" alt=\"Formular mit Recordset in der Datenblattansicht\" width=\"700\" height=\"160,2669\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Formular mit Recordset in der Datenblattansicht<\/span><\/b><\/p>\n<p>Diese k&ouml;nnen wir noch abfangen, indem wir das Ereignis <b>Bei Fehler <\/b>implementieren und dort beispielsweise die folgende Prozedur hinterlegen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Error(DataErr<span style=\"color:blue;\"> As Integer<\/span>, _\r\n        Response<span style=\"color:blue;\"> As Integer<\/span>)\r\n    <span style=\"color:blue;\">Debug.Print<\/span> DataErr, AccessError(DataErr)\r\n    Response = acDataErrContinue\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit geben wir den Fehler im Direktbereich aus und unterbinden die Fehlermeldung. Aber wir k&ouml;nnen nicht herausfinden, welche Aktion genau zum Fehler gef&uuml;hrt hat, sonst lie&szlig;e sich die aufgerufene Funktion mit ADODB nachbilden.<\/p>\n<p>Tiefer wollen wir an dieser Stelle nicht in das Thema einsteigen. Stattdessen zeigen wir im Beitrag <b>Filtern und Sortieren von Formularen mit Recordset <\/b>(<b>www.access-im-unternehmen.de\/1602<\/b>), wie wir die Filter- und Sortierfunktionen weitgehend funktional gestalten k&ouml;nnen.<\/p>\n<p>Alternativ dazu k&ouml;nnen Sie auch eigene Steuerelemente zum Filtern und Sortieren hinzuf&uuml;gen. Wie das gelingt, lesen Sie im Beitrag <b>Filtern und Sortieren von Formularen mit Recordset <\/b>(<b>www.access-im-unternehmen.de\/1602<\/b>).<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>In diesem ersten Teil der Beitragsreihe haben wir die Grundlage geschaffen, auf der alle weiteren Teile aufbauen: das Modul <b>mdlADODB<\/b> mit seinen Hilfsfunktionen <b>GetConnection<\/b> und <b>GetRecordset<\/b>.<\/p>\n<p>Mit einer einzigen Konstanten &#8211; <b>cIntConnection<\/b> &#8211; steuern wir, ob die Anwendung auf die lokale Datenbank, ein kennwortgesch&uuml;tztes Access-Backend oder einen SQL Server zugreift.<\/p>\n<p>Alle Formulare der Anwendung rufen ausschlie&szlig;lich diese beiden Funktionen auf und m&uuml;ssen sich um Verbindungsstrings, Pfade und Kennw&ouml;rter nicht k&uuml;mmern.<\/p>\n<p>Am Beispiel des Detailformulars <b>frmKunden<\/b> haben wir gezeigt, wie sich ein Formular per <b>Set Me.Recordset = GetRecordset(&#8230;)<\/b> an ein ADODB-Recordset binden l&auml;sst. Das Formular verh&auml;lt sich dabei wie ein klassisch gebundenes Formular: Bl&auml;ttern, Neuanlage, Bearbeiten und L&ouml;schen funktionieren ohne zus&auml;tzlichen Code.<\/p>\n<p>Auch Kombinations- und Listenfelder lassen sich auf dieselbe Weise mit Daten versorgen &#8211; &uuml;ber ihre eigene <b>Recordset<\/b>-Eigenschaft. Das ist besonders dann wichtig, wenn die Tabellenverkn&uuml;pfungen aus dem Frontend entfernt wurden und Nachschlagefelder ihre Daten nicht mehr automatisch beziehen k&ouml;nnen.<\/p>\n<p>Die eingebauten Sortier- und Filterfunktionen von Access stehen bei ADODB-gebundenen Formularen nicht zur Verf&uuml;gung &#8211; das ist ein bekanntes und bewusstes Zugest&auml;ndnis an die h&ouml;here Flexibilit&auml;t dieser Technik.<\/p>\n<p>Wer seine Daten auf diesem Weg sch&uuml;tzt, wird ohnehin eine eigene Benutzeroberfl&auml;che programmieren und auf die eingebauten Ribbon-Funktionen verzichten. Wie sich Sortierung und Filterung mit eigenen Mitteln umsetzen lassen, zeigen wir in einem separaten Beitrag.<\/p>\n<p>Im n&auml;chsten Teil der Reihe wenden wir dieselbe Technik auf Formulare in der Datenblattansicht an. Dort gibt es einige Besonderheiten zu beachten &#8211; etwa beim Zusammenspiel von Recordset-Bindung und den Spalten des Datenblatts. Danach folgen Haupt- und Unterformulare, bei denen wir zwei synchronisierte Recordsets verwalten m&uuml;ssen, sowie Listen- und Kombinationsfelder, deren Datenbindung wir vollst&auml;ndig selbst &uuml;bernehmen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DetailformularUndDatenblattMitADODBRecordset.accdb<\/p>\n<p>DetailformularUndDatenblattMitADODBRecordset_BE.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/61D2EAB6-E0C1-4F53-8955-18EA703E44CE\/aiu_1601.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Access bietet von Haus aus eine komfortable Datenbindung f&uuml;r Formulare: Man tr&auml;gt eine Tabelle oder Abfrage als Datensatzquelle ein, bindet die Steuerelemente &uuml;ber ihren Steuerelementinhalt an Felder &#8211; und Access erledigt den Rest. Wer jedoch sicherstellen m&ouml;chte, dass seine Tabellen nicht von au&szlig;en ausgelesen werden k&ouml;nnen, darf keine Tabellen oder Tabellenverkn&uuml;pfungen mehr im Frontend haben. Wir m&uuml;ssen uns also nach einer Alternative umsehen. Dazu entfernen wir alle kritischen Elemente aus dem Frontend und bauen die Formulare um. Aber wie greifen wir auf die Daten zu? Dazu nutzen wir die Recordset-Eigenschaft von Formularen und Steuerelementen. Diese k&ouml;nnen ein per VBA zusammengestelltes Recordset nutzen. In diesem ersten Teil zeigen wir, wie das mit einfachen Detailformularen und in der Datenblattansicht funktioniert. Danach bauen wir unser Wissen aus und besch&auml;ftigen uns mit Haupt- und Unterformularen und Steuerelementen wie dem Kombinations- und dem Listenfeld.<\/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":[662026,66032026,44000052],"tags":[],"class_list":["post-55001601","post","type-post","status-publish","format-standard","hentry","category-662026","category-66032026","category-Formulare_und_Steuerelemente"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Detailformular und Datenblatt mit ADODB-Recordset - 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\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Detailformular und Datenblatt mit ADODB-Recordset\" \/>\n<meta property=\"og:description\" content=\"Access bietet von Haus aus eine komfortable Datenbindung f&uuml;r Formulare: Man tr&auml;gt eine Tabelle oder Abfrage als Datensatzquelle ein, bindet die Steuerelemente &uuml;ber ihren Steuerelementinhalt an Felder - und Access erledigt den Rest. Wer jedoch sicherstellen m&ouml;chte, dass seine Tabellen nicht von au&szlig;en ausgelesen werden k&ouml;nnen, darf keine Tabellen oder Tabellenverkn&uuml;pfungen mehr im Frontend haben. Wir m&uuml;ssen uns also nach einer Alternative umsehen. Dazu entfernen wir alle kritischen Elemente aus dem Frontend und bauen die Formulare um. Aber wie greifen wir auf die Daten zu? Dazu nutzen wir die Recordset-Eigenschaft von Formularen und Steuerelementen. Diese k&ouml;nnen ein per VBA zusammengestelltes Recordset nutzen. In diesem ersten Teil zeigen wir, wie das mit einfachen Detailformularen und in der Datenblattansicht funktioniert. Danach bauen wir unser Wissen aus und besch&auml;ftigen uns mit Haupt- und Unterformularen und Steuerelementen wie dem Kombinations- und dem Listenfeld.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-05T20:49:11+00:00\" \/>\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=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Detailformular_und_Datenblatt_mit_ADODBRecordset\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Detailformular_und_Datenblatt_mit_ADODBRecordset\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Detailformular und Datenblatt mit ADODB-Recordset\",\"datePublished\":\"2026-05-05T20:49:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Detailformular_und_Datenblatt_mit_ADODBRecordset\\\/\"},\"wordCount\":2537,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"articleSection\":[\"2026\",\"3\\\/2026\",\"Formulare und Steuerelemente\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Detailformular_und_Datenblatt_mit_ADODBRecordset\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Detailformular_und_Datenblatt_mit_ADODBRecordset\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Detailformular_und_Datenblatt_mit_ADODBRecordset\\\/\",\"name\":\"Detailformular und Datenblatt mit ADODB-Recordset - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"datePublished\":\"2026-05-05T20:49:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Detailformular_und_Datenblatt_mit_ADODBRecordset\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Detailformular_und_Datenblatt_mit_ADODBRecordset\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Detailformular_und_Datenblatt_mit_ADODBRecordset\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Detailformular und Datenblatt mit ADODB-Recordset\"}]},{\"@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":"Detailformular und Datenblatt mit ADODB-Recordset - 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\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/","og_locale":"de_DE","og_type":"article","og_title":"Detailformular und Datenblatt mit ADODB-Recordset","og_description":"Access bietet von Haus aus eine komfortable Datenbindung f&uuml;r Formulare: Man tr&auml;gt eine Tabelle oder Abfrage als Datensatzquelle ein, bindet die Steuerelemente &uuml;ber ihren Steuerelementinhalt an Felder - und Access erledigt den Rest. Wer jedoch sicherstellen m&ouml;chte, dass seine Tabellen nicht von au&szlig;en ausgelesen werden k&ouml;nnen, darf keine Tabellen oder Tabellenverkn&uuml;pfungen mehr im Frontend haben. Wir m&uuml;ssen uns also nach einer Alternative umsehen. Dazu entfernen wir alle kritischen Elemente aus dem Frontend und bauen die Formulare um. Aber wie greifen wir auf die Daten zu? Dazu nutzen wir die Recordset-Eigenschaft von Formularen und Steuerelementen. Diese k&ouml;nnen ein per VBA zusammengestelltes Recordset nutzen. In diesem ersten Teil zeigen wir, wie das mit einfachen Detailformularen und in der Datenblattansicht funktioniert. Danach bauen wir unser Wissen aus und besch&auml;ftigen uns mit Haupt- und Unterformularen und Steuerelementen wie dem Kombinations- und dem Listenfeld.","og_url":"https:\/\/access-im-unternehmen.de\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/","og_site_name":"Access im Unternehmen","article_published_time":"2026-05-05T20:49:11+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Detailformular und Datenblatt mit ADODB-Recordset","datePublished":"2026-05-05T20:49:11+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/"},"wordCount":2537,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"articleSection":["2026","3\/2026","Formulare und Steuerelemente"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/","url":"https:\/\/access-im-unternehmen.de\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/","name":"Detailformular und Datenblatt mit ADODB-Recordset - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"datePublished":"2026-05-05T20:49:11+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Detailformular_und_Datenblatt_mit_ADODBRecordset\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Detailformular und Datenblatt mit ADODB-Recordset"}]},{"@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\/55001601","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=55001601"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001601\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}