{"id":55000745,"date":"2010-10-01T00:00:00","date_gmt":"2020-05-22T22:07:57","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=745"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Der_BeispieldatenAssistent","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/","title":{"rendered":"Der Beispieldaten-Assistent"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/4fdf8f7ea9dc4ea498d47a318d51e207\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Auch wenn Software-Entwicklung mit Access normalerweise eine rundum begl&uuml;ckende gl&uuml;cklich machende Besch&auml;ftigung ist, so gibt es doch T&auml;tigkeiten, die man nur lustlos ausf&uuml;hrt. Der Autor dieser Zeilen etwa ist immer etwas ungehalten, wenn er Beispieldaten in eine oder mehrere Tabellen eingeben muss. Ist das nicht die langweiligste Arbeit &uuml;berhaupt Im krassen Gegensatz dazu steht die Aufgabe, einen Assistenten zu programmieren, der einem diese l&auml;stige Arbeit abnimmt! Einfach die Zieltabelle ausw&auml;hlen, f&uuml;r jedes Feld die Art der Testdaten ausw&auml;hlen und loslegen &#8211; lesen Sie hier, wie das funktioniert!<\/b><\/p>\n<p>Herr Fritz Mustermann, Teststra&szlig;e 1, 12345 Beispielhausen, Deutschland. Telefon 0123\/456789, Telefax 0123\/987654. Frau Martha M&uuml;ller &#8230; halt! So geht es nicht weiter. Selbst wenn der Kopf vom Programmieren raucht &#8211; Testdaten eingeben ist keine willkommene Abwechslung.<\/p>\n<p>Stattdessen f&uuml;hren wir doch lieber die folgenden Schritte durch:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Klicken Sie auf den Men&uuml;eintrag <b>Extras|Add-Ins|Beispieldaten-Assistent <\/b>(Access 2003 und &auml;lter) oder den Ribbon-Eintrag <b>Datenbanktools|Add-Ins|Beispieldaten-Assistent <\/b>(Access 2007 und j&uuml;nger).<\/li>\n<li class=\"aufz-hlung\">Es erscheint der Beispieldaten-Assistent (s. Bild 1). W&auml;hlen Sie hier die Tabelle aus, die Sie mit Beispieldaten best&uuml;cken m&ouml;chten. Die Liste im unteren Bereich des Beispieldaten-Assistenten zeigt nun alle Felder dieser Tabelle an.<\/li>\n<li class=\"aufz-hlung\">Geben Sie die Anzahl der Datens&auml;tze ein, die der Beispieldaten-Assistent f&uuml;r Sie anlegen soll.<\/li>\n<li class=\"aufz-hlung\">Betrachten Sie die Liste der Felder der zu f&uuml;llenden Tabelle. Alle Felder enthalten in der Spalte <b>F&uuml;llen <\/b>einen Haken. Wenn Sie ein Feld nicht mit Beispieldaten f&uuml;llen m&ouml;chten, entfernen Sie einfach den entsprechenden Haken.<\/li>\n<li class=\"aufz-hlung\">In der dritten Spalte finden Sie in einigen Zeilen den Eintrag <b>&lt;Ausw&auml;hlen&gt;<\/b>, in anderen wurden bereits automatisch andere Eintr&auml;ge ausgew&auml;hlt &#8211; zum Beispiel <b>Vorname <\/b>oder <b>Nachname<\/b>. Hier stellen Sie die Art der Daten ein, mit der Sie das entsprechende Feld f&uuml;llen wollen &#8211; dazu sp&auml;ter mehr.<\/li>\n<li class=\"aufz-hlung\">F&uuml;r manche Datenarten zeigt der Assistent oberhalb der Liste Informationen f&uuml;r <b>Parameter 1<\/b>, <b>Parameter 2 <\/b>und <b>Parameter 3 <\/b>an. Hierbei handelt es sich um zus&auml;tzliche Parameter, mit denen Sie etwa f&uuml;r das Anlegen von Datumsangaben den Bereich der Daten eingrenzen (beispielsweise <b>1.1.2010 <\/b>bis <b>30.6.2010<\/b>).<\/li>\n<li class=\"aufz-hlung\">Wenn Sie alle Informationen angegeben haben, brauchen Sie nur noch auf die Schaltfl&auml;che <b>Beispieldaten schreiben <\/b>zu klicken &#8211; schon legt der Beispieldaten-Assistent 100, 1.000 oder noch mehr Beispieldatens&auml;tze an. Je nach Konfiguration der zu erstellenden Daten kann dies einige Sekunden dauern &#8211; aber besser einen Kaffee trinken gehen, als selbst Beispieldaten einzugeben!<\/li>\n<\/ul>\n<p><b><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic001.png\" alt=\"pic001.png\" \/> <\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Der Beispieldaten-Assistent im Einsatz<\/span><\/b><\/p>\n<p><b>Beispieldaten-Arten<\/b><\/p>\n<p>Wie bereits angedeutet, gibt es verschiedene Arten von Beispieldaten. Nachfolgend stellen wir diese vor und erl&auml;utern die Parameter, die Sie zum Anlegen dieser Daten festlegen m&uuml;ssen.<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Vorname<\/b>: Vornamen werden per Zufall aus einer Tabelle gef&uuml;llt.<\/li>\n<li class=\"aufz-hlung\"><b>Nachname<\/b>: Gleiches gilt f&uuml;r Nachnamen: Auch sie werden zuf&auml;llig aus einer Tabelle ausgew&auml;hlt.<\/li>\n<li class=\"aufz-hlung\"><b>AnredeID<\/b>: Wenn die Zieltabelle ein Feld namens <b>AnredeID <\/b>enth&auml;lt, das auf einer Tabelle namens <b>tblAnreden <\/b>oder &auml;hnlich basiert, die zwei Felder etwa namens <b>AnredeID <\/b>und <b>Anrede <\/b>enth&auml;lt, k&ouml;nnen Sie diesen Datentyp verwenden. Er tr&auml;gt automatisch die <b>AnredeID <\/b>der Tabelle <b>tblAnreden <\/b>in das Zielfeld ein, das dem Geschlecht des Vornamens des Datensatzes entspricht. Die drei Parameter erwarten die Angabe der Tabelle, aus der die Anreden entnommen werden, den Namen des Prim&auml;rschl&uuml;sselfeldes dieser Tabelle sowie den Namen des Feldes, das die Anreden selbst enth&auml;lt.<\/li>\n<li class=\"aufz-hlung\"><b>Firma<\/b>: Die Firma besteht aus einem Eintrag der Nachnamen-Sammlung plus einem zuf&auml;lligen Wert wie <b>GmbH<\/b>, <b>AG <\/b>et cetera.<\/li>\n<li class=\"aufz-hlung\"><b>Stra&szlig;e<\/b>: Die Stra&szlig;e wird zuf&auml;llig einer Stra&szlig;en-Tabelle entnommen.<\/li>\n<li class=\"aufz-hlung\"><b>Hausnummer<\/b>: Die Hausnummern werden zur Laufzeit per Zufallsgenerator erzeugt. Mit <b>Parameter 1 <\/b>legen Sie den kleinsten Wert, mit <b>Parameter 2 <\/b>den h&ouml;chsten Wert f&uuml;r die Hausnummer fest. Das Tool legt den Bereich standardm&auml;&szlig;ig auf <b>1 <\/b>&#8211; <b>100 <\/b>fest.<\/li>\n<li class=\"aufz-hlung\"><b>Stra&szlig;e mit Hausnummer<\/b>: F&uuml;gt die Informationen wie in <b>Stra&szlig;e <\/b>und <b>Hausnummer <\/b>gleichzeitig in ein Feld ein. Auch hier k&ouml;nnen Sie den Zahlenbereich f&uuml;r die Hausnummer festlegen.<\/li>\n<li class=\"aufz-hlung\"><b>PLZ<\/b>: Die PLZ wird gemeinsam mit dem Ort aus einer Tabelle einiger realer Kombinationen aus PLZ, Ort, Bundesland, Land und Vorwahl zuf&auml;llig ausgew&auml;hlt.<\/li>\n<li class=\"aufz-hlung\"><b>Ort<\/b>: siehe PLZ<\/li>\n<li class=\"aufz-hlung\"><b>PLZ und Ort<\/b>: F&uuml;gt PLZ und Ort gleichzeitig in ein Feld ein.<\/li>\n<li class=\"aufz-hlung\"><b>Land<\/b>: siehe PLZ<\/li>\n<li class=\"aufz-hlung\"><b>Bundesland<\/b>: siehe PLZ<\/li>\n<li class=\"aufz-hlung\"><b>Telefon<\/b>: Besteht aus Vorwahl und Rufnummer. Die Vorwahl wird ebenfalls aus der Tabelle mit PLZ, Ort und so weiter ermittelt. Die Rufnummer wird per Zufallsgenerator festgelegt. <b>Parameter 1 <\/b>und <b>Parameter 2 <\/b>geben die minimale und die maximale Anzahl Stellen der Telefonnummer an, die Standardwerte sind <b>6 <\/b>und <b>8<\/b>.<\/li>\n<li class=\"aufz-hlung\"><b>E-Mail<\/b>: Die E-Mail wird aus dem Vornamen und dem Nachnamen nach dem Schema <b>&lt;Vorname&gt;@&lt;Nachname&gt;.de <\/b>zusammengesetzt.<\/li>\n<li class=\"aufz-hlung\"><b>Anrede<\/b>: Wenn es kein Lookup-Feld f&uuml;r die Anrede gibt, sondern nur ein normales Textfeld, tr&auml;gt diese Datenart je nach dem f&uuml;r den Datensatz ermittelten Vornamen die Anrede <b>Herr <\/b>oder <b>Frau <\/b>ein.<\/li>\n<li class=\"aufz-hlung\"><b>Geschlecht<\/b>: Auch das Geschlecht wird entsprechend dem gew&auml;hlten Vornamen eingestellt.<\/li>\n<li class=\"aufz-hlung\"><b>Internet<\/b>: Die Internetadresse wird nach dem Schema <b>www.&lt;Nachname&gt;.de <\/b>zusammengestellt.<\/li>\n<li class=\"aufz-hlung\"><b>Zahlen<\/b>: Zahlen werden nach dem Zufallsprinzip ausgew&auml;hlt. <b>Parameter 1<\/b> gibt dabei die untere Grenze der Zahl an, <b>Parameter 2 <\/b>die obere Grenze und <b>Parameter 3 <\/b>die Anzahl der Stellen hinter dem Komma.<\/li>\n<li class=\"aufz-hlung\"><b>Datum<\/b>: Auch das Datum wird per Zufallsgenerator ermittelt. <b>Parameter 1 <\/b>gibt die Untergrenze, <b>Parameter 2 <\/b>die Obergrenze des Datumsbereichs an.<\/li>\n<li class=\"aufz-hlung\"><b>Fremdschl&uuml;sselfeld\/Nachschlagefeld<\/b>: Dieser Datentyp ist besonders interessant: Sie k&ouml;nnen damit Daten aus einer beliebigen Lookup-Tabelle ausw&auml;hlen lassen. Der erste Parameter nimmt dabei den Namen der Lookup-Tabelle auf, der zweite den Namen des Prim&auml;rschl&uuml;sselfeldes dieser Tabelle. F&uuml;r diesen Datentyp wird je Datensatz ein zuf&auml;lliger Eintrag der Lookup-Tabelle ausgew&auml;hlt.<\/li>\n<li class=\"aufz-hlung\"><b>Ja\/Nein<\/b>: Dieser Datentyp w&auml;hlt einen der Werte <b>-1 <\/b>oder <b>0 <\/b>aus. Mit dem ersten Parameter geben Sie einen Wert zwischen <b>1 <\/b>und <b>100 <\/b>f&uuml;r die Wahrscheinlichkeit f&uuml;r den Wert <b>-1 <\/b>an.<\/li>\n<li class=\"aufz-hlung\"><b>Nummerierte Texte<\/b>: F&uuml;r manche Felder ist es schwierig, sinnvolle Zufallswerte zu ermitteln &#8211; zum Beispiel Projektnamen. In diesem Fall sollten Sie mit Werten wie <b>Projekt 1<\/b>, <b>Projekt 2 <\/b>et cetera vorlieb nehmen. F&uuml;r diesen Fall verwenden Sie den Datentyp <b>Nummerierte Texte<\/b>: Sie geben f&uuml;r den ersten Parameter eine beliebige Zeichenkette an, die an irgendeiner Stelle den Ausdruck <b>[] <\/b>enth&auml;lt. F&uuml;r den zweiten Parameter geben Sie die Startzahl an. Ein Ausdruck wie <b>Projekt [] <\/b>f&uuml;hrt bei der Startzahl <b>12 <\/b>zu den Beispielwerten <b>Projekt 12<\/b>, <b>Projekt 13 <\/b>und so weiter.<\/li>\n<\/ul>\n<p><b>Beispiel zum Anlegen von Beispieldaten<\/b><\/p>\n<p>Schauen wir uns an, wie der Beispieldaten-Assistent bei einer einfachen Adressentabelle arbeitet. Nachdem Sie die Datenbankdatei mit der zu f&uuml;llenden Tabelle ge&ouml;ffnet und den Beispieldaten-Assistenten gestartet haben, w&auml;hlen Sie mit dem Kombinationsfeld im oberen Bereich zun&auml;chst die Zieltabelle aus, in diesem Fall <b>tblAdressen<\/b>. Dann tragen Sie die Anzahl der gew&uuml;nschten Datens&auml;tze ein, zum Beispiel 100. Schlie&szlig;lich geht es an die Festlegung der Art der einzuf&uuml;genden Daten.<\/p>\n<p>Hier nimmt Ihnen der Beispieldaten-Assistent eine Menge Arbeit ab: Er scannt n&auml;mlich die Feldnamen und vergleicht die Werte mit einer beliebig erweiterbaren Mapping-Tabelle, die gleich den richtigen Datentyp f&uuml;r das Hinzuf&uuml;gen der Beispieldaten ausw&auml;hlt.<\/p>\n<p>F&uuml;r unsere Tabelle <b>tblAdressen <\/b>bleibt somit nur noch wenig zu tun (s. Bild 2): Alle Felder wurden gleich mit den richtigen Datentypen versehen. Au&szlig;erdem hat der Assistent f&uuml;r die Felder, f&uuml;r die Standardwerte vorzugeben sind, passende Werte eingetragen. Dies betrifft beispielsweise das Feld <b>AnredeID<\/b>. Hier hat der Assistent erkannt, dass wom&ouml;glich eine Tabelle hinter dem Kombinationsfeld zur Auswahl der Anrede steckt, und gleich die richtigen Parameter voreingestellt: <b>Parameter1 <\/b>erh&auml;lt mit <b>tblAnreden <\/b>die Tabelle, aus der die Anreden stammen, <b>Parameter2 <\/b>den Namen des Prim&auml;rschl&uuml;sselfeldes dieser Tabelle und <b>Parameter3 <\/b>das Feld, das schlie&szlig;lich die verwendeten Anreden enth&auml;lt. Ein weiteres Beispiel ist das Feld <b>Stra&szlig;e<\/b>, in dem die Felder <b>Parameter1 <\/b>und <b>Parameter2 <\/b>mit <b>1 <\/b>und <b>100 <\/b>den Bereich der Hausnummern enthalten. Auch bei den Feldern <b>Telefon <\/b>und <b>Telefax <\/b>wurden automatisch die Parameter f&uuml;r den Datentyp <b>Telefon <\/b>eingetragen, n&auml;mlich die Anzahl der Stellen der Telefonnummer hinter der Vorwahl.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Die Datenarten werden je nach Feldname gleich automatisch hinzugef&uuml;gt.<\/span><\/b><\/p>\n<p>Ein Klick auf die Schaltfl&auml;che <b>Beispieldateien schreiben <\/b>startet den eigentlichen Vorgang, wobei die Anzahl der geschriebenen Datens&auml;tze neben der Schaltfl&auml;che angezeigt wird. Das Ergebnis beeindruckt: Schnell landen 100 sehr realistisch wirkende Beispieldatens&auml;tze in der Tabelle <b>tblAdressen<\/b> (s. Bild 3).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Die Adressen-Tabelle mit frisch angelegten Beispieldaten<\/span><\/b><\/p>\n<h3>Beispieldaten mit Lookup-Tabellen<\/h3>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Wenn Sie schnell Daten in mehreren Tabellen anlegen m&ouml;chten, erledigen Sie dies hintereinander. Nehmen wir an, Sie m&ouml;chten die Tabellen des Datenmodells aus Bild 4 mit Daten f&uuml;llen. Dann brauchen Sie zun&auml;chst eine Reihenfolge, die sich zum gr&ouml;&szlig;ten Teil danach richtet, wie die Tabellen miteinander verkn&uuml;pft sind. Wir m&uuml;ssen nat&uuml;rlich erst die Tabellen mit Daten f&uuml;llen, auf die von anderen Tabellen aus per Fremdschl&uuml;sselfeld verwiesen wird. Der einfachste Fall ist die Tabelle <b>tblAnreden<\/b>: Sie wird von zwei Tabellen referenziert und verweist auf keine andere Tabelle. Sie ist aber auch kein Fall f&uuml;r den Beispieldaten-Assistenten, denn die beiden Datens&auml;tze mit den Werten <b>Herr <\/b>und <b>Frau <\/b>f&uuml;r das Feld <b>Anrede <\/b>f&uuml;llen wir schnell von Hand.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Die Tabellen dieses Datenmodells sollen mit dem Beispieldaten-Assistenten gef&uuml;llt werden.<\/span><\/b><\/p>\n<p>Alle &uuml;brigen Tabellen verweisen auf mindestens eine andere Tabelle. Die beiden Tabellen <b>tblKunden <\/b>und <b>tblMitarbeiter <\/b>besitzen jedoch nur Fremdschl&uuml;sselfelder zur Tabelle <b>tblAnreden<\/b>, die ja schon gef&uuml;llt ist. Also k&ouml;nnen wir diese zuerst mit Beispieldaten bef&uuml;llen. Danach kommt die Tabelle <b>tblProjekte <\/b>dran, die wiederum auf <b>tblKunden <\/b>verweist &#8211; und diese Tabelle wird ja gleich zu Beginn gef&uuml;llt. Die letzte zu f&uuml;llende Tabelle ist die Tabelle <b>tblMitarbeiterProjekte<\/b>, die festlegt, welcher Mitarbeiter in welchem Projektteam sitzt.<\/p>\n<p>Beginnen wir also mit der Kundentabelle. Die Parameter f&uuml;r diese Tabelle zeigt Bild 5. F&uuml;r das Feld <b>Kunde <\/b>verwenden wir den Datentyp <b>Firma<\/b>, der praktisch identisch ist. Sp&auml;ter erfahren Sie, wie Sie das Mapping von Feldnamen erweitern k&ouml;nnen, sodass etwa ein Eintrag wie <b>Kunde <\/b>direkt auf den Datentyp <b>Firma <\/b>gemappt wird. Die meisten der &uuml;brigen Felder werden automatisch erkannt. Sie m&uuml;ssen lediglich noch das Feld <b>KundeSeit <\/b>und <b>Aktiv <\/b>einstellen. Ersteres soll mit Datumsangaben gef&uuml;llt werden, wobei der Eintritt fr&uuml;hestens am 1. Januar 2003 und sp&auml;testens am 30. Juni 2010 erfolgt sein soll. Das Feld <b>Aktiv <\/b>soll mit <b>Ja\/Nein<\/b>-Werten gef&uuml;llt werden, wobei 60% der Datens&auml;tze den Wert <b>Ja <\/b>annehmen sollen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Einstellungen zum F&uuml;llen einer Kundentabelle<\/span><\/b><\/p>\n<p>Die Tabelle <b>tblMitarbeiter <\/b>birgt ebenfalls keine &Uuml;berraschungen, was die zu f&uuml;llenden Felder betrifft (s. Bild 7).<\/p>\n<p><!--30percent--><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic006.png\" alt=\"pic006.png\" \/> <\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Mitarbeiter werden auch ben&ouml;tigt &#8211; 20 sollten jedoch ausreichen.<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic007.png\" alt=\"pic007.png\" \/> <\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Die Tabelle tblProjekte ben&ouml;tigt einen durchnummerierten Text und Verweise auf eine andere Tabelle.<\/span><\/b><\/p>\n<p>Wie Bild 8 zeigt, sind unsere Bem&uuml;hungen durchaus von Erfolg gekr&ouml;nt: Die Tabelle <b>tblProjekte <\/b>enth&auml;lt die erwarteten Texte und ist wie gew&uuml;nscht mit den Datens&auml;tzen der Tabelle <b>tblKunden <\/b>verkn&uuml;pft.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic008.png\" alt=\"pic008.png\" \/>\n<\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Eine per Beispieldaten-Assistent gef&uuml;llte Projekttabelle<\/span><\/b><\/p>\n<p>Fehlt nur noch die Tabelle <b>tblMitarbeiterProjekte<\/b>, mit der wir die Mitarbeiter den einzelnen Projekten zuteilen und so Projektteams bilden. Die Tabelle enth&auml;lt lediglich zwei Fremdschl&uuml;sselfelder, was aber nicht weiter schlimm ist: Der Beispieldaten-Assistent erkennt selbstst&auml;ndig, dass die beiden Felder <b>MitarbeiterID <\/b>und <b>ProjektID <\/b>Fremdschl&uuml;sselfelder sind, und liest die entsprechenden Parameter aus. So sollen die Werte f&uuml;r das Feld <b>MitarbeiterID <\/b>aus der Tabelle <b>tblMitarbeiter <\/b>mit dem Prim&auml;rschl&uuml;sselfeld <b>MitarbeiterID <\/b>und die Werte f&uuml;r das Feld <b>ProjektID <\/b>aus der Tabelle <b>tblProjekte <\/b>mit dem Prim&auml;rschl&uuml;sselfeld <b>ProjektID <\/b>entnommen werden. Auch dies gelingt, wie Bild 9 zeigt, problemlos.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic009.png\" alt=\"pic009.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Auch das F&uuml;llen von Verkn&uuml;pfungstabellen ist problemlos m&ouml;glich.<\/span><\/b><\/p>\n<p>Der Assistent enth&auml;lt sogar Funktionalit&auml;t, die daf&uuml;r sorgt, dass Fehler beim Anlegen von Datens&auml;tzen, welche die Integrit&auml;t verletzen, abgefangen werden. Die Tabelle <b>tblMitarbeiterProjekte<\/b> enth&auml;lt beispielsweise einen eindeutigen, zusammengesetzten Index f&uuml;r die beiden Felder <b>MitarbeiterID <\/b>und <b>ProjektID<\/b>. Dies f&uuml;hrt beim Versuch, einen Mitarbeiter zweimal zum gleichen Projekt hinzuzuf&uuml;gen, normalerweise zu einem Fehler.<\/p>\n<p>Der Beispieldaten-Assistent sieht dar&uuml;ber hinweg und legt einfach einen weiteren Datensatz an &#8211; solange, bis er ausreichend passende Kombinationen gefunden hat. Das Ergebnis k&ouml;nnen Sie in Bild 10 betrachten.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic010.png\" alt=\"pic010.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Die Tabelle tblMitarbeiterProjekte mit frischen Daten<\/span><\/b><\/p>\n<p><b>Mapping bearbeiten<\/b><\/p>\n<p>Das Hauptformular des Beispieldaten-Assistenten besitzt eine Schaltfl&auml;che mit der Beschriftung <b>Mapping bearbeiten<\/b>, mit der Sie den Dialog aus Bild 11 &ouml;ffnen k&ouml;nnen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic011.png\" alt=\"pic011.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11: In diesem Dialog k&ouml;nnen Sie festlegen, welche Datenarten die Beispieldaten f&uuml;r Felder mit bestimmten Namen aufweisen sollen.<\/span><\/b><\/p>\n<p>Dieser Dialog bietet eine Liste aller vordefinierten Mappings. Ein Mapping bewirkt Folgendes: Wenn Sie im Beispieldaten-Assistenten die zu f&uuml;llende Tabelle ausw&auml;hlen, analysiert der Assistent zun&auml;chst die Feldnamen aller in der Tabelle enthaltenen Felder. Wenn er auf ein Feld namens <b>Vorname <\/b>st&ouml;&szlig;t, legt er als Datenart f&uuml;r das Hinzuf&uuml;gen von Beispieldaten automatisch den Typ <b>Vorname <\/b>fest. Gleiches gilt f&uuml;r alle im Dialog <b>Datenart-Mapping <\/b>angezeigten Feldnamen: Alle besitzen eine Datenart, die automatisch beim Ausw&auml;hlen einer neuen Tabelle f&uuml;r Felder mit entsprechender Bezeichnung festgelegt wird.<\/p>\n<p>Der Autor hat die Mappings so festgelegt, dass die meisten der in seinen Tabellen vorkommenden Feldnamen automatisch erkannt und auf eine der Datenarten gemappt werden k&ouml;nnen. M&ouml;glicherweise verwenden Sie f&uuml;r das eine oder andere Feld standardm&auml;&szlig;ig eine andere Bezeichnung, was aber kein Problem ist: Sie k&ouml;nnen die Zuweisung der Datenarten problemlos anpassen, indem Sie entweder zus&auml;tzliche Mappings anlegen oder bestehende anpassen.<\/p>\n<p>Eine Ausnahme macht der Beispieldaten-Assistent &uuml;brigens f&uuml;r Fremdschl&uuml;sselfelder: Diese werden immer mit der Datenart <b>Fremdschl&uuml;sselfeld\/Lookuptabelle <\/b>verkn&uuml;pft, au&szlig;erdem stellt der Beispieldaten-Assistent automatisch die ersten beiden Parameter auf die verkn&uuml;pfte Tabelle und den Namen ihres Prim&auml;rschl&uuml;sselfeldes ein.<\/p>\n<p><b>Wie funktioniert der Beispieldaten-Assistent<\/b><\/p>\n<p>Der Beispieldaten-Assistent ist als Men&uuml;-Add-In ausgelegt, das hei&szlig;t, dass Sie ihn &uuml;ber den Men&uuml;punkt <b>Extras|Add-Ins|Add-In-Manager <\/b>(Access 2003 und &auml;lter) beziehungsweise den Ribbon-Eintrag <b>Datenbanktools|Add-Ins|Add-In-Manager <\/b>(Access 2007 und j&uuml;nger) installieren m&uuml;ssen. Dort erscheint der Dialog <b>Add-In-Manager<\/b>, mit dem Sie die Datei <b>Beispieldaten-Assistent.mda <\/b>aus dem Verzeichnis ausw&auml;hlen, in dem Sie diese gespeichert haben, und diesen so installieren (s. Bild 12).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic012.png\" alt=\"pic012.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12: Installieren des Beispieldaten-Assistenten<\/span><\/b><\/p>\n<p>Die Add-In-Datei <b>Beispieldaten-Assistent.mda <\/b>enth&auml;lt eine Tabelle namens <b>USysRegInfo<\/b>. Diese liefert die Informationen, die beim Installieren des Add-Ins in die Windows-Registry eingetragen werden. Access liest diese Informationen beim Start aus und entdeckt, dass es in der Liste der Men&uuml;-Add-Ins einen Eintrag namens <b>Beispieldaten-Assistent <\/b>einf&uuml;gen soll, der beim Anklicken unsere Add-In-Datei startet. Einzelheiten zum Erstellen solcher Add-Ins erhalten Sie im Beitrag <b>Access-Add-Ins <\/b>(<b>www.access-im-unternehmen.de\/643<\/b>).<\/p>\n<p><b>Funktionsweise des Hauptformulars<\/b><\/p>\n<p>Das Hauptformular hei&szlig;t <b>frmBeispieldaten <\/b>und sieht in der Entwurfsansicht wie in Bild 13 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic013.png\" alt=\"pic013.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 13: Das Hauptformular des Assistenten in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Die Auswahl der mit Beispieldaten zu f&uuml;llenden Tabelle erfolgt &uuml;ber ein Kombinationsfeld namens <b>cboTabellen<\/b>. Dieses wird gleich beim &Ouml;ffnen des Formulars mit den Namen der Tabellen der betroffenen Datenbankdatei gef&uuml;llt. Dies erledigt die folgende Prozedur, die durch das Ereignis <b>Beim &Ouml;ffnen <\/b>des Formulars ausgel&ouml;st wird:<\/p>\n<pre>Private Sub Form_Open(Cancel As Integer)\r\n    Dim objTable As Object\r\n    Dim strTable As String\r\n    Do While Me!cboTabellen.ListCount &gt; 0\r\n        Me!cboTabellen.RemoveItem 0\r\n    Loop\r\n    Me!cboTabellen.AddItem &quot;&lt;Ausw&auml;hlen&gt;&quot;\r\n    For Each objTable In CurrentData.AllTables\r\n        strTable = objTable.Name\r\n        If Not strTable Like &quot;MSys*&quot; And Not strTable Like &quot;USys*&quot; Then\r\n            Me!cboTabellen.AddItem strTable\r\n        End If\r\n    Next objTable\r\n    Me!cboTabellen = Me!cboTabellen.ItemData(0)\r\nEnd Sub<\/pre>\n<p>Die Prozedur verwendet die <b>RemoveItem<\/b>&#8211; und die <b>Add<\/b>-Methoden des Kombinationsfeldes, um alle Tabellen anzuzeigen, deren Name nicht mit <b>MSys&#8230; <\/b>oder <b>USys&#8230; <\/b>beginnt &#8211; dies sind Systemtabellen, die sicher nicht mit Beispieldaten gef&uuml;llt werden sollen. Als erster Eintrag wird jedoch der Wert <b>&lt;Ausw&auml;hlen&gt; <\/b>hinzugef&uuml;gt. Damit dieser gleich beim &Ouml;ffnen des Formulars im Kombinationsfeld erscheint, stellt die letzte Anweisung der Prozedur den Wert des Kombinationsfeldes auf den Wert des ersten Eintrags, hier <b>&lt;Ausw&auml;hlen&gt;<\/b>, ein.<\/p>\n<p><b>Auswahl einer Tabelle<\/b><\/p>\n<p>Die Auswahl einer Tabelle l&ouml;st die Prozedur aus <a href=\"#anker-39-anchor\">Listing 1<\/a> aus. Sie verwendet zwei Objektvariablen des Typs <b>Database<\/b>, um jeweils einen Verweis auf die ge&ouml;ffnete und einen auf die Add-In-Datenbank zu speichern. Der Hintergrund ist, dass das Add-In sowohl auf die Tabellen des Frontends zugreifen muss (um die Beispieldaten zu schreiben) als auch auf die Daten der Add-In-Datenbank (etwa um Beispieldaten aus den daf&uuml;r vorgesehenen Tabellen auszulesen).<\/p>\n<p class=\"listingueberschrift\">Listing 1: F&uuml;llen des Unterformulars mit den Feldern der ausgew&auml;hlten Tabelle und den entsprechenden Datenarten und Parametern<\/p>\n<pre>Private Sub cboTabellen_AfterUpdate()\r\n    ''Deklaration aus Platzgr&uuml;nden nicht abgedruckt\r\n    Set db = CurrentDb\r\n    Set dbc = CodeDb\r\n    If Me!cboTabellen = &quot;&lt;Ausw&auml;hlen&gt;&quot; Then\r\n        Exit Sub\r\n    End If\r\n    strTable = Me!cboTabellen\r\n    dbc.Execute &quot;DELETE FROM tblTabellenfelder&quot;, dbFailOnError\r\n    Me!frmTabellenfelder.Form.Requery\r\n    Set tdf = db.TableDefs(strTable)\r\n    For Each fld In tdf.Fields\r\n        lngDatenartID = Nz(CLookup(&quot;DatenartID&quot;, &quot;tblDatenartMapping&quot;, &quot;Feldname = ''&quot; &amp; fld.Name &amp; &quot;''&quot;))\r\n        strParameter1 = Nz(CLookup(&quot;Parameter1&quot;, &quot;tblDatenarten&quot;, &quot;DatenartID = &quot; &amp; lngDatenartID), &quot;&quot;)\r\n        strParameter2 = Nz(CLookup(&quot;Parameter2&quot;, &quot;tblDatenarten&quot;, &quot;DatenartID = &quot; &amp; lngDatenartID), &quot;&quot;)\r\n        strParameter3 = Nz(CLookup(&quot;Parameter3&quot;, &quot;tblDatenarten&quot;, &quot;DatenartID = &quot; &amp; lngDatenartID), &quot;&quot;)\r\n        On Error Resume Next\r\n        strDisplayControl = fld.Properties(&quot;DisplayControl&quot;)\r\n        If Err.Number = 0 Then\r\n            Select Case strDisplayControl\r\n                Case 109 ''Textbox\r\n                Case 106 ''Checkbox\r\n                Case 111 ''ComboBox\r\n                    If fld.Properties(&quot;RowSourceType&quot;) = &quot;Table\/Query&quot; Then\r\n                        Set rstCombo = db.OpenRecordset(fld.Properties(&quot;RowSource&quot;), dbOpenDynaset)\r\n                        strParameter1 = rstCombo.Fields(0).SourceTable\r\n                        strParameter2 = rstCombo.Fields(fld.Properties(&quot;BoundColumn&quot;) - 1).Name\r\n                        If lngDatenartID = 14 Then ''AnredeID\r\n                            strColumnWidths = fld.Properties(&quot;ColumnWidths&quot;)\r\n                            For i = LBound(Split(strColumnWidths, &quot;;&quot;)) To\r\n                                UBound(Split(strColumnWidths, &quot;;&quot;))\r\n                                If Split(strColumnWidths, &quot;;&quot;)(i) &gt; 0 Then\r\n                                    strParameter3 = rstCombo.Fields(i).Name\r\n                                    Exit For\r\n                                End If\r\n                            Next i\r\n                        Else\r\n                            lngDatenartID = 20\r\n                        End If\r\n                    End If\r\n                Case Else\r\n                    Debug.Print strDisplayControl\r\n            End Select\r\n        Else\r\n            strDisplayControl = &quot;&quot;\r\n        End If\r\n        On Error GoTo 0\r\n        dbc.Execute &quot;INSERT INTO tblTabellenfelder(Tabellenfeld, Fuellen, DatenartID, Parameter1, _\r\n            Parameter2, Parameter3) VALUES(''&quot; &amp; fld.Name &amp; &quot;'', True, &quot; &amp; lngDatenartID &amp; &quot;, ''&quot; _\r\n            &amp; strParameter1 &amp; &quot;'', ''&quot; &amp; strParameter2 &amp; &quot;'', ''&quot; &amp; strParameter3 &amp; &quot;'')&quot;, dbFailOnError\r\n    Next fld\r\n    Me!frmTabellenfelder.Form.Requery\r\nEnd Sub<\/pre>\n<p>Den Verweis auf die aktuelle Datenbank liefert die Funktion <b>CurrentDB<\/b>, den auf die Add-In-Datenbank die Funktion <b>CodeDB<\/b>.<\/p>\n<p>Die Prozedur speichert den Namen der Tabelle in einer Variablen und l&ouml;scht dann zun&auml;chst alle Eintr&auml;ge der Tabelle <b>tblTabellenfelder<\/b>. Diese Tabelle speichert die Konfiguration zum Anlegen der Beispieldaten in der ausgew&auml;hlten Tabelle (s. Bild 14) und dient auch als Datenherkunft des Unterformulars <b>frmTabellenfelder<\/b>, mit dem der Benutzer die Konfiguration editieren kann.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic014.png\" alt=\"pic014.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 14: Diese Tabelle der Add-In-Datenbank speichert die Konfiguration f&uuml;r das anstehende Einf&uuml;gen der Beispieldaten.<\/span><\/b><\/p>\n<p>Anschlie&szlig;end erzeugt die Prozedur ein <b>TableDef<\/b>-Objekt auf Basis dieser Tabelle und durchl&auml;uft ihre Felder, wobei das aktuelle Feld jeweils mit der <b>Field<\/b>-Variablen <b>fld <\/b>referenziert wird.<\/p>\n<p>Hier kommt das bereits erw&auml;hnte Mapping von Feldern mit bestimmten Feldnamen auf die f&uuml;r das Anlegen vorgesehenen Datenarten ins Spiel: Die Funktion <b>CLookup <\/b>durchsucht die Tabelle <b>tblDatenartMapping <\/b>und liefert eine <b>DatenartID <\/b>zur&uuml;ck, wenn sie einen Eintrag gefunden hat, der den Feldnamen des aktuellen Feldes enth&auml;lt.<\/p>\n<p>Warum <b>CLookup <\/b>und nicht <b>DLookup<\/b> Nun: <b>DLookup <\/b>greift immer auf die Daten der aktuell ge&ouml;ffneten Datenbank zu, aber nicht auf die in der Add-In-Datenbank gespeicherten Tabellen. Daher haben wir eine kleine Ersatzfunktion geschrieben, die genau so wie <b>DLookup <\/b>funktioniert, aber die Tabellen der Add-In-Datenbank verwendet. Sie finden diese Funktion im Modul <b>mdlTools <\/b>der Add-In-Datenbank. Desweiteren lesen drei Aufrufe von <b>CLookup <\/b>eventuell voreingestellte Parameter ein und schreiben diese in entsprechende Variablen.<\/p>\n<p>Falls der Benutzer eine Beschriftung f&uuml;r ein Tabellenfeld eingegeben hat, wird diese statt des Feldnamens verwendet.<\/p>\n<p>Danach erfolgt eine Untersuchung der Anzeige des jeweiligen Feldinhalts: Hier kommen Textfelder, Kontrollk&auml;stchen und Kombinationsfelder zum Einsatz. Falls es sich um ein Kombinationsfeld handelt, pr&uuml;ft die Prozedur, ob dieses Daten aus einer verkn&uuml;pften Tabelle anzeigt. Falls ja, erh&auml;lt das aktuelle Feld als Datenart den Eintrag <b>Fremdschl&uuml;sselfeld\/Lookuptabelle<\/b> und die Parameter werden auf den Namen der verkn&uuml;pften Tabelle sowie ihres Prim&auml;rschl&uuml;sselfeldes eingestellt.<\/p>\n<p>Felder, die zuvor &uuml;ber die Mapping-Tabelle f&uuml;r die Datenart <b>AnredeID <\/b>erkannt wurden, erhalten ebenfalls eine Sonderbehandlung, da auch deren Inhalt meist aus einer verkn&uuml;pften Tabelle stammt.<\/p>\n<p>Schlie&szlig;lich wird f&uuml;r jedes Feld ein Datensatz in die Tabelle <b>tblTabellenfelder <\/b>der Add-In-Datenbank geschrieben. Nach dem Durchlaufen aller Felder der Tabelle aktualisiert die Prozedur schlie&szlig;lich das Unterformular <b>frmTabellenfelder<\/b>.<\/p>\n<p><b>Schreiben der Beispieldaten<\/b><\/p>\n<p>Wenn der Benutzer die &uuml;ber das Mapping ermittelte Konfiguration gepr&uuml;ft und gegebenenfalls korrigiert hat, bet&auml;tigt er die Schaltfl&auml;che <b>Beispieldaten schreiben<\/b>.<\/p>\n<p>Diese l&ouml;st einen etwas umfangreicheren Vorgang aus, der im Wesentlichen durch die Prozedur <b>cmdBeispieldaten_Click <\/b>gesteuert wird (<a href=\"#anker-41-anchor\">Listing 2<\/a> zeigt eine stark gek&uuml;rzte Fassung). Diese Prozedur pr&uuml;ft zun&auml;chst ein paar Eingaben, zum Beispiel, ob der Benutzer eine Tabelle ausgew&auml;hlt und die gew&uuml;nschte Anzahl Datens&auml;tze angegeben hat.<\/p>\n<p class=\"listingueberschrift\">Listing 2: Gek&uuml;rzte Fassung der Prozedur, die das Schreiben der Beispieldaten steuert<\/p>\n<pre>Private Sub cmdBeispieldatenSchreiben_Click()\r\n    ''...\r\n    Set objBeispieldaten = New clsBeispieldaten\r\n    Set rst = db.OpenRecordset(&quot;SELECT * FROM &quot; &amp; Me!cboTabellen &amp; &quot; WHERE 1 = 2&quot;, dbOpenDynaset)\r\n    Set rstTabellenfelder = dbc.OpenRecordset(&quot;SELECT * FROM tblTabellenfelder WHERE DatenartID IS &quot; _\r\n        &amp; &quot;NOT NULL&quot;, dbOpenDynaset)\r\n    DoCmd.Hourglass True\r\n    Me!lbl.Visible = True\r\n    Me!lblAnzahl.Visible = True\r\n    For i = 1 To Me!txtAnzahlDatensaetze\r\n        DoEvents\r\n        Me!lblAnzahl.Caption = i &amp; &quot;\/&quot; &amp; Me!txtAnzahlDatensaetze\r\n        With objBeispieldaten\r\n            rst.AddNew\r\n            .GetVorname strVorname, strGeschlecht, strAnrede\r\n            .GetNachname strNachname\r\n            ''... weitere Get...-Aufrufe\r\n            Do While Not rstTabellenfelder.EOF\r\n                strLand = &quot;Deutschland&quot;\r\n                strEMail = LCase(strVorname &amp; &quot;@&quot; &amp; strNachname &amp; &quot;.de&quot;)\r\n                strInternet = LCase(&quot;http:\/\/www.&quot; &amp; strNachname &amp; &quot;.de&quot;)\r\n                Select Case rstTabellenfelder!DatenartID\r\n                    Case 1 ''Vorname\r\n                        rst(rstTabellenfelder!Tabellenfeld).Value = strVorname\r\n                    Case 2 ''Nachname\r\n                        rst(rstTabellenfelder!Tabellenfeld).Value = strNachname\r\n                        ''... Behandlung weiterer Datenarten\r\n                End Select\r\n                rstTabellenfelder.MoveNext\r\n            Loop\r\n        End With\r\n        rst.Update\r\n        rstTabellenfelder.MoveFirst\r\n    Next i\r\n    Me!lblAnzahl.Visible = False\r\n    Me!lbl.Visible = False\r\n    DoCmd.Hourglass False\r\nEnd Sub<\/pre>\n<p>Es gibt eine Reihe Funktionen, die Beispieldaten auf Basis der Datenart erzeugen. All diese Funktionen stecken in der Klasse <b>clsBeispieldaten<\/b>, die in der Prozedur <b>cmdBeispieldaten_Click <\/b>deklariert und instanziert wird.<\/p>\n<p>Danach erzeugt die Prozedur ein Recordset namens <b>rst <\/b>auf Basis der angegebenen Tabelle, wobei als Kriterium der Ausdruck <b>1=2 <\/b>verwendet wird, um bereits enthaltene Datens&auml;tze nicht zu ber&uuml;cksichtigen. Ein weiteres Recordset namens <b>rstTabellenfelder <\/b>wird mit allen Datens&auml;tzen der Tabelle <b>tblTabellenfelder <\/b>gef&uuml;llt, also mit der kompletten Konfiguration der anzulegenden Beispieldaten.<\/p>\n<p>Die beiden Bezeichnungsfelder <b>lbl <\/b>und <b>lblAnzahl <\/b>werden eingeblendet, um den Fortschritt anzuzeigen. Schlie&szlig;lich startet das eigentliche Ermitteln der Beispieldaten und der Schreibvorgang, und zwar in einer <b>For&#8230;Next<\/b>-Schleife. Diese wird entsprechend der Anzahl der zu erzeugenden Datens&auml;tze durchlaufen.<\/p>\n<p>Dabei ermittelt die Prozedur, unabh&auml;ngig davon, ob solche Daten ben&ouml;tigt werden, einen Satz mit Vorname, Nachname, Anrede, Firma, Stra&szlig;e und weiteren typischen Daten einer Adresse. Dazu verwendet sie verschiedene Methoden der Klasse <b>clsBeispieldaten<\/b>, von denen wir sp&auml;ter einige kurz vorstellen. Der Grund, warum diese Daten vorab in einem Rutsch ermittelt werden, ist einfach: Die Beispieldaten sollen m&ouml;glichst realistisch sein. Daher werden beispielsweise die E-Mail-Adresse auf den Namen (<b>&lt;Vorname&gt;@&lt;Nachname&gt;.de<\/b>) oder die Postleitzahl auf den Ort abgestimmt (genau so wie Bundesland, Land und Telefonvorwahl).<\/p>\n<p>Nachdem die grundlegenden Daten f&uuml;r diesen Datensatz ermittelt wurden, durchl&auml;uft die Prozedur die einzelnen Felder in einer <b>Do While<\/b>-Schleife &uuml;ber die Datens&auml;tze des Recordsets <b>rstTabellenfelder <\/b>und f&uuml;llt diese. Hier kommen weitere Methoden der Klasse <b>clsBeispieldaten <\/b>zum Einsatz, zum Beispiel <b>GetDatum<\/b>, <b>GetLookup<\/b>, <b>GetZahl <\/b>et cetera.<\/p>\n<p>Schauen wir uns beispielhaft einige der <b>Get&#8230;<\/b>-Methoden und ihren Aufruf an.<\/p>\n<p><b>Ermittlung von Vorname, Geschlecht und Anrede<\/b><\/p>\n<p>Vorname, Geschlecht und Anrede sind eng miteinander verbunden, da der Vorname meist das Geschlecht und somit die Anrede (<b>Herr <\/b>oder <b>Frau<\/b>) vorgibt. Zum Speichern dieser Daten deklariert die Prozedur <b>cmdBeispieldaten_Click <\/b>drei Variablen namens <b>strVorname<\/b>, <b>strGeschlecht <\/b>und <b>strAnrede<\/b>. Diese &uuml;bergibt sie der Methode <b>GetVorname <\/b>des Objekts <b>objBeispieldaten<\/b>:<\/p>\n<pre>.GetVorname strVorname, strGeschlecht, strAnrede<\/pre>\n<p>Die Methode <b>GetVorname <\/b>erzeugt ein Recordset auf Basis der Abfrage <b>qryVornameZufall<\/b>. Diese ermittelt einen Datensatz der Tabelle <b>tblVornamen<\/b>, der auch gleich Geschlecht und Anrede mitliefert. Die ermittelten Werte schreibt die Methode in die von der aufrufenden Instanz &uuml;bergebenen Variablen:<\/p>\n<pre>Public Sub GetVorname(Optional strVorname As String, Optional strGeschlecht As String, Optional strAnrede As String)\r\n    Set rst = dbc.OpenRecordset(&quot;qryVornameZufall&quot;, dbOpenDynaset)\r\n    strAnrede = rst!Anrede\r\n    strVorname = rst!Vorname\r\n    strGeschlecht = rst!Geschlecht\r\nEnd Sub<\/pre>\n<p>Nach einem gleichen oder &auml;hnlichen Prinzip funktionieren die Methoden zur Ermittlung der &uuml;brigen Datenarten.<\/p>\n<p>Die Abfrage <b>qryVornameZufall <\/b>funktioniert nach einem ganz einfachen Prinzip: Sie enth&auml;lt alle Felder der Tabelle <b>tblVornamen <\/b>sowie ein zus&auml;tzliches Feld. Dieses ermittelt auf Basis des Prim&auml;rschl&uuml;sselwertes der Tabelle einen Zufallswert, der als Sortierkriterium der Ergebnisse dient. Gleichzeitig ist die Anzahl der zur&uuml;ckzugebenden Datens&auml;tze auf einen limitiert. Den Aufbau dieser Abfrage zeigt Bild 15.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_05\/Testdatenassistent-web-images\/pic015.png\" alt=\"pic015.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 15: Diese Abfrage liefert einen zuf&auml;llig ausgew&auml;hlten Datensatz der zugrunde liegenden Tabelle.<\/span><\/b><\/p>\n<p><b>Ermittlung von Zahlen<\/b><\/p>\n<p>Ein weiteres interessantes Beispiel ist die Methode zum Ermitteln einer Zufallszahl. Diese erwartet drei Parameter: den kleinsten Wert, den gr&ouml;&szlig;ten Wert sowie die Anzahl der Nachkommastellen. Werden diese nicht &uuml;bergeben, liefert die Methode Zahlen zwischen 1 und 1.000 ohne Nachkommastelle:<\/p>\n<pre>Public Sub GetZahl(varZahl As Variant, Optional dblMin As Double, Optional dblMax _\r\n        As Double, Optional intDecimal As Integer)\r\n    Dim dblBereich As Double\r\n    If dblMin = 0 Then dblMin = 1\r\n    If dblMax = 0 Then dblMax = 1000\r\n    dblMin = dblMin * 10 ^ intDecimal\r\n    dblMax = dblMax * 10 ^ intDecimal\r\n    dblBereich = dblMax - dblMin\r\n    varZahl = CLng((Rnd() * (dblBereich) + dblMin)) \/ 10 ^ intDecimal\r\nEnd Sub<\/pre>\n<p>Die Methode multipliziert die Bereichsgrenzen mit einer der Anzahl der Nachkommastellen entsprechenden Zehnerpotenz und ermittelt aus der Differenz den gew&uuml;nschten Bereich. Die mit <b>Rnd<\/b> ermittelte Zufallszahl zwischen 0 und 1 wird mit dem Bereich multipliziert, dann wird die unterste Grenze hinzuaddiert. Die resultierende Zahl enth&auml;lt Nachkommastellen, welche durch das Konvertieren mit der <b>CLng<\/b>-Funktion entfernt werden. Schlie&szlig;lich wird der Wert durch die gleiche Zehnerpotenz wie oben geteilt, um die gew&uuml;nschte Anzahl Nachkommastellen zu erhalten.<\/p>\n<p><b>Ja\/Nein-Werte ermitteln<\/b><\/p>\n<p>Die Methode zum Ermitteln von <b>Ja\/Nein<\/b>-Werten erwartet zwei Parameter: <b>intPercentTrue <\/b>liefert die Wahrscheinlichkeit, dass die Methode <b>True <\/b>zur&uuml;ckliefert, und <b>bol <\/b>enth&auml;lt schlie&szlig;lich das Ergebnis. Die Prozedur ermittelt einen Zufallswert zwischen 0 und 100 und pr&uuml;ft, ob dieser kleiner als die gew&uuml;nschte Quote ist. Falls ja, liefert die Prozedur <b>True <\/b>zur&uuml;ck, sonst <b>False<\/b>.<\/p>\n<pre>Public Sub GetTrueFalse(intPercentTrue As Integer, bol As Boolean)\r\n    Dim sng As Single\r\n    bol = False\r\n    sng = Rnd\r\n    If sng * 100 &lt; intPercentTrue Then\r\n         bol = True\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Weitere Methoden<\/b><\/p>\n<p>Der Platz reicht bei weitem nicht aus, um alle in der L&ouml;sung verwendeten Techniken zu beschreiben. Allerdings d&uuml;rften Sie schnell das System erkennen und eigene Methoden beziehungsweise Datenarten einsetzen k&ouml;nnen. Dazu f&uuml;gen Sie zun&auml;chst eine neue Datenart zur Tabelle <b>tblDatenarten <\/b>hinzu. Anschlie&szlig;end erg&auml;nzen Sie die Prozedur <b>cmdBeispieldatenSchreiben_Click <\/b>um einen entsprechenden Eintrag in der <b>Select Case<\/b>-Bedingung. Sofern Sie eine neue Methode zum Hinzuf&uuml;gen der gew&uuml;nschten Daten brauchen, legen Sie diese in der Klasse <b>clsBeispieldaten <\/b>an.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Der Beispieldaten-Assistent nimmt Ihnen eine Menge Arbeit ab, wenn Sie mal eben eine oder mehrere Tabellen, die auch miteinander verkn&uuml;pft sein k&ouml;nnen, mit beliebig vielen Beispieldaten f&uuml;llen wollen. Es gibt aber auch noch Erweiterungsm&ouml;glichkeiten. Eine davon ist ganz einfach: Sie k&ouml;nnen eigene Mappings f&uuml;r die Zuordnung von Datenarten zu den Feldnamen in Ihren Tabellen schreiben, damit Sie diese nicht mehr von Hand eintragen m&uuml;ssen. Weitere erfordern den Eingriff in den Code beziehungsweise den Entwurf des Assistenten: So w&auml;re ein weiterer Anwendungsfall, ein oder mehrere Felder einer Tabelle mit bestehenden Datens&auml;tzen nachtr&auml;glich zu f&uuml;llen. Au&szlig;erdem erlaubt der Assistent in der vorliegenden Version noch nicht, mehrere gleichartige Felder wie <b>PLZ <\/b>und <b>PLZGeschaeftlich <\/b>mit verschiedenen Daten zu f&uuml;llen. Teilen Sie uns doch einfach Ihre Erfahrungen mit dem Beispieldaten-Assistenten mit und liefern Sie Vorschl&auml;ge f&uuml;r Erweiterungen &#8211; ganz einfach per 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>Beispieldaten-Assistent.mda<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{E952FF87-9192-46E5-8262-303D91892B3E}\/aiu_745.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Auch wenn Software-Entwicklung mit Access normalerweise eine rundum begl&uuml;ckende gl&uuml;cklich machende Besch&auml;ftigung ist, so gibt es doch T&auml;tigkeiten, die man nur lustlos ausf&uuml;hrt. Der Autor dieser Zeilen etwa ist immer etwas ungehalten, wenn er Beispieldaten in eine oder mehrere Tabellen eingeben muss. Ist das nicht die langweiligste Arbeit &uuml;berhaupt Im krassen Gegensatz dazu steht die Aufgabe, einen Assistenten zu programmieren, der einem diese l&auml;stige Arbeit abnimmt! Einfach die Zieltabelle ausw&auml;hlen, f&uuml;r jedes Feld die Art der Testdaten ausw&auml;hlen und loslegen &#8211; lesen Sie hier, wie das funktioniert!<\/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":[662010,66052010,44000020],"tags":[],"class_list":["post-55000745","post","type-post","status-publish","format-standard","hentry","category-662010","category-66052010","category-Tools"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Der Beispieldaten-Assistent - 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\/Der_BeispieldatenAssistent\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Der Beispieldaten-Assistent\" \/>\n<meta property=\"og:description\" content=\"Auch wenn Software-Entwicklung mit Access normalerweise eine rundum begl&uuml;ckende gl&uuml;cklich machende Besch&auml;ftigung ist, so gibt es doch T&auml;tigkeiten, die man nur lustlos ausf&uuml;hrt. Der Autor dieser Zeilen etwa ist immer etwas ungehalten, wenn er Beispieldaten in eine oder mehrere Tabellen eingeben muss. Ist das nicht die langweiligste Arbeit &uuml;berhaupt Im krassen Gegensatz dazu steht die Aufgabe, einen Assistenten zu programmieren, der einem diese l&auml;stige Arbeit abnimmt! Einfach die Zieltabelle ausw&auml;hlen, f&uuml;r jedes Feld die Art der Testdaten ausw&auml;hlen und loslegen - lesen Sie hier, wie das funktioniert!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:07:57+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/4fdf8f7ea9dc4ea498d47a318d51e207\" \/>\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=\"25\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Der Beispieldaten-Assistent\",\"datePublished\":\"2020-05-22T22:07:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/\"},\"wordCount\":4341,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/4fdf8f7ea9dc4ea498d47a318d51e207\",\"articleSection\":[\"2010\",\"5\\\/2010\",\"Tools\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/\",\"name\":\"Der Beispieldaten-Assistent - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/4fdf8f7ea9dc4ea498d47a318d51e207\",\"datePublished\":\"2020-05-22T22:07:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/4fdf8f7ea9dc4ea498d47a318d51e207\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/4fdf8f7ea9dc4ea498d47a318d51e207\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Der_BeispieldatenAssistent\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Der Beispieldaten-Assistent\"}]},{\"@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":"Der Beispieldaten-Assistent - 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\/Der_BeispieldatenAssistent\/","og_locale":"de_DE","og_type":"article","og_title":"Der Beispieldaten-Assistent","og_description":"Auch wenn Software-Entwicklung mit Access normalerweise eine rundum begl&uuml;ckende gl&uuml;cklich machende Besch&auml;ftigung ist, so gibt es doch T&auml;tigkeiten, die man nur lustlos ausf&uuml;hrt. Der Autor dieser Zeilen etwa ist immer etwas ungehalten, wenn er Beispieldaten in eine oder mehrere Tabellen eingeben muss. Ist das nicht die langweiligste Arbeit &uuml;berhaupt Im krassen Gegensatz dazu steht die Aufgabe, einen Assistenten zu programmieren, der einem diese l&auml;stige Arbeit abnimmt! Einfach die Zieltabelle ausw&auml;hlen, f&uuml;r jedes Feld die Art der Testdaten ausw&auml;hlen und loslegen - lesen Sie hier, wie das funktioniert!","og_url":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:07:57+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/4fdf8f7ea9dc4ea498d47a318d51e207","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"25\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Der Beispieldaten-Assistent","datePublished":"2020-05-22T22:07:57+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/"},"wordCount":4341,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/4fdf8f7ea9dc4ea498d47a318d51e207","articleSection":["2010","5\/2010","Tools"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/","url":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/","name":"Der Beispieldaten-Assistent - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/4fdf8f7ea9dc4ea498d47a318d51e207","datePublished":"2020-05-22T22:07:57+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/4fdf8f7ea9dc4ea498d47a318d51e207","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/4fdf8f7ea9dc4ea498d47a318d51e207"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Der_BeispieldatenAssistent\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Der Beispieldaten-Assistent"}]},{"@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\/55000745","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=55000745"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000745\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000745"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000745"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000745"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}