{"id":55000046,"date":"2002-02-01T00:00:00","date_gmt":"2021-03-22T17:05:14","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=46"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Access_optimieren","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/","title":{"rendered":"Access optimieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/671414fbcb8e434fa324b4550453a957\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Autor: Klaus Giesen, Wuppertal<\/p>\n<p><\/b><\/p>\n<p><b>Der Wunsch nach Optimierung von Access-Datenbanken zur Beschleunigung der Informationsbeschaffung ist verst&auml;ndlich und liegt nahe. Schlie&szlig;lich soll eine Datenbankanwendung so schnell wie m&ouml;glich laufen bzw. die Informationsbeschaffung so schnell wie m&ouml;glich stattfinden &#8211; also eine hohe Performance bieten. Die grundlegende Voraussetzung f&uuml;r eine schnellere, optimierte Datenbankanwendung liegt dabei zum gr&ouml;&szlig;ten Teil im Know-how des Entwicklers. Der folgende Beitrag besch&auml;ftigt sich mit den unterschiedlichen M&ouml;glichkeiten zur Beschleunigung einer Access-Datenbank.<\/b><\/p>\n<p>Optimierung ist die Einstellung von Gr&ouml;&szlig;en, Eigenschaften und zeitlichen Abl&auml;ufen zur Steigerung von Qualit&auml;t und Geschwindigkeit von Prozessen. Diese Definition ist nat&uuml;rlich mit den W&uuml;nschen an eine Datenbankanwendung identisch. Dabei gibt es grunds&auml;tzlich zwei Ansatzpunkte f&uuml;r m&ouml;gliche Anpassungen: die Hard- und die Software.<\/p>\n<p>Bei vielen Windows-Anwendungen sind Leistungssteigerungen sehr einfach zu erreichen, indem Sie beispielsweise in Ihren PC eine h&ouml;her getaktete CPU oder mehr Hauptspeicher einbauen.<\/p>\n<p>Bei einer Access-Datenbank ist diese Vorgehensweise zwar empfehlenswert, aber oft nicht ausreichend. Der Grund daf&uuml;r liegt nahe: Eine Datenbank-Anwendung hat prim&auml;r die Aufgabe, gro&szlig;e Datenmengen anzuzeigen und zu verarbeiten. Im Hinblick auf die Performance kommt es hier prim&auml;r auf die optimale Organisation der Daten an. Dies bedeutet, dass schon beim Erstellen des Datenmodells, also dem Grundger&uuml;st einer Datenbank, gravierende Fehler auftreten k&ouml;nnen. Daraus ergibt sich folgende Konsequenz:<\/p>\n<p>Die Geschwindigkeitsoptimierung einer existierenden Access-Datenbank l&auml;sst sich nicht auf einen Schlag erreichen; den ber&uuml;hmten gro&szlig;en Wurf gibt es in diesem Zusammenhang einfach nicht.<\/p>\n<p>Deswegen besteht auch der Optimierungsprozess aus einer Vielzahl von Einzelschritten, die systematisch mit dem n&ouml;tigen Know-how nacheinander abgearbeitet werden m&uuml;ssen.<\/p>\n<p>Das gew&uuml;nschte Ziel ist also nur durch die Addition vieler kleiner Optimierungsschritte zu erreichen.<\/p>\n<p>Jede Optimierung sollte bei Ihrem Computersystem beginnen. Zumindest sollten Sie &uuml;berpr&uuml;fen, ob Ihr System den g&auml;ngigen Anforderungen entspricht, und dort gegebenenfalls nachbessern.<\/p>\n<p>Falls Sie eine umfangreiche Access 2000-Anwendung beispielsweise auf einem 100 MHz Pentium mit 32 MByte RAM &#8211; so etwas war mal ein schneller Rechner! &#8211; laufen lassen wollen, sollten Sie erst dann ernsthaft weiterlesen, nachdem Sie Ihre Hardwareausstattung aktualisiert haben.<\/p>\n<h2>Der PC<\/h2>\n<p>Doch was hei&szlig;t das konkret Nun, der heutzutage an jeder Ecke angebotene so genannte Multimedia-PC braucht es &uuml;berhaupt nicht zu sein. Um mit Access vern&uuml;nftig arbeiten zu k&ouml;nnen, sollten Sie aber mindestens &uuml;ber folgende Ausstattung verf&uuml;gen:<\/p>\n<li>Eine 300 MHz CPU<\/li>\n<li>Unter Windows 98\/ME ben&ouml;tigen Sie 64 MByte (besser 128 MByte) RAM und unter Windows NT\/2000\/XP auf jeden Fall 128 (besser 256) MByte RAM.<\/li>\n<li>eine schnelle Festplatte (kurze Zugriffszeit und hohe Datentransferrate)<\/li>\n<p>Das ist nach aktuellen Ma&szlig;st&auml;ben eigentlich sehr wenig und deshalb ohne Weiteres erschwinglich.<\/p>\n<h2>Die Rolle der Festplatte<\/h2>\n<p>Die Festplatte spielt hier &uuml;brigens eine wesentliche Rolle, da sie letztendlich der Flaschenhals f&uuml;r alle Lese- und Schreibvorg&auml;nge ist. Daher beachten Sie folgende Tipps:<\/p>\n<li>Defragmentieren Sie regelm&auml;&szlig;ig Ihre Festplatte (beispielsweise einmal w&ouml;chentlich).<\/li>\n<li>Verzichten Sie auf Software zur Festplattenkomprimierung oder speichern Sie Ihre Datenbanken auf einem unkomprimierten Laufwerk.<\/li>\n<p><IMG height=\"296\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Datenbank exklusiv &ouml;ffnen<\/span><\/b><\/p>\n<li>Falls Sie bereits 128 MB Hauptspeicher oder mehr und noch etwas Geld &uuml;brig haben, r&uuml;sten Sie damit lieber Ihre Festplatte anstatt den Speicher auf. Ideal ist eine moderne SCSI-Festplatte mit weniger als 5ms Zugriffszeit. Wenn Sie dann immer noch Geld &uuml;brig haben, r&uuml;sten Sie Ihren Hauptspeicher auf.<\/li>\n<p>Parallel zu Optimierung der Hardware sollten Sie Ihre Access-Datenbank einer genaueren Untersuchung unterziehen. Hier versucht Access, Sie mit dem Assistenten zur Leistungsanalyse zu unterst&uuml;tzen.<\/p>\n<p>Dieser Assistent kann entweder die gesamte Datenbank oder einzelne Datenbankobjekte analysieren und Optimierungsvorschl&auml;ge machen. Falls Sie es w&uuml;nschen, kann der Leistungsanalyse-Assistent au&szlig;erdem einige &auml;nderungen automatisch vornehmen. Der Assistent ist weitgehend selbsterkl&auml;rend und soll daher nicht weiter erl&auml;utert werden.<\/p>\n<p>Dass der Assistent zur Leistungsanalyse seine klaren Grenzen hat und f&uuml;r einen engagierten Access-Anwender nur einen Einstieg bieten kann, liegt auf der Hand. Au&szlig;erdem ist es ohnehin g&uuml;nstiger, die entsprechenden &auml;nderungen von Hand durchzuf&uuml;hren, da der Assistent nicht zwangsl&auml;ufig nur sinnvolle Vorschl&auml;ge macht.<\/p>\n<h2>Alleiniger Zugriff auf Datenbanken<\/h2>\n<p>Falls nur Sie alleine auf eine Access-Datenbank zugreifen, platzieren Sie diese in jedem Fall auf Ihrer lokalen Festplatte und nicht etwa auf einem Netzwerk-Laufwerk.<\/p>\n<p>Gleichzeitig &ouml;ffnen Sie die Datenbank zur exklusiven Verwendung.<\/p>\n<p><IMG height=\"399\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic002.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Einstellung der automatischen Komprimierung beim Schlie&szlig;en der Datenbank<\/span><\/b><\/p>\n<p>Klicken Sie dazu im Dialogfenster &ouml;ffnen auf das nach unten gerichtete Dreieck neben der Schaltfl&auml;che &ouml;ffnen und markieren Sie den Eintrag Exklusiv &ouml;ffnen (siehe Bild 1).<\/p>\n<h2>Datenbank komprimieren<\/h2>\n<p>Verschiedene Aktionen wie z. B. das L&ouml;schen von Daten in Tabellen und das Zwischenspeichern von Daten in tempor&auml;ren Tabellen f&uuml;hren zum Aufbl&auml;hen der Datenbank, da gel&ouml;schte Daten nicht komplett aus der Datenbank entfernt werden. <\/p>\n<p>Durch das Komprimieren einer Access-Datenbank &uuml;ber den Men&uuml;befehl Extras ( Datenbank-Dienstprogramme ( Datenbank komprimieren und reparieren k&ouml;nnen Sie die angesammelten Fragmente wieder entfernen.<\/p>\n<h3>Praxis-Tipp<\/h3>\n<p>Sie k&ouml;nnen unter Access 2000 das Komprimieren automatisch beim Schlie&szlig;en der aktuellen Datenbank ausf&uuml;hren, indem Sie &uuml;ber Extras\/Optionen das Dialogfenster Optionen &ouml;ffnen. Aktivieren Sie dann im Register Allgemein das Kontrollk&auml;stchen Beim Schlie&szlig;en Komprimieren (siehe Bild 2). <\/p>\n<p>Au&szlig;erdem ordnet Access beim Komprimieren die Datens&auml;tze in einer Tabelle optimal an und organisiert die Indextabellen neu.<\/p>\n<p>Deshalb k&ouml;nnen auch Abfragen durch das Komprimieren beschleunigt werden. Zus&auml;tzlich sollten Sie jedoch nach einer Komprimierung jede Abfrage erneut ausf&uuml;hren, damit diese auf Grundlage der aktualisierten Tabellenorganisation neu kompiliert wird.<\/p>\n<h2>Datenbank in MDE-Datei konvertieren<\/h2>\n<p>Bei der Konvertierung einer Datenbank in eine MDE-Datei wird der Zugriff auf die Entwurfsansicht von Formularen, Berichten und Seiten sowie auf den VBA-Code verhindert. <\/p>\n<p>Dar&uuml;ber hinaus wird auch die Datenbankdatei verkleinert. Als Nebeneffekt dieser optimierten Speichernutzung ergibt sich eine Leistungssteigerung.<\/p>\n<p>Die Konvertierung erfolgt wieder &uuml;ber das Men&uuml; Extras\/Datenbank-Dienstprogramme. W&auml;hlen Sie dort den Befehl MDE-Datei erstellen aus.<\/p>\n<h2>Makros konvertieren<\/h2>\n<p>Konvertieren Sie eventuell vorhandene Makros zu VBA-Code, da VBA-Code wesentlich schneller als Makro-Code ausgef&uuml;hrt wird. Dazu ben&ouml;tigen Sie noch nicht einmal VBA-Kenntnisse, denn Access stellt auch hierf&uuml;r einen Assistenten zur Verf&uuml;gung.<\/p>\n<li>Markieren Sie das betreffende Makro im Datenbankfenster.<\/li>\n<li>W&auml;hlen Sie aus dem Men&uuml; Extras den Befehl Makro ( Makros zu Visual Basic konvertieren aus.<\/li>\n<li>Lassen Sie im nachfolgenden Dialogfenster Konvertiere Makro die Voreinstellungen bestehen und klicken Sie auf die Schaltfl&auml;che Konvertieren (siehe Bild 3).<\/li>\n<p>Access konvertiert das Makro und erstellt ein neues Modul mit dem Namen Konvertiertes Makro- [Makroname].<\/p>\n<p><IMG height=\"99\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic003.png\" width=\"354\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3:  Das Dialogfenster Konvertiere Makro<\/span><\/b><\/p>\n<p>Wie bereits angedeutet, spielt die Datenstruktur einer Datenbank eine wesentliche Rolle f&uuml;r die Performance.<\/p>\n<p>Die Erl&auml;uterung der Normalisierung einer Datenbank w&uuml;rde den Rahmen des vorliegenden Beitrags sprengen. Detaillierte Informationen zu diesem Thema finden Sie allerdings im Praxishandbuch, und zwar in Kapitel 3 des Beitrags Anwendungsentwicklung mit Access (Gruppe 2.2).<\/p>\n<p>Nach dem Entwurf des Datenmodells betrachten wir im Folgenden die Optimierungsm&ouml;glichkeiten beim Tabellenentwurf.<\/p>\n<h2>Grunds&auml;tzliches<\/h2>\n<p>Jede Tabelle sollte zur eindeutigen Identifikation eines Datensatzes ein Prim&auml;rschl&uuml;sselfeld besitzen. Die Anwendung kann so schnell auf den betreffenden Datensatz zugreifen. Au&szlig;erdem ist ein Prim&auml;rschl&uuml;sselfeld zwingend notwendig, wenn diese Tabelle Bestandteil einer Beziehung sein soll.<\/p>\n<h2>Auswahl der Datentypen<\/h2>\n<p>W&auml;hlen Sie die Datentypen so aus, dass diese von der Gr&ouml;&szlig;e her soeben f&uuml;r ihren Anwendungszweck ausreichen und keinen unn&ouml;tigen Speicherplatz verschwenden. Dazu zwei Beispiele:<\/p>\n<p>Zum Speichern einer Ganzzahl stehen Ihnen die Feldgr&ouml;&szlig;en Byte, Integer und Long Integer zur Verf&uuml;gung.<\/p>\n<p>F&uuml;r diese drei Datentypen gelten die Eigenschaften aus Tab. 1.<\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Datentyp<\/b><\/p>\n<\/td>\n<td>\n<p><b>Wertebereich<\/b><\/p>\n<\/td>\n<td>\n<p><b>Speicherplatz<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Byte<\/p>\n<\/td>\n<td>\n<p>0 bis 256<\/p>\n<\/td>\n<td>\n<p>1 Byte<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Integer<\/p>\n<\/td>\n<td>\n<p>-32.768 bis 32.767<\/p>\n<\/td>\n<td>\n<p>2 Bytes<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Long Integer<\/p>\n<\/td>\n<td>\n<p>-2.147.483.648 bis 2.147.483.647<\/p>\n<\/td>\n<td>\n<p>4 Bytes<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><b>Tab. 1: Gegen&uuml;berstellung numerischer Datentypen mit ihren Eigenschaften<\/b><\/p>\n<p>Betrachten Sie zun&auml;chst den Wertebereich. In vielen F&auml;llen kann schon im Voraus abgesehen werden, wie gro&szlig; der Zahlenwert maximal werden kann, der in einem Feld gespeichert werden soll. Bei der Abteilungsgr&ouml;&szlig;e kann zum Beispiel ohne Weiteres abgesch&auml;tzt werden, ob die Anzahl der Mitarbeiter in Zukunft auf &uuml;ber 256 steigen wird.<\/p>\n<p>Falls Sie zu einem sp&auml;teren Zeitpunkt feststellen, dass die Feldgr&ouml;&szlig;e f&uuml;r die aktuellen Anforderungen zu klein ist, k&ouml;nnen Sie die Feldgr&ouml;&szlig;e ohne Probleme bei Bedarf nachtr&auml;glich vergr&ouml;&szlig;ern.<\/p>\n<p>Bei Feldern mit dem Datentyp Text wird in der Regel eine Feldgr&ouml;&szlig;e von 50 Zeichen voreingestellt. Sie sollten bei jedem Feld einzeln pr&uuml;fen, ob diese Feldgr&ouml;&szlig;e wirklich erforderlich ist.<\/p>\n<p>Zum Speichern einer deutschen Postleitzahl macht dies beispielsweise &uuml;berhaupt keinen Sinn, weil dazu f&uuml;nf Zeichen ausreichen.<\/p>\n<p>Je kleiner ein Feld, desto weniger Platz wird belegt. Dies nutzt der Performance.<\/p>\n<h2>Indizes<\/h2>\n<p>Alle Felder einer Tabelle, &uuml;ber die verkn&uuml;pft, sortiert oder gefiltert wird, sollten zur Geschwindigkeitsoptimierung indiziert sein. Wenn Sie beispielsweise nach einem Feld suchen, das nicht indiziert ist, muss Access einen &#8222;table scan&#8220; durchf&uuml;hren. Dies bedeutet, dass die komplette Tabelle geladen und jeder Wert verglichen werden muss.<\/p>\n<p>Beim Einsatz eines Index legt Access intern eine sortierte Indextabelle an, die schnell geladen und durchsucht werden kann. Jeder Eintrag dieser Index-Tabelle enth&auml;lt einen Zeiger auf den Datensatz der Haupttabelle.<\/p>\n<p><IMG height=\"240\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic004.png\" width=\"475\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4:  Mehrfelder-Index<\/span><\/b><\/p>\n<p>Es gilt allerdings auch, dass das Anf&uuml;gen und L&ouml;schen von Datens&auml;tzen bei indizierten Feldern l&auml;nger dauert, weil auch die jeweiligen Indextabellen aktualisiert und neu sortiert werden m&uuml;ssen.<\/p>\n<p>Deshalb sollten Sie auch nur die wirklich ben&ouml;tigten Felder der Tabelle indizieren.<\/p>\n<h3>Mehrfelder-Indizes<\/h3>\n<p>Eine Tabelle kann auch mehrere Indizes gleichzeitig haben. Ein solcher Mehrfelder-Index bietet sich immer dann an, wenn in einer Abfrage oft nach derselben Feldkombination gesucht oder sortiert wird.<\/p>\n<p>Bei der Tabelle tblPersonal der Beispieldatenbank trifft dies auf die Felder txtNachname und txtVorname zu (siehe Bild 4).<\/p>\n<p>Achten Sie aber darauf, zu einem Mehrfelder-Index nur die unbedingt notwendigen Felder hinzuzuf&uuml;gen.<\/p>\n<h3>Zusammenfassung<\/h3>\n<p>Das Abw&auml;gen der Vor- und Nachteile bei der Verwendung von Indizes stellt ein echtes Optimierungsproblem dar. Orientieren Sie sich an den folgenden Richtlinien:<\/p>\n<li>Verringern Sie die Anzahl von Indizes f&uuml;r diejenigen Tabellen, in denen &uuml;berwiegend Daten aktualisiert, gel&ouml;scht und eingef&uuml;gt werden, auf ein Minimum. Dies gilt auch f&uuml;r Tabellen, deren Datens&auml;tze mit L&ouml;sch- oder Anf&uuml;geabfragen aktualisiert werden.<\/li>\n<li>Tabellen, die viele Datens&auml;tze enthalten und die oft durchsucht bzw. sortiert werden, sollten entsprechend indizierte Felder enthalten.<\/li>\n<li>Indizieren Sie auf jeden Fall die Fremdschl&uuml;ssel von Detailtabellen. Dies erh&ouml;ht die Abfrage von verkn&uuml;pften Tabellen dramatisch.<\/li>\n<h2>Eingebundene Tabellen<\/h2>\n<p>Bei eingebundenen Access-Tabellen gibt es einige zus&auml;tzliche Besonderheiten zu beachten.<\/p>\n<p>Die Verwaltung verkn&uuml;pfter Tabellen in Access erfordert im Allgemeinen etwas mehr Aufwand. Der Grund daf&uuml;r ist einfach in der Tatsache begr&uuml;ndet, dass es sich in diesem Fall um eine externe Datei handelt und deshalb h&auml;ufigere Dateizugriffe notwendig sind.<\/p>\n<p>Die Beachtung folgender Richtlinien kann den Bearbeitungsaufwand bei eingebundenen Tabellen minimieren:<\/p>\n<li>Vermeiden Sie in der Formular- oder Datenblattansicht &uuml;berfl&uuml;ssige Datensatzwechsel &#8211; vor allem das Springen zwischen dem ersten und letzten Datensatz.<\/li>\n<li>Verwenden Sie als Datenherkunft f&uuml;r Formulare entsprechend aufgebaute Abfragen anstelle von Tabellen, um die Anzahl der Datens&auml;tze einzuschr&auml;nken.<\/li>\n<li>Verwenden Sie in Abfragen, die auf verkn&uuml;pften Tabellen basieren, m&ouml;glichst keine Funktionen als Kriterien. Sehr belastend auf die Performance wirken sich dabei die so genannten Dom&auml;nenfunktionen wie z. B.  DomSumme  aus.<\/li>\n<li>W&auml;gen Sie ab, ob die Verwendung eines reinen Eingabeformulars in der Anwendung Sinn machen k&ouml;nnte. Wenn Sie die Formulareigenschaft Daten eingeben auf Ja einstellen, werden keine Datens&auml;tze angezeigt und somit m&uuml;ssen keine Daten in das Formular eingelesen werden.<\/li>\n<p><IMG height=\"271\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic005.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5:  Ausgew&auml;hlte Felder im Abfrageentwurf<\/span><\/b><\/p>\n<p>Abfragen bieten Ihnen verschiedene M&ouml;glichkeiten zur Optimierung an. Da &uuml;berdies Abfragen normalerweise in einer Datenbankanwendung in gr&ouml;&szlig;erer Anzahl verwendet werden, ist dieser Abschnitt auch einer der Schwerpunkte dieses Beitrags.<\/p>\n<h2>Ausgabemenge von Abfragenbeschr&auml;nken<\/h2>\n<p>Verzichten Sie darauf, beim Entwurf einer Abfrage das * (Symbol f&uuml;r alle Felder) in den Abfrageentwurf zu ziehen.<\/p>\n<p><IMG height=\"199\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic006.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6:  SQL-Anweisung als Datenherkunft f&uuml;r ein Kombinationsfeld<\/span><\/b><\/p>\n<p>F&uuml;gen Sie statt dessen dem Abfrageentwurf nur die wirklich ben&ouml;tigten Felder hinzu (siehe Bild 5) und deaktivieren Sie die Option Anzeigen, wenn diese Felder nicht angezeigt werden sollen. Oft m&uuml;ssen beispielsweise Felder, nach denen gesucht wird, nicht im Ergebnis angezeigt werden.<\/p>\n<h2>Indizierung vonAbfragefeldern<\/h2>\n<p>Alle Felder, die beim Abfrageentwurf mit Kriterien verwendet werden, sollten indiziert sein &#8211; genauso wie die Felder auf den beiden Seiten einer Verkn&uuml;pfung (falls Sie diese nicht &uuml;ber Prim&auml;r- und Fremdschl&uuml;ssel verkn&uuml;pfen, die sowieso indiziert sein sollten).<\/p>\n<h2>SQL-Anweisungen als Abfragen speichern<\/h2>\n<p>F&uuml;r Formulare, Berichte oder auch Steuerelemente wie Kombinations- oder Listenfelder k&ouml;nnen als Datenherkunft &#8211; neben Tabellen &#8211; auch SQL-Anweisungen oder Abfragen angegeben werden (siehe Bild 6).<\/p>\n<p>Beim Speichern einer Abfrage erstellt Access einen &#8222;Execution plan&#8220; und speichert ebenfalls ab. Beim erneuten Aufruf der Abfrage kann Access auf die Erstellung eines erneuten Plans verzichten, was Zeit spart. Speichern Sie eventuell vorhandene SQL-Anweisungen daher als Abfragen. W&auml;hlen Sie anschlie&szlig;end anstelle der SQL-Anweisung den Namen der Abfrage als Datenherkunft aus.<\/p>\n<p><IMG height=\"258\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic007.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7:  Entwurfsansicht einer Unterabfrage<\/span><\/b><\/p>\n<p><IMG height=\"229\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic008.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8:  Ausdr&uuml;cke in einer Abfrage<\/span><\/b><\/p>\n<h2>Datens&auml;tze in Abfragen z&auml;hlen<\/h2>\n<p>Mit Hilfe der Count-Funktion k&ouml;nnen Datens&auml;tze in einer Abfrage gez&auml;hlt werden.<\/p>\n<p>Verwenden Sie in einem solchen Fall die Syntax Count(*) anstelle von Count([Feldname]).<\/p>\n<p>Die folgende SQL-Anweisung z&auml;hlt alle Datens&auml;tze in der Tabelle tblPersonal der Beispieldatenbank:<\/p>\n<pre>SELECT Count(*) AS [Anzahl von PersonalID] FROM tblPersonal;<\/pre>\n<p>Das gleiche Ergebnis liefert auch diese Anweisung:<\/p>\n<pre>SELECT Count(tblPersonal.PersonalID) AS [Anzahl von PersonalID] FROM tblPersonal;<\/pre>\n<p>Die Ausf&uuml;hrung dieser Anweisung ist jedoch deutlich langsamer, weil hierbei das betreffende Feld auch auf Nullwerte &uuml;berpr&uuml;ft wird.<\/p>\n<h2>Berechnete Felder in Unterabfragen<\/h2>\n<p>Unterabfragen sind Abfragen, die innerhalb einer Abfrage zum Beispiel als Kriterien verwendet werden k&ouml;nnen. Dabei wird in einer Auswahl- oder Aktionsabfrage eine weitere SQL-SELECT-Anweisung ausgef&uuml;hrt.<\/p>\n<p>Mit Hilfe einer solchen Unterabfrage kann beispielsweise die durchschnittliche Anzahl der Mitarbeiter pro Abteilung berechnet werden. Mit diesem Durchschnittswert k&ouml;nnen dann alle Abteilungen ermittelt werden, die beispielsweise unterhalb des Durchschnitts liegen (siehe Bild 7).<\/p>\n<p>Vermeiden Sie dabei die Verwendung berechneter Felder oder komplexer Ausdr&uuml;cke innerhalb der Unterabfrage, weil dadurch die Ausf&uuml;hrungsgeschwindigkeit der &uuml;bergeordneten Abfrage deutlich verringert werden kann. <\/p>\n<p>Dieser Hinweis gilt vor allem f&uuml;r die Verwendung der IIF-Funktion in Unterabfragen.<\/p>\n<h2>Ausdr&uuml;cke in Abfragen<\/h2>\n<p>Oftmals sind f&uuml;r die Anzeige in einem Formular oder den Ausdruck in einem Bericht berechnete Ausdr&uuml;cke notwendig, die auf Tabellendaten basieren. Bei der kleinen Personalverwaltung in der Beispieldatenbank sind dies das Alter und die Dauer der Betriebszugeh&ouml;rigkeit (siehe Bild 8).<\/p>\n<p>Eine L&ouml;sung dieser Aufgabe w&auml;re, die Berechnung in der dem Formular zugrunde liegenden Abfrage mit Hilfe eines Ausdrucks vorzunehmen.<\/p>\n<h3>Hinweis<\/h3>\n<p>Die Berechnung erfolgt mit Hilfe der benutzerdefinierten Funktionen Alter() und Dauer(), die Sie im Modul modAccOpt der Beispieldatenbank finden. <\/p>\n<p>Anschlie&szlig;end werden dann die betreffenden Felder der Abfrage im Formular dargestellt.<\/p>\n<p>Diese L&ouml;sung ist allerdings unter dem Gesichtspunkt optimaler Performance nicht optimal.<\/p>\n<p><IMG height=\"287\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic009.png\" width=\"479\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9:  Ausdruck als Steuerelementinhalt<\/span><\/b><\/p>\n<p><IMG height=\"313\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic010.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10:  Gruppierte Abfrage<\/span><\/b><\/p>\n<p>Besser &#8211; weil schneller &#8211; ist es, derartige Berechnungen in ungebundenen Steuerelementen des Formulars vorzunehmen.<\/p>\n<p>Dort wird als Wert f&uuml;r die Eigenschaft Steuerelementinhalt die entsprechende Funktion aufgerufen, der als Parameter der Inhalt des zu berechnenden Feldes &uuml;bergeben wird (siehe Bild 9).<\/p>\n<h2>Gruppierungen<\/h2>\n<p>Bei der Verwendung von Gruppierungen in Abfragen ist es sinnvoll, nur die unbedingt notwendigen Felder zu gruppieren. Dadurch wird die Ausf&uuml;hrungsgeschwindigkeit der Abfrage optimiert.<\/p>\n<p>Das Beispiel in Bild 10 zeigt als Ergebnis die unterschiedlichen Positionen in den einzelnen Abteilungen an.<\/p>\n<h2>Verwendung von Tabellenerstellungsabfragen<\/h2>\n<p>Wenn Sie h&auml;ufiger Daten aus komplexen Abfragen ben&ouml;tigen, die sich nur selten &auml;ndern, erstellen Sie einfach mit Hilfe einer Tabellenerstellungsabfrage eine entsprechende Tabelle, in der diese Daten zusammengefasst werden.<\/p>\n<p>Der Zugriff auf diese Tabelle &#8211; zum Beispiel als Datenherkunft f&uuml;r ein Formular oder einen Bericht &#8211; erfolgt dann schneller als die erneute Ausf&uuml;hrung der Abfrage.<\/p>\n<h2>Weitere Optimierungsm&ouml;glichkeiten bei Abfragen<\/h2>\n<p>Es gibt noch einige weitere M&ouml;glichkeiten, die Performance durch die Anpassung von Abfragen zu verbessern.<\/p>\n<h3>Verkn&uuml;pfte Felder in Abfragen<\/h3>\n<p>Verkn&uuml;pfte Felder in Abfragen sollten den gleichen oder einen kompatiblen Datentyp verwenden. Eine h&auml;ufig verwendete und sinnvolle Kombination sind beispielsweise die Feldgr&ouml;&szlig;en AutoWert und Long Integer.<\/p>\n<h3>Einschr&auml;nkende Kriterien<\/h3>\n<p>Einschr&auml;nkende Kriterien, wie beispielsweise der  folgende Ausdruck, sollten nicht in berechneten und nicht indizierten Feldern verwendet werden:<\/p>\n<pre>&lt;=2000<\/pre>\n<h3>Inklusionsverkn&uuml;pfungen<\/h3>\n<p>Vermeiden Sie nach M&ouml;glichkeit Inklusionsverkn&uuml;pfungen oder Outer Joins, da Access damit nicht so effektiv arbeiten kann.<\/p>\n<p><IMG height=\"215\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic011.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11:  Kreuztabellenabfrage in der Entwurfsansicht<\/span><\/b><\/p>\n<p><IMG height=\"279\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic012.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12:  Sortierte Abfrage als Datenherkunft f&uuml;r ein Formular<\/span><\/b><\/p>\n<h3>Optimale Verwendung von Operatoren<\/h3>\n<p>F&uuml;r den Zugriff auf indizierte Felder in einer Tabelle ist in einer Abfrage die Verwendung folgender Operatoren optimal:<\/p>\n<li>Zwischen &#8230; Und (Between &#8230; And)<\/li>\n<li>In<\/li>\n<li>= (Gleichheitszeichen)<\/li>\n<p>Vermeiden Sie die gleichen Operatoren nach M&ouml;glichkeit bei nicht indizierten Tabellenfeldern.<\/p>\n<h3>Verwendung von Aggregatfunktionen<\/h3>\n<p>Verwenden Sie m&ouml;glichst keine Aggregatfunktionen wie DLookup oder DSum, um auf Daten in Tabellen zuzugreifen, die nicht Bestandteil einer Abfrage sind.<\/p>\n<p>Falls der Zugriff auf Daten solcher Tabellen notwendig sein sollte, f&uuml;gen Sie diese Tabellen nach M&ouml;glichkeit zur Abfrage hinzu oder erstellen Sie eine Unterabfrage.<\/p>\n<h3>Kreuztabellenabfragen<\/h3>\n<p>Verwenden Sie bei Kreuztabellenabfragen nach M&ouml;glichkeit fixierte Spalten&uuml;berschriften, um deren Ausf&uuml;hrung zu beschleunigen (siehe Bild 11).<\/p>\n<p>Formulare und Steuerelemente bieten ebenfalls eine Menge M&ouml;glichkeiten zur Leistungssteigerung.<\/p>\n<h2>Datenherkunft<\/h2>\n<p>Schon im letzten Abschnitt wurde erw&auml;hnt, aus Performancegr&uuml;nden f&uuml;r die Eigenschaft Datenherkunft eines Formulars keine SQL-Anweisung, sondern eine gespeicherte Abfrage zu verwenden.<\/p>\n<p>Das gilt auch f&uuml;r die M&ouml;glichkeit, mit Hilfe eines Eingabeformulars das Anzeigen vorhandener Datens&auml;tze zu verhindern.<\/p>\n<h3>Sortierungen<\/h3>\n<p>Die Datens&auml;tze der einem Formular zugrunde liegenden Abfrage sollten nur dann sortiert werden, wenn dies unbedingt erforderlich ist. Das gilt vor allem f&uuml;r Abfragen, in denen mehrere Tabellen zusammengefasst sind (siehe Bild 12).<\/p>\n<p><IMG height=\"248\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic013.png\" width=\"440\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 13:  Das Eigenschaftsfenster eines Unterformulars<\/span><\/b><\/p>\n<p><IMG height=\"352\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic014.png\" width=\"440\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 14:  Eigenschaftsfenster eines Kombinationsfelds<\/span><\/b><\/p>\n<h2>Steuerelemente<\/h2>\n<p>Grunds&auml;tzlich gilt: Reduzieren Sie die Anzahl der Steuerelemente auf einem Formular auf ein absolutes Minimum, weil das Laden von Steuerelementen relativ zeitraubend ist. Vermeiden Sie weiterhin sich &uuml;berlappende Steuerelemente.<\/p>\n<p>Die Formularsteuerelemente mit dem h&ouml;chsten Optimierungspotenzial sind Unterformulare, Listen- bzw. Kombinationsfelder und Grafiken.<\/p>\n<h3>Unterformulare<\/h3>\n<p>Wenn die Datenherkunft eines Unterformulars eine Abfrage ist, f&uuml;gen Sie nur die tats&auml;chlich f&uuml;r das Unterformular ben&ouml;tigten Felder dem Abfrageentwurf hinzu.<\/p>\n<p>Die Verkn&uuml;pfungsfelder zwischen Formular und Unterformular sollten in jedem Fall indizierte Felder sein. Das sind die Felder, die in der Entwurfsansicht des Unterformularsteuerelements f&uuml;r die Eigenschaften Verkn&uuml;pfen von und Verkn&uuml;pfen nach angegeben werden (siehe Bild 13).<\/p>\n<p>&uuml;berlegen Sie sich, ob Sie anstelle eines Unterformulars ein Listen- oder Kombinationsfeld verwenden k&ouml;nnen. Die Ladezeit eines solchen Steuerelements ist deutlich schneller als die eines Unterformulars.<\/p>\n<h3>Listen- und Kombinationsfelder<\/h3>\n<p>Auch Listen- und Kombinationsfelder sollten als Datenherkunft keine SQL-Anweisung, sondern eine gespeicherte Abfrage haben. Ebenso sollten nur die unbedingt ben&ouml;tigten Daten in solchen Steuerelementen  angezeigt werden.<\/p>\n<p>Indizieren Sie &#8211; falls diese Felder nicht identisch sind &#8211; sowohl das erste, als auch das gebundene Feld eines Listen- oder Kombinationsfelds.<\/p>\n<p>Falls Sie die automatische Eingabeerg&auml;nzung eines Kombinationsfeldes nicht ben&ouml;tigen, sollten Sie auch die Eigenschaft Automatisch erg&auml;nzen auf Nein einstellen (siehe Bild 14).<\/p>\n<p>Falls die Eigenschaft Automatisch erg&auml;nzen doch auf Ja eingestellt ist, sollte das betreffende Feld nach M&ouml;glichkeit vom Datentyp Text sein. Access muss n&auml;mlich zum Vergleich numerische Felder in Textfelder konvertieren. Bei der Verwendung des Datentyps Text entf&auml;llt diese Konvertierung logischerweise.<\/p>\n<p>Wenn das gebundene Feld eines Kombinationsfelds nicht das angezeigte Feld ist, sollten Sie Folgendes vermeiden:<\/p>\n<li>Ausdr&uuml;cke f&uuml;r das gebundene oder das angezeigte Feld<\/li>\n<li>Einschr&auml;nkungen in der WHERE-Klausel der Datensatzherkunft<\/li>\n<li>Eine Datensatzherkunft auf Grundlage mehrerer Tabellen<\/li>\n<p>F&uuml;r eingebundene Tabellen als Datenherkunft gilt noch:<\/p>\n<p>Falls sich diese Daten nicht &auml;ndern &#8211; beispielsweise bei den Anreden in einer Adressverwaltung &#8211; importieren Sie diese Daten in eine FrontEnd-Tabelle. Der Geschwindigkeitsvorteil vergr&ouml;&szlig;ert sich umso mehr, wenn die Anwendung in einer Netzwerkumgebung l&auml;uft.<\/p>\n<h3>Grafiken<\/h3>\n<p>Grunds&auml;tzlich gilt zun&auml;chst einmal: Verwenden Sie Grafiken so sparsam wie nur eben m&ouml;glich.<\/p>\n<p>Falls es wirklich notwendig ist, dann  w&auml;hlen Sie f&uuml;r Grafiken nach M&ouml;glichkeit das Steuerelement Bild anstelle eines gebundenen oder ungebundenen Objektfelds (siehe Bild 15).<\/p>\n<p>Bild-Steuerelemente ben&ouml;tigen nicht nur weniger Speicherplatz als OLE-Objekte, sondern werden auch wesentlich schneller angezeigt.<\/p>\n<p><IMG height=\"188\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic015.png\" width=\"85\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 15:  Auswahl des Bildsteuerelements in der Toolbox<\/span><\/b><\/p>\n<p>Dies gilt vor allem dann, wenn Sie ein Formular mit einem Logo versehen wollen (siehe Bild 16).<\/p>\n<p><IMG height=\"327\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic016.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 16:  Logo in der Entwurfsansicht eines Formulars<\/span><\/b><\/p>\n<p>F&uuml;r die Verwendung der Grafiken gelten weiterhin noch folgende Optimierungstipps:<\/p>\n<li>Verwenden Sie schwarzwei&szlig;e anstelle farbiger Grafiken.<\/li>\n<li>Verringern Sie bei farbigen Grafiken nach M&ouml;glichkeit die Farbtiefe.<\/li>\n<h2>Formularcode<\/h2>\n<p>Der VBA-Code in Formularen kann &#8211; je nach Funktionsumfang &#8211; ohne gro&szlig;en Funktionalit&auml;tsverlust optimiert werden.<\/p>\n<h3>Das Formularmodul<\/h3>\n<p>Wenn Ihr Formular keine Ereignisprozeduren oder sonstigen VBA-Code enth&auml;lt, stellen Sie die Eigenschaft Enth&auml;lt Modul des Formulars auf Nein ein (siehe Bild 17).<\/p>\n<p><IMG height=\"317\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic017.png\" width=\"440\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 17:  Einstellung der Eigenschaft &#8220;Enth&auml;lt Modul&#8220;<\/span><\/b><\/p>\n<p>Dann wird das Formular als so genanntes einfaches Objekt behandelt. Einfache Objekte sind kleiner und werden normalerweise schneller geladen und angezeigt als Objekte, die ein Klassenmodul enthalten.<\/p>\n<p><IMG height=\"359\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic018.png\" width=\"440\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 18:  Einstellung der Eigenschaft Hyperlink-Unteradresse auf ein Formular<\/span><\/b><\/p>\n<pre>Public Function OpenMyForm(MyFormName As String) _    As String\r\nOn Error GoTo Err_OpenMyForm\r\n    DoCmd.OpenForm MyFormName\r\nExit_OpenMyForm:\r\n    Exit Function\r\nErr_OpenMyForm:\r\n    MsgBox \"Encountered error:  \" & Str$(Err) _\r\n        & vbCrLf & Error$, , \"OpenMyForm Error\"\r\n    Resume Exit_OpenMyForm\r\nEnd Function<\/pre>\n<h3>Alternative Funktionalit&auml;t<\/h3>\n<p>Auch ohne Formularmodul brauchen Sie nicht auf Funktionalit&auml;t und Komfort zu verzichten. Dazu zwei Beispiele zum &ouml;ffnen eines anderen Formulars.<\/p>\n<p>Eine M&ouml;glichkeit ist, eine Befehlsschaltfl&auml;che mit einem Hyperlink auszustatten, der das gew&uuml;nschte Formular &ouml;ffnet.<\/p>\n<li>Legen Sie eine Befehlsschaltfl&auml;che im Formularfu&szlig; an.<\/li>\n<li>Stellen Sie die Eigenschaft Hyperlink-Unteradresse auf das gew&uuml;nschte Formular ein (siehe Bild 18).<\/li>\n<h3>Hinweis<\/h3>\n<p>Alternativ dazu k&ouml;nnen Sie beim Ereignis Beim Klicken auch ein entsprechendes Makro aufrufen. <\/p>\n<p>Die zweite M&ouml;glichkeit ist, Funktionen aus einem Standardmodul mit Hilfe eines Ausdrucks aufzurufen.<\/p>\n<p>Eine Funktion zum &ouml;ffnen eines Formulars k&ouml;nnte wie folgt ausschauen:<\/p>\n<p>Der Aufruf erfolgt in dem Beim Klicken-Ereignis einer Befehlsschaltfl&auml;che mit folgendem Ausdruck:<\/p>\n<pre>=OpenMyForm _    (\"frmPersonal\")<\/pre>\n<h2>VerschiedeneOptimierungsm&ouml;glichkeiten beiFormularen<\/h2>\n<p>Abschlie&szlig;end folgen noch einige weitere Optimierungshinweise zu Formularen.<\/p>\n<h3>Nicht ben&ouml;tigte Formulare schlie&szlig;en<\/h3>\n<p>Da jedes ge&ouml;ffnete Formular Speicherplatz und Systemressourcen verbraucht, sollten Sie Formulare, die Sie nicht ben&ouml;tigen, schlie&szlig;en.<\/p>\n<h3>Formulare unsichtbar &ouml;ffnen<\/h3>\n<p>Je nach Aufbau Ihrer Anwendung ist es sinnvoll, gleich nach dem Start h&auml;ufig gebrauchte Formulare unsichtbar zu &ouml;ffnen.<\/p>\n<p>Dies kann beispielsweise durch Aufruf von Ereignisprozeduren im Beim Laden- oder Beim &ouml;ffnen-Ereignis eines Start- oder &uuml;bersichtformulars geschehen.<\/p>\n<p><IMG height=\"354\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic019.png\" width=\"449\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 19:  Das Dialogfenster Optionen<\/span><\/b><\/p>\n<p>Der VBA-Code f&uuml;r eine solche Ereignisprozedur lautet wie folgt:<\/p>\n<p>DoCmd.OpenForm &#8222;[Formularname]&#8220;, , , , , acHidden<\/p>\n<p>Mit einer Befehlsschaltfl&auml;che, f&uuml;r deren Ereigniseigenschaft Beim Klicken Sie die folgende Prozedur hinterlegen, machen Sie das Formular dann sichtbar:<\/p>\n<pre>Private Sub BtnSichtbar_Click()\r\n    Dim F As Form\r\n    Set F = Forms!frmAbteilung\r\n    F.Visible = True\r\nEnd Sub<\/pre>\n<h3>Gr&ouml;&szlig;ere Formulare aufteilen<\/h3>\n<p>Teilen Sie gr&ouml;&szlig;ere Formulare entweder durch einen Seitenumbruch auf oder setzen Sie zu diesem Zweck das Register-Steuerelement ein. Der Grund daf&uuml;r liegt auf der Hand: Die Anzahl der zu ladenden Steuerelemente verringert sich dadurch.<\/p>\n<h3>Requery-Methode statt Requery-Aktion verwenden<\/h3>\n<p>Verwenden Sie f&uuml;r das erneute Abfragen der Datensatzherkunft die Requery-Methode<\/p>\n<pre>[Steuerelementname].Requery<\/pre>\n<p>anstatt der Requery-Aktion<\/p>\n<p>DoCmd.Requery &#8222;[ Steuerelementname]&#8220;.<\/p>\n<p>In Bezug auf Berichte gelten f&uuml;r Steuerelemente, Unterberichte und Grafiken die gleichen Optimierungsm&ouml;glichkeiten wie f&uuml;r Formulare.<\/p>\n<p>Gleiches gilt auch f&uuml;r die einem Bericht zugrunde liegende Abfrage, mit einer wichtigen Ausnahme:<\/p>\n<p>Abfragen, auf denen Berichte basieren, sollten nicht durch eine ORDER BY-Klausel sortiert werden. Berichte in Access verf&uuml;gen &uuml;ber eingebaute Sortierungs- und Gruppierungsfunktionen, die eine vorhergehende Sortierung in der Abfrage ignorieren.<\/p>\n<p>Bei Berichten k&ouml;nnen Sie mit der Eigenschaft BeiOhneDaten oder dem Ereignis OhneDaten ermitteln, ob f&uuml;r den Bericht &uuml;berhaupt Daten zur Verf&uuml;gung stehen, und den Druck abbrechen.<\/p>\n<p>Es wird Sie mit Sicherheit nicht &uuml;berraschen, dass man auch bei der VBA-Programmierung in punkto Geschwindigkeit eine Menge falsch bzw. richtig machen kann.<\/p>\n<h2>ExpliziteVariablendeklaration<\/h2>\n<p>Obwohl in VBA nicht zwingend erforderlich, sollten Variablen vor ihrer Verwendung explizit deklariert werden.<\/p>\n<p>Damit Sie dies nicht vergessen, w&auml;hlen Sie im Visual Basic-Editor aus dem Men&uuml; Extras den Befehl Optionen aus. Aktivieren Sie dann auf der Registerkarte Editor das Kontrollk&auml;stchen Variablendeklaration erforderlich (siehe Bild 19).<\/p>\n<p>Danach wird in jedem neuen Modul am Anfang nach der Zeile Option Compare Database die folgende Zeile hinzugef&uuml;gt:<\/p>\n<pre>Option Explicit<\/pre>\n<h2>Datentypen undVariablendeklarationen<\/h2>\n<p>VBA stellt verschiedene Datentypen zur Verf&uuml;gung, die sich &#8211; neben ihren grunds&auml;tzlichen Eigenschaften &#8211; auch in Bezug auf Speicherplatzbedarf und Verarbeitungsgeschwindigkeit unterscheiden. Auch hier gilt wieder:<\/p>\n<p>Verwenden Sie m&ouml;glichst kleine Datentypen, falls deren Wertebereich ausreichend ist.<\/p>\n<p>Bei der Variablendeklaration erh&auml;lt jede Variable ohne das optionale Typkennzeichen den Standardtyp Variant.<\/p>\n<pre>Dim A<\/pre>\n<p>deklariert also eine Variant-Variable mit Namen A. Dabei belegen aber Variablen vom Typ Variant erstens viel Speicherplatz und sind zweitens bei Rechenoperationen langsam.<\/p>\n<p>Deswegen ist eine Variablendeklaration nur mit folgender Syntax sinnvoll:<\/p>\n<pre>Dim Variablenname As Typ<\/pre>\n<p>Das obige Beispiel m&uuml;sste also beispielsweise <\/p>\n<pre>Dim A As Integer<\/pre>\n<p>hei&szlig;en.<\/p>\n<h2>Objektvariablen verwenden<\/h2>\n<p>Objektvariablen sind Verweise auf Access-Objekte wie Formulare, Berichte, Tabellen usw.<\/p>\n<p>Beim h&auml;ufigen Zugriff auf bestimmte Objekte bringt die Verwendung von Objektvariablen einen Geschwindigkeitsvorteil, weil das Objekt nach dem ersten Zugriff bereits in der Variablen gespeichert ist.<\/p>\n<p>Ein Beispiel f&uuml;r den Einsatz einer Objektvariablen vom Typ Form wurde bereits im letzten Abschnitt dieses Beitrags gezeigt. Hier soll es kurz erl&auml;utert werden.<\/p>\n<p>Die Deklaration der Objektvariablen erfolgt wie jede andere Variablendeklaration auch:<\/p>\n<pre>Dim F As Form<\/pre>\n<p>Anschlie&szlig;end wird mit Hilfe der Set-Anweisung eine Referenz auf ein ge&ouml;ffnetes Formular zugewiesen:<\/p>\n<pre>Set F = forms!frmAbteilung<\/pre>\n<p>Anschlie&szlig;end kann auf die Eigenschaften des Objekts zugegriffen werden:<\/p>\n<pre>F.Visible = True<\/pre>\n<h2>Verwendung von IIf<\/h2>\n<p>Vermeiden Sie den Gebrauch der  Iif-Funktion  (Immediate If), weil dabei immer beide Ausdr&uuml;cke ausgewertet werden.<\/p>\n<pre>Function  IIf_Groesser (Test_1 As Integer)\r\n    Iif_Groesser = IIf(Test_1 &gt; 1000, _        True, False)\r\nEnd Function<\/pre>\n<p>Eine normale <a href=\"https:\/\/access-basics.de\/index.php\/access_vba_ifthen.html\" class=\"ablink\" id=\"508\">IF&#8230;Then&#8230;Else<\/a>-Konstruktion dagegen ist deutlich schneller, weil hierbei in Abh&auml;ngigkeit von der Auswertung der If-Bedingung immer nur ein Anweisungsblock ausgef&uuml;hrt wird.<\/p>\n<pre>Function If_Groesser (Test_1 As Integer)\r\n    If Test_1 &gt; 1000 Then\r\n        If_Groesser = True\r\n    Else\r\n        If_Groesser = False\r\n    End If\r\nEnd Function<\/pre>\n<p>Am schnellsten geht es nat&uuml;rlich mit der folgenden Variante:<\/p>\n<pre>Function If_Groesser (Test_1 As Integer)\r\n    If_Groesser = Test_1 &gt; 1000\r\nEnd Function<\/pre>\n<h2>Code kompiliert speichern<\/h2>\n<p>VBA ist eine so genannte Interpreter-Sprache. Das bedeutet, dass der VBA-Code vor seiner Ausf&uuml;hrung &uuml;bersetzt oder kompiliert werden muss.<\/p>\n<p>Diese Kompilierung wird von Access standardm&auml;&szlig;ig beim &ouml;ffnen der Datenbank vorgenommen, es sei denn, der Code wurde zuvor in kompiliertem Zustand gespeichert. Dies geht wie folgt:<\/p>\n<li>&ouml;ffnen Sie ein beliebiges Modul in der Entwurfsansicht.<\/li>\n<li>F&uuml;hren Sie den Men&uuml;befehl Debuggen\/Kompilieren von Access optimieren (Access 2000) bzw. Testen\/Alle Module kompilieren und speichern (Access 97) aus.<\/li>\n<p>Anschlie&szlig;end kann der VBA-Code auch nach einem erneuten &ouml;ffnen der Datenbank ohne erneute Kompilierung ausgef&uuml;hrt werden.<\/p>\n<p>Beachten Sie bei der Kompilierung folgende Besonderheiten:<\/p>\n<li>Falls die Datenbankdatei umbenannt wurde, muss die Kompilierung wiederholt werden. Achten Sie also auch beim Komprimieren darauf, dass die Datenbank ihren urspr&uuml;nglichen Namen beh&auml;lt.<\/li>\n<li>Auch in einer Mehrbenutzerumgebung darf die Datenbank nur von einem einzigen Benutzer ge&ouml;ffnet sein. Ansonsten kann die Datenbank nicht kompiliert gespeichert werden.<\/li>\n<li>Jede &auml;nderung an einem Datenbankobjekt, die auch den VBA-Code betrifft, bewirkt eine Aufhebung der Kompilierung. Dazu k&ouml;nnen also auch Formulare bzw. Steuerelemente z&auml;hlen.<\/li>\n<h2>Ausdr&uuml;ckliche Verweise aufOLE-Objektserver<\/h2>\n<p>Verweisen Sie in Ihrem Code explizit auf die Bibliotheken von OLE-Objektservern wie der DAO- oder der ADO-Bibliothek.<\/p>\n<p>Verwenden Sie also die Schreibweisen<\/p>\n<pre>Dim MyDB As DAO.Database<\/pre>\n<p>und<\/p>\n<p>Dim MyCnn As ADO.Connection.<\/p>\n<p>Der Geschwindigkeitsvorteil ist darin begr&uuml;ndet, dass Access nicht alle Objektbibliotheken nach den entsprechenden Bezeichnern durchsuchen muss, sondern direkt auf den richtigen Objektdatentyp zugreifen kann. Ein weiterer positiver Nebeneffekt ist, dass Ihr Code eindeutiger und somit lesbarer wird.<\/p>\n<h2>DAO-Programmierung<\/h2>\n<p>Die &#8211; im Moment noch &#8211; bei Access &uuml;berwiegend verwendete Programmierung mit den Data Access Objects (DAO) bietet ebenfalls verschiedene M&ouml;glichkeiten zur Geschwindigkeitsoptimierung.<\/p>\n<h3>Bookmarks bei der Datensatznavigation<\/h3>\n<p>Verwenden Sie nach M&ouml;glichkeit bei der Datensatznavigation die Bookmark-Eigenschaft (Lesezeichen) anstelle der FindNext-Methode. Die  Jet-Engine von Access kann schneller auf Lesezeichen zugreifen als sequentiell lesen, wie es beim Gebrauch von FindNext notwendig ist.<\/p>\n<h3>Mit Seek anstelle Find suchen<\/h3>\n<p>Verwenden Sie zur Festlegung der Position f&uuml;r den n&auml;chsten Lese- oder Schreibvorgang die Seek-Anweisung anstelle der Find-Methode.<\/p>\n<p>Die Seek-Anweisung kann Indizes effizienter verwenden und stellt die schnellste Datenzugriffsmethode dar.<\/p>\n<h2>Tipps zu VBA<\/h2>\n<p>Zum Abschluss dieses Abschnitts finden Sie noch einige weitere Optimierungstipps f&uuml;r die Verwendung von VBA.<\/p>\n<h3>Module organisieren<\/h3>\n<p>VBA arbeitet wie folgt: Beim Aufruf einer Prozedur oder Funktion wird das gesamte Modul, in dem sich der Code befindet, in den Speicher geladen.<\/p>\n<p><IMG height=\"318\" src=\"..\/fileadmin\/_temp_\/{4578E157-0C09-41D6-B818-BC6278AC4B16}\/pic020.png\" width=\"462\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 20:  Der Assistent zur Datenbankaufteilung<\/span><\/b><\/p>\n<p>Deswegen sollten Sie Prozeduren, die zusammen verwendet werden, auch in einem gemeinsamen Modul unterbringen.<\/p>\n<p>Anderenfalls m&uuml;ssen st&auml;ndig neue Module in den Speicher geladen werden, worunter nat&uuml;rlich die Performance leidet.<\/p>\n<h3>Code aufr&auml;umen<\/h3>\n<p>Es ist ganz nat&uuml;rlich, dass w&auml;hrend der Entwicklung einer Access-Anwendung nicht mehr verwendeter Code und ungenutzte Variablen in den Modulen zur&uuml;ckbleiben.<\/p>\n<p>Machen Sie sich die M&uuml;he, nach diesen &#8222;Programmierleichen&#8220; zu suchen und jede nicht verwendete Codezeile in ihren Modulen zu l&ouml;schen.<\/p>\n<h3>Konstanten anstelle von Variablen<\/h3>\n<p>Verwenden Sie &#8211; falls irgendwie m&ouml;glich &#8211; Konstanten anstelle von Variablen. Dies ist vor allem dann angebracht, wenn Sie Daten verwenden, die sich nicht &auml;ndern, so wie die Zahl Pi.<\/p>\n<p>Der Geschwindigkeitsvorteil dieser Vorgehensweise liegt darin, dass VBA den Wert einer Konstanten kompilieren und somit schneller als eine Variable ausf&uuml;hren kann.<\/p>\n<h3>Verwendung von Me<\/h3>\n<p>Gebrauchen Sie das Schl&uuml;sselwort Me anstelle der Bezeichnung forms![Formularname], wenn Sie innerhalb eines Formularmoduls auf das Formular verweisen.<\/p>\n<h3>Ausschalten der Bildschirmaktualisierung<\/h3>\n<p>Das Ausschalten der Bildschirmaktualisierung bei der Programmausf&uuml;hrung kann &#8211; gerade bei komplexeren Anwendungen  erhebliche Geschwindigkeitsvorteile mit sich bringen.<\/p>\n<p>Dies geschieht mit Hilfe der Echo-Methode des Application-Objekts.<\/p>\n<pre>Sub BildschirmanzeigeAus()\r\n    Application.Echo False\r\n    DoCmd.OpenForm \"frmAbteilung\", _        acNormal\r\n    DoCmd.Minimize\r\n    Application.Echo True\r\nEnd Sub<\/pre>\n<h3>Praxis-Tipp<\/h3>\n<p>Vergessen Sie nicht, die Bildschirmaktualisierung wieder einzuschalten. <\/p>\n<p>Ein ganz wichtiger Aspekt beim Einsatz von Access im Netzwerk ist die Minimierung des Netzwerkverkehrs.<\/p>\n<h2>Access aufteilen<\/h2>\n<p>Teilen Sie Ihre Anwendung nach M&ouml;glichkeit in Front- und BackEnd auf.<\/p>\n<p>Die Tabellen mit den Daten legen Sie dann im BackEnd auf dem Netzwerkserver ab. Alle anderen Datenbankobjekte (Formulare, Berichte, Abfragen und Module) verbleiben in der FrontEnd-Datenbank, die auf jeder Arbeitsstation vorhanden sein sollte.<\/p>\n<p>Bei einer solchen Aufteilung ist die Leistung schon deshalb grunds&auml;tzlich besser, weil nur noch Daten &uuml;ber das Netzwerk gesendet werden m&uuml;ssen.<\/p>\n<p>Falls Sie mit einer solchen Aufteilung in Front- und BackEnd nicht vertraut sein sollten, k&ouml;nnen Sie mit dem Men&uuml;befehl Extras ( Datenbank-Dienstprogramme ( Assistent zur Datenbankaufteilung einen Assistenten aufrufen, der Sie durch die Aufteilung f&uuml;hrt (siehe Bild 20).<\/p>\n<h2>Statische Daten lokal halten<\/h2>\n<p>Halten Sie Tabellen mit statischen Daten nicht auf dem Netzwerkserver, sondern auf der Arbeitsstation zur Verf&uuml;gung. So reduzieren Sie automatisch den Netzwerkverkehr.<\/p>\n<p>Statische Daten sind Daten, die sich gar nicht oder nur selten &auml;ndern.<\/p>\n<p>Dazu k&ouml;nnen beispielsweise z&auml;hlen:<\/p>\n<li>Eintr&auml;ge f&uuml;r benutzerdefinierte Men&uuml;s<\/li>\n<li>Sprach- oder Systemeinstellungen<\/li>\n<li>Alle Post- oder Bankleitzahlen Deutschlands<\/li>\n<h2>Sperren optimieren<\/h2>\n<p>In einer Mehrbenutzerumgebung bietet Access verschiedene Sperrmethoden an, die sich auf die Geschwindigkeit der Anwendung und auf die Verf&uuml;gbarkeit der Daten auswirken.<\/p>\n<p>Welche Methode die sinnvollste ist, h&auml;ngt von den individuellen Gegebenheiten einer jeden Anwendung bzw. Arbeitsumgebung ab und kann deshalb nicht pauschal beantwortet werden.<\/p>\n<p>Orientieren Sie sich bei der Auswahl der f&uuml;r Ihre Verh&auml;ltnisse optimalen Sperrmethode an folgenden Richtlinien:<\/p>\n<h3>H&auml;ufige Daten&auml;nderung &#8211; viele Mitarbeiter<\/h3>\n<p>Verwenden Sie in einer solchen Situation die Sperrmethode Bearbeiteter Datensatz.<\/p>\n<p>Das ist zwar die langsamste Methode, verhindert aber unter diesen Voraussetzungen vergebliche Zugriffe auf den betreffenden Datensatz.<\/p>\n<h3>Seltene Daten&auml;nderung &#8211; wenige Mitarbeiter<\/h3>\n<p>Hier bietet sich die Sperrmethode Keine Sperrungen an, die deutlich schneller ist.<\/p>\n<p>Die dritte Sperrmethode &#8211; Alle Datens&auml;tze &#8211; ist f&uuml;r eine Mehrbenutzerumgebung in der Regel kaum geeignet.<\/p>\n<p>Die Einstellung der Sperrmethoden erfolgt &uuml;ber Extras ( Optionen auf der Registerkarte Weitere.<\/p>\n<p>Die Arbeit mit Access-Datenbanken macht &#8211; wie jede andere Arbeit am PC &#8211; am meisten Spa&szlig;, wenn die gew&uuml;nschten Prozesse schnell genug erledigt werden.<\/p>\n<p>Eine allgemeine Erh&ouml;hung der Geschwindigkeit und damit auch einen Performance-Gewinn bei der Arbeit mit der Datenbankanwendung erreichen Sie durch die Verwendung eines zeitgem&auml;&szlig;en PC &#8211; und hier vor allem durch den Einsatz von ausreichend Arbeitsspeicher und einer SCSI-Festplatte.<\/p>\n<p>Dar&uuml;ber hinaus bietet Access eine F&uuml;lle von M&ouml;glichkeiten, durch das Datenbankdesign und durch Optimierung der einzelnen Objekte einen Performance-Gewinn zu erreichen.<\/p>\n<p>&uuml;berpr&uuml;fen Sie einfach einmal die Auswirkung der einen oder anderen Ver&auml;nderung an einer bestehenden Datenbank und vergessen Sie die beschriebenen Methoden nicht, wenn Sie mal wieder ein neues Projekt beginnen<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Wunsch nach Optimierung von Access-Datenbanken zur Beschleunigung der Informationsbeschaffung ist verst&auml;ndlich und liegt nahe. Schlie&szlig;lich soll einen Datenbankanwendung so schnell wie m&ouml;glich laufen bzw. die Informationsbeschaffung so schnell wie m&ouml;glich stattfinden &#8211; also eine hohe Performance bieten. Die grundlegende Voraussetzung f&uuml;r eine schnellere, optimierte Datenbankanwendung liegt dabei zum gr&ouml;&szlig;ten Teil im Know-how des Entwicklers. Dieser Beitrag besch&auml;ftigt sich mit den unterschiedlichen M&ouml;glichkeiten zur Beschleunigung einer Access-Datenbank.<\/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":[66012002,662002,44000029,44000024,44000028,44000023,44000021,44000025],"tags":[],"class_list":["post-55000046","post","type-post","status-publish","format-standard","hentry","category-66012002","category-662002","category-Abfragetechnik_und_SQL","category-Berichte_und_Reporting","category-Ergonomie_und_Benutzeroberflaeche","category-Mit_Formularen_arbeiten","category-Tabellen_und_Datenmodellierung","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>Access optimieren - 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\/Access_optimieren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Access optimieren\" \/>\n<meta property=\"og:description\" content=\"Der Wunsch nach Optimierung von Access-Datenbanken zur Beschleunigung der Informationsbeschaffung ist verst&auml;ndlich und liegt nahe. Schlie&szlig;lich soll einen Datenbankanwendung so schnell wie m&ouml;glich laufen bzw. die Informationsbeschaffung so schnell wie m&ouml;glich stattfinden - also eine hohe Performance bieten. Die grundlegende Voraussetzung f&uuml;r eine schnellere, optimierte Datenbankanwendung liegt dabei zum gr&ouml;&szlig;ten Teil im Know-how des Entwicklers. Dieser Beitrag besch&auml;ftigt sich mit den unterschiedlichen M&ouml;glichkeiten zur Beschleunigung einer Access-Datenbank.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Access_optimieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-22T17:05:14+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg01.met.vgwort.de\/na\/671414fbcb8e434fa324b4550453a957\" \/>\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=\"29\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Access optimieren\",\"datePublished\":\"2021-03-22T17:05:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/\"},\"wordCount\":5655,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/671414fbcb8e434fa324b4550453a957\",\"articleSection\":[\"1\\\/2002\",\"2002\",\"Abfragetechnik und SQL\",\"Berichte und Reporting\",\"Ergonomie und Benutzeroberfl\u00e4che\",\"Mit Formularen arbeiten\",\"Tabellen und Datenmodellierung\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/\",\"name\":\"Access optimieren - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/671414fbcb8e434fa324b4550453a957\",\"datePublished\":\"2021-03-22T17:05:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/671414fbcb8e434fa324b4550453a957\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/671414fbcb8e434fa324b4550453a957\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_optimieren\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Access optimieren\"}]},{\"@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":"Access optimieren - 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\/Access_optimieren\/","og_locale":"de_DE","og_type":"article","og_title":"Access optimieren","og_description":"Der Wunsch nach Optimierung von Access-Datenbanken zur Beschleunigung der Informationsbeschaffung ist verst&auml;ndlich und liegt nahe. Schlie&szlig;lich soll einen Datenbankanwendung so schnell wie m&ouml;glich laufen bzw. die Informationsbeschaffung so schnell wie m&ouml;glich stattfinden - also eine hohe Performance bieten. Die grundlegende Voraussetzung f&uuml;r eine schnellere, optimierte Datenbankanwendung liegt dabei zum gr&ouml;&szlig;ten Teil im Know-how des Entwicklers. Dieser Beitrag besch&auml;ftigt sich mit den unterschiedlichen M&ouml;glichkeiten zur Beschleunigung einer Access-Datenbank.","og_url":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-03-22T17:05:14+00:00","og_image":[{"url":"http:\/\/vg01.met.vgwort.de\/na\/671414fbcb8e434fa324b4550453a957","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"29\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Access optimieren","datePublished":"2021-03-22T17:05:14+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/"},"wordCount":5655,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/671414fbcb8e434fa324b4550453a957","articleSection":["1\/2002","2002","Abfragetechnik und SQL","Berichte und Reporting","Ergonomie und Benutzeroberfl\u00e4che","Mit Formularen arbeiten","Tabellen und Datenmodellierung","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Access_optimieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/","url":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/","name":"Access optimieren - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/671414fbcb8e434fa324b4550453a957","datePublished":"2021-03-22T17:05:14+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Access_optimieren\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/671414fbcb8e434fa324b4550453a957","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/671414fbcb8e434fa324b4550453a957"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Access_optimieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Access optimieren"}]},{"@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\/55000046","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=55000046"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000046\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000046"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000046"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}