{"id":55000773,"date":"2011-04-01T00:00:00","date_gmt":"2020-05-22T22:02:38","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=773"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Daten_mischen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/","title":{"rendered":"Daten mischen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/aa70861e2c844e1ab896cba4e3d343cc\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Programmieren ohne Testdaten macht keinen Spa&szlig;. Schon gar nicht, wenn man wei&szlig;, dass es tausende echte Datens&auml;tze gibt, die man aber aus Datenschutzgr&uuml;nden nicht einsetzen darf. Aber vielleicht reicht es ja, wenn man die Daten einfach unkenntlich macht Bei Personendaten etwa k&ouml;nnte man schlicht alle Vor- und Nachnamen sowie gegebenenfalls die Adressdaten ordentlich durcheinanderwirbeln. Dann hat man ausreichend realistisches Testmaterial und au&szlig;erdem ist der Datenschutzbeauftragte zufriedengestellt.<\/b><\/p>\n<p>Meistens enth&auml;lt eine Tabelle ja nur wenige wirklich datenschutzrelevante Daten wie etwa die Namen von Personen, Adressen, E-Mail-Adressen et cetera. In vielen F&auml;llen reicht es tats&auml;chlich aus, die Daten einmal durchzumischen, also beispielsweise alle Nachnamen der Tabelle zu nehmen und den Datens&auml;tzen neu zuzuordnen. Wenn man dies mit Vorname und Nachname durchf&uuml;hrt, sollten die Daten nur noch schlecht reproduzierbar sein.<\/p>\n<p>Etwas interessanter wird es, wenn Felder Informationen enthalten, die aus mehreren Feldern zusammengesetzt sind. Gut: Normalerweise sollte dies nicht geschehen, zumindest nicht in einer sorgsam normalisierten Datenbank. Manchmal l&auml;sst sich dies aber nicht verhindern: Dann landen Vor- und Nachname etwa im Feld mit der E-Mail-Adresse, deren Inhalt dann nach dem Schema <b>&lt;Vorname&gt;.&lt;Nachname&gt;@&lt;Firma&gt;.xyz<\/b> aufgebaut ist. Hier brauchen Sie gegebenenfalls eine kleine Spezialbehandlung. So k&ouml;nnte man in einer Abfrage pr&uuml;fen, ob die E-Mail-Adresse den Vor- und\/oder Nachnamen des aktuellen Datensatzes enth&auml;lt, und die E-Mail-Adresse entsprechend aufbereiten.<\/p>\n<p>Welche Anforderungen gibt es noch an ein Tool, mit dem Sie die Daten einer Tabelle nach dem Zufallsprinzip vermischen m&ouml;chten Viele Tabellen enthalten beispielsweise ein oder mehrere abh&auml;ngige Felder. Auch das entspricht im Grunde nicht den Normalisierungsregeln, l&auml;sst sich aber manchmal nicht vermeiden. Der Vorname und die Anrede (Herr\/Frau) sind ein solches Beispiel: Sie k&ouml;nnten zwar eine Tabelle bereitstellen, welche die passende Anrede f&uuml;r jeden denkbaren Vornamen enth&auml;lt. Aber was ist mit Namen, die nicht eindeutig einem Geschlecht zugeordnet werden k&ouml;nnen Die Existenz eines Anrede-Feldes ist also berechtigt. Wenn Sie nun aber die Vornamen der Datens&auml;tze Ihrer Tabelle vermischen, dann m&uuml;ssen Sie darauf achten, dass die Anreden nachher zu den Vornamen passen &#8211; so realistisch sollen die gemischten Daten schon sein. Das Tool sollte also die M&ouml;glichkeit bieten, Kombinationen aus mehreren Feldern zu vertauschen.<\/p>\n<p><b>Der Datenmischer<\/b><\/p>\n<p>Schauen wir uns an, was die L&ouml;sung dieses Beitrags f&uuml;r Funktionen bereith&auml;lt. Sie besteht aus einem einzigen Formular, das gleichzeitig den kompletten Code enth&auml;lt. Das Formular hei&szlig;t <b>frmMischer <\/b>und sieht wie in Bild 1 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/DatenMischen-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Das Formular mit den Funktionen zum Mischen von Daten<\/span><\/b><\/p>\n<p>Mit dem Kombinationsfeld <b>Tabelle <\/b>w&auml;hlen Sie zun&auml;chst die Tabelle aus, deren Daten Sie durcheinanderw&uuml;rfeln m&ouml;chten. Die Auswahl wirkt sich auf drei weitere Steuerelemente aus: Die beiden Listenfelder <b>Felder <\/b>und <b>Abh&auml;ngige Felder <\/b>zeigen die Felder der ausw&auml;hlten Tabelle an, das Unterformular auf der Registerseite <b>Originaldaten <\/b>zeigt die Daten der Tabelle selbst an.<\/p>\n<p>Im Listenfeld <b>Felder <\/b>w&auml;hlen Sie eines oder mehrere Felder aus, die einzeln oder in Kombination gemischt werden sollen. W&auml;hlen Sie hier beispielsweise nur das Feld Geburtstdatum aus, werden die Geburtsdaten zuf&auml;llig einem der enthaltenen Datens&auml;tze zugewiesen.<\/p>\n<p>Dabei bleiben alle Geburtsdaten erhalten, sie finden sich jedoch mit hoher Wahrscheinlichkeit in einem neuen Datensatz wieder (nat&uuml;rlich kann ein Wert auch im gleichen Datensatz landen &#8211; dies wird von der Anwendung nicht ausgeschlossen). Wenn Sie zwei oder mehr Felder im Listenfeld <b>Felder<\/b> ausw&auml;hlen, werden die Kombinationen vertauscht.<\/p>\n<p>Das rechte Listenfeld <b>Abh&auml;ngige Felder <\/b>behandelt solche F&auml;lle, in denen die Daten der Felder des ersten Listenfeldes in weiteren Feldern wiederholt werden. Wenn Sie die Nachnamen aller Datens&auml;tze vertauschen m&ouml;chten, passen die E-Mail-Adressen m&ouml;glicherweise nicht mehr dazu &#8211; im gesch&auml;ftlichen Bereich ist es ja mittlerweile die Regel, dass der Name in der E-Mail-Adresse auftaucht.<\/p>\n<p>Alle Felder, die im rechten Listenfeld ausgew&auml;hlt wurden, werden also auf Vorkommen der Werte der im linken Listenfeld ausgew&auml;hlten Felder gepr&uuml;ft. Treten solche Werte auf, werden diese entsprechend der Vertauschung mit ersetzt.<\/p>\n<p><b>Mischvorgang ausl&ouml;sen<\/b><\/p>\n<p>Den Mischvorgang k&ouml;nnen Sie auf zwei Arten ausl&ouml;sen:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Die Schaltfl&auml;che <b>Mischen <\/b>f&uuml;hrt den Mischvorgang direkt durch. Dieser Vorgang l&auml;sst sich nicht r&uuml;ckg&auml;ngig machen &#8211; es sei denn, Sie h&auml;tten noch eine Kopie der Daten und w&uuml;rden diese wiederherstellen. Das Ergebnis k&ouml;nnen Sie gleich auf der Registerseite <b>Originaldaten <\/b>des Registers unten betrachten (s. Bild 2).<\/li>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/DatenMischen-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Das Formular frmMischen in der Entwurfsansicht<\/span><\/b><\/p>\n<li class=\"aufz-hlung\">Die Schaltfl&auml;che <b>Testen <\/b>erstellt erst eine Kopie der Tabelle und f&uuml;hrt den Mischvorgang mit den ausgew&auml;hlten Parametern mit den Daten der Kopie aus. Das Ergebnis wird auf der Registerseite <b>Testdaten <\/b>des Registersteuerelements angezeigt.<\/li>\n<\/ul>\n<p>Wenn Sie den Mischvorgang zuerst getestet haben, k&ouml;nnen Sie zwischen den beiden Seiten des Registersteuerelements hin- und herwechseln und sich die Unterschiede ansehen.<\/p>\n<p>Beim Schlie&szlig;en des Formulars fragt dieses noch, ob die tempor&auml;ren Tabellen gel&ouml;scht werden sollen.<\/p>\n<p><b>Steuerelemente des Formulars<\/b><\/p>\n<p>Das Formular enth&auml;lt die folgenden Steuerelemente:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>cboTabellen<\/b>: Auswahl der Tabellen<\/li>\n<li class=\"aufz-hlung\"><b>cmdMischen<\/b>: St&ouml;&szlig;t den Mischvorgang mit den Originaldaten an.<\/li>\n<li class=\"aufz-hlung\"><b>cmdTesten<\/b>: Kopiert die Tabelle zuerst und mischt die Daten dann in der Kopie.<\/li>\n<li class=\"aufz-hlung\"><b>lblFelder<\/b> und <b>lblFelderAbhaengig<\/b>: Beschriftungsfelder, die dynamisch die Anzahl der in den Listenfeldern ausgew&auml;hlten Eintr&auml;ge anzeigen.<\/li>\n<li class=\"aufz-hlung\"><b>lstFelder<\/b>: Erlaubt das Ausw&auml;hlen einzelner Felder oder von Kombinationen aus mehreren Feldern, die zwischen den Datens&auml;tzen ausgetauscht werden sollen.<\/li>\n<li class=\"aufz-hlung\"><b>lstFelderAbhaengig<\/b>: Legt die Felder fest, die auf Vorkommen der Inhalte der Felder aus lstFelder untersucht werden sollen.<\/li>\n<li class=\"aufz-hlung\"><b>reg<\/b>: Registersteuerelement zum Anzeigen der Original- und der Testdaten.<\/li>\n<li class=\"aufz-hlung\"><b>sfmTabelle<\/b>: Unterformularsteuerelement, das die Daten der Originaltabelle anzeigt<\/li>\n<li class=\"aufz-hlung\"><b>sfmTabelleTest<\/b>: Unterformularsteuerelement, das die Daten der zu Testzwecken kopierten Tabelle anzeigt<\/li>\n<\/ul>\n<p><b>Tabelle ausw&auml;hlen<\/b><\/p>\n<p>Das Kombinationsfeld <b>cboTabellen<\/b> soll alle Tabellen der aktuellen Datenbank anzeigen &#8211; mit Ausnahme der Systemtabellen und tempor&auml;ren Tabellen.<\/p>\n<p>Die Namen der Tabellen lesen Sie mit einer Abfrage wie der aus Bild 3 aus der Systemtabelle <b>MSysObjects <\/b>aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/DatenMischen-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Abfrage zur Ermittlung der Tabellen der aktuellen Datenbank<\/span><\/b><\/p>\n<p>Damit das Kombinationsfeld zus&auml;tzlich zu den Tabellennamen einen Eintrag mit dem Wert <b>&lt;Ausw&auml;hlen&gt; <\/b>enth&auml;lt, &auml;ndern Sie den SQL-Code der Abfrage wie folgt ab:<\/p>\n<pre>SELECT &quot;&lt;Ausw&auml;hlen&gt;&quot; AS Name FROM MSysObjects\r\nUNION\r\nSELECT Name FROM MSysObjects\r\nWHERE Name Not Like ''MSys*''\r\nAnd Name Not Like ''~*'' AND Type=1 ORDER BY Name;<\/pre>\n<p>Au&szlig;erdem verwenden Sie die folgende Prozedur, die durch das Ereignis <b>Beim Laden <\/b>des Formulars ausgel&ouml;st wird, um diesen Eintrag gleich beim &Ouml;ffnen des Formulars anzuzeigen:<\/p>\n<pre>Private Sub Form_Load()\r\n    Me!cboTabelle = Me!cboTabelle.ItemData(0)\r\n    Me!sfmTabelle.SourceObject = &quot;&quot;\r\n    Me!sfmTabelleTest.SourceObject = &quot;&quot;\r\nEnd Sub<\/pre>\n<p>Die Prozedur leert gleichzeitig die beiden Unterformulare. Das Ausw&auml;hlen eines der Eintr&auml;ge des Kombinationsfeldes l&ouml;st die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-19-anchor\">Listing 1<\/a><\/span> aus. Diese Prozedur pr&uuml;ft zun&auml;chst, ob der Benutzer den Eintrag <b>&lt;Ausw&auml;hlen&gt; <\/b>oder einen der Tabellennamen ausgew&auml;hlt hat. Im Falle einer Tabelle nimmt die Prozedur einige Einstellungen vor:<\/p>\n<p class=\"listingueberschrift\">Listing 1: F&uuml;llen der &uuml;brigen Steuerelemente nach Auswahl der Tabelle mit den zu ver&auml;ndernden Daten<\/p>\n<pre>Private Sub cboTabelle_AfterUpdate()\r\n    If Not Me!cboTabelle = &quot;&lt;Ausw&auml;hlen&gt;&quot; Then\r\n        Me!lstFelder.RowSource = Me!cboTabelle\r\n        Me!lstFelderAbhaengig.RowSource = Me!cboTabelle\r\n        Me!sfmTabelle.SourceObject = &quot;Tabelle.&quot; &amp; Me!cboTabelle\r\n    Else\r\n        Me!lstFelder.RowSource = &quot;&quot;\r\n        Me!lstFelderAbhaengig.RowSource = &quot;&quot;\r\n        Me!sfmTabelle.SourceObject = &quot;&quot;\r\n    End If\r\n    Me!sfmTabelleTest.SourceObject = &quot;&quot;\r\nEnd Sub<\/pre>\n<ul>\n<li class=\"aufz-hlung\">Die beiden Listenfelder <b>lstFelder <\/b>und <b>lstFelderAbhaengig <\/b>werden mit den Feldnamen der ausgew&auml;hlten Tabelle gef&uuml;llt.<\/li>\n<li class=\"aufz-hlung\">Das Unterformular <b>sfmTabelle <\/b>erh&auml;lt die ausgew&auml;hlte Tabelle als Herkunftsobjekt.<\/li>\n<\/ul>\n<p><!--30percent--><\/p>\n<p>Damit die Listenfelder tats&auml;chlich die Feldnamen anzeigen, stellen Sie die Eigenschaft <b>Datensatzherkunft <\/b>dieser beiden Steuerelemente auf den Wert <b>Feldliste <\/b>ein.<\/p>\n<p>Wenn der Benutzer den Eintrag <b>&lt;Ausw&auml;hlen&gt; <\/b>selektiert, werden diese drei Steuerelemente wieder geleert. Gleiches geschieht in beiden F&auml;llen mit dem Unterformular <b>sfmTabelleTest<\/b>.<\/p>\n<p><b>Ausw&auml;hlen der betroffenen Felder<\/b><\/p>\n<p>Die beiden Listenfelder <b>lstFelder <\/b>und <b>lstFelderAbhaengig <\/b>sollen au&szlig;erdem beide die Auswahl mehrerer Eintr&auml;ge erlauben. Dazu stellen Sie die Eigenschaft <b>Mehrfachauswahl <\/b>auf <b>Einzeln <\/b>ein. Der Benutzer braucht dann nur noch jeweils einfach auf die betroffenen Felder zu klicken.<\/p>\n<p>Da es vorkommen kann, dass eine Tabelle sehr viele Felder enth&auml;lt und somit nicht alle markierten Eintr&auml;ge gleichzeitig sichtbar sind, sollen die Bezeichnungsfelder der beiden Listenfelder hinter der Beschriftung in Klammern die Anzahl der markierten Eintr&auml;ge anzeigen. Damit diese Anzahl jeweils beim Aktivieren oder Deaktivieren eines Eintrags aktualisiert wird, f&uuml;gen Sie die beiden Prozeduren aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-21-anchor\">Listing 2<\/a><\/span> hinzu.<\/p>\n<p class=\"listingueberschrift\">Listing 2: Aktualisierungen der Anzahl der markierten Eintr&auml;ge in den Bezeichnungsfeldern<\/p>\n<pre>Private Sub lstFelder_Click()\r\n    Me!lblFelder.Caption = &quot;Felder (&quot; &amp; Me!lstFelder.ItemsSelected.Count &amp; &quot;):&quot;\r\nEnd Sub\r\nPrivate Sub lstFelderAbhaengig_Click()\r\n    Me!lblFelderAbhaengig.Caption = _\r\n    &quot;Abh&auml;ngige Felder (&quot; &amp; Me!lstFelderAbhaengig.ItemsSelected.Count &amp; &quot;):&quot;\r\nEnd Sub<\/pre>\n<p><b>Aufruf des Misch-Vorgangs<\/b><\/p>\n<p>Die Schaltfl&auml;che <b>cmdMischen <\/b>ruft den eigentlichen Mischvorgang auf (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-22-anchor\">Listing 3<\/a><\/span>). Sie pr&uuml;ft zun&auml;chst, ob der Benutzer einen oder mehrere Eintr&auml;ge im Listenfeld <b>lstFelder <\/b>ausgew&auml;hlt hat.<\/p>\n<p class=\"listingueberschrift\">Listing 3: Aufruf der Mischfunktion<\/p>\n<pre>Private Sub cmdMischen_Click()\r\n    If Me!lstFelder.ItemsSelected.Count = 0 Then\r\n        MsgBox &quot;Es wurden keine Felder zum Mischen ausgew&auml;hlt.&quot;, vbOKOnly + vbExclamation\r\n        Exit Sub\r\n    End If\r\n    If MsgBox(&quot;Sie &auml;ndern nun die Daten der Tabelle ''''. Fortsetzen&quot;, vbYesNo) = vbYes Then\r\n        Call Mischen(Me!cboTabelle)\r\n    End If\r\nEnd Sub<\/pre>\n<p>Falls nicht, erscheint eine entsprechende Meldung und der Vorgang wird abgebrochen.<\/p>\n<p>Anderenfalls gibt es einen Hinweis, dass die nachfolgend vorgenommenen &auml;nderungen nicht r&uuml;ckg&auml;ngig gemacht werden k&ouml;nnen. Best&auml;tigt der Benutzer diese Meldung, wird durch den Aufruf der Prozedur <b>Mischen <\/b>der eigentliche Mischvorgang gestartet &#8211; mehr dazu weiter unten.<\/p>\n<p><b>Mischvorgang testen<\/b><\/p>\n<p>Der Test des Mischvorgangs verl&auml;uft prinzipiell genau so wie der Vorgang selbst &#8211; allerdings wird die betroffene Tabelle zuvor kopiert und der Test anhand dieser Tabelle durchgef&uuml;hrt.<\/p>\n<p>Verantwortlich f&uuml;r die Vorbereitungen und den Aufruf der Mischen-Prozedur ist die Prozedur, die durch das Ereignis <b>Beim Klicken <\/b>der Schaltfl&auml;che <b>cmdTesten<\/b> ausgel&ouml;st wird (s. <span class=\"verweis-ohneumbruch\">Listing 4<\/span>). Auch diese pr&uuml;ft zun&auml;chst die Anzahl der im Listenfeld <b>lstFelder <\/b>markierten Eintr&auml;ge, um den Benutzer gegebenenfalls darauf hinzuweisen, dass er noch keine Felder zum Mischen markiert hat.<\/p>\n<p class=\"listingueberschrift\">Listing 4: Testen der Mischfunktion<\/p>\n<pre>Private Sub cmdTesten_Click()\r\n    Dim strTabelle As String\r\n    Dim strTabelle_Test As String\r\n    Dim db As DAO.Database\r\n    Dim tdf As DAO.TableDef\r\n    Dim prp As DAO.Property\r\n    If Me!lstFelder.ItemsSelected.Count = 0 Then\r\n        MsgBox &quot;Es wurden keine Felder zum Mischen ausgew&auml;hlt.&quot;, vbOKOnly + vbExclamation\r\n        Exit Sub\r\n    End If\r\n    strTabelle = Me!cboTabelle\r\n    strTabelle_Test = TabelleKopieren(strTabelle)\r\n    Set db = CurrentDb\r\n    Set tdf = db.TableDefs(strTabelle_Test)\r\n    On Error Resume Next\r\n    Set prp = tdf.Properties(&quot;Description&quot;)\r\n    On Error GoTo 0\r\n    If prp Is Nothing Then\r\n        Set prp = tdf.CreateProperty(Name:=&quot;Description&quot;, Type:=dbText, Value:=&quot;~Mischer&quot;)\r\n    End If\r\n    tdf.Properties.Append prp\r\n    Call Mischen(strTabelle_Test)\r\n    Me!sfmTabelleTest.SourceObject = &quot;Tabelle.&quot; &amp; strTabelle_Test\r\n    Me!reg.Value = 1\r\nEnd Sub<\/pre>\n<p>Danach ruft die Prozedur die Funktion <b>TabelleKopieren <\/b>auf, die f&uuml;r das Herstellen der Kopie verantwortlich ist und weiter unten beschrieben wird. Als Ergebnis erhalten wir den Namen der neu erstellten Tabelle.<\/p>\n<p>Die Prozedur legt daraufhin ein <b>TableDef<\/b>-Objekt mit einem Verweis auf die neue Tabelle an und f&uuml;gt dieser eine Eigenschaft namens <b>Description <\/b>hinzu. Die Eigenschaft wird im gleichen Zuge mit dem Wert <b>~Mischer <\/b>gef&uuml;llt.<\/p>\n<p>Der Sinn dieser Aktion ist schlicht und einfach, die tempor&auml;r f&uuml;r den Mischer erstellten Test-Tabellen so zu markieren, dass der Mischer diese beim Schlie&szlig;en des Formulars erkennen und gegebenenfalls entfernen kann.<\/p>\n<p>Nach dem Anh&auml;ngen dieser Eigenschaft ruft die Prozedur dann die <b>Mischen<\/b>-Prozedur auf, um die Werte der ausgew&auml;hlten Felder in der Testtabelle durcheinanderzuw&uuml;rfeln.<\/p>\n<p>Schlie&szlig;lich stellt die Prozedur das Unterformular-Steuerelement <b>sfmTabelleTest <\/b>auf der zweiten Registerseite des Register-Steuerelements auf die neu erstellte Tabelle ein und wechselt auch gleich zu dieser Seite.<\/p>\n<p><b>Tabelle f&uuml;r Test kopieren<\/b><\/p>\n<p>Ein wichtiger Teil der vorherigen Prozedur besteht darin, eine Kopie der ausgew&auml;hlten Tabelle zu Testzwecken anzulegen. Dies erledigt die Funktion <b>TabelleKopieren <\/b>(s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-28-anchor\">Listing 5<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 5: Erstellen einer tempor&auml;ren Tabelle f&uuml;r Testzwecke<\/p>\n<pre>Private Function TabelleKopieren(strTabelle As String) As String\r\n    Dim db As DAO.Database\r\n    Dim strTabelleTemp As String\r\n    Dim i As Integer\r\n    Set db = CurrentDb\r\n    On Error Resume Next\r\n    strTabelleTemp = db.TableDefs(strTabelle &amp; &quot;_Temp_&quot; &amp; i).Name\r\n    Do While Len(strTabelleTemp) &gt; 0\r\n        i = i + 1\r\n        strTabelleTemp = &quot;&quot;\r\n        strTabelleTemp = db.TableDefs(strTabelle &amp; &quot;_Temp_&quot; &amp; i).Name\r\n    Loop\r\n    On Error GoTo 0\r\n    db.Execute &quot;SELECT * INTO &quot; &amp; strTabelle &amp; &quot;_Temp_&quot; &amp; i &amp; &quot; FROM &quot; &amp; Me!cboTabelle, dbFailOnError\r\n    RefreshDatabaseWindow\r\n    TabelleKopieren = strTabelle &amp; &quot;_Temp_&quot; &amp; i\r\nEnd Function<\/pre>\n<p>Diese Funktion erledigt im Wesentlichen zwei Aufgaben: Das Finden eines geeigneten Tabellennamens und das Kopieren der Tabelle. Dabei stellt die Funktion zun&auml;chst einen neuen Tabellennamen aus dem Namen der Quelltabelle, der Zeichenkette <b>_Temp_ <\/b>und einer laufenden Zahl zusammen, also beispielsweise <b>tblArtikel_temp_0<\/b>.<\/p>\n<p>Dies ist n&ouml;tig, falls der Benutzer gleich mehrere Tests mit der gleichen Tabelle durchf&uuml;hrt &#8211; er braucht sich dann nicht um die manuelle Eingabe eines noch nicht verwendeten Tabellennamens zu k&uuml;mmern.<\/p>\n<p>Die Funktion pr&uuml;ft dann, ob es bereits eine Tabelle dieses Namens gibt. Falls ja, erh&ouml;ht sie so lange den Z&auml;hler als letzten Bestandteil des Tabellennamens, bis ein freier Name gefunden wurde.<\/p>\n<p>Ist dies geschehen, ruft sie eine Tabellenerstellungsabfrage auf, die beispielsweise so aussieht:<\/p>\n<pre>SELECT * INTO tblArtikel_Temp_0 FROM tblArtikel<\/pre>\n<p>Nach erfolgreicher Erstellung wird noch das Datenbankfenster beziehungsweise der Navigationsbereich aktualisiert sowie der Name der erzeugten Tabelle als Funktionswert zur&uuml;ckgegeben.<\/p>\n<p><b>Der Mischvorgang<\/b><\/p>\n<p>Spannend wird es beim Mischvorgang selbst. Die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-29-anchor\">Listing 6<\/a><\/span> f&uuml;hrt dabei folgende drei Hauptaufgaben aus:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Erstellen eines tempor&auml;ren Recordsets, das einen Datensatz f&uuml;r jeden Datensatz der Quelltabelle enth&auml;lt, aber nur die zu mischenden Felder<\/li>\n<li class=\"aufz-hlung\">F&uuml;llen dieses tempor&auml;ren Recordsets mit den zu mischenden Werten sowie einem weiteren Feld mit einer Zufallszahl<\/li>\n<li class=\"aufz-hlung\">&Uuml;berschreiben der Felder mit den zu mischenden Werten aus der tempor&auml;ren Datensatzgruppe<\/li>\n<\/ul>\n<p class=\"listingueberschrift\">Listing 6: Diese Prozedur f&uuml;hrt den eigentlichen Mischvorgang durch.<\/p>\n<pre>Private Sub Mischen(strTabelle As String)\r\n     ''... Diese Prozedur sehen Sie als Abonnent von Access im Unternehmen in wenigen Tagen!\r\nEnd Sub<\/pre>\n<p>Wichtig ist an dieser Stelle, dass Sie einen Verweis auf die Bibliothek <b>Microsoft ActiveX Data Objects x.y Library <\/b>hinzuf&uuml;gen (s. Bild 4). Diese bietet im Gegensatz zur DAO-Bibliothek (<b>Microsoft DAO 3.6 Object Library <\/b>beziehungsweise <b>Microsoft Office x.0 Access database engine Objects<\/b>) den Vorteil, dass sie tempor&auml;re Recordsets erzeugen kann und somit keine weitere tempor&auml;re Tabelle n&ouml;tig ist.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/DatenMischen-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Verweis auf die ADO-Bibliothek<\/span><\/b><\/p>\n<p>Die Prozedur <b>Mischen <\/b>erwartet als einzigen Parameter den Namen der Tabelle, die sie bearbeiten soll. Im ersten Teil erstellt die Prozedur das tempor&auml;re ADO-Recordset sowie ein weiteres Recordset, das f&uuml;r den Zugriff auf die zu mischende Tabelle n&ouml;tig ist. Letzteres wird mit den Daten der mit <b>strTabelle <\/b>&uuml;bergebenen Tabelle gef&uuml;llt.<\/p>\n<p>Das tempor&auml;re Recordset wird zun&auml;chst mit einem Feld namens Zufall (Datentyp <b>Double<\/b>) ausgestattet. Anschlie&szlig;end f&uuml;gt die Prozedur innerhalb einer <b>For Each<\/b>-Schleife &uuml;ber alle markierten Eintr&auml;ge des Listenfeldes <b>lstFelder <\/b>f&uuml;r jedes markierte Feld ein weiteres Feld hinzu.<\/p>\n<p>Den Feldnamen liest die Prozedur dabei direkt aus dem Listenfeld aus, den Datentyp sowie die Feldgr&ouml;&szlig;e aus der Datensatzgruppe mit der betroffenen Tabelle. Dies ist auch der Grund, warum nicht nur f&uuml;r das Erzeugen der tempor&auml;ren Datensatzgruppe, sondern auch f&uuml;r die Datensatzgruppe auf Basis der Quelltabelle ein ADO-Recordset verwendet wird: Informationen wie Datentyp oder Feldgr&ouml;&szlig;e k&ouml;nnen so direkt &uuml;bernommen werden.<\/p>\n<p>Mit Name, Datentyp und Feldgr&ouml;&szlig;e ausgestattet f&uuml;gt die <b>Append<\/b>-Methode schlie&szlig;lich alle im Listenfeld ausgew&auml;hlten Felder zur tempor&auml;ren Datensatzgruppe hinzu.<\/p>\n<p>Nun folgt der zweite Teil: In einer <b>Do While<\/b>-Schleife &uuml;ber alle Datens&auml;tze der Tabelle mit den zu mischenden Daten schreibt die Prozedur die zu mischenden Daten in das tempor&auml;re Recordset. Dabei legt die Prozedur zun&auml;chst mit <b>AddNew <\/b>einen neuen Datensatz an und durchl&auml;uft dann in einer weiteren <b>For Each<\/b>-Schleife alle ausgew&auml;hlten Felder, um deren Werte in den aktuellen Datensatz des tempor&auml;ren Recordsets zu &uuml;bertragen.<\/p>\n<p>Nachdem alle Felder durchlaufen wurden, schreibt eine letzte Anweisung noch einen Zufallswert in das Feld <b>Zufall<\/b>. Ein Aufruf der <b>Update<\/b>-Methode speichert den Datensatz, anschlie&szlig;end werden die &uuml;brigen Datens&auml;tze in das tempor&auml;re Recordset geschrieben.<\/p>\n<p>Im dritten Teil werden nun die Datensatzzeiger beider Datensatzgruppen wieder auf den ersten Datensatz eingestellt. Zuvor wurde noch die Sortierung der tempor&auml;ren Datensatzgruppe ge&auml;ndert, und zwar aufsteigend nach dem Wert des Feldes <b>Zufall<\/b>. Dies garantiert eine gute Durchmischung.<\/p>\n<p>Nun folgt eine weitere <b>Do While<\/b>-Schleife &uuml;ber alle Datens&auml;tze der Tabelle mit den zu ver&auml;ndernden Daten. Wieder werden f&uuml;r jeden Datensatz alle im Listenfeld <b>lstFelder <\/b>markierten Felder in einer <b>For Each<\/b>-Schleife durchlaufen. Am Ende eines jeden Durchlaufs schreibt die Prozedur die gemischten Werte aus dem tempor&auml;ren Recordset zur&uuml;ck in die Zieltabelle. Zuvor geschieht jedoch noch ein f&uuml;r eventuell vorhandene abh&auml;ngige Felder wichtiger Schritt: Dort durchl&auml;uft eine letzte <b>For Each<\/b>-Schleife alle im Listenfeld <b>lstFelderAbhaengig <\/b>markierten Eintr&auml;ge und &auml;ndert die Werte dieser Felder in der Tabelle. Dabei ersetzt sie, soweit auffindbar, einen Teilausdruck des Wertes im abh&auml;ngigen Feld, der mit dem Originalwert des aktuellen Feldes aus <b>lstFelder <\/b>&uuml;bereinstimmt, mit dem neuen, durch die Mischung eingef&uuml;gten Wert.<\/p>\n<p><b>Im &Uuml;berblick<\/b><\/p>\n<p>Zum besseren Verst&auml;ndnis an dieser Stelle ein kleiner &Uuml;berblick: Wir m&ouml;chten etwa in einer Tabelle namens <b>tblPersonal <\/b>alle Kombinationen aus <b>Vorname <\/b>und <b>Anrede <\/b>durchmischen. Au&szlig;erdem sollen Vorkommen des Vornamens im Feld <b>EMail <\/b>durch den neu zugeordneten Vornamen ersetzt werden. Die Tabelle hat beispielsweise zehn Datens&auml;tze. Dann legen wir ein tempor&auml;res Recordset mit den drei Feldern <b>Zufall<\/b>, <b>Vorname <\/b>und <b>Anrede <\/b>an. Dieses tempor&auml;re Recordset wird mit den entsprechenden Werten der Tabelle <b>tblPersonal <\/b>sowie dem Zufallswert gef&uuml;llt. Eine Sortierung nach diesem Zufallswert sorgt f&uuml;r die Durchmischung der Daten.<\/p>\n<p>Dann wird das Recordset der originalen Tabelle (beziehungsweise der Testkopie) und der gemischten Daten gleichzeitig Datensatz f&uuml;r Datensatz durchlaufen. Dabei ersetzt die Prozedur Vorname und Anrede der Originaltabelle durch den aktuellen Datensatz des tempor&auml;ren Recordsets, also wird beispielsweise <b>Andre <\/b>durch <b>Anja <\/b>ersetzt und <b>Herr <\/b>durch <b>Frau<\/b>. Au&szlig;erdem wird beispielsweise die E-Mail-Adresse <b>andre@minhorst.com <\/b>in <b>anja@minhorst.com <\/b>ge&auml;ndert, weil die Prozedur dort den Wert <b>andre <\/b>findet.<\/p>\n<p><b>Formular schlie&szlig;en und tempor&auml;re Tabellen l&ouml;schen<\/b><\/p>\n<p>Fehlt nur der letzte Schritt, der nach dem Mischen der gew&uuml;nschten Felder n&ouml;tig ist: Beim Schlie&szlig;en des Formulars sollen die beim Mischen entstandenen tempor&auml;ren Tabellen gel&ouml;scht werden.<\/p>\n<p>Dieser Vorgang ist etwas aufwendiger, weil ja genau die Tabellen gel&ouml;scht werden sollen, die beim Anlegen durch das Tool mit dem Wert <b>~Mischer <\/b>f&uuml;r die Eigenschaft <b>Description <\/b>ausgestattet wurden. Die Prozedur aus <span class=\"verweis-ohneumbruch\">Listing 7<\/span>, die durch das Ereignis <b>Beim Schlie&szlig;en <\/b>des Formulars ausgel&ouml;st wird, fragt den Benutzer zun&auml;chst, ob die tempor&auml;r angelegten Tabellen &uuml;berhaupt gel&ouml;scht werden sollen &#8211; gegebenenfalls sollen diese ja weiterverwendet werden, w&auml;hrend die Originaltabellen als Sicherheitskopie in der Datenbank verweilen.<\/p>\n<p class=\"listingueberschrift\">Listing 7: Schlie&szlig;en des Formulars und L&ouml;schen der tempor&auml;ren Tabellen<\/p>\n<pre>Private Sub Form_Close()\r\n    Dim db As DAO.Database\r\n    Dim tdf As DAO.TableDef\r\n    Dim strBeschreibung As String\r\n    Dim bolLoeschen As Boolean\r\n    bolLoeschen = MsgBox(&quot;Tempor&auml;re Tabelle(n) l&ouml;schen&quot;, vbYesNo) = vbYes\r\n    Me!sfmTabelleTest.SourceObject = &quot;&quot;\r\n    Set db = CurrentDb\r\n    For Each tdf In db.TableDefs\r\n        strBeschreibung = &quot;&quot;\r\n        On Error Resume Next\r\n        strBeschreibung = tdf.Properties(&quot;Description&quot;)\r\n        On Error GoTo 0\r\n        If strBeschreibung = &quot;~Mischer&quot; Then\r\n            If bolLoeschen Then\r\n                db.TableDefs.Delete tdf.Name\r\n            Else\r\n                tdf.Properties.Delete &quot;Beschreibung&quot;\r\n            End If\r\n        End If\r\n    Next tdf\r\n    RefreshDatabaseWindow\r\nEnd Sub<\/pre>\n<p>In beiden F&auml;llen durchl&auml;uft die Prozedur alle Tabellen der Datenbank. Findet sie eine Tabelle, deren <b>Description <\/b>den Wert <b>~Mischer <\/b>aufweist, l&ouml;scht sie diese entweder oder leert einfach die Eigenschaft &#8211; je nachdem, ob der Benutzer die Tabellen l&ouml;schen wollte oder nicht.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Diese L&ouml;sung dient dem schnellen Durchmischen realer Beispieldaten zum Zwecke der Entfremdung dieser Daten zur Weiterverwendung als Testdaten. Kl&auml;ren Sie mit dem Auftraggeber beziehungsweise seinem Datenschutzbeauftragten ab, ob so ver&auml;nderte Daten als Beispieldaten zul&auml;ssig sind &#8211; sicher ist sicher. Auf jeden Fall verkleinern Sie durch das Mischen der Daten das Risiko, dass diese nach einem Diebstahl irgendeinen Nutzen f&uuml;r Dritte haben.<\/p>\n<p>Der Mischer bietet eine Menge Erweiterungspotenzial: So k&ouml;nnen Sie daraus beispielsweise ein Add-In erstellen, das in allen Datenbanken zur Verf&uuml;gung steht.<\/p>\n<p>Falls Sie &ouml;fter die Daten der gleichen Anwendung erhalten und durchmischen m&ouml;chten, w&auml;re es au&szlig;erdem sinnvoll, die einzelnen Schritte beim Mischen festzuhalten. Sie k&ouml;nnten so das Durchmischen automatisieren und etwa durch einen einzigen Mausklick erledigen.<\/p>\n<p>Falls Sie weitere Anregungen haben, schicken Sie uns einfach eine E-Mail an <b>info@access-im-unternehmen.de<\/b>!<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DatenMischen.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{560ED0A7-741E-458A-BD1F-46020C63BEC9}\/aiu_773.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Programmieren ohne Testdaten macht keinen Spa&szlig;. Schon gar nicht, wenn man wei&szlig;, dass es tausende echte Datens&auml;tze gibt, die man aber aus Datenschutzgr&uuml;nden nicht einsetzen darf. Aber vielleicht reicht es ja, wenn man die Daten einfach unkenntlich macht Bei Personendaten etwa k&ouml;nnte man schlicht alle Vor- und Nachnamen sowie gegebenenfalls die Adressdaten ordentlich durcheinanderwirbeln. Dann hat man ausreichend realistisches Testmaterial und au&szlig;erdem ist der Datenschutzbeauftragte zufriedengestellt.<\/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":[66022011,662011,44000027],"tags":[],"class_list":["post-55000773","post","type-post","status-publish","format-standard","hentry","category-66022011","category-662011","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>Daten mischen - 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\/Daten_mischen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Daten mischen\" \/>\n<meta property=\"og:description\" content=\"Programmieren ohne Testdaten macht keinen Spa&szlig;. Schon gar nicht, wenn man wei&szlig;, dass es tausende echte Datens&auml;tze gibt, die man aber aus Datenschutzgr&uuml;nden nicht einsetzen darf. Aber vielleicht reicht es ja, wenn man die Daten einfach unkenntlich macht Bei Personendaten etwa k&ouml;nnte man schlicht alle Vor- und Nachnamen sowie gegebenenfalls die Adressdaten ordentlich durcheinanderwirbeln. Dann hat man ausreichend realistisches Testmaterial und au&szlig;erdem ist der Datenschutzbeauftragte zufriedengestellt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Daten_mischen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:02:38+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/aa70861e2c844e1ab896cba4e3d343cc\" \/>\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=\"19\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Daten mischen\",\"datePublished\":\"2020-05-22T22:02:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/\"},\"wordCount\":3194,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/aa70861e2c844e1ab896cba4e3d343cc\",\"articleSection\":[\"2\\\/2011\",\"2011\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/\",\"name\":\"Daten mischen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/aa70861e2c844e1ab896cba4e3d343cc\",\"datePublished\":\"2020-05-22T22:02:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/aa70861e2c844e1ab896cba4e3d343cc\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/aa70861e2c844e1ab896cba4e3d343cc\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_mischen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Daten mischen\"}]},{\"@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":"Daten mischen - 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\/Daten_mischen\/","og_locale":"de_DE","og_type":"article","og_title":"Daten mischen","og_description":"Programmieren ohne Testdaten macht keinen Spa&szlig;. Schon gar nicht, wenn man wei&szlig;, dass es tausende echte Datens&auml;tze gibt, die man aber aus Datenschutzgr&uuml;nden nicht einsetzen darf. Aber vielleicht reicht es ja, wenn man die Daten einfach unkenntlich macht Bei Personendaten etwa k&ouml;nnte man schlicht alle Vor- und Nachnamen sowie gegebenenfalls die Adressdaten ordentlich durcheinanderwirbeln. Dann hat man ausreichend realistisches Testmaterial und au&szlig;erdem ist der Datenschutzbeauftragte zufriedengestellt.","og_url":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:02:38+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/aa70861e2c844e1ab896cba4e3d343cc","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"19\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Daten mischen","datePublished":"2020-05-22T22:02:38+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/"},"wordCount":3194,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/aa70861e2c844e1ab896cba4e3d343cc","articleSection":["2\/2011","2011","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Daten_mischen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/","url":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/","name":"Daten mischen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/aa70861e2c844e1ab896cba4e3d343cc","datePublished":"2020-05-22T22:02:38+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Daten_mischen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/aa70861e2c844e1ab896cba4e3d343cc","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/aa70861e2c844e1ab896cba4e3d343cc"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Daten_mischen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Daten mischen"}]},{"@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\/55000773","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=55000773"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000773\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000773"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000773"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}