{"id":55001133,"date":"2018-06-01T00:00:00","date_gmt":"2020-05-13T21:19:49","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1133"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Objekt_und_Feldnamen_refaktorieren","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/","title":{"rendered":"Objekt- und Feldnamen refaktorieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/92ddece92ab041b2b1ea227eb2289ead\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Es kommt vor, dass man als Access-Entwickler mit der Weiterbearbeitung von Datenbanken betraut wird. Oft geschieht es dann, dass Objekt- und Feldnamen nicht den g&auml;ngigen Konventionen entsprechen. Tabellennamen kommen ohne Pr&auml;fix, Objekt- und Feldnamen enthalten Umlaute, Leerzeichen et cetera. Um dadurch entstehende Probleme zu vermeiden, k&ouml;nnen wir die Benennungen anpassen. Wie dies gelingt, zeigt der vorliegende Beitrag.<\/b><\/p>\n<p>Die Tabelle und die Feldnamen des Beispiels aus Bild 1 hat jeder schon einmal gesehen. Die Tabelle wurde ohne Pr&auml;fix benannt, hier w&uuml;rden wir uns ein f&uuml;hrendes <b>tbl <\/b>w&uuml;nschen. Das Prim&auml;rschl&uuml;sselfeld h&auml;tten wir lieber ohne Unterstrich (wobei das Geschmackssache ist). Definitiv sollten wir aber Stra&szlig;e in Strasse &auml;ndern und im Feld <b>Telefon gesch&auml;ftlich <\/b>wollen wir nicht nur den Umlaut durch die entsprechenden Vokale ersetzen und das Leerzeichen weglassen. Au&szlig;erdem verwenden wir in der Regel Camel Case und schreiben das zweite und die folgenden Worte gro&szlig;, hier also <b>TelefonGeschaeftlich<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_001.png\" alt=\"Tabellenname und Feldnamen sollten refaktoriert werden.\" width=\"549,6265\" height=\"456,009\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Tabellenname und Feldnamen sollten refaktoriert werden.<\/span><\/b><\/p>\n<p>Das Ergebnis soll in unserem Fall also wie in Bild 2 aussehen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_002.png\" alt=\"Tabelle mit Pr&auml;fix im Namen und mit angepassten Feldnamen\" width=\"549,6265\" height=\"198,7186\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Tabelle mit Pr&auml;fix im Namen und mit angepassten Feldnamen<\/span><\/b><\/p>\n<h2>Notwendige &auml;nderungen finden<\/h2>\n<p>In unserem Beispiel ist es leicht, die zu &auml;ndernden Elemente zu finden. Bei einer Tabelle mit wenigen Feldern erledigt man den Job auch am einfachsten von Hand. Das bezieht sich allerdings nur auf die reine &auml;nderung der Objekt- und Feldbezeichnungen &#8211; es gibt ja auch Referenzen auf diese Bezeichnungen in anderen Tabellen, Abfragen, Formularen, Berichten, Makros und auch im VBA-Code. Und wenn Sie aber eine gro&szlig;e Datenbankanwendung mit vielen Tabellen anpassen wollen, haben Sie noch mehr zu tun. Es ist also eine Frage der Datenbankgr&ouml;&szlig;e, wann Sie es aufgeben, die &auml;nderungen manuell zu erledigen und der Wunsch auftaucht, die &auml;nderungen automatisch auszuf&uuml;hren. Wie das gelingt, soll der vorliegende Beitrag zeigen. Vorher schauen wir uns aber noch an, welche &auml;nderungen im Detail anfallen und wo diese sich &uuml;berall auswirken.<\/p>\n<h2>Referenzen auf Objektnamen und Feldnamen<\/h2>\n<p>Die Namen von Tabellen und Feldnamen k&ouml;nnen bereits in anderen Tabellen auftauchen &#8211; n&auml;mlich dort, wo Sie Nachschlagefelder eingerichtet haben. Wenn wir unserer Anwendung also eine Tabelle namens <b>Anreden m\/w <\/b>mit den Feldern <b>Anrede-ID <\/b>und <b>Anrede <\/b>finden, kann es sein, dass ein Fremdschl&uuml;sselfeld namens <b>Anrede-ID <\/b>in der Kunden-Tabelle vorliegt, welches die Anreden-Tabelle referenziert &#8211; das sieht dann im Entwurf wie in Bild 3 aus. Wenn wir nun auch die Bezeichnungen der verkn&uuml;pften Tabelle &auml;ndern, dann m&uuml;ssen wir darauf achten, dass auch die Verweise angepasst werden. Zum Gl&uuml;ck unterst&uuml;tzt uns Access hier &#8211; wie, schauen wir uns weiter unten an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_003.png\" alt=\"Verweis auf andere Tabelle im Tabellenentwurf\" width=\"549,6265\" height=\"312,2199\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Verweis auf andere Tabelle im Tabellenentwurf<\/span><\/b><\/p>\n<p>Aber auch in Abfragen, Formularen und Berichten sowie in Makros finden wir unter Umst&auml;nden Verweise auf die Namen von Objekten und Feldern. Ob diese automatisch angepasst werden, schauen wir uns ebenfalls an.<\/p>\n<p>Auf keinen Fall erfolgt eine automatische Anpassung im VBA-Code. Hier m&uuml;ssen wir selbst Hand anlegen. Damit wir hier keine &auml;nderung auslassen, werden wir sp&auml;ter ein wenig Code produzieren, der diese Aufgabe f&uuml;r uns &uuml;bernimmt.<\/p>\n<h2>Die Objektnamen-Autokorrektur<\/h2>\n<p>Access hat schon viele Versionen eine Funktion namens Objektnamen-Autokorrektur. Diese sorgt daf&uuml;r, dass &auml;nderungen von Objekt- und Feldnamen direkt an Stellen &uuml;bernommen werden, welche die betroffenen Objekte und Felder referenzieren.<\/p>\n<p>Die Einstellungen f&uuml;r die Objektnamen-Autokorrektur nehmen Sie in den Access-Optionen vor. Dort finden Sie diese unter Aktuelle Datenbank im Bereich <b>Optionen f&uuml;r die Objektnamen-Autokorrektur <\/b>(siehe Bild 4). Wir aktivieren hier zus&auml;tzlich noch die Option <b>&auml;nderungen f&uuml;r Objektnamenautokorrektur protokollieren<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_004.png\" alt=\"Einstellungen f&uuml;r die Objektnamen-Autokorrektur\" width=\"649,559\" height=\"402,5436\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Einstellungen f&uuml;r die Objektnamen-Autokorrektur<\/span><\/b><\/p>\n<p>Zu Testzwecken enth&auml;lt die Beispieldatenbank einige Objekte, die auf die Tabelle und die enthaltenen Felder verweisen. Auf diese Weise k&ouml;nnen wir nach der &auml;nderung pr&uuml;fen, ob die &auml;nderungen auch auf die referenzierenden Objekte &uuml;bertragen wurden.<\/p>\n<p>Wir verwenden dazu ein Formular namens <b>frmKunden<\/b>, das nur Daten der Tabelle <b>Kunden <\/b>anzeigt, ein Formular namens <b>frmKundenMitAnreden<\/b>, welches eine Abfrage mit den Daten aus den beiden Tabellen als Datenherkunft verwendet und ein Formular mit Unterformular, welches die Anreden im Hauptformular und die zugeordneten Kunden im Unterformular anzeigt.<\/p>\n<p>Eine Abfrage namens <b>qryKundenNachAnrede <\/b>fasst die Daten der beiden Tabellen Kunden und Anreden zusammen.<\/p>\n<p>Auf Makros wollen wir an dieser Stelle verzichten.<\/p>\n<p>Au&szlig;erdem schreiben wir ein paar VBA-Prozeduren, welche auf die Daten der Tabellen <b>Kunden <\/b>und <b>Anreden <\/b>zugreifen.<\/p>\n<p>Bevor wir die Tabellen- und Feldnamen angepasst haben, haben wir die vorherige Version der Datenbank gesichert, und zwar unter dem Namen <b>FeldnamenRefaktorieren_Backup.accdb<\/b>.<\/p>\n<p>Danach nehmen wir folgende &auml;nderungen vor:<\/p>\n<ul>\n<li>Name der Tabelle <b>Anreden <\/b>auf <b>tblAnreden<\/b><\/li>\n<li>Feld <b>Anrede-ID <\/b>wird <b>AnredeID<\/b><\/li>\n<li>Feld <b>Anrede m\/w <\/b>wird <b>Bezeichnung<\/b><\/li>\n<li>Tabelle <b>Kunden <\/b>wird <b>tblKunden<\/b><\/li>\n<li>Feld <b>Kunde-ID <\/b>wird <b>KundeID<\/b><\/li>\n<li>Feld <b>Anrede-ID <\/b>wird <b>AnredeID<\/b><\/li>\n<li>Feld <b>Stra&szlig;e <\/b>wird <b>Strasse<\/b><\/li>\n<li>Feld <b>Telefon gesch&auml;ftlich <\/b>wird <b>TelefonGeschaeftlich<\/b><\/li>\n<\/ul>\n<p>Nachdem die &auml;nderungen an den Tabellen <b>Kunden <\/b>und <b>Anreden <\/b>durchgef&uuml;hrt wurden, sehen diese wie in Bild 5 aus. Durch die &auml;nderungen an der Tabelle <b>Anreden<\/b>, die nun <b>tblAnreden <\/b>hei&szlig;t, m&uuml;ssten auch Anpassungen am Fremdschl&uuml;sselfeld <b>AnredeID <\/b>der Tabelle <b>tblKunden <\/b>vorgenommen worden sein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_008.png\" alt=\"Die Tabellen nach der &auml;nderung\" width=\"499,6607\" height=\"270,1514\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Die Tabellen nach der &auml;nderung<\/span><\/b><\/p>\n<p>Nach der &auml;nderung schauen wir uns den Entwurf der Tabelle <b>tblKunden <\/b>an und wechseln dort f&uuml;r das Feld <b>AnredeID <\/b>zur Registerseite <b>Nachschlagen <\/b>der Feldeigenschaften. Hier finden wir die korrekt ge&auml;nderte Abfrage vor (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_009.png\" alt=\"Fremdschl&uuml;sselfeld nach der &auml;nderung der verkn&uuml;pften Tabelle\" width=\"549,6265\" height=\"306,7241\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Fremdschl&uuml;sselfeld nach der &auml;nderung der verkn&uuml;pften Tabelle<\/span><\/b><\/p>\n<h2>Komplexere Ausdr&uuml;cke<\/h2>\n<p>Wenn wir nun statt einer einfachen <b>SELECT<\/b>-Anweisung einen komplizierteren, von Hand ge&auml;nderten Ausdruck f&uuml;r die Abfrage in der Eigenschaft <b>Datensatzherkunft <\/b>nutzen, funktioniert die Objektnamen-Autokorrektur in unseren Tests immer noch. Wenn Sie zum Beispiel einfach zwei Felder verkn&uuml;pfen wie im folgenden Beispiel, wird die Abfrage ebenfalls ordnungsgem&auml;&szlig; angepasst:<\/p>\n<pre>SELECT [Anreden].[Anrede-ID], [Anreden].[Anrede m\/w] & Anreden.[Anrede-ID] FROM Anreden;<\/pre>\n<h2>Die Tabelle Objektnamen-Autokorrekturprotokoll<\/h2>\n<p>Da wir die Option &auml;nderungen f&uuml;r Objektnamenautokorrektur protokollieren aktiviert haben, erstellt Access nun eine neue Tabelle namens Objektnamen-Autokorrekturprotokoll, in der es die einzelnen durch die &auml;nderung verursachten &auml;nderungen eintr&auml;gt. Genaugenommen muss man es etwas anders formulieren: Die automatischen &auml;nderungen werden n&auml;mlich nicht schon in die Tabelle eingetragen, sobald der Programmierer die ausl&ouml;senden &auml;nderungen vornimmt, sondern erst, wenn die von den automatischen &auml;nderungen betroffenen Objekte erstmals nach der &auml;nderung ge&ouml;ffnet werden.<\/p>\n<p>Access pr&uuml;ft also wohl erst beim &ouml;ffnen der Objekte, ob es &auml;nderungen in den zugrunde liegenden Objekten gibt und nimmt dann die Autokorrektur vor. Dies ist auch der Grund, warum man bei Datenbanken, deren Performance nicht &uuml;berzeugt, als eine der ersten Aktionen die Autokorrektur abschaltet.<\/p>\n<p>Die Tabelle <b>Objektnamen-Autokorrekturprotokoll <\/b>sieht schlie&szlig;lich wie in Bild 8 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_010.png\" alt=\"&auml;nderungen durch die Objektnamen-Autokorrektur\" width=\"700\" height=\"190,4715\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: &auml;nderungen durch die Objektnamen-Autokorrektur<\/span><\/b><\/p>\n<p> Sie enth&auml;lt bereits Eintr&auml;ge, die durch die nachfolgend beschriebenen &auml;nderungen verursacht wurden.<\/p>\n<h2>Abfragen<\/h2>\n<p>Dann gehen wir weiter zur Abfrage <b>qryKundenMitAnrede<\/b>. Diese sah zuvor wie in Bild 7 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_005.png\" alt=\"Die Abfrage qryKundenMitAnrede vor den &auml;nderungen\" width=\"599,593\" height=\"411,6889\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Die Abfrage qryKundenMitAnrede vor den &auml;nderungen<\/span><\/b><\/p>\n<p>Nachdem wir sie nach den &auml;nderungen erneut ge&ouml;ffnet haben, finden wir dort ebenfalls die korrigierten Tabellen- und Feldnamen vor (siehe Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_005.png\" alt=\"Die Abfrage qryKundenMitAnrede nach den &auml;nderungen\" width=\"574,61\" height=\"394,5352\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Die Abfrage qryKundenMitAnrede nach den &auml;nderungen<\/span><\/b><\/p>\n<h2>Formulare<\/h2>\n<p><!--30percent--><\/p>\n<p>Auch die drei vorbereiten Formulare wollen wir uns anschauen. Beim ersten Formular namens <b>frmKunden<\/b> hat dies gut geklappt. Wie Bild 10 zeigt, wurde nicht nur die als Datenherkunft verwendet Tabelle von <b>Kunden <\/b>in <b>tblKunden <\/b>ge&auml;ndert, sondern auch die Namen der von den Steuerelementen referenzierten Felder.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_011.png\" alt=\"Formular mit ge&auml;nderten Steuerelementinhalten und Quelltabelle\" width=\"624,576\" height=\"286,0723\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Formular mit ge&auml;nderten Steuerelementinhalten und Quelltabelle<\/span><\/b><\/p>\n<p>Das zweite Formular namens <b>frmKundenMitAnrede<\/b>, das Sie in Bild 11 sehen, wurde wie gew&uuml;nscht angepasst. Es bezieht seine Daten ja aus einer Abfrage, welche die Daten der beiden Tabellen <b>tblKunden <\/b>und <b>tblAnreden <\/b>zusammenfasst. Das dritte Formular <b>frmKundenNachAnrede <\/b>hatte die Besonderheit, dass wir die Daten der <b>Kunden<\/b>-Tabelle zu einer im Hauptformular ausgew&auml;hlten Anrede in einem Unterformular anzeigen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_012.png\" alt=\"Auch mit einer Abfrage als Datenherkunft gelingt die Autokorrektur.\" width=\"624,576\" height=\"274,2744\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Auch mit einer Abfrage als Datenherkunft gelingt die Autokorrektur.<\/span><\/b><\/p>\n<p>Hier haben wir nach der &auml;nderung der Tabellen- und Feldnamen also besonderes Augenmerk auf die beiden Eigenschaften <b>Verkn&uuml;pfen von <\/b>und <b>Verkn&uuml;pfen nach <\/b>des Unterformular-Steuerelements gelegt. Aber auch hier hat die Objektnamen-Autokorrektur wie erwartet gearbeitet (siehe Bild 12). An dieser Stelle gehen wir davon aus, dass die Objektnamen-Autokorrektur auch in Berichten und Makros funktioniert und wenden uns dem VBA-Code zu.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_013.png\" alt=\"Sogar die Einstellung der Verkn&uuml;pfungsfelder f&uuml;r das Unterformular erfolgt korrekt.\" width=\"624,576\" height=\"468,9008\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Sogar die Einstellung der Verkn&uuml;pfungsfelder f&uuml;r das Unterformular erfolgt korrekt.<\/span><\/b><\/p>\n<h2>Refactoring im VBA-Code<\/h2>\n<p>Eine Stelle, die definitiv nicht von der Objektnamen-Autokorrektur erfasst wird, ist der VBA-Code. Die von uns vorbereitete Testprozedur, welche die Kunden-Tabelle unter dem alten Namen referenziert und auch die alten Feldnamen verwendet, l&ouml;st nach dem &auml;ndern von Objekt- und Feldnamen einen Fehler aus, weil die Tabelle nicht mehr gefunden werden konnte (siehe Bild 13). Selbst wenn der Tabellenname korrekt w&auml;re, w&uuml;rde die &uuml;bern&auml;chste Zeile beim Zugriff auf die alten Feldnamen eine Fehlermeldung liefern.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_014.png\" alt=\"VBA-Code wird nicht automatisch korrigiert.\" width=\"649,559\" height=\"438,7214\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: VBA-Code wird nicht automatisch korrigiert.<\/span><\/b><\/p>\n<p>Was tun Es gibt drei M&ouml;glichkeiten:<\/p>\n<ul>\n<li>Sie durchsuchen den VBA-Code Zeile f&uuml;r Zeile und ersetzen die ge&auml;nderten Objekt- und Feldnamen.<\/li>\n<li>Sie holen sich Unterst&uuml;tzung vom Suchen und Ersetzen-Dialog.<\/li>\n<li>Sie programmieren Code, der automatisch die gew&uuml;nschten Ersetzungen durchf&uuml;hrt.<\/li>\n<\/ul>\n<p>Die erste Option f&auml;llt flach &#8211; au&szlig;er, Sie haben nur extrem wenig Code in der Datenbank.<\/p>\n<p>Die zweite Option ist m&ouml;glich, aber je nach der Anzahl der zu &auml;ndernden Objektnamen und Feldnamen auch aufwendig.<\/p>\n<p>Die dritte Option ist nat&uuml;rlich die Lieblingsoption des versierten VBA-Entwicklers, denn hier kann er selbst programmieren und muss keine niederen Arbeiten verrichten. Au&szlig;erdem trainieren wir das Gehirn damit viel mehr als mit manuellem Suchen und Ersetzen!<\/p>\n<p>Wir schauen uns also die zweite und die dritte Option an.<\/p>\n<h2>&auml;nderungen notieren<\/h2>\n<p>Bevor Sie eine der beiden verbleibenden Methoden nutzen, sollten Sie eine Liste der &auml;nderungen an den Objektnamen und Feldnamen anlegen, damit Sie sp&auml;ter keine &auml;nderung im Code vergessen.<\/p>\n<h2>Suchen und Ersetzen<\/h2>\n<p>Diese Variante starten Sie im VBA-Editor &uuml;ber den Men&uuml;-Eintrag <b>Bearbeiten|Ersetzen&#8230; <\/b>oder &uuml;ber die Tastenkombination <b>Strg + H<\/b>. Letztere hat aber, wenn Sie das Tool <b>MZ-Tools <\/b>nutzen, eine andere Funktion; Sie m&uuml;ssen dann den Men&uuml;eintrag bem&uuml;hen. Der Dialog sieht wie in Bild 14 aus und bietet zun&auml;chst einmal zwei Felder, in die Sie den gesuchten Ausdruck und den ersetzenden Ausdruck eingeben m&uuml;ssen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_015.png\" alt=\"Suchen und Ersetzen per Dialog\" width=\"499,6607\" height=\"215,9167\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Suchen und Ersetzen per Dialog<\/span><\/b><\/p>\n<p>Die Optionsgruppe <b>Suchen in <\/b>legt den Bereich fest, in dem Sie suchen und ersetzen m&ouml;chten. Hier w&auml;hlen wir logischerweise das aktuelle Projekt aus.<\/p>\n<p>Die Werte f&uuml;r die Suchrichtung und die beiden Optionen <b>Nur ganzes Wort suchen <\/b>und <b>Gro&szlig;-\/Kleinschreibung beachten <\/b>lassen wir deaktiviert. Die Option <b>Mit Mustervergleich <\/b>ist jedoch interessant. Warum, das erfahren Sie gleich.<\/p>\n<h2>Kunden-Tabelle im VBA-Code suchen und ersetzen<\/h2>\n<p>Geben wir einmal den Tabellennamen <b>Kunden <\/b>in das Feld <b>Suchen nach: <\/b>des Dialogs ein und den neuen Namen <b>tblKunden <\/b>in das Feld <b>Ersetzen durch:<\/b>, f&uuml;hrt das nicht ganz zum gew&uuml;nschten Ergebnis: Auf diese Weise werden n&auml;mlich auch die Vorkommen der Zeichenkette <b>Kunden <\/b>gefunden, die nicht ersetzt werden sollen und in einem anderen Zusammenhang verwendet werden &#8211; beispielsweise der Name der Objektvariablen <b>rstKunden<\/b> (siehe Bild 15).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_016.png\" alt=\"Beim Suchen und Ersetzen ist Vorsicht geboten.\" width=\"649,559\" height=\"342,7983\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 15: Beim Suchen und Ersetzen ist Vorsicht geboten.<\/span><\/b><\/p>\n<p>Hier k&ouml;nnte man nun pr&uuml;fen, in welchen Kontexten die Zeichenfolge <b>Kunden <\/b>wirklich ersetzt werden soll. In unserem Fall wird der Tabellenname nur innerhalb eines SQL-Ausdrucks verwendet, aber es gibt noch andere M&ouml;glichkeiten. Die gleiche Anweisung k&ouml;nnte etwa nur den Namen der Tabelle <b>Kunden <\/b>enthalten, wenn keine <b>WHERE<\/b>-Klausel oder andere Einschr&auml;nkungen ben&ouml;tigt werden:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> rstKunden = db.OpenRecordset(\"Kunden\", dbOpenDynaset)<\/pre>\n<p>Wir m&uuml;ssten also zumindest nach Vorkommen suchen, die auf ein Leerzeichen folgen oder auf ein Anf&uuml;hrungszeichen. Das bedeutet, dass wir den <b>Suchen und Ersetzen<\/b>-Dialog bereits zwei Mal f&uuml;llen und ausf&uuml;hren m&uuml;ssten.<\/p>\n<p>Wenn wir allerdings die Option <b>Mit Mustervergleich <\/b>aktivieren, sollten wir theoretisch ein paar Schritte. Wir k&ouml;nnen dann n&auml;mlich festlegen, f&uuml;r welche Kombinationen aus f&uuml;hrenden und folgenden Zeichen die Zeichenkette <b>Kunden <\/b>durch <b>tblKunden <\/b>ersetzt werden soll.<\/p>\n<p>Im vorliegenden Fall wollen wir alle Vorkommen finden, denen ein Leerzeichen oder ein Anf&uuml;hrungszeichen vorangeht und die mit einem Anf&uuml;hrungszeichen abgeschlossen werden. Das gelingt mit dem Ausdruck aus Bild 16:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_017.png\" alt=\"Suchen und Ersetzen mit Mustervergleich.\" width=\"424,7115\" height=\"183,5292\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 16: Suchen und Ersetzen mit Mustervergleich.<\/span><\/b><\/p>\n<pre>[\" ]Kunden[\"]<\/pre>\n<p>Nun kann es auch noch sein, dass hinter dem Tabellennamen noch ein Leerzeichen folgt, weil sich dahinter eine <b>WHERE<\/b>-Klausel befindet. Kein Problem: Dann f&uuml;gen wir noch das Leerzeichen in das hintere eckige Klammernpaar ein.<\/p>\n<p>Dummerweise k&ouml;nnen wir aber nicht wie bei normalen regul&auml;ren Ausdr&uuml;cken die zu durchsuchende Information in Klammern fassen und diese sp&auml;ter durch die gew&uuml;nschten Informationen ersetzen. Damit f&auml;llt das Suchen und Ersetzen mit Mustervergleich leider aus und wir m&uuml;ssen Schritt f&uuml;r Schritt die verschiedenen M&ouml;glichkeiten durchlaufen.<\/p>\n<p>In diesem Fall w&uuml;rden wir also etwa nach Ausdr&uuml;cken suchen, die ein f&uuml;hrendes Leerzeichen, den Ausdruck <b>Kunden <\/b>und ein Anf&uuml;hrungszeichen enthalten und diese durch ein Leerzeichen, den Tabellennamen <b>tblKunden <\/b>und das Anf&uuml;hrungszeichen ersetzen (siehe Bild 17).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_018.png\" alt=\"Suchen und Ersetzen eines Tabellennamens\" width=\"424,7115\" height=\"183,5292\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 17: Suchen und Ersetzen eines Tabellennamens<\/span><\/b><\/p>\n<p>Allerdings k&ouml;nnen wir durchaus die Suche mit Mustervergleich nutzen, um alle m&ouml;glichen Konstellationen zu finden. Dazu geben wir dann etwa den folgenden Suchausdruck an:<\/p>\n<pre>[!a-zA-Z0-9]Kunden[!a-zA-Z0-9]<\/pre>\n<h2>Suchen und ersetzen per VBA<\/h2>\n<p>Wenn Sie alle m&ouml;glichen zu ersetzenden Elemente identifiziert haben, k&ouml;nnen Sie das Suchen und Ersetzen auch per VBA durchf&uuml;hren.<\/p>\n<p>Dazu ben&ouml;tigen Sie zun&auml;chst einen Verweis auf die Bibliothek <b>Microsoft Visual Basic for Applications Extensibility 5.3<\/b>. Diese legen Sie an, indem Sie im VBA-Editor mit dem Men&uuml;befehl <b>Extras|Verweise <\/b>den <b>Verweise<\/b>-Dialog &ouml;ffnen und hier die angegebene Bibliothek suchen und anhaken (siehe Bild 18).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1133_019.png\" alt=\"Hinzuf&uuml;gen eines Verweises auf die Visual Basic-Erweiterungsbibliothek\" width=\"499,6607\" height=\"393,9009\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 18: Hinzuf&uuml;gen eines Verweises auf die Visual Basic-Erweiterungsbibliothek<\/span><\/b><\/p>\n<h2>Suchen nach Objektnamen<\/h2>\n<p>Wenn wir nach einem Objektnamen suchen und diesen ersetzen wollen, m&uuml;ssten wir uns zun&auml;chst &uuml;berlegen, wie das Biotop eines solchen Objektnamens in VBA-Code aussieht<\/p>\n<p>Dabei ist vor allem wichtig, dass wir einen Objektnamen wie den Tabellennamen <b>Kunden <\/b>von den Vorkommen der gleichen Zeichenkette innerhalb anderer Zeichenketten unterscheiden &#8211; wie etwa in <b>rstKunden<\/b>.<\/p>\n<p>Um es kurz zu machen: Wenn die gesuchte Zeichenkette f&uuml;r den Objektnamen keinen Buchstaben und keine Ziffer als f&uuml;hrendes oder folgendes Zeichen aufweist, k&ouml;nnen wir davon ausgehen, dass es sich um einen Objektnamen handelt. Dabei gehen wir davon aus, dass die Variablen und Konstanten im Code mit entsprechenden Pr&auml;fixen versehen sind &#8211; ansonsten wird es kompliziert.<\/p>\n<p>Nachdem die Anforderung definiert ist, k&ouml;nnen Sie eine Funktion wie die aus Listing 1 anlegen. Diese durchl&auml;uft alle Elemente der Auflistung <b>VBComponents <\/b>des aktuellen VBA-Projekts, was den Klassenmodulen und Standardmodulen entspricht, in einer <b>For Each<\/b>-Schleife und speichert das aktuelle Element jeweils in der Laufvariablen <b>objVBComponent<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>SuchenErsetzen(strSuchen<span style=\"color:blue;\"> As String<\/span>, strErsetzen<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objVBComponent<span style=\"color:blue;\"> As <\/span>VBComponent\r\n     <span style=\"color:blue;\">Dim <\/span>objCodeModule<span style=\"color:blue;\"> As <\/span>CodeModule\r\n     <span style=\"color:blue;\">Dim <\/span>strCode<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngStart<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngEnde<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strVorher<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strNachher<span style=\"color:blue;\"> As String<\/span>\r\n     For Each objVBComponent In VBE.ActiveVBProject.VBComponents\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> objVBComponent.Name = \"mdlSuchenErsetzen\"<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> objCodeModule = objVBComponent.CodeModule\r\n             strCode = objCodeModule.Lines(1, objCodeModule.CountOfLines)\r\n             lngStart = <span style=\"color:blue;\">InStr<\/span>(1, strCode, strSuchen)\r\n             <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> lngStart = 0\r\n                 lngEnde = lngStart + <span style=\"color:blue;\">Len<\/span>(strSuchen)\r\n                 strVorher = <span style=\"color:blue;\">Mid<\/span>(strCode, lngStart - 1, 1)\r\n                 <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> strVorher Like \"[a-zA-Z0-9]\"<span style=\"color:blue;\"> Then<\/span>\r\n                     strNachher = <span style=\"color:blue;\">Mid<\/span>(strCode, lngStart + <span style=\"color:blue;\">Len<\/span>(strSuchen), 1)\r\n                     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> strNachher Like \"[a-zA-Z0-9]\"<span style=\"color:blue;\"> Then<\/span>\r\n                         strCode = <span style=\"color:blue;\">Left<\/span>(strCode, lngStart - 1) & strErsetzen & <span style=\"color:blue;\">Mid<\/span>(strCode, lngEnde)\r\n                         lngEnde = lngEnde - <span style=\"color:blue;\">Len<\/span>(strSuchen) + <span style=\"color:blue;\">Len<\/span>(strErsetzen)\r\n                     <span style=\"color:blue;\">End If<\/span>\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n                 lngStart = <span style=\"color:blue;\">InStr<\/span>(lngEnde, strCode, strSuchen)\r\n             <span style=\"color:blue;\">Loop<\/span>\r\n             objCodeModule.DeleteLines 1, objCodeModule.CountOfLines\r\n             objCodeModule.AddFromString strCode\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> objVBComponent\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Die Funktion zum Suchen und Ersetzen von Objektnamen im VBA-Code<\/span><\/b><\/p>\n<p>Die Ausnahme ist das Modul <b>mdlSuchenErsetzen<\/b>, welches die Funktionen zum Suchen und Ersetzen selbst enth&auml;lt. Dann stellen wir die Objektvariable <b>objCodeModule <\/b>mit dem Typ <b>CodeModule <\/b>auf das <b>CodeModule<\/b>-Objekt von <b>objVBComponent <\/b>ein.<\/p>\n<p>Hier geschehen nun einige Operationen:<\/p>\n<ul>\n<li>Die <b>Lines<\/b>-Funktion liefert alle Zeilen des Moduls von der mit <b>1 <\/b>angegebenen Zeile bis zu der mit <b>objCodeModule.CountOfLines <\/b>ermittelten Zeile und schreibt diese in die Variable <b>strCode<\/b>.<\/li>\n<li>Mit der <b>InStr<\/b>-Funktion ermitteln wir die Position des ersten Auftretens des mit dem Parameter <b>strSuchen <\/b>&uuml;bergebenen Parameters. Dieser &uuml;bergeben wir dazu als Startposition den Wert <b>1<\/b>, als zu durchsuchenden Text die Variable <b>strCode <\/b>und als zu suchenden Text die Variable <b>strSuchen<\/b>. Das Ergebnis dieser Funktion speichern wir in der Variablen <b>lngStart<\/b>.<\/li>\n<li>Sofern wir einen Eintrag finden, erh&auml;lt <b>lngStart <\/b>einen Wert ungleich <b>0<\/b>. Nur unter dieser Bedingung steigen wir in die folgende <b>Do While<\/b>-Schleife ein. Diese wird genau dann abgebrochen, wenn <b>lngStart <\/b>den Wert <b>0 <\/b>aufweist, was bedeutet, dass der Suchbegriff entweder gar nicht auftaucht oder wir innerhalb der Schleife irgendwann alle Vorkommen durchlaufen haben.<\/li>\n<li>Steigen wir in die <b>Do While<\/b>-Schleife ein, ermittelt die Prozedur mit einem weiteren Aufruf der <b>InStr<\/b>-Funktion die Endposition des mit <b>lngStart <\/b>eingeleiteten Auftretens des Suchbegriffs. <b>lngStart <\/b>und <b>lngEnde <\/b>enthalten also nun zwei Zahlenwerte, mit denen die Position des Suchbegriffs markiert wird.<\/li>\n<li>Nun ermitteln wir f&uuml;r die Variable <b>strVorher <\/b>das Zeichen, dass sich genau vor dem aktuellen Vorkommen des Suchbegriffs findet. Wir pr&uuml;fen in einer <b>If&#8230;Then<\/b>-Bedingung, ob dieses Zeichen ein Buchstabe oder eine Zahl ist, was wir durch einen <b>Like<\/b>-Vergleich mit der Zeichenkette <b>[a-zA-Z0-9] <\/b>herausfinden. <\/li>\n<li>Ist dies der Fall, handelt es sich nicht um einen Objektnamen, sondern vermutlich um die Einbettung des gesuchten Textes in eine andere Zeichenkette. In diesem Fall geht es weiter mit der Suche nach dem n&auml;chsten Vorkommen &#8211; siehe weiter unten.<\/li>\n<li>Finden wir hier jedoch heraus, dass das vorherige Zeichen kein Buchstabe und keine Zahl ist, untersuchen wir das Zeichen hinter dem gesuchten Ausdruck auf die gleiche Weise. Entspricht das Zeichen einem Buchstaben oder einer Zahl, ist die Bedingung falsch und wir steigen aus dieser aus.<\/li>\n<li>Ist jedoch auch das folgende Zeichen kein Buchstabe und keine Zahl, haben wir ein Vorkommen des Suchbegriffs als Objektname gefunden. In diesem Fall f&uuml;gen wir eine neue Zeichenkette zusammen, die aus dem Inhalt von <b>strCode <\/b>vor dem aktuell untersuchten Vorkommen des Suchbegriffs, dem zu ersetzenden Begriff und dem Inhalt von <b>strCode <\/b>nach dem aktuell untersuchten Suchbegriff zusammengestellt wird. Die so erstellte Zeichenkette landet dann wieder in <b>strCode<\/b>.<\/li>\n<li>Damit haben wir nun den Inhalt von <b>strCode <\/b>ver&auml;ndert. Gegebenenfalls ist der Text aus <b>strErsetzen <\/b>l&auml;nger als der aus <b>strSuchen<\/b>. Damit stimmt nun die Endposition des ersetzten Ausdrucks m&ouml;glicherweise nicht mehr mit der Endposition des gesuchten Ausdrucks &uuml;berein. Daher passen wir <b>lngEnde <\/b>an, indem wir die L&auml;nge des gesuchten Ausdrucks subtrahieren und die L&auml;nge des ersetzten Ausdrucks addieren.<\/li>\n<li>Anschlie&szlig;end ermitteln wir, unabh&auml;ngig davon, ob der Begriff ersetzt wurde, den Start des n&auml;chsten Vorkommens des Suchbegriffs und speichern diese Position in der Variablen <b>lngEnde<\/b>. Sollte es kein weiteres Vorkommen mehr geben, erh&auml;lt <b>lngEnde <\/b>den Wert <b>0<\/b>, was beim n&auml;chsten Durchlaufen des Schleifenkopfes zum Abbruch der Schleife f&uuml;hrt.<\/li>\n<li>Sind auf diese Weise alle Vorkommen des Suchausdrucks ersetzt worden, k&ouml;nnen wir den Inhalt von <b>strCode <\/b>f&uuml;r den bisherigen Inhalt des Moduls einf&uuml;gen. Dazu l&ouml;schen wir zun&auml;chst den vorherigen Inhalt, und zwar mit der <b>DeleteLines<\/b>-Methode. Dieser &uuml;bergeben wir die Nummer der ersten und letzten zu l&ouml;schenden Zeile und f&uuml;gen dann mit <b>AddFromString <\/b>den Inhalt von <b>strCode <\/b>in das nun leere Modul ein. Damit ist das Ende des Ablaufs f&uuml;r das aktuelle Modul erreicht und wir starten mit dem n&auml;chsten Modul der <b>VBComponents<\/b>-Auflistung.<\/li>\n<\/ul>\n<h2>Suchen nach Feldnamen<\/h2>\n<p>Neben den Objektnamen wollen wir uns auch um die Feldnamen k&uuml;mmern, die wir ge&auml;ndert haben &#8211; also beispielsweise die Umbenennung von <b>Kunde-ID <\/b>in <b>KundeID<\/b>.<\/p>\n<p>Dazu m&uuml;ssen identifizieren, in welcher Form Feldnamen im Code vorkommen.<\/p>\n<p>Nach Durchsicht einiger meiner Programmierbeispiele wurde aber schnell klar: Hier gelten die gleichen Regeln wir f&uuml;r die Objektnamen. Wenn die gesuchte Zeichenkette f&uuml;r den Feldnamen nicht von einem f&uuml;hrenden oder folgenden Buchstaben oder einer Zahl begleitet wird, handelt es sich um einen Feldnamen. Sie k&ouml;nnen die Funktion <b>SuchenErsetzen<\/b> also einfach wie folgt aufrufen:<\/p>\n<pre>SuchenErsetzen \"Kunde-ID\", \"KundeID\"<\/pre>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Das Refaktorieren von Code nach der &auml;nderungen von Objektnamen oder Feldnamen ist eine Aufgabe, die man mit h&ouml;chster Pr&auml;zision durchf&uuml;hren sollte.<\/p>\n<p>Die in diesem Beitrag beschriebenen Techniken k&ouml;nnen Sie dabei zu Hilfe nehmen. Wichtig ist, dass Sie alle &auml;nderungen in den Objekt- und Feldnamen notieren, damit Sie diese nachher auch im VBA-Code reproduzieren k&ouml;nnen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>FeldnamenRefaktorieren.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/BA4FBE3F-93D9-4A6F-9383-7BEEF9F43654\/aiu_1133.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es kommt vor, dass man als Access-Entwickler mit der Weiterbearbeitung von Datenbanken betraut wird. Oft geschieht es dann, dass Objekt- und Feldnamen nicht den g&auml;ngigen Konventionen entsprechen. Tabellennamen kommen ohne Pr&auml;fix, Objekt- und Feldnamen enthalten Umlaute, Leerzeichen et cetera. Um dadurch entstehende Probleme zu vermeiden, k&ouml;nnen wir die Benennungen anpassen. Wie dies gelingt, zeigt der vorliegende Beitrag.<\/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":[662018,66032018,44000025],"tags":[],"class_list":["post-55001133","post","type-post","status-publish","format-standard","hentry","category-662018","category-66032018","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Objekt- und Feldnamen refaktorieren - 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\/Objekt_und_Feldnamen_refaktorieren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Objekt- und Feldnamen refaktorieren\" \/>\n<meta property=\"og:description\" content=\"Es kommt vor, dass man als Access-Entwickler mit der Weiterbearbeitung von Datenbanken betraut wird. Oft geschieht es dann, dass Objekt- und Feldnamen nicht den g&auml;ngigen Konventionen entsprechen. Tabellennamen kommen ohne Pr&auml;fix, Objekt- und Feldnamen enthalten Umlaute, Leerzeichen et cetera. Um dadurch entstehende Probleme zu vermeiden, k&ouml;nnen wir die Benennungen anpassen. Wie dies gelingt, zeigt der vorliegende Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:19:49+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/92ddece92ab041b2b1ea227eb2289ead\" \/>\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=\"18\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Objekt- und Feldnamen refaktorieren\",\"datePublished\":\"2020-05-13T21:19:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/\"},\"wordCount\":3406,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/92ddece92ab041b2b1ea227eb2289ead\",\"articleSection\":[\"2018\",\"3\\\/2018\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/\",\"name\":\"Objekt- und Feldnamen refaktorieren - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/92ddece92ab041b2b1ea227eb2289ead\",\"datePublished\":\"2020-05-13T21:19:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/92ddece92ab041b2b1ea227eb2289ead\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/92ddece92ab041b2b1ea227eb2289ead\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Objekt_und_Feldnamen_refaktorieren\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Objekt- und Feldnamen refaktorieren\"}]},{\"@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":"Objekt- und Feldnamen refaktorieren - 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\/Objekt_und_Feldnamen_refaktorieren\/","og_locale":"de_DE","og_type":"article","og_title":"Objekt- und Feldnamen refaktorieren","og_description":"Es kommt vor, dass man als Access-Entwickler mit der Weiterbearbeitung von Datenbanken betraut wird. Oft geschieht es dann, dass Objekt- und Feldnamen nicht den g&auml;ngigen Konventionen entsprechen. Tabellennamen kommen ohne Pr&auml;fix, Objekt- und Feldnamen enthalten Umlaute, Leerzeichen et cetera. Um dadurch entstehende Probleme zu vermeiden, k&ouml;nnen wir die Benennungen anpassen. Wie dies gelingt, zeigt der vorliegende Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:19:49+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/92ddece92ab041b2b1ea227eb2289ead","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"18\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Objekt- und Feldnamen refaktorieren","datePublished":"2020-05-13T21:19:49+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/"},"wordCount":3406,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/92ddece92ab041b2b1ea227eb2289ead","articleSection":["2018","3\/2018","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/","url":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/","name":"Objekt- und Feldnamen refaktorieren - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/92ddece92ab041b2b1ea227eb2289ead","datePublished":"2020-05-13T21:19:49+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/92ddece92ab041b2b1ea227eb2289ead","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/92ddece92ab041b2b1ea227eb2289ead"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Objekt_und_Feldnamen_refaktorieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Objekt- und Feldnamen refaktorieren"}]},{"@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\/55001133","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=55001133"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001133\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}