{"id":55001413,"date":"2023-02-01T00:00:00","date_gmt":"2023-06-17T09:32:24","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1413"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Ressourcenprobleme_mit_Recordsets","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/","title":{"rendered":"Ressourcenprobleme mit Recordsets"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/442e46fc9da84a8e9cf7c884fabf1dcf\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>In letzter Zeit werde ich wieder h&auml;ufiger von Entwicklerkollegen angesprochen, die Fehler wie &#8222;Nicht gen&uuml;gend Systemressourcen&#8220; oder &#8222;Nicht gen&uuml;gend Speicherplatz zum Ausf&uuml;hren der Operation&#8220; erhalten, wenn sie mehrere Formulare mit Daten &ouml;ffnen oder Code ausf&uuml;hren, der mit Recordsets arbeitet. Wenn sie dann &uuml;ber den Taskmanager die Ressourcen des Systems betrachten, stellen sie fest, dass es hier keinerlei Engp&auml;sse gibt. Wir schauen uns in diesem Beitrag an, wie dieser Fehler entstehen kann und welche M&ouml;glichkeiten es gibt, diesen zu beheben.<\/b><\/p>\n<p>Fehlermeldungen zu erhalten, die nicht unmittelbar mit dem geschriebenen Code und eventuellen Syntax- oder Kompilierfehlern zusammenh&auml;ngen, ist selten sch&ouml;n &#8211; erst recht nicht, wenn diese Fehler auf dem einen Rechner auftreten, auf dem anderen aber nicht oder zu anderen Zeitpunkten.<\/p>\n<p>Wir schauen uns in diesem Beitrag einmal an, wie wir die beiden eingangs genannten Fehler reproduzieren k&ouml;nnen. Anschlie&szlig;end k&uuml;mmern wir uns um m&ouml;gliche L&ouml;sungen f&uuml;r diese Fehler.<\/p>\n<h2>Fehler &#8222;Nicht gen&uuml;gend Systemressourcen&#8220; reproduzieren<\/h2>\n<p>Um diesen Fehler zu reproduzieren, erzeugen wir eine ausreichend gro&szlig;e Menge von Recordset-Objekten. Um diese ohne viel Aufwand im Speicher zu halten, definieren wir ein Klassenmodul, das lediglich den Verweis auf das ge&ouml;ffnete Recordset-Objekt aufnehmen soll. Der Code dieses Klassenmoduls, das wir <b>clsRecordsetWrapper <\/b>nennen wollen, sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>m_Recordset<span style=\"color:blue;\"> As <\/span>Recordset\r\n<span style=\"color:blue;\">Public Property <span style=\"color:blue;\">Set<\/span> <\/span>Recordset(rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset)\r\n     <span style=\"color:blue;\">Set<\/span> m_Recordset = rst\r\n<span style=\"color:blue;\">End Property<\/span><\/pre>\n<p>Es enth&auml;lt also lediglich eine private Variable, die den Verweis auf ein <b>Recordset<\/b>-Objekt speichern soll. Um dieses an die Klasse zu &uuml;bermitteln, haben wir dieser au&szlig;erdem die <b>Property Set<\/b>-Prozedur <b>Recordset <\/b>zugewiesen, der wir als Parameter das zu speichernde Recordset &uuml;bergeben.<\/p>\n<p>Diese Prozedur (siehe Listing 1) deklariert eine <b>Collection<\/b>-Variable zum Speichern der Instanzen der Wrapper-Klasse, Variablen zum Speichern eines Verweises auf das <b>Database<\/b>-Objekt der aktuellen Datenbank und des zu &ouml;ffnenden Recordsets sowie f&uuml;r eine Instanz der Klasse <b>clsRecordsetwrapper<\/b>. Au&szlig;erdem instanziiert die Prozedur ein neues <b>Collection<\/b>-Objekt und referenziert es mit der Variablen <b>col<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Recordsets()\r\n     <span style=\"color:blue;\">Dim <\/span>col<span style=\"color:blue;\"> As <\/span>Collection\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Long<\/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>objRecordsetWrapper<span style=\"color:blue;\"> As <\/span>clsRecordsetwrapper\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> col = <span style=\"color:blue;\">New<\/span> Collection\r\n     For i = 1 To 10000\r\n         <span style=\"color:blue;\">Set<\/span> objRecordsetWrapper = <span style=\"color:blue;\">New<\/span> clsRecordsetwrapper\r\n         <span style=\"color:blue;\">With<\/span> objRecordsetWrapper\r\n             On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> .Recordset = db.OpenRecordset(\"tblVieleKunden\", dbOpenDynaset)\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Err.Number = 0<span style=\"color:blue;\"> Then<\/span>\r\n                 <span style=\"color:blue;\">MsgBox<\/span> \"Fehler: \" & Err.Number & <span style=\"color:blue;\">vbCrLf<\/span> & <span style=\"color:blue;\">vbCrLf<\/span> & \"Beschreibung: \" & Err.Description _\r\n                     & <span style=\"color:blue;\">vbCrLf<\/span> & <span style=\"color:blue;\">vbCrLf<\/span> & \"Anzahl Recordsets: \" & i\r\n                 <span style=\"color:blue;\">Exit Sub<\/span>\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n         End <span style=\"color:blue;\">With<\/span>\r\n         col.Add objRecordsetWrapper\r\n         <span style=\"color:blue;\">Debug.Print<\/span> i\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Prozedur zum Erstellen einiger Recordsets und zum Speichern dieser in einer Wrapper-Klasse inklusive Fehlerbehandlung<\/span><\/b><\/p>\n<p>Die folgende <b>For&#8230;Next<\/b>-Schleife wird maximal 10.000 Mal durchlaufen. Es ist allerdings davon auszugehen, dass unter der Standardkonfiguration normale Rechner nach ein paar hundert Iterationen aufgeben. Innerhalb der <b>For&#8230;Next<\/b>-Schleife erstellen wir ein neues Objekt auf Basis der Klasse <b>clsRecordsetwrapper <\/b>und weisen es der Variablen <b>objRecordsetWrapper <\/b>zu.<\/p>\n<p>Dann weisen wir bei deaktivierter Fehlerbehandlung der Eigenschaft <b>Recordsets <\/b>dieser Klasse ein mit <b>OpenRecordset <\/b>neu ge&ouml;ffnetes Recordset auf Basis einer Beispieltabelle zu. Dies l&ouml;st ab einer bestimmten Menge erstellter Recordsets den oben genannten Fehler aus. Ist das der Fall (oder tritt ein anderer Fehler auf), wollen wir diesen in einer Meldung ausgeben. Neben der Fehlernummer und der Fehlermeldung gibt die Meldung noch die Anzahl der ge&ouml;ffneten Recordsets aus. Nach der Anzeige der Fehlermeldung wird die Prozedur mit <b>Exit Sub <\/b>beendet.<\/p>\n<p>Damit die Recordsets in der Wrapper-Klasse im Speicher verweilen und so erst daf&uuml;r sorgen, dass der Fehler ausgel&ouml;st wird, f&uuml;gen wir diese mit der <b>Add<\/b>-Methode zu der <b>Collection <\/b>namens <b>col <\/b>hinzu.<\/p>\n<p>Rufen wir diese Prozedur nun auf, erscheint nach einigen bis etlichen Durchl&auml;ufen der Schleife die Fehlermeldung aus Bild 1 (hier haben wir die Prozedur von einer Schaltfl&auml;che aus aufgerufen). Mit einem Klick auf <b>OK <\/b>wird die Prozedur beendet und die durch die <b>Recordset<\/b>-Variablen gebundenen Ressourcen werden wieder freigegeben. Der Fehler ist reproduzierbar und zeigt, dass in Abh&auml;ngigkeit von der aktuellen Konfiguration des Systems und vermutlich auch abh&auml;ngig von der aktuellen Auslastung mehr oder weniger <b>Recordset<\/b>-Objekte erstellt werden k&ouml;nnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1413_001.png\" alt=\"Anzeige der Fehlermeldung nach dem &Ouml;ffnen von 305 Recordsets\" width=\"649,559\" height=\"316,0016\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Anzeige der Fehlermeldung nach dem &Ouml;ffnen von 305 Recordsets<\/span><\/b><\/p>\n<h2>Fehler &#8222;Nicht gen&uuml;gend Speicherplatz zum Ausf&uuml;hren der Operation&#8220; reproduzieren<\/h2>\n<p>Diesen Fehler konnten wir reproduzieren, indem wir einige Formularinstanzen aufgerufen haben. Da wir keine Lust hatten, viele verschiedene Formulare zu erstellen und diese zu &ouml;ffnen, haben wir zu Beispielzwecken von einer Technik Gebrauch gemacht, die sonst zur Anzeige mehrerer Instanzen von Formularen mit verschiedenen Datens&auml;tzen verwendet wird.<\/p>\n<p>Das Formular ist ein einfaches Formular, das wir &uuml;ber die Eigenschaft <b>Datensatzquelle <\/b>an die Tabelle <b>tblVieleKunden <\/b>gebunden haben (siehe Bild 2). Au&szlig;erdem haben wir die Eigenschaft <b>Enth&auml;lt Modul <\/b>im Bereich <b>Andere <\/b>des Eigenschaftenblatts auf <b>Ja <\/b>eingestellt. Das ist n&ouml;tig, damit wir mehrere Instanzen des Formulars erstellen k&ouml;nnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1413_002.png\" alt=\"Das an eine Tabelle gebundene Formular\" width=\"649,559\" height=\"302,7943\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Das an eine Tabelle gebundene Formular<\/span><\/b><\/p>\n<p>Die Prozedur finden Sie in Listing 2. Hier deklarieren wir eine Variable f&uuml;r ein <b>Collection<\/b>-Objekt und eines zum Erfassen des aktuellen Formulars. Dabei verwenden wir gleich den Typ des Klassenmoduls dieses Formulars, in diesem Fall <b>Form_frmRecordset<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>VieleFormulareMitRecordsetOeffnen()\r\n     <span style=\"color:blue;\">Dim <\/span>col<span style=\"color:blue;\"> As <\/span>Collection\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>frm<span style=\"color:blue;\"> As <\/span>Form_frmRecordset\r\n     <span style=\"color:blue;\">Set<\/span> col = <span style=\"color:blue;\">New<\/span> Collection\r\n     For i = 1 To 10000\r\n         On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> frm = <span style=\"color:blue;\">New<\/span> Form_frmRecordset\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Err.Number = 0<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"Fehler: \" & Err.Number & <span style=\"color:blue;\">vbCrLf<\/span> & <span style=\"color:blue;\">vbCrLf<\/span> & \"Beschreibung: \" & Err.Description _\r\n                 & <span style=\"color:blue;\">vbCrLf<\/span> & <span style=\"color:blue;\">vbCrLf<\/span> & \"Anzahl Formulare: \" & i\r\n             <span style=\"color:blue;\">Exit Sub<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n         col.Add frm\r\n         <span style=\"color:blue;\">Debug.Print<\/span> i\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>[<\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Prozedur zum Erstellen mehrerer Formularinstanzen mit Bindung an eine Tabelle<\/span><\/b><\/p>\n<p>Danach instanziieren wir die Collection und starten in eine <b>For&#8230;Next<\/b>-Schleife, wie wir wieder bis zu 10.000 Mal durchlaufen. Das sollte reichen, um auch die beste Konfiguration in die Knie zu zwingen. Innerhalb der Schleife deaktivieren wir direkt die eingebaute Fehlerbehandlung. In der folgenden Anweisung weisen wir der Variablen <b>frm <\/b>eine neue Instanz der Formularklasse <b>Form_frmRecordset <\/b>zu.<\/p>\n<p>Ist dabei ein Fehler aufgetreten, wird dieser innerhalb der folgenden <b>If&#8230;Then<\/b>-Bedingung mithilfe eines Meldungsfensters ausgegeben. Auch hier geben wir wieder die Fehlernummer, die Fehlerbeschreibung und die Anzahl der bisher ge&ouml;ffneten Formulare aus (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1413_003.png\" alt=\"Fehlermeldung bei zu vielen per Formular ge&ouml;ffneten Recordsets\" width=\"499,5589\" height=\"259,623\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Fehlermeldung bei zu vielen per Formular ge&ouml;ffneten Recordsets<\/span><\/b><\/p>\n<p>Sollte beim Erstellen der aktuellen Formularinstanz kein Fehler aufgetreten sein, f&uuml;gen wir die Variable <b>frm <\/b>mit dem Verweis auf diese Instanz der Collection <b>col <\/b>hinzu und laufen mit der <b>For&#8230;Next<\/b>-Schleife in den n&auml;chsten Durchgang.<\/p>\n<p>Wir k&ouml;nnten die ge&ouml;ffneten Formulare auch noch anzeigen, aber das sorgt lediglich daf&uuml;r, dass der Vorgang mehr Zeit in Anspruch nimmt.<\/p>\n<p>Den gleichen Vorgang haben wir noch mit einem weiteren Formular reproduziert, das diesmal nicht selbst an die Tabelle <b>tblVieleKunden <\/b>gebunden war, sondern ein Kombinationsfeld mit dieser Tabelle als Datensatzquelle enthielt. Hier haben wir den gleichen Fehler erhalten wie beim gebundenen Formular.<\/p>\n<h2>Behandlung des Fehlers in Formularen<\/h2>\n<p>In den beiden vorherigen Beispielen haben wir den Fehler jeweils per VBA ausgel&ouml;st, sodass wir eine Idee bekommen konnten, woran das Problem ungef&auml;hr gelegen hat. Das ist ganz anders, wenn der Benutzer nur wenige Formulare &ouml;ffnet, die aber sehr viele Recordsets nutzen &#8211; f&uuml;r die eigene Datensatzquelle, als Datensatzquelle f&uuml;r Unterformulare oder als Datensatzherkunft f&uuml;r Kombinationsfelder und Listenfelder.<\/p>\n<p>&Ouml;ffnet er eines dieser Formulare zu viel, erh&auml;lt er gegebenenfalls noch nicht einmal einen VBA-Fehler, sondern die Meldung aus Bild 4.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1413_004.png\" alt=\"Fehlermeldung beim Ausl&ouml;sen durch das &Ouml;ffnen eines Formulars ohne VBA-Beteiligung\" width=\"700\" height=\"97,4576\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Fehlermeldung beim Ausl&ouml;sen durch das &Ouml;ffnen eines Formulars ohne VBA-Beteiligung<\/span><\/b><\/p>\n<p>Mit dieser k&ouml;nnen unerfahrene Benutzer und Entwickler nur wenig anfangen, zumal dieser Fehler je nach Auslastung des Systems mal auftritt und mal nicht.<\/p>\n<p>Wenn Sie diesen Fehler reproduzieren wollen, empfehle ich den Aufruf der Prozeduren aus dem Modul <b>mdlRecordset_InSpeichern<\/b>. Hier haben wir aus der Prozedur <b>VieleFormulareMitRecordsetOeffnen<\/b>, die wir weiter oben bereits vorgestellt haben, die Deklaration der Collection-Variablen <b>col <\/b>und das Instanziieren der Collection ausgegliedert. Die Variable haben wir als &ouml;ffentliche Variable deklariert, damit diese nach dem Durchlaufen der Prozedur nicht gel&ouml;scht wird. Das Instanziieren haben wir in die Prozedur <b>SetCollection <\/b>ausgelagert, damit wir dies separat erledigen k&ouml;nnen. Zum Reproduzieren rufen Sie nacheinander die Prozeduren <b>SetCollection <\/b>und <b>VieleFormulareMitRecordsetOeffnen <\/b>auf.<\/p>\n<p>Letztere f&uuml;hrt irgendwann zum Auftreten des obligatorischen Fehlers und damit d&uuml;rfte der verf&uuml;gbare Speicher ann&auml;hernd ausgereizt sein. Wenn Sie nun manuell nochmals das Formular <b>frmRecordset <\/b>per Doppelklick auf den entsprechenden Eintrag im Navigationsbereich &ouml;ffnen, k&ouml;nnte der Fehler bereits erneut ausgel&ouml;st werden.<\/p>\n<p>Vielleicht wurde aber auch zwischenzeitlich wieder Speicher freigegeben, sodass Sie erst noch einmal die Prozedur <b>VieleFormulareMitRecordsetOeffnen <\/b>aufrufen m&uuml;ssen, bevor das erneute &Ouml;ffnen des Formulars <b>frmRecordset <\/b>den Fehler ausl&ouml;st. <\/p>\n<h2>Optimieren der Systemkonfiguration zur Vermeidung des Fehlers<\/h2>\n<p>Wir haben nun zun&auml;chst ein paar Mal die Prozedur Recordsets aufgerufen, um einen ungef&auml;hren Wert f&uuml;r die Anzahl der m&ouml;glichen Recordsets ohne Auftreten eines Fehlers zu ermitteln. Auf unserem System erhielten wir auf diese Weise Werte zwischen 280 und 300.<\/p>\n<p>Wir haben anschlie&szlig;end verschiedene M&ouml;glichkeiten ausprobiert, den Fehler hinauszuz&ouml;gern. Diese haben jedoch alle keinen nachhaltigen Erfolg geliefert, daher teilen wir die entsprechenden Links erst gar nicht.<\/p>\n<h2>Optimieren von Access zum Vermeiden des Fehlers<\/h2>\n<p>Eine gut funktionierende L&ouml;sung ist die von Philipp Stiefel. Wer alle Hintergrundinformationen lesen m&ouml;chte, findet diese auf der folgenden Webseite. Hier ist auch das VBA-Modul zu finden, das wir im Folgenden als zumindest tempor&auml;re L&ouml;sung beschreiben:<\/p>\n<pre>https:\/\/codekabinett.com\/rdumps.php?Lang=2&targetDoc=largeaddressaware-msaccess-exe<\/pre>\n<p>Wir erkl&auml;ren an dieser Stelle einfach nur die notwendigen Schritte, um die L&ouml;sung umzusetzen. Diese beinhaltet das Manipulieren der <b>Access.exe<\/b>-Datei. Das hei&szlig;t, man legt besser vorher eine Sicherungskopie dieser Datei an.<\/p>\n<p>Da wir die Access-Anwendung selbst manipulieren wollen, k&ouml;nnen wir dies logischerweise nicht im laufenden Betrieb erledigen. Also schlie&szlig;en wir alle Access-Instanzen und &ouml;ffnen eine andere Anwendung, in der wir VBA-Code ausf&uuml;hren k&ouml;nnen &#8211; also beispielsweise Word, Excel oder Outlook.<\/p>\n<p>Wichtig: Die jeweilige Anwendung m&uuml;ssen wir als Administrator aufrufen. Klicken Sie also mit der rechten Maustaste auf die jeweilige Anwendung und w&auml;hlen Sie aus dem Kontextmen&uuml; den Eintrag <b>Als Administrator ausf&uuml;hren <\/b>aus.<\/p>\n<p>Danach &ouml;ffnen wir mit der Tastenkombination <b>Alt + F11 <\/b>den VBA-Editor. Nun ben&ouml;tigen wir das VBA-Modul, das Philipp Stiefel in dem oben genannten Artikel zur Verf&uuml;gung stellt. Der notwendige Downloadlink befindet sich dort in einem grau hinterlegten Kasten.<\/p>\n<p>Nachdem wir das VBA-Modul heruntergeladen haben, entpacken wir es und ziehen die <b>.bas<\/b>-Datei aus dem Windows Explorer direkt in den Projekt-Explorer im VBA-Editor.<\/p>\n<p>Auf diese Weise wird der Inhalt der Datei als neues Modul zum VBA-Projekt hinzugef&uuml;gt.<\/p>\n<p>Das Modul enth&auml;lt neben einigen Konstanten die Hauptprozedur <b>SetLaaFlag<\/b>. Diese hat zwei Parameter:<\/p>\n<ul>\n<li><b>ExeFileName<\/b>: Erwartet den Pfad zur Datei <b>MSAccess.exe<\/b>.<\/li>\n<li><b>operationMode<\/b>: Erwartet eines der Elemente der Auflistung <b>LaaMode<\/b>.<\/li>\n<\/ul>\n<p>Mit <b>DisplayLaaStatusOnly <\/b>k&ouml;nnen wir ausgeben, ob das LAA-Flag bereits gesetzt ist. Mit <b>TurnOnLaa <\/b>setzen wir das Flag f&uuml;r die mit dem ersten Parameter angegebene Anwendung und mit <b>TurnOffLaa <\/b>leeren wir das Flag.<\/p>\n<p>Es w&uuml;rde also auch Sinn machen, das Modul in die Anwendung zu integrieren, die normalerweise einen der oben genannten Fehler ausl&ouml;st und beim Start zu pr&uuml;fen, ob das LAA-Flag der <b>MSAccess.exe <\/b>gesetzt ist. Denn auch wenn Sie die Prozedur <b>SetLaaFlag <\/b>bereits einmal genutzt haben, um das Flag f&uuml;r die aktuelle <b>MSAccess.exe <\/b>zu setzen, ist dies keine dauerhafte L&ouml;sung. Es kann sein, dass Microsoft bei einem Office-Update die <b>MSAccess.exe <\/b>ersetzt und dass das Flag dann erneut gesetzt werden muss.<\/p>\n<p>Nachdem wir also nun alle Instanzen von Access geschlossen und eine andere Office-Anwendung als Administrator ge&ouml;ffnet sowie das Modul zum VBA-Projekt des damit angezeigten Dokuments hinzugef&uuml;gt haben, k&ouml;nnen wir das LAA-Flag mit einer Anweisung wie der folgenden abfragen:<\/p>\n<pre>SetLaaFlag \"C:\\...\\MSACCESS.EXE\", DisplayLaaStatusOnly<\/pre>\n<p>Den Pfad zur <b>MSAccess.exe <\/b>finden Sie beispielsweise heraus, indem Sie mit der rechten Maustaste auf das Icon zum Starten von Access klicken und dort den Eintrag Eigenschaften ausw&auml;hlen.<\/p>\n<h2>Test nach dem Setzen des LAA-Flags<\/h2>\n<p>Nachdem Aufruf &ouml;ffnen wir unsere Beispieldatenbank wieder und schauen, wie viele Recordsets und gebundene Formulare wir nun &ouml;ffnen k&ouml;nnen, bis ein Fehler auftritt.<\/p>\n<p>Das Ergebnis ist interessant: Wir k&ouml;nnen nun immer genau 410 Recordsets &ouml;ffnen &#8211; das sind fast doppelt so viele wie zuvor. Dann erscheint eine Fehlermeldung, aber diesmal eine andere. Die neue Fehlermeldung hat die Fehlernummer <b>3014<\/b> und lautet:<\/p>\n<pre>Zus&auml;tzliche Tabellen k&ouml;nnen nicht ge&ouml;ffnet werden.<\/pre>\n<p>Wenn wir nun versuchen, die maximale Anzahl an Formularen zu &ouml;ffnen, landen wir bei 127 Formularen und erhalten die Fehlermeldung aus Bild 5 &#8211; und diese hilft uns aktuell gar nicht weiter. Was aber definitiv weiterhilft: Wir k&ouml;nnen nun fast doppelt soviele Formulare &ouml;ffnen wie zuvor.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1413_007.png\" alt=\"Eine neue Fehlermeldung nach 127 ge&ouml;ffneten Formularen\" width=\"499,5589\" height=\"250,4118\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Eine neue Fehlermeldung nach 127 ge&ouml;ffneten Formularen<\/span><\/b><\/p>\n<p>&Uuml;brigens erhalten wir nun, genau wie bei den Recordsets, immer genau die gleiche Anzahl ge&ouml;ffneter Formulare, bevor die Fehlermeldung erscheint. Offensichtlich scheint es also nun eine weniger von den eigentlichen Ressourcen abh&auml;ngige Grenze zu geben, sondern eine an einer bestimmten Stelle konkret festgelegten.<\/p>\n<p>Die Grenze ist &uuml;brigens auch nicht von der in der jeweiligen Tabelle enthaltenen Datenmenge abh&auml;ngig.<\/p>\n<h2>Weitere M&ouml;glichkeiten<\/h2>\n<p>Unabh&auml;ngig von dem nicht gesetzten LAA-Flag, der in diesem Fall konkret die Anzahl der zu &ouml;ffnenden Recordsets oder gebundenen Formulare erh&ouml;hte, k&ouml;nnen Sie nat&uuml;rlich auch selbst etwas tun, damit die genannten Fehler in Ihrer Anwendung nicht auftreten.<\/p>\n<p>Viele Leser, die mit diesem Fehler an uns herangetreten sind, haben Formulare oder Berichte mit sehr vielen verschiedenen Datenquellen verwendet oder im Code gr&ouml;&szlig;ere Mengen Recordsets ge&ouml;ffnet, die anschlie&szlig;end nicht geschlossen wurden.<\/p>\n<p>Hier w&uuml;rden wir empfehlen, die Situation bez&uuml;glich der im Fehlerfall ge&ouml;ffneten Elemente zu untersuchen und zu pr&uuml;fen, ob tats&auml;chlich so viele Elemente gleichzeitig ge&ouml;ffnet sein m&uuml;ssen, die an Datenquellen wie Tabellen oder Abfragen gebunden sind.<\/p>\n<p>Nachfolgend eine Liste mit einigen Problemquellen, die man beheben k&ouml;nnte:<\/p>\n<ul>\n<li>Anzahl gleichzeitig ge&ouml;ffneter Formulare reduzieren: Wenn die Anwendung die M&ouml;glichkeit bietet, mehrere Instanzen des gleichen Formulars f&uuml;r verschiedene Datens&auml;tze zu &ouml;ffnen, k&ouml;nnte man diese Anzahl begrenzen &#8211; manchmal verf&uuml;hrt eine solche M&ouml;glichkeit den Benutzer dazu, mehr Formulare als n&ouml;tig zu &ouml;ffnen.<\/li>\n<li>Unterformulare erst beim Anzeigen mit Daten f&uuml;llen: Wenn ein Formular mehrere Unterformulare enth&auml;lt, k&ouml;nnte man diese auf die Seiten eines Registersteuerelements aufteilen. Sobald der Benutzer das Registersteuerelement wechselt, k&ouml;nnte man das nun angezeigte Unterformular mit der Datensatzquelle verbinden und das nicht mehr sichtbare von der Datensatzquelle trennen.<\/li>\n<li>Kombinationsfelder: Wir haben verschiedene Optionen ausprobiert, die bei Kombinationsfeldern m&ouml;glich sind, die ihre Daten nicht aus Tabellen oder Abfragen beziehen, indem sie direkt an diese gebunden sind. Als Erstes haben wir beim &Ouml;ffnen des Formulars ein Recordset mit den Daten f&uuml;r das Kombinationsfeld ge&ouml;ffnet und eine Wertliste darauf gebildet, also eine Liste wie <b>1;&#8220;Kategorie 1&#8243;;2;&#8220;Kategorie 2&#8243;, 3, &#8222;Kategorie 3&#8220; <\/b>und so weiter. Damit haben wir etwa genauso viele Formulare &ouml;ffnen k&ouml;nnen wie mit der direkten Bindung an die Tabelle oder Abfrage. Als Zweites haben wir dann die Eigenschaft Datensatzherkunft statisch mit der oben genannten Wertliste gef&uuml;llt, ohne vorheriges &Ouml;ffnen eines Recordsets. Auch hier erhalten wir die gleiche Begrenzung bei den maximal zu &ouml;ffnenden Formularen. Es scheint, als ob Access auch bei Kombinationsfeldern mit Wertliste ein Recordset anlegt. Das gleiche Bild ergibt sich, wenn wir der Wertliste des Kombinationsfelds einige Eintr&auml;ge mit <b>AddItem <\/b>hinzuf&uuml;gen.<\/li>\n<\/ul>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Wenn die eingangs erw&auml;hnten Fehler ohne Setzen des LAA-Flags auftreten, kann man als Erstes versuchen, dieses Flag zusetzen. In manchen Umgebungen wird das nicht m&ouml;glich sein, weil man beispielsweise keinen Zugriff als Administrator auf die daf&uuml;r n&ouml;tige Office-Anwendung erh&auml;lt &#8211; und dass die <b>MSAccess.exe <\/b>manuell ver&auml;ndert wird, d&uuml;rfte auch nur den wenigsten Administratoren gefallen.<\/p>\n<p>Damit bleibt einem nur, tats&auml;chlich die Anzahl der gleichzeitig ge&ouml;ffneten Formulare und Berichte zu minimieren und die Anzahl der darin angezeigten Elemente, die wiederum an Datenquellen wie Tabellen oder Abfragen gebunden sind, zu reduzieren.<\/p>\n<p>Gegebenenfalls tut man damit auch dem Benutzer etwas Gutes, denn mit sehr vielen Steuerelementen versehene Formulare sind selten &uuml;bersichtlich.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Recordsetprobleme.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/2D635921-7338-4FFD-B3CA-B3775E80B44D\/aiu_1413.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In letzter Zeit werde ich wieder h&auml;ufiger von Entwicklerkollegen angesprochen, die Fehler wie &#8222;Nicht gen&uuml;gend Systemressourcen&#8220; oder &#8222;Nicht gen&uuml;gend Speicherplatz zum Ausf&uuml;hren der Operation&#8220; erhalten, wenn sie mehrere Formulare mit Daten &ouml;ffnen oder Code ausf&uuml;hren, der mit Recordsets arbeitet. Wenn sie dann &uuml;ber den Taskmanager die Ressourcen des Systems betrachten, stellen sie fest, dass es hier keinerlei Engp&auml;sse gibt. Wir schauen uns in diesem Beitrag an, wie dieser Fehler entstehen kann und welche M&ouml;glichkeiten es gibt, diesen zu beheben.<\/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":[66012023,662023,44000012],"tags":[],"class_list":["post-55001413","post","type-post","status-publish","format-standard","hentry","category-66012023","category-662023","category-News_und_Tools"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Ressourcenprobleme mit Recordsets - 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\/Ressourcenprobleme_mit_Recordsets\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ressourcenprobleme mit Recordsets\" \/>\n<meta property=\"og:description\" content=\"In letzter Zeit werde ich wieder h&auml;ufiger von Entwicklerkollegen angesprochen, die Fehler wie &quot;Nicht gen&uuml;gend Systemressourcen&quot; oder &quot;Nicht gen&uuml;gend Speicherplatz zum Ausf&uuml;hren der Operation&quot; erhalten, wenn sie mehrere Formulare mit Daten &ouml;ffnen oder Code ausf&uuml;hren, der mit Recordsets arbeitet. Wenn sie dann &uuml;ber den Taskmanager die Ressourcen des Systems betrachten, stellen sie fest, dass es hier keinerlei Engp&auml;sse gibt. Wir schauen uns in diesem Beitrag an, wie dieser Fehler entstehen kann und welche M&ouml;glichkeiten es gibt, diesen zu beheben.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-17T09:32:24+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\\\/Ressourcenprobleme_mit_Recordsets\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ressourcenprobleme_mit_Recordsets\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Ressourcenprobleme mit Recordsets\",\"datePublished\":\"2023-06-17T09:32:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ressourcenprobleme_mit_Recordsets\\\/\"},\"wordCount\":2654,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ressourcenprobleme_mit_Recordsets\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/442e46fc9da84a8e9cf7c884fabf1dcf\",\"articleSection\":[\"1\\\/2023\",\"2023\",\"News und Tools\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Ressourcenprobleme_mit_Recordsets\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ressourcenprobleme_mit_Recordsets\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ressourcenprobleme_mit_Recordsets\\\/\",\"name\":\"Ressourcenprobleme mit Recordsets - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ressourcenprobleme_mit_Recordsets\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ressourcenprobleme_mit_Recordsets\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/442e46fc9da84a8e9cf7c884fabf1dcf\",\"datePublished\":\"2023-06-17T09:32:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ressourcenprobleme_mit_Recordsets\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Ressourcenprobleme_mit_Recordsets\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ressourcenprobleme_mit_Recordsets\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/442e46fc9da84a8e9cf7c884fabf1dcf\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/442e46fc9da84a8e9cf7c884fabf1dcf\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Ressourcenprobleme_mit_Recordsets\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ressourcenprobleme mit Recordsets\"}]},{\"@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":"Ressourcenprobleme mit Recordsets - 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\/Ressourcenprobleme_mit_Recordsets\/","og_locale":"de_DE","og_type":"article","og_title":"Ressourcenprobleme mit Recordsets","og_description":"In letzter Zeit werde ich wieder h&auml;ufiger von Entwicklerkollegen angesprochen, die Fehler wie \"Nicht gen&uuml;gend Systemressourcen\" oder \"Nicht gen&uuml;gend Speicherplatz zum Ausf&uuml;hren der Operation\" erhalten, wenn sie mehrere Formulare mit Daten &ouml;ffnen oder Code ausf&uuml;hren, der mit Recordsets arbeitet. Wenn sie dann &uuml;ber den Taskmanager die Ressourcen des Systems betrachten, stellen sie fest, dass es hier keinerlei Engp&auml;sse gibt. Wir schauen uns in diesem Beitrag an, wie dieser Fehler entstehen kann und welche M&ouml;glichkeiten es gibt, diesen zu beheben.","og_url":"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/","og_site_name":"Access im Unternehmen","article_published_time":"2023-06-17T09:32:24+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\/Ressourcenprobleme_mit_Recordsets\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Ressourcenprobleme mit Recordsets","datePublished":"2023-06-17T09:32:24+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/"},"wordCount":2654,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/442e46fc9da84a8e9cf7c884fabf1dcf","articleSection":["1\/2023","2023","News und Tools"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/","url":"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/","name":"Ressourcenprobleme mit Recordsets - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/442e46fc9da84a8e9cf7c884fabf1dcf","datePublished":"2023-06-17T09:32:24+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/442e46fc9da84a8e9cf7c884fabf1dcf","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/442e46fc9da84a8e9cf7c884fabf1dcf"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Ressourcenprobleme_mit_Recordsets\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Ressourcenprobleme mit Recordsets"}]},{"@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\/55001413","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=55001413"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001413\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001413"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}