{"id":55000461,"date":"2007-06-01T00:00:00","date_gmt":"2021-02-11T21:15:04","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=461"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Temporaere_Datenbanken","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/","title":{"rendered":"Tempor&auml;re Datenbanken"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/76594e80a0f8448890ac593ac3a5cb2d\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Sicherlich kennen Sie auch die Situation, dass Sie h&auml;ufig verwendete statische Daten wie zum Beispiel Eintr&auml;ge f&uuml;r Kombinationslistenfelder oder Listenfelder aus Tabellen erhalten, die im Backend gespeichert sind. Sollte sich das Backend dann auch noch auf einem Server befinden, kann sich das &ouml;ffnen etwas verz&ouml;gern. Lernen Sie in diesem Artikel die Vorz&uuml;ge der Verwendung von tempor&auml;ren Datenbanken kennen.<\/b><\/p>\n<\/p><\/div>\n<div class=\"story\">\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Wozu tempor&auml;re Datenbanken<\/p>\n<p>Bei der Entwicklung von Datenbanksystemen kommt es immer wieder vor, dass man statische Elemente wie Parameter, Meldungstexte oder Listeneintr&auml;ge ben&ouml;tigt oder zur Laufzeit tempor&auml;re Objekte f&uuml;r die Berechnung von Zwischenergebnissen erstellt, die anschlie&szlig;end in Berichten weiterverwendet werden sollen.<\/p>\n<p>Eine langsame Netzwerkverbindung erweist sich dabei ebenso als Nachteil wie das Aufbl&auml;hen des Frontends durch das Erstellen tempor&auml;rer Objekte, was sich nur durch periodische Komprimierungen regulieren l&auml;sst.<\/p>\n<p>Mit einer tempor&auml;ren Datenbank auf dem lokalen Rechner, die beim Start der Anwendung angelegt und nach der Sitzung wieder gel&ouml;scht wird, verringern Sie diese Probleme.<\/p>\n<p><b>Grunds&auml;tzliche Funktionsweise<\/b><\/p>\n<p>Das Prinzip veranschaulicht Abb. 1. Die Applikation legt beim Start zun&auml;chst die tempor&auml;re Datenbank in einem daf&uuml;r vorgesehenen Verzeichnis an und erstellt alle tempor&auml;ren Tabellen mit den passenden Feldern und Indizes und verbindet diese mit der Benutzerschnittstelle (1).<\/p>\n<div class=\"abbildungrahmen\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_03\/TemporaereDatenbanken-web-images\/Konzept%20der%20temporaeren_opt.jpeg\" alt=\"Konzept der tempor&auml;ren Datenbanken.tif\" \/>\n        <\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 1: Konzept der tempor&auml;ren Datenbanken<\/span><\/b><\/p>\n<\/p><\/div>\n<p>Anschlie&szlig;end werden die Objekte der tempor&auml;ren Datenbank dynamisch in das Frontend eingebunden und k&ouml;nnen gemeinsam mit den Daten des Backends verwendet werden (2).<\/p>\n<p><b>Technischer Hintergrund<\/b><\/p>\n<p>Die Informationen &uuml;ber die zu erstellenden Objekte sollen ihrerseits in mehreren relational verkn&uuml;pften Tabellen gespeichert werden. Die darin enthaltenen Daten werden sp&auml;ter von entsprechenden Routinen ausgelesen und in Form der tempor&auml;ren Datenbank umgesetzt.<\/p>\n<p>Die Hierarchie aus Bild 2 veranschaulicht die in den Tabellen zu speichernden Informationen. Dabei bildet die Datenbank das Grundger&uuml;st und enth&auml;lt die einzelnen Tabellen mit ihren Feldern.<\/p>\n<div class=\"abbildungrahmen\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_03\/TemporaereDatenbanken-web-images\/Objekte%20der%20temporaeren_opt.jpeg\" alt=\"Objekte der tempor&auml;ren Datenbank.tif\" \/>\n        <\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 2: Objekte der tempor&auml;ren Datenbank<\/span><\/b><\/p>\n<\/p><\/div>\n<p>Jede Tabelle kann aus Optimierungsgr&uuml;nden auch Indizes besitzen. Daraus leiten sich die nachfolgend beschriebenen Tabellenentw&uuml;rfe ab.<\/p>\n<p><b>tbl_sys_TempDatabases<\/b><\/p>\n<p>Die Tabelle <b>tbl_sys_TempDatabases <\/b>speichert die Einstellungen f&uuml;r die tempor&auml;re Datenbank (s. Tab. 1).<\/p>\n<div class=\"story\">\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"tabellenkopf\">Feldname<\/p>\n<\/td>\n<td>\n<p class=\"tabellenkopf\">Beschreibung<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><span style=\"color:darkgrey\">Tab. 1: Struktur der Tabelle tbl_sys_TempDatabases<\/span><\/b><\/p>\n<\/p><\/div>\n<p><b>tbl_sys_TempTableDefs<\/b><\/p>\n<p>Die Tabelle <b>tbl_sys_TempTableDefs<\/b> speichert Informationen &uuml;ber die zu erstellenden tempor&auml;ren Tabellen (s. Tab. 2).<\/p>\n<div class=\"story\">\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"tabellenkopf\">Feldname<\/p>\n<\/td>\n<td>\n<p class=\"tabellenkopf\">Beschreibung<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><span style=\"color:darkgrey\">Tab. 2: Struktur von tbl_sys_TempTableDefs<\/span><\/b><\/p>\n<\/p><\/div>\n<p>Diese Tabelle ber&uuml;cksichtigt, dass eine tempor&auml;re Tabelle nicht immer mit dem Beenden der Anwendung gel&ouml;scht werden muss. Sie k&ouml;nnen also f&uuml;r bestimmte Tabellen festlegen, dass diese nur erzeugt werden, wenn sie nicht schon vorhanden sind. Au&szlig;erdem k&ouml;nnen Sie mit der Eigenschaft <b>OutOfUse <\/b>angeben, dass eine Tabelle derzeit nicht angelegt werden soll. Falls Sie diese sp&auml;ter noch einmal ben&ouml;tigen, stellen Sie die Eigenschaft einfach wieder auf <b>True<\/b> ein.<\/p>\n<p><b>tbl_sys_TempFieldDefs<\/b><\/p>\n<p>Die Tabelle <b>tbl_sys_TempFieldDefs <\/b>bechreibt die in den tempor&auml;ren Tabellen enthaltenen Felder und deren Eigenschaften (s. Tab. 3). Die Angabe des Datentyps erfolgt &uuml;ber numerische Werte, die den VB-Konstanten entsprechen (s. Tab. 4).<\/p>\n<div class=\"story\">\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"tabellenkopf\">Feldname<\/p>\n<\/td>\n<td>\n<p class=\"tabellenkopf\">Beschreibung<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><span style=\"color:darkgrey\">Tab. 3: Struktur von tbl_sys_TempFieldDefs<\/span><\/b><\/p>\n<\/p><\/div>\n<div class=\"story\">\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"tabellenkopf\">VB-Konstante<\/p>\n<\/td>\n<td>\n<p class=\"tabellenkopf\">Wert<\/p>\n<\/td>\n<td>\n<p class=\"tabellenkopf\">Speichergr&ouml;&szlig;e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><span style=\"color:darkgrey\">Tab. 4: Datentypen in VB(A)<\/span><\/b><\/p>\n<\/p><\/div>\n<p><!--30percent--><\/p>\n<p><b>tbl_sys_TempIndexDefs<\/b><\/p>\n<p>F&uuml;r die Optimierung bei Abfragen und\/oder Suchen in Recordsets sind Indizes unabdingbar. Die in Tab. 5 beschriebene Tabelle enth&auml;lt die Felder zum Speichern der Informationen &uuml;ber das Aussehen der Indizes.<\/p>\n<div class=\"story\">\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"tabellenkopf\">Feldname<\/p>\n<\/td>\n<td>\n<p class=\"tabellenkopf\">Beschreibung<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><span style=\"color:darkgrey\">Tab. 5: Struktur von tbl_sys_TempIndexDefs<\/span><\/b><\/p>\n<\/p><\/div>\n<p><b>tbl_sys_TempIndexFieldDefs<\/b><\/p>\n<p>Ein Index kann aus einem oder mehreren Feldern bestehen. Die in Tab. 6 beschriebene Tabelle speichert die passenden Informationen.<\/p>\n<div class=\"story\">\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"tabellenkopf\">Feldname<\/p>\n<\/td>\n<td>\n<p class=\"tabellenkopf\">Beschreibung<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><span style=\"color:darkgrey\">Tab. 6: Struktur von tbl_sys_TempIndexFieldDefs<\/span><\/b><\/p>\n<\/p><\/div>\n<p>Abb. 3 veranschaulicht die Beziehungen zwischen den oben beschriebenen Tabellen. Die Tabelle <b>tbl_sys_TempDatabases <\/b>enth&auml;lt eine oder mehrere Datenbankdefinitionen. Die darin enthaltenen Tabellen liefert die Tabelle <b>tbl_sys_TempTableDefs <\/b>und ordnet die Tabellen &uuml;ber das Feld <b>DatabaseID <\/b>dem passenden Datensatz der Tabelle <b>tbl_sys_TempTableDefs <\/b>zu. Die beiden Tabellen <b>tbl_sys_TempFieldDefs <\/b>und <b>tbl_sys_TempIndexDefs <\/b>sind beide per 1:n-Beziehung mit der Tabelle <b>tbl_sys_TempTableDefs <\/b>verkn&uuml;pft und liefern die passenden Felder und Indizes. Schlie&szlig;lich sorgt die Verkn&uuml;pfungstabelle <b>tbl_sys_TempIndexFieldDefs <\/b>f&uuml;r die Zuordnung der Felder zu den einzelnen Indizes.<\/p>\n<div class=\"image\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_03\/TemporaereDatenbanken-web-images\/Tabellenbeziehungen_opt.jpeg\" alt=\"Tabellenbeziehungen.tif\" \/>\n        <\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\"> Abb. 3: Beziehungen zwischen den Relationen<\/span><\/b><\/p>\n<\/p><\/div>\n<p><b>Programmierung<\/b><\/p>\n<p>Die Routine zum Erstellen der tempor&auml;ren Datenbank k&ouml;nnen Sie in einer Klasse kapseln. Sie erstellt die tempor&auml;re Datenbank in den folgenden Schritten:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Erstellen des Datenbankobjektes<\/li>\n<li class=\"aufz-hlung\">Erstellen der Tabellen mit Feldern und Indizes<\/li>\n<li class=\"aufz-hlung\">Einbinden der Tabellen in das Frontend<\/li>\n<\/ul>\n<p>Im n&auml;chsten Schritt erstellen Sie die Klasse, die f&uuml;r die Erstellung der Datenbank und deren Objekte zust&auml;ndig ist. Sie enth&auml;lt die Konstanten und Variablen aus Listing 1.<\/p>\n<p class=\"tabellenkopf\">Listing 1: Konstanten und Klassenvariablen<\/p>\n<pre>Private Const tblDataBases As String = &quot;tbl_sys_TempDatabases&quot;\r\nPrivate Const tblTableDefs As String = &quot;tbl_sys_TempTableDefs&quot;\r\nPrivate Const tblFieldDefs As String = &quot;tbl_sys_TempFieldDefs&quot;\r\nPrivate Const tblIndexDefs As String = &quot;tbl_sys_TempIndexDefs&quot;\r\nPrivate Const tblIndexFieldDefs As String = &quot;tbl_sys_TempIndexFieldDefs&quot;\r\nPrivate Const DATABASE As String = &quot;;Database=&quot;\r\nPrivate Const Description As String = &quot;Description&quot;\r\nPrivate Const SQL_TableDefs As String = &quot;SELECT * FROM tbl_sys_TempTableDefs WHERE OutOfUse = 0 AND DatabaseId = &quot;\r\nPrivate Const SQL_FieldDefs As String = &quot;SELECT * FROM tbl_sys_TempFieldDefs&quot;\r\nPrivate Const SQL_IndexDefs As String = &quot;SELECT * FROM tbl_sys_TempIndexDefs&quot;\r\nPrivate Const SQL_IndexFieldDefs As String = &quot;SELECT i.IndexId, f.FieldName, i.OrdinalPosition FROM tbl_sys_TempIndexFieldDefs i INNER JOIN tbl_sys_TempFieldDefs f ON (i.FieldId = f.Id)&quot; &apos; WHERE i.IndexId = &quot;\r\nPrivate temp_DBPath As String\r\nPrivate clsDB As Object\r\nPrivate temp_db As Object\r\nPrivate temp_TDef As Object\r\nPrivate temp_fld As Object\r\nPrivate temp_idx As Object\r\nPrivate temp_RSDB As Object\r\nPrivate temp_rsTDef As Object\r\nPrivate temp_rsFld As Object\r\nPrivate temp_rsIdx As Object\r\nPrivate temp_rsIdxFld As Object<\/pre>\n<p>Das Initialisieren der Klasse l&ouml;st automatisch das Ereignis <b>Class_Initialize <\/b>aus. Dieses l&auml;sst sich prima einsetzen, um Recordset-Objekte mit den Informationen &uuml;ber die ben&ouml;tigten Datenbanken und deren Tabellenobjekte zu erzeugen (s. Listing 2).<\/p>\n<p class=\"tabellenkopf\">Listing 2: Das Initialize-Ereignis legt Recordset-Objekte mit den grundlegenden Informationen &uuml;ber die zu erzeugende Datenbank an.<\/p>\n<pre>Private Sub Class_Initialize()\r\n     On Error GoTo ErrorHandler\r\n     Set clsDB = DBEngine(0)(0)\r\n     &apos; Retrieving information about all temporary databases\r\n     Set temp_RSDB = clsDB.OpenRecordset(tblDataBases, dbOpenDynaset)\r\n     Set temp_rsTDef = clsDB.OpenRecordset(tblTableDefs, dbOpenDynaset)\r\nExitCode:\r\n     Exit Sub\r\nErrorHandler:\r\n     Debug.Print Err.Number, Err.Description\r\n     Resume ExitCode\r\nEnd Sub<\/pre>\n<p>Das Ereignis <b>Terminate<\/b> wird &#8211; ebenfalls automatisch &#8211; beim Zerst&ouml;ren der Klasse aufgerufen und enth&auml;lt einige Anweisungen, um die verwendeten Objektvariablen wieder freizugeben:<\/p>\n<pre>Private Sub Class_Terminate()\r\n     On Error Resume Next\r\n     Set clsDB = Nothing\r\n     Set temp_db = Nothing\r\n     Set temp_RSDB = Nothing\r\n     Set temp_rsTDef = Nothing\r\n     Set temp_rsFld = Nothing\r\n     Set temp_rsIdx = Nothing\r\n     Set temp_rsIdxFld = Nothing\r\n     Set temp_TDef = Nothing\r\n     Set temp_fld = Nothing\r\nEnd Sub<\/pre>\n<p><b>Methode f&uuml;r die Erstellung der tempor&auml;ren Datenbank<\/b><\/p>\n<p>Innerhalb der Klasse gibt es eine zentrale Methode, die f&uuml;r die Erstellung der kompletten Konfiguration zust&auml;ndig ist und die alle weiteren Routinen aufruft (s. Listing 3). Der vollst&auml;ndige Code der Klasse befindet sich in der Beispieldatenbank.<\/p>\n<p class=\"tabellenkopf\">Listing 3: Diese Funktion erzeugt die tempor&auml;re Datenbank und ruft weitere Routinen zum Anlegen der &uuml;brigen Elemente auf.<\/p>\n<pre>Public Function CreateTempDB() As Boolean\r\n     On Error GoTo ErrorHandler\r\n     Dim lngErrNo As Long\r\n     While Not temp_RSDB.EOF\r\n         temp_DBPath = temp_RSDB!DatabasePath\r\n         temp_DBPath = fn_app_ReplaceEnviron(temp_DBPath)\r\n         If Dir(temp_DBPath, vbDirectory) = vbNullString Then\r\n             Call MsgBox(&quot;Path &quot; &amp; temp_DBPath &amp; &quot; does not exist. Check the system settings!&quot;, _\r\n                 vbExclamation)\r\n         End If\r\n         If Right$(temp_DBPath, 1) &lt;&gt; Chr$(92) Then temp_DBPath = temp_DBPath &amp; Chr$(92)\r\n         If temp_DBPath = &quot;.\\&quot; Then temp_DBPath = ApplicationPath(clsDB)\r\n         temp_DBPath = temp_DBPath &amp; temp_RSDB!DatabaseName\r\n         If Dir(temp_DBPath, vbNormal) &lt;&gt; vbNullString Then\r\n             If temp_RSDB!KillExistingDB Then\r\n                 On Error Resume Next\r\n                 Call Kill(temp_DBPath)\r\n                 lngErrNo = Err.Number\r\n                 On Error GoTo Error-Handler\r\n                 Select Case lngErrNo\r\n                     Case 0: DoEvents\r\n                         Set temp_db = DBEngine.CreateDatabase(temp_DBPath, dbLangGeneral)\r\n                     Case 70: Set temp_db = DBEngine.OpenDatabase(temp_DBPath)\r\n                     Case Else:\r\n                         Call Kill(temp_DBPath)\r\n                         Set temp_db = DBEngine.CreateDatabase(temp_DBPath, dbLangGeneral)\r\n                 End Select\r\n             Else\r\n                 Set temp_db = DBEngine.OpenDatabase(temp_DBPath)\r\n             End If\r\n         Else\r\n             Set temp_db = DBEngine.CreateDatabase(temp_DBPath, dbLangGeneral)\r\n         End If\r\n         Call CreateTempTables(temp_RSDB!Id)\r\n         temp_RSDB.MoveNext\r\n     Wend\r\n     CreateTempDB = -1\r\nExitCode:\r\n     On Error Resume Next\r\n     temp_RSDB.Close\r\n     Set temp_RSDB = Nothing\r\n     Exit Function\r\nErrorHandler:\r\n     MsgBox Err.Description, vbInformation, &quot;TempDB:CreateTempDB&quot;\r\n     Resume ExitCode\r\nEnd Function<\/pre>\n<p>Die Funktion <b>CreateTempDB <\/b>durchl&auml;uft das bereits ge&ouml;ffnete Recordset <b>tmp_RSDB <\/b>mit allen zu erstellenden Datenbanken und f&uuml;hrt f&uuml;r jeden einzelnen Datensatz weitere Aktionen aus.<\/p>\n<p>Zun&auml;chst entfernt sie mit der Hilfsfunktion <b>fn_app_ReplaceEnviron <\/b>alle Umgebungsvariablen aus dem angegebenen Datenbankpfad. Diese Funktion &uuml;berpr&uuml;ft den Datenpfadstring auf das Vorkommen besonderer Variablen, die durch die VB(A)-Funktion <b>ENVIRON <\/b>ersetzt werden.<\/p>\n<p>Anschlie&szlig;end &uuml;berpr&uuml;ft die Routine, ob der angegebene Pfad existiert. Sollte der Pfad nicht existieren, gibt sie eine Fehlermeldung aus und versucht, die n&auml;chste Datenbank anzulegen.<\/p>\n<p>Sollte die Datenbank bereits existieren, pr&uuml;ft die Routine anhand des Parameters <b>KillingExistingDB<\/b>, ob diese gel&ouml;scht werden soll, und verwendet gegebenenfalls den VB(A)-Befehl <b>KILL <\/b>zum L&ouml;schen der Datenbank.<\/p>\n<p>Leider funktioniert das L&ouml;schen einer Datenbank nicht immer so einfach, wie man es gerne m&ouml;chte. Sollte bereits auf eine darin enthaltene verkn&uuml;pfte Tabelle zugegriffen worden sein, wird die Datenbank mittels LDB-Datei gesperrt und das L&ouml;schen der Datenbank verhindert sowie eine Fehlermeldung angezeigt. Sollte das L&ouml;schen erfolgreich gewesen sein, so wird eine neue Datenbank erstellt:<\/p>\n<pre>Set temp_db = DBEngine.CreateDatabase(DatenbankName, dbLangGeneral, dbVersion40)<\/pre>\n<p>Nachdem die Routine mit der Datenbank das Grundger&uuml;st erstellt hat, folgen nun die einzelnen Tabellen innerhalb der Datenbank. Dabei kommt die folgende Hilfsfunktion zum Zuge, deren Code wir aus Platzgr&uuml;nden hier nicht abdrucken k&ouml;nnen:<\/p>\n<pre>Call CreateTempTables(temp_RSDB!Id)<\/pre>\n<p>Diese Funktion l&ouml;scht zun&auml;chst alle m&ouml;glichen Tabellen, um sie anschlie&szlig;end neu zu erstellen. Das F&uuml;llen der Tabellen mit Feldern und Indizes &uuml;bernehmen zwei weitere Funktionen:<\/p>\n<pre>Call CreateTableFields(tdef, !Id)\r\nCall CreateTableIndex(tdef, !Id)\r\nCall temp_db.TableDefs.Append(tdef)<\/pre>\n<p>Nach dem Erzeugen der Tabellen m&uuml;ssen diese noch mit dem Frontend verbunden werden. Dazu erzeugt die Routine in der lokalen Datenbank mittels <b>CreateTableDef <\/b>ein Tabellenobjekt, das auf dem zuvor erstellten tempor&auml;ren Objekt aus der tempor&auml;ren Datenbank basiert (eine Zeile):<\/p>\n<pre>Set ldef = clsDB.CreateTableDef(Nz(<br \/>temp_rsTDef!LinkedTableName, <br \/>temp_rsTDef!TableName), dbAttachExclusive, Nz(temp_rsTDef!TableName, vbNullString))<\/pre>\n<p>Besonders ist noch zu beachten, dass die Beschreibung f&uuml;r die Tabelle, wie sie in der Konfigurationstabelle f&uuml;r Tabellen vorgesehen ist, nicht einfach an das bestehende Tabellenobjekt &#8222;angeh&auml;ngt&#8220; werden kann. Das h&auml;ngt damit zusammen, dass ein Tabellenobjekt bei der Erstellung keine Eigenschaft namens <b>Description <\/b>kennt. Aus diesem Grund muss diese Eigenschaft f&uuml;r das Objekt zun&auml;chst erstellt werden:<\/p>\n<pre>If Not IsNull(temp_rsTDef!Comment) Then\r\n     Set lprp = .CreateProperty\r\n     If Not lprp Is Nothing Then\r\n         With lprp\r\n             .Name = Description\r\n             .Type = dbText\r\n             .Value = temp_rsTDef!Comment\r\n         End With\r\n         .Properties.Append lprp\r\n     End If\r\nEnd If<\/pre>\n<p>Nachdem eine m&ouml;gliche Beschreibung erstellt wurde, wird mit der n&auml;chsten Tabelle fortgefahren.<\/p>\n<p><b>Konfigurator f&uuml;r tempor&auml;re Datenbanken<\/b><\/p>\n<p>In der Beispieldatenbank befindet sich ein Konfigurator, den Sie mit allen oben beschriebenen Tabellen und der Klasse in Ihr Frontend importieren. Starten Sie anschlie&szlig;end den Konfigurator, um die tempor&auml;ren Tabellen f&uuml;r Ihre Anwendung zu konfigurieren und zu testen.<\/p>\n<p>Nachfolgend finden Sie eine Beschreibung des Konfigurators sowie seiner Funktionen. Der Code der Klasse sowie des Konfigurators ist offen und kann jederzeit von Ihnen verwendet werden.<\/p>\n<p>Sie starten den Konfigurator, indem Sie das Formular <b>frm_app_Konfigurator <\/b>&ouml;ffnen (siehe Bild 4).<\/p>\n<div class=\"image\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_03\/TemporaereDatenbanken-web-images\/Konfigurator_%231_opt.jpeg\" alt=\"Konfigurator_#1.tif\" \/>\n        <\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 4: Erste Schritte im Konfigurator<\/span><\/b><\/p>\n<\/p><\/div>\n<p>Zun&auml;chst definieren Sie den Datenbankpfad sowie den Namen der zu verwendenden Datenbank. Hierbei k&ouml;nnen Sie auch Umgebungsvariablen oder relative Pfade f&uuml;r die Definition des Zielortes festlegen.<\/p>\n<p>Die Funktion <b>fn_app_ReplaceEnviron <\/b>aus der Klasse <b>TempDB <\/b>k&ouml;nnen Sie beliebig Ihren Bed&uuml;rfnissen anpassen (s. Listing 4).<\/p>\n<p class=\"tabellenkopf\">Listing 4: Diese Funktion ersetzt Platzhalter f&uuml;r Umgebungsvariablen durch die tats&auml;chlichen Werte.<\/p>\n<pre>Private Function fn_app_ReplaceEnviron(DatabasePath As String) As String\r\n     On Error Resume Next\r\n     Dim tmpString As String\r\n     tmpString = DatabasePath\r\n     tmpString = Replace(tmpString, &quot;%TEMP%&quot;, Environ(&quot;Temp&quot;))\r\n     tmpString = Replace(tmpString, &quot;%TMP%&quot;, Environ(&quot;TMP&quot;))\r\n     tmpString = Replace(tmpString, &quot;%SystemDrive%&quot;, Environ(&quot;SystemDrive&quot;))\r\n     tmpString = Replace(tmpString, &quot;%Systemroot%&quot;, Environ(&quot;Systemroot&quot;))\r\n     tmpString = Replace(tmpString, &quot;%Homedrive%&quot;, Environ(&quot;Homedrive&quot;))\r\n     tmpString = Replace(tmpString, &quot;%Homepath%&quot;, Environ(&quot;Homepath&quot;))\r\n     tmpString = Replace(tmpString, &quot;%Homeshare%&quot;, Environ(&quot;Homeshare&quot;))\r\n     tmpString = Replace(tmpString, &quot;%ALLUSERSPROFILE%&quot;, Environ(&quot;ALLUSERSPROFILE&quot;))\r\n     fn_app_ReplaceEnviron = tmpString\r\nEnd Function<\/pre>\n<p>Nachdem Sie Pfad und Namen der Datenbank festgelegt haben, geben Sie auf der Registerseite &#8222;Tabellen&#8220; die zu verwendenden Tabellen an:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Tabellenname<\/b>: Bestimmt den Namen der Tabelle, wie er in der tempor&auml;ren Datenbank angelegt werden soll.<\/li>\n<li class=\"aufz-hlung\"><b>Beschreibung<\/b>: Beschreibung der Tabelle, die im Datenbankfenster von Access angezeigt wird.<\/li>\n<li class=\"aufz-hlung\"><b>sys<\/b>: Handelt es sich um eine Systemtabelle, wird sie gew&ouml;hnlich nicht angezeigt.<\/li>\n<li class=\"aufz-hlung\"><b>Link<\/b>: Soll die angelegte Tabelle mit dem Frontend verbunden werden Sehr h&auml;ufig kommt es vor, dass Tabellen nur f&uuml;r die Speicherung von Zwischenergebnissen verwendet werden.<\/li>\n<li class=\"aufz-hlung\"><b>LinkName<\/b>: Name der Tabelle, wie er im Frontend verwendet werden soll.<\/li>\n<li class=\"aufz-hlung\"><b>Deaktiviert<\/b>: Wenn Sie die Tabelle nicht ben&ouml;tigen, sollten Sie sie nicht l&ouml;schen, sondern lediglich deaktivieren. Dann k&ouml;nnen Sie sie sp&auml;ter immer wieder verwenden.<\/li>\n<\/ul>\n<p><b>Attribute der Relationen bestimmen<\/b><\/p>\n<p>Nachdem Sie die Informationen &uuml;ber die Tabellen angelegt haben, m&uuml;ssen Sie im n&auml;chsten Schritt die Struktur der einzelnen Tabellen festlegen.<\/p>\n<p>Dazu &ouml;ffnen Sie die Registerseite <b>Felder<\/b> wie in Bild 5 dargestellt. Hier k&ouml;nnen Sie die Namen und Datentypen der zu verwendenden Felder festlegen.<\/p>\n<div class=\"image\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_03\/TemporaereDatenbanken-web-images\/Konfigurator_%232_opt.jpeg\" alt=\"Konfigurator_#2.tif\" \/>\n        <\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 5: Festlegen der Felder f&uuml;r die Tabelle<\/span><\/b><\/p>\n<\/p><\/div>\n<p>W&auml;hlen Sie zun&auml;chst aus dem Listenfeld <b>Tabellenname<\/b> die zu konfigurierende Tabelle aus.<\/p>\n<p>Legen Sie dann neben Name und Datentyp auch fest, wie gro&szlig; die zu speichernde Datenmenge ist und\/oder ob Sie einen Autowert verwenden m&ouml;chten.<\/p>\n<p><b>Indizes f&uuml;r die Tabellen<\/b><\/p>\n<p>Grunds&auml;tzlich ist die Arbeit mit dem Anlegen der Tabellen und Felder erledigt.<\/p>\n<p>Jedoch speichern Sie unter Umst&auml;nden so gro&szlig;e Datenmengen, dass die Verwendung von Indizes sinnvoll erscheint.<\/p>\n<p>Deshalb k&ouml;nnen Sie auf einer weiteren Registerseite f&uuml;r jede Tabelle beliebige Indizes festlegen (siehe Bild 6).<\/p>\n<div class=\"image\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_03\/TemporaereDatenbanken-web-images\/Konfigurator_%233_opt.jpeg\" alt=\"Konfigurator_#3.tif\" \/>\n        <\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 6: Indizes beschleunigen die Suche nach Daten<\/span><\/b><\/p>\n<\/p><\/div>\n<p>W&auml;hlen Sie auch hier zun&auml;chst die Tabelle aus und legen Sie anschlie&szlig;end die Namen und die Eigenschaften f&uuml;r die zu erstellenden Indizes fest.<\/p>\n<p><b>Erstellen der tempor&auml;ren Datenbank<\/b><\/p>\n<p>Geschafft &#8211; alle Tabellen, Felder und Indizes sind konfiguriert. Nun erfolgt der Testlauf! Klicken Sie auf die Schaltfl&auml;che <b>Datenbank erstellen<\/b> und schon k&ouml;nnen Sie testen, ob die von Ihnen angelegte Konfiguration funktioniert.<\/p>\n<p>Sollte alles fehlerfrei durchlaufen, so finden Sie als Ergebnis im Tabellenfenster Ihrer Anwendung weitere Tabellen vor, die aus der zuvor erstellten tempor&auml;ren Datenbank kommen (siehe Bild 7).<\/p>\n<div class=\"image\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_03\/TemporaereDatenbanken-web-images\/Konfigurator_%234_opt.jpeg\" alt=\"Konfigurator_#4.tif\" \/>\n        <\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 7: Ergebnis nach dem Erstellen der Tabellen<\/span><\/b><\/p>\n<\/p><\/div>\n<p><b>Fazit und Ausblick<\/b><\/p>\n<p>Mit Hilfe von tempor&auml;ren Tabellen k&ouml;nnen Sie statische Daten sowie aufzubereitende Daten aus dem Backend Ihrer Anwendung auf den Client verlagern. Dadurch vermeiden Sie gerade in einem Netzwerk unn&ouml;tigen Netzverkehr und beschleunigen au&szlig;erdem noch Ihre Anwendung. Um dieses Werkzeug in Ihrer Anwendung einzusetzen, kopieren Sie alle Tabellen, Formulare und Module einfach in Ihre Anwendung. Konfigurieren Sie anschlie&szlig;end Ihre Tabellen und testen Sie sie. Sollte alles reibungslos funktionieren, ben&ouml;tigen Sie nur noch einen Aufruf f&uuml;r die Erstellung der Datenbank, der beim &ouml;ffnen Ihrer Anwendung ausgef&uuml;hrt wird, und schon steht einer komfortablen Benutzung der Tabellen nichts mehr im Wege.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>TemporaryDatabases.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/46A84148-09CA-42BA-B3F8-E37AA18B2E5F\/aiu_461.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sicherlich kennen Sie auch die Situation, dass Sie h&auml;ufig verwendete statische Daten wie zum Beispiel Eintr&auml;ge f&uuml;r Kombinationslistenfelder oder Listenfelder aus Tabellen erhalten, die im Backend gespeichert sind. Sollte sich das Backend dann auch noch auf einem Server befinden, kann sich das &Ouml;ffnen etwas verz&ouml;gern. Lernen Sie in diesem Artikel die Vorz&uuml;ge der Verwendung von tempor&auml;ren Datenbanken kennen.<\/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":[662007,66032007,44000035,44000027],"tags":[],"class_list":["post-55000461","post","type-post","status-publish","format-standard","hentry","category-662007","category-66032007","category-Datenzugriff_programmieren","category-Loesungen"],"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>Tempor&auml;re Datenbanken - 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\/Temporaere_Datenbanken\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tempor&auml;re Datenbanken\" \/>\n<meta property=\"og:description\" content=\"Sicherlich kennen Sie auch die Situation, dass Sie h&auml;ufig verwendete statische Daten wie zum Beispiel Eintr&auml;ge f&uuml;r Kombinationslistenfelder oder Listenfelder aus Tabellen erhalten, die im Backend gespeichert sind. Sollte sich das Backend dann auch noch auf einem Server befinden, kann sich das &Ouml;ffnen etwas verz&ouml;gern. Lernen Sie in diesem Artikel die Vorz&uuml;ge der Verwendung von tempor&auml;ren Datenbanken kennen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:15:04+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/76594e80a0f8448890ac593ac3a5cb2d\" \/>\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\\\/Temporaere_Datenbanken\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Temporaere_Datenbanken\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Tempor&auml;re Datenbanken\",\"datePublished\":\"2021-02-11T21:15:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Temporaere_Datenbanken\\\/\"},\"wordCount\":2102,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Temporaere_Datenbanken\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/76594e80a0f8448890ac593ac3a5cb2d\",\"articleSection\":[\"2007\",\"3\\\/2007\",\"Datenzugriff programmieren\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Temporaere_Datenbanken\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Temporaere_Datenbanken\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Temporaere_Datenbanken\\\/\",\"name\":\"Tempor&auml;re Datenbanken - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Temporaere_Datenbanken\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Temporaere_Datenbanken\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/76594e80a0f8448890ac593ac3a5cb2d\",\"datePublished\":\"2021-02-11T21:15:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Temporaere_Datenbanken\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Temporaere_Datenbanken\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Temporaere_Datenbanken\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/76594e80a0f8448890ac593ac3a5cb2d\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/76594e80a0f8448890ac593ac3a5cb2d\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Temporaere_Datenbanken\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tempor&auml;re Datenbanken\"}]},{\"@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":"Tempor&auml;re Datenbanken - 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\/Temporaere_Datenbanken\/","og_locale":"de_DE","og_type":"article","og_title":"Tempor&auml;re Datenbanken","og_description":"Sicherlich kennen Sie auch die Situation, dass Sie h&auml;ufig verwendete statische Daten wie zum Beispiel Eintr&auml;ge f&uuml;r Kombinationslistenfelder oder Listenfelder aus Tabellen erhalten, die im Backend gespeichert sind. Sollte sich das Backend dann auch noch auf einem Server befinden, kann sich das &Ouml;ffnen etwas verz&ouml;gern. Lernen Sie in diesem Artikel die Vorz&uuml;ge der Verwendung von tempor&auml;ren Datenbanken kennen.","og_url":"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:15:04+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/76594e80a0f8448890ac593ac3a5cb2d","type":"","width":"","height":""}],"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\/Temporaere_Datenbanken\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Tempor&auml;re Datenbanken","datePublished":"2021-02-11T21:15:04+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/"},"wordCount":2102,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/76594e80a0f8448890ac593ac3a5cb2d","articleSection":["2007","3\/2007","Datenzugriff programmieren","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/","url":"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/","name":"Tempor&auml;re Datenbanken - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/76594e80a0f8448890ac593ac3a5cb2d","datePublished":"2021-02-11T21:15:04+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/76594e80a0f8448890ac593ac3a5cb2d","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/76594e80a0f8448890ac593ac3a5cb2d"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Temporaere_Datenbanken\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Tempor&auml;re Datenbanken"}]},{"@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\/55000461","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=55000461"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000461\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000461"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000461"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000461"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}