{"id":55000926,"date":"2014-04-01T00:00:00","date_gmt":"2020-05-22T21:19:34","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=926"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Loesch_und_Kopierreihenfolge_fuer_Tabellen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/","title":{"rendered":"L&ouml;sch- und Kopierreihenfolge f&uuml;r Tabellen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/bcf7a5e99b3143cd88c9c2eb091e7e2c\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Bei der einen oder anderen Gelegenheit werden Sie die Daten von Tabellen von einer Datenbank zur n&auml;chsten kopieren wollen oder einfach den Inhalt aller Tabellen l&ouml;schen. Wenn die Tabellen mit referenziellen Beziehungen versehen sind, ist sowohl das Kopieren als auch das L&ouml;schen der enthaltenen Daten nicht trivial: Sie m&uuml;ssen n&auml;mlich in beiden F&auml;llen in einer bestimmten Reihenfolge vorgehen. Beim L&ouml;schen m&uuml;ssen Sie erst alle verkn&uuml;pften Daten aus der Detailtabelle einer Beziehung entfernen, bevor Sie die Daten der Mastertabelle l&ouml;schen k&ouml;nnen. Beim Kopieren sind hingegen erst die Daten in den Mastertabellen einzuf&uuml;gen, bevor Sie die Detailtabellen samt Fremdschl&uuml;sselfeldinhalt f&uuml;llen k&ouml;nnen.<\/b><\/p>\n<p>In welcher Reihenfolge k&ouml;nnen die Daten von Tabellen &uuml;berhaupt gel&ouml;scht werden, und in welcher Reihenfolge muss man Daten kopieren, wenn man keine Fehler durch fehlende Datens&auml;tze in den verkn&uuml;pften Tabellen erhalten m&ouml;chte<\/p>\n<p>Beim L&ouml;schen entfernt man zun&auml;chst die Daten aus den Tabellen, die selbst von keiner anderen Tabelle referenziert werden. Wenn Sie also nur zwei Tabellen namens <b>tblKunden <\/b>und <b>tblAnreden <\/b>in einer Tabelle verwenden, wobei die Tabelle <b>tblKunden <\/b>mit einem Fremdschl&uuml;sselfeld namens <b>AnredeID <\/b>auf die Datens&auml;tze der Tabelle <b>tblAnreden <\/b>verweist, m&uuml;ssten Sie zun&auml;chst die Daten der Tabelle <b>tblKunden <\/b>l&ouml;schen und dann die der Tabelle <b>tblAnreden<\/b>.<\/p>\n<p>Sie l&ouml;schen also immer die Daten der Tabelle, mit der keine andere Tabelle per Fremdschl&uuml;sselfeld verkn&uuml;pft ist, und arbeiten sich so Tabelle f&uuml;r Tabelle durch das Datenmodell. Eine exakte Reihenfolge gibt es dabei nur, wenn immer eine Tabelle genau eine weitere Tabelle referenziert. Anderenfalls kann man einfach immer die Daten der Tabellen l&ouml;schen, f&uuml;r die keine Datens&auml;tze mehr in anderen Tabellen vorliegen, die per Fremdschl&uuml;sselfeld auf die Datens&auml;tze der Mastertabelle verweisen.<\/p>\n<p>Wenn Sie die Daten in einer solchen Beziehung von einer Datenbank in die andere &uuml;bertragen wollten, m&uuml;ssten Sie die umgekehrte Reihenfolge wie beim L&ouml;schen w&auml;hlen: Dann kopieren Sie erst die Daten der Tabellen, die selbst keine weitere Tabelle per Fremdschl&uuml;sselfeld referenzieren. In dem kleinen Mini-Beispiel von oben mit den Tabellen <b>tblKunden <\/b>und <b>tblAnreden <\/b>&uuml;bertragen Sie also erst die Datens&auml;tze der Tabelle <b>tblAnreden <\/b>und dann die Datens&auml;tze der Tabelle <b>tblKunden<\/b>. Hierbei m&uuml;ssen Sie nat&uuml;rlich darauf achten, dass Sie entweder die Werte der Prim&auml;rschl&uuml;sselfelder der Tabelle <b>tblAnreden <\/b>genau &uuml;bertragen und dann die Inhalte des Fremdschl&uuml;sselfeldes der Tabelle <b>tblKunden <\/b>&uuml;bernehmen oder dass Sie die Werte der Fremdschl&uuml;sselfelder an die ge&auml;nderten Werte der verkn&uuml;pften Prim&auml;rschl&uuml;sselfelder anpassen.<\/p>\n<p>Bei umfangreicheren Datenmodellen w&uuml;rden Sie also zun&auml;chst die Daten aller Tabellen kopieren, die selbst keine Fremdschl&uuml;sselfelder zur Verkn&uuml;pfung mit anderen Tabellen enthalten. Dann folgen die Tabellen, die nur eine oder mehrere der bereits kopierten Tabellen referenzieren und so weiter.<\/p>\n<p><b>Reihenfolge per VBA bestimmen<\/b><\/p>\n<p>Ziel dieses Beitrags ist es, per VBA die Reihenfolge f&uuml;r die beiden zuvor beschriebenen Vorg&auml;nge, also das L&ouml;schen aller Tabellen und das Kopieren der Daten aller Tabellen von einer Datenbank in eine andere Datenbank mit identischem Datenmodell, zu ermitteln und beispielsweise per Array bereitzustellen.<\/p>\n<p>Dazu ben&ouml;tigen wir im Wesentlichen den Zugriff auf die Tabellen des Datenmodells, den wir uns mit der <b>TableDefs<\/b>-Auflistung und den enthaltenen Elementen verschaffen. Dar&uuml;ber hinaus greifen wir auf die Informationen &uuml;ber die Verkn&uuml;pfungen zwischen den einzelnen Tabellen zu. Diese liefert die <b>Relations<\/b>-Auflistung des <b>Database<\/b>-Objekts der betroffenen Datenbank. Das <b>Relation<\/b>-Objekt als ein Objekt dieser Auflistung enth&auml;lt beispielsweise die Namen der beiden an der Beziehung beteiligten Tabellen sowie die Namen der Felder, &uuml;ber welche die Beziehung herstellt wird.<\/p>\n<p>Grundlegende Techniken sind beispielsweise das Durchlaufen aller Tabellendefinitionen der Datenbank. Dies geschieht in einer <b>For Each<\/b>-Schleife wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>TabellenDurchlaufen()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>tdf<span style=\"color:blue;\"> As <\/span>DAO.TableDef\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     For Each tdf In db.TableDefs\r\n         <span style=\"color:blue;\">Debug.Print<\/span> tdf.Name\r\n     <span style=\"color:blue;\">Next<\/span> tdf\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Gegebenenfalls legt man bestimmte Regeln &uuml;ber die zu untersuchenden Tabellen fest. Zum Beispiel sollen nur solche Tabellen untersucht werden, die mit dem Pr&auml;fix <b>tbl <\/b>beginnen. Dann bauen Sie eine <b>If&#8230;Then<\/b>-Bedingung in die Schleife ein:<\/p>\n<pre>For Each tdf In db.TableDefs\r\n     <span style=\"color:blue;\">If <\/span>tdf.Name Like \"tbl*\"<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> tdf.Name\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">Next<\/span> tdf<\/pre>\n<p>Auf die Beziehungen zwischen den Tabellen greifen Sie &uuml;ber die <b>Relations<\/b>-Auflistung zu &#8211; etwa so wie in Listing 1. Dies gibt jeweils die Mastertabelle und die Detailtabelle aus sowie die beiden Felder, die an der Beziehung beteiligt sind. Die Detailtabelle entspricht dabei der Tabelle, welche das Fremdschl&uuml;sselfeld enth&auml;lt, die Mastertabelle der Tabelle mit dem an der Beziehung beteiligten Prim&auml;rschl&uuml;sselfeld.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>BeziehungenDurchlaufen()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rel<span style=\"color:blue;\"> As <\/span>DAO.Relation\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     For Each rel In db.Relations\r\n         <span style=\"color:blue;\">Debug.Print<\/span> \"Mastertabelle: \" & rel.Table & \" (\" & rel.Fields(0).Name & \")\"\r\n         <span style=\"color:blue;\">Debug.Print<\/span> \"Detailtabelle: \" & rel.ForeignTable & \" (\" & rel.Fields(0).ForeignName & \")\"\r\n         <span style=\"color:blue;\">Debug.Print<\/span> \"==============================\"\r\n     <span style=\"color:blue;\">Next<\/span> rel\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Beispielprozedur zum Ausgeben aller Beziehungen samt der betroffenen Tabellen und Felder<\/span><\/b><\/p>\n<p><b>Referenzielle Integrit&auml;t ermitteln<\/b><\/p>\n<p>Wichtig ist im Zusammenhang mit der Ermittlung der Reihenfolge zum Kopieren von Daten, ob f&uuml;r die Beziehung referenzielle Integrit&auml;t definiert ist. Ist das der Fall, k&ouml;nnen Sie f&uuml;r das Fremdschl&uuml;sselfeld nur solche Werte eingeben, die auch im Prim&auml;rschl&uuml;sselfeld der an der Beziehung beteiligten Mastertabelle enthalten sind. Wenn keine referenzielle Integrit&auml;t definiert ist, k&ouml;nnen Sie beliebige Werte in das Fremdschl&uuml;sselfeld eintragen, auch solche, die gar nicht in dem verkn&uuml;pften Prim&auml;rschl&uuml;sselfeld enthalten sind.<\/p>\n<p><b>Reihenfolge zum Kopieren bestimmen<\/b><\/p>\n<p>Das Kopieren aller Daten von einer Datenbank in eine weitere Datenbank mit identischem Datenmodell erfolgt beispielsweise in der Reihenfolge aus Bild 1. Dort werden erst alle Tabellen kopiert, die selbst keine Fremdschl&uuml;sselfelder enthalten, dann die Tabellen, die nur Fremdschl&uuml;sselfelder enthalten, die auf bereits in die Reihenfolge aufgenommene Tabellen verweisen und so weiter.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_02\/pic_926_001.png\" alt=\"Reihenfolge beim L&ouml;schen der Tabellen dieses Datenmodells\" width=\"450\" height=\"639,8565\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Reihenfolge beim L&ouml;schen der Tabellen dieses Datenmodells<\/span><\/b><\/p>\n<p>Im ersten Schritt w&uuml;rden wir hier also zun&auml;chst alle Tabellen ermitteln, die selbst nicht als Detailtabelle an einer Beziehung beteiligt sind. Eine weitere Voraussetzung ist es, dass die zu untersuchenden Beziehungen mit referenzieller Integrit&auml;t definiert wurden. Alle anderen spielen bei der Reihenfolge des Kopierens keine Rolle.<\/p>\n<p>F&uuml;r ein Datenmodell wie etwa das der Beispieldatenbank liefert die Funktion <b>TabellenreihenfolgeKopieren <\/b>aus Listing 2 ein <b>Collection<\/b>-Objekt mit der richtigen Reihenfolge zum Kopieren der Daten. Diese Prozedur f&uuml;llt zun&auml;chst die Variable <b>db <\/b>mit einem Verweis auf die aktuelle Datenbank und instanziert zwei <b>Collection<\/b>-Objekte. Das erste namens <b>colOffen <\/b>nimmt zun&auml;chst die Tabellen aller zu untersuchenden Tabellen auf. Das zweite hei&szlig;t <b>colReihenfolge <\/b>und wird Schritt f&uuml;r Schritt mit den Tabellen in der f&uuml;r das Kopieren ben&ouml;tigten Reihenfolge gef&uuml;llt.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>TabellenreihenfolgeKopieren()<span style=\"color:blue;\"> As <\/span>Collection\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rel<span style=\"color:blue;\"> As <\/span>DAO.Relation\r\n     <span style=\"color:blue;\">Dim <\/span>tdf<span style=\"color:blue;\"> As <\/span>DAO.TableDef\r\n     <span style=\"color:blue;\">Dim <\/span>colOffen<span style=\"color:blue;\"> As <\/span>Collection, colReihenfolge<span style=\"color:blue;\"> As <\/span>Collection\r\n     <span style=\"color:blue;\">Dim <\/span>bolIstDetailtabelle<span style=\"color:blue;\"> As Boolean<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>varOffen<span style=\"color:blue;\"> As Variant<\/span>, varReihenfolge<span style=\"color:blue;\"> As Variant<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> colOffen = <span style=\"color:blue;\">New<\/span> Collection\r\n     <span style=\"color:blue;\">Set<\/span> colReihenfolge = <span style=\"color:blue;\">New<\/span> Collection\r\n     For Each tdf In db.TableDefs\r\n         <span style=\"color:blue;\">If <\/span>tdf.Name Like \"tbl*\"<span style=\"color:blue;\"> Then<\/span>\r\n             colOffen.Add tdf.Name, tdf.Name\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> tdf\r\n     <span style=\"color:blue;\">Do While<\/span> colOffen.Count &gt; 0\r\n         For Each varOffen In colOffen\r\n             bolIstDetailtabelle = <span style=\"color:blue;\">False<\/span>\r\n             For Each rel In db.Relations\r\n                 <span style=\"color:blue;\">If <\/span>rel.ForeignTable = varOffen<span style=\"color:blue;\"> Then<\/span>\r\n                     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> ((rel.Attributes And dbRelationDontEnforce) = dbRelationDontEnforce)<span style=\"color:blue;\"> Then<\/span>\r\n                         bolIstDetailtabelle = <span style=\"color:blue;\">True<\/span>\r\n                         For Each varReihenfolge In colReihenfolge\r\n                             <span style=\"color:blue;\">If <\/span>rel.Table = varReihenfolge<span style=\"color:blue;\"> Then<\/span>\r\n                                 bolIstDetailtabelle = <span style=\"color:blue;\">False<\/span>\r\n                                 <span style=\"color:blue;\">Exit For<\/span>\r\n                             <span style=\"color:blue;\">End If<\/span>\r\n                         <span style=\"color:blue;\">Next<\/span> varReihenfolge\r\n                     <span style=\"color:blue;\">End If<\/span>\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">Next<\/span> rel\r\n             <span style=\"color:blue;\">If <\/span>bolIstDetailtabelle = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n                 colReihenfolge.Add varOffen, varOffen\r\n                 colOffen.Remove varOffen\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Next<\/span> varOffen\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> TabellenreihenfolgeKopieren = colReihenfolge\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Prozedur, welche die Reihenfolge der Tabellen zum Kopieren von Daten ermittelt<\/span><\/b><\/p>\n<p>Zun&auml;chst liest die Prozedur die Namen aller Tabellen in die Collection <b>colOffen <\/b>ein. Dazu durchl&auml;uft sie die <b>TableDefs<\/b>-Auflistung und f&uuml;gt alle Tabellennamen mit der <b>Add<\/b>-Methode hinzu, die mit <b>tbl <\/b>beginnen &#8211; und zwar als <b>Item <\/b>und als <b>Key<\/b>.<\/p>\n<p>Dann durchl&auml;uft die Prozedur so lange eine Schleife, bis die Anzahl der in der Collection <b>colOffen <\/b>enthaltenen Elemente nicht mehr gr&ouml;&szlig;er als <b>0 <\/b>ist. Dies bedeutet gleichzeitig, dass wir die Elemente innerhalb der <b>Do While<\/b>-Schleife entfernen m&uuml;ssen &#8211; sonst endet die Schleife nie.<\/p>\n<p>In dieser Schleife folgt gleich eine weitere <b>For Each<\/b>-Schleife &uuml;ber alle Elemente der Collection <b>colOffen<\/b>. Darin stellt die Prozedur zun&auml;chst den Wert der Variablen <b>bolIstDetailtabelle <\/b>auf den Wert <b>False <\/b>ein. Anschlie&szlig;end folgen einige Pr&uuml;fungen, in denen diese Variable m&ouml;glicherweise auf den Wert <b>True <\/b>eingestellt wird. Ist dies am Ende der <b>For Each<\/b>-Schleife der Fall, wird das aktuelle mit der Variablen <b>varOffen <\/b>referenzierte Element in die Collection <b>colReihenfolge <\/b>eingetragen und aus der Collection <b>colOffen <\/b>gel&ouml;scht.<\/p>\n<p>Doch zun&auml;chst zu den einzelnen Pr&uuml;fungen. Die Variable <b>varOffen <\/b>enth&auml;lt zu diesem Zeitpunkt den Namen der zu untersuchenden Tabelle aus der Collection <b>colOffen<\/b>. In einer weiteren <b>For Each<\/b>-Schleife durchl&auml;uft die Prozedur alle <b>Relation<\/b>-Objekte der <b>Relations<\/b>-Auflistung des aktuellen <b>Database<\/b>-Objekts. Darin vergleicht die Prozedur den in <b>varOffen <\/b>gespeicherten Tabellennamen mit der Detailtabelle der jeweiligen mit <b>rel <\/b>referenzierten Beziehung &#8211; sie pr&uuml;ft also, ob die Tabelle in der aktuell untersuchten Beziehung die Rolle der Detailtabelle einnimmt. Sprich: Enth&auml;lt die Tabelle ein Fremdschl&uuml;sselfeld zur Herstellung einer Beziehung zu einer anderen Tabelle Falls dies f&uuml;r eine der Beziehungen der Fall ist, folgt eine weitere Untersuchung &#8211; n&auml;mlich die, ob es sich bei der Beziehung um eine mit referenzieller Integrit&auml;t handelt. Die Eigenschaft <b>Attributes <\/b>enth&auml;lt einen Zahlenwert, der aus mehreren Zahlen zusammengesetzt sein kann. Durch einen Bin&auml;rvergleich dieses Wertes mit dem in der Konstanten <b>dbRelationDontEnforce <\/b>enthaltenen Zahlenwert <b>2 <\/b>ermitteln wir, ob referenzielle Integrit&auml;t vorliegt. Ist dies der Fall, stellen wir den Wert der Variablen <b>bolIstDetailtabelle <\/b>auf den Wert <b>True <\/b>ein &#8211; zu diesem Zeitpunkt gehen wir also davon aus, dass die Tabelle als Detailtabelle einer Beziehung mit einer als Mastertabelle verwendeten Tabelle dient.<\/p>\n<p>Wir k&ouml;nnten diese Tabelle also zu diesem Zeitpunkt nicht in die Collection <b>colReihenfolge <\/b>&uuml;bernehmen, da zuvor erst alle Tabellen aus der Collection <b>colOffen <\/b>entfernt werden m&uuml;ssen, die f&uuml;r diese Detailtabelle als Mastertabelle dienen. Gehen wir also davon aus, dass dies der erste Durchlauf durch die <b>Do While<\/b>-Schleife ist und noch alle Mastertabellen in <b>colOffen <\/b>enthalten sind. Dann bleibt die aktuelle Tabelle, die wir als Detailtabelle einer Beziehung definiert haben, vorerst in der Collection <b>colOffen<\/b>.<\/p>\n<p>Wenn es sich bei der Tabelle hingegen um eine Mastertabelle handelt, dann finden wir beim Durchlaufen der Elemente der <b>Relations<\/b>-Auflistung per <b>For Each<\/b>-Schleife keinen Eintrag, dessen Detailtabelle mit der in <b>varOffen<\/b> gespeicherten Tabelle &uuml;bereinstimmt. Dies ist bei unserem Beispieldatenmodell etwa bei der Tabelle <b>tblKunden <\/b>der Fall, aber auch bei <b>tblPersonal<\/b>, <b>tblVersandfirmen<\/b>, <b>tblLieferanten <\/b>und <b>tblKategorien<\/b>.<\/p>\n<p>Dann ist der Wert von <b>bolIstDetailtabelle  <\/b>nach dem Durchlaufen der <b>For Each<\/b>-Schleife &uuml;ber die <b>Relations<\/b>-Auflistung immer noch <b>False<\/b>. Im Anschluss an diese <b>For Each<\/b>-Schleife pr&uuml;ft die Funktion den Wert von <b>bolIstDetailtabelle<\/b>. Hat diese dann den Wert <b>False<\/b>, tr&auml;gt die Funktion den Wert von <b>varOffen <\/b>als neues Element in die Collection <b>colReihenfolge <\/b>ein. Anschlie&szlig;end l&ouml;scht sie den betreffenden Eintrag aus der Collection <b>colOffen<\/b>, damit dieser nicht nochmals untersucht werden muss.<\/p>\n<p>Gehen wir also an dieser Stelle davon aus, dass wir in einem ersten Durchlauf alle Tabellen, die nur als Mastertabellen in Beziehungen dienen, aber nicht als Detailtabellen, aus der Collection <b>colOffen <\/b>gel&ouml;scht haben. Dann gehen wir damit in den n&auml;chsten Durchlauf der &auml;u&szlig;eren <b>Do While<\/b>-Schleife. Diese findet dann beispielsweise f&uuml;r die Tabelle <b>tblBestellungen <\/b>heraus, dass diese als Detailtabelle f&uuml;r die Tabelle <b>tblKunden <\/b>dient.<\/p>\n<p>Jetzt wird die innerste <b>For Each<\/b>-Schleife interessant: Diese durchl&auml;uft n&auml;mlich die Elemente, die schon in der Collection <b>colReihenfolge <\/b>enthalten sind. Wenn die aktuelle Tabelle aus der Variablen <b>varOffen <\/b>nun zwar als Detailtabelle identifiziert wurde, aber als Mastertabelle dieser Beziehung (<b>rel.Table<\/b>) eine Tabelle dient, die bereits in die Collection <b>colReihenfolge <\/b>&uuml;bertragen wurde, wird die Variable <b>bolIstDetailtabelle <\/b>wieder auf den Wert <b>False <\/b>eingestellt und die innere <b>For Each<\/b>-Schleife verlassen. Die gleiche Pr&uuml;fung erfolgt f&uuml;r alle Beziehungen dieser Tabelle mit anderen Tabellen, im Falle der Tabelle <b>tblBestellungen <\/b>also f&uuml;r die Beziehungen mit den Tabellen <b>tblKunden<\/b>, <b>tblPersonal <\/b>und <b>tblVersandfirmen<\/b>. Nur wenn alle drei Beziehungen mit dem Wert <b>False <\/b>f&uuml;r die Variable <b>bolIstDetailtabelle <\/b>gepr&uuml;ft wurden, hat <b>bolIstDetailtabelle <\/b>nach dem Verlassen der <b>For Each<\/b>-Schleife &uuml;ber die Elemente der <b>Relations<\/b>-Auflistung den Wert <b>False <\/b>und die Tabelle, hier <b>tblBestellungen<\/b>, kann in die Collection <b>colReihenfolge <\/b>&uuml;bernommen und aus der Collection <b>colOffen <\/b>gel&ouml;scht werden. Dies geschieht im zweiten Durchlauf der &auml;u&szlig;eren <b>Do While<\/b>-Schleife f&uuml;r die beiden Tabellen <b>tblBestellungen <\/b>und <b>tblArtikel<\/b>. Die Tabelle <b>tblBestelldetails <\/b>bleibt &uuml;brig, weil sie zu diesem Zeitpunkt noch mit den beiden Tabellen <b>tblBestellungen <\/b>und <b>tblArtikel <\/b>verkn&uuml;pft ist und die noch nicht in die Collection <b>colReihenfolge <\/b>&uuml;bernommen wurden. F&uuml;r die Tabelle <b>tblBestelldetails <\/b>ist also im vorliegenden Beispiel ein dritter Durchlauf der &auml;u&szlig;eren <b>Do While<\/b>-Schleife n&ouml;tig. Es kann passieren, dass weniger Durchl&auml;ufe n&ouml;tig sind. Dies h&auml;ngt davon ab, wie die Tabellen in der Auflistung <b>relOffen <\/b>sortiert sind. Wenn im zweiten Durchgang beispielsweise erst die Tabellen <b>tblArtikel <\/b>und <b>tblBestellungen <\/b>behandelt und in die Collection <b>colReihenfolge <\/b>verschoben worden w&auml;ren und erst dann die Tabelle <b>tblBestelldetails <\/b>untersucht worden w&auml;re, h&auml;tte die Funktion diese gleich in diesem Durchlauf ebenfalls in die Col-lection <b>colReihenfolge <\/b>verschoben. Dies ist jedoch nicht der Fall, da <b>colOffen <\/b>aus der <b>TableDefs<\/b>-Auflistung gef&uuml;llt wird, und diese liefert ihre Eintr&auml;ge in alphabetischer Reihenfolge.<\/p>\n<p>Die Collection <b>colReihenfolge <\/b>wird schlie&szlig;lich als Funktionsergebnis zur&uuml;ckgeliefert.<\/p>\n<p>Wenn Sie die Funktion ausprobieren m&ouml;chten, k&ouml;nnen Sie dies etwa mit der folgenden Testprozedur durchf&uuml;hren:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Test_Tabellenreihenfolge()\r\n     <span style=\"color:blue;\">Dim <\/span>colReihenfolge<span style=\"color:blue;\"> As <\/span>Collection\r\n     <span style=\"color:blue;\">Dim <\/span>var<span style=\"color:blue;\"> As Variant<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> colReihenfolge = _\r\n         TabellenreihenfolgeKopieren\r\n     For Each var In colReihenfolge\r\n         <span style=\"color:blue;\">Debug.Print<\/span> var\r\n     <span style=\"color:blue;\">Next<\/span> var\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur ruft die Funktion <b>TabellenreihenfolgeKopieren <\/b>auf und durchl&auml;uft die mit einer Collection zur&uuml;ckgegebenen Elemente in einer <b>For Each<\/b>-Schleife. Das Ergebnis sieht im Direktbereich wie folgt aus:<\/p>\n<pre>tblKategorien\r\ntblKunden\r\ntblLieferanten\r\ntblPersonal\r\ntblVersandfirmen\r\ntblArtikel\r\ntblBestellungen\r\ntblBestelldetails<\/pre>\n<p><b>Reihenfolge zum L&ouml;schen bestimmen<\/b><\/p>\n<p>Die Bestimmung der Reihenfolge zum L&ouml;schen der Daten aller Tabellen eines Datenmodells startet mit einem ersten Schritt, bei dem alle Tabellen ermittelt werden, die von keiner anderen Tabelle referenziert werden &#8211; also solche Tabellen, die ausschlie&szlig;lich Fremdschl&uuml;sselfelder zu anderen Tabellen aufweisen, aber nicht mit ihrem Prim&auml;rschl&uuml;sselfeld an einer Beziehung beteiligt sind. Die Funktion zum Zusammenstellen einer Collection mit diesen Tabellen in der richtigen Reihenfolge zum L&ouml;schen der Daten aller Tabellen sieht &auml;hnlich aus wie die zuvor beschriebene Funktion zum Ermitteln der Reihenfolge beim Hineinkopieren von Daten in verkn&uuml;pfte Tabellen eines Datenmodells.<\/p>\n<p>Die Funktion aus Listing 3 hei&szlig;t <b>TabellenreihenfolgeLoeschen <\/b>und liefert wiederum eine Collection mit den betroffenen Tabellen in der richtigen Reihenfolge zur&uuml;ck. Sie ist fast identisch aufgebaut wie die zuvor beschriebene Funktion <b>TabellenreihenfolgeKopieren<\/b>, allerdings pr&uuml;ft sie jeweils, ob die aktuell untersuchte Tabelle eine Mastertabelle ist, und &uuml;bernimmt diese nur in die Collection <b>colReihenfolge<\/b>, wenn dies nach Abschluss der entsprechenden Pr&uuml;fungen nicht der Fall ist. Auf diese Weise durchl&auml;uft auch diese Funktion die in der Collection <b>colOffen <\/b>enthaltenen Tabellen ein- oder mehrmals, bis alle Tabellen aus dieser Auflistung in der richtigen Reihenfolge in der Collection <b>colReihenfolge <\/b>gelandet sind und diese an die aufrufende Routine zur&uuml;ckgegeben werden kann.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>TabellenreihenfolgeLoeschen()<span style=\"color:blue;\"> As <\/span>Collection\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rel<span style=\"color:blue;\"> As <\/span>DAO.Relation\r\n     <span style=\"color:blue;\">Dim <\/span>tdf<span style=\"color:blue;\"> As <\/span>DAO.TableDef\r\n     <span style=\"color:blue;\">Dim <\/span>colOffen<span style=\"color:blue;\"> As <\/span>Collection, colReihenfolge<span style=\"color:blue;\"> As <\/span>Collection\r\n     <span style=\"color:blue;\">Dim <\/span>bolIstMastertabelle<span style=\"color:blue;\"> As Boolean<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>varOffen<span style=\"color:blue;\"> As Variant<\/span>, varReihenfolge<span style=\"color:blue;\"> As Variant<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> colOffen = <span style=\"color:blue;\">New<\/span> Collection\r\n     <span style=\"color:blue;\">Set<\/span> colReihenfolge = <span style=\"color:blue;\">New<\/span> Collection\r\n     For Each tdf In db.TableDefs\r\n         <span style=\"color:blue;\">If <\/span>tdf.Name Like \"tbl*\"<span style=\"color:blue;\"> Then<\/span>\r\n             colOffen.Add tdf.Name, tdf.Name\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> tdf\r\n     <span style=\"color:blue;\">Do While<\/span> colOffen.Count &gt; 0\r\n         For Each varOffen In colOffen\r\n             bolIstMastertabelle = <span style=\"color:blue;\">False<\/span>\r\n             For Each rel In db.Relations\r\n                 <span style=\"color:blue;\">If <\/span>rel.Table = varOffen<span style=\"color:blue;\"> Then<\/span>\r\n                     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> ((rel.Attributes And dbRelationDontEnforce) = dbRelationDontEnforce)<span style=\"color:blue;\"> Then<\/span>\r\n                         bolIstMastertabelle = <span style=\"color:blue;\">True<\/span>\r\n                         For Each varReihenfolge In colReihenfolge\r\n                             <span style=\"color:blue;\">If <\/span>rel.ForeignTable = varReihenfolge<span style=\"color:blue;\"> Then<\/span>\r\n                                 bolIstMastertabelle = <span style=\"color:blue;\">False<\/span>\r\n                                 <span style=\"color:blue;\">Exit For<\/span>\r\n                             <span style=\"color:blue;\">End If<\/span>\r\n                         <span style=\"color:blue;\">Next<\/span> varReihenfolge\r\n                     <span style=\"color:blue;\">End If<\/span>\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">Next<\/span> rel\r\n             <span style=\"color:blue;\">If <\/span>bolIstMastertabelle = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n                 colReihenfolge.Add varOffen, varOffen\r\n                 colOffen.Remove varOffen\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Next<\/span> varOffen\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> TabellenreihenfolgeLoeschen = colReihenfolge\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Prozedur, welche die Reihenfolge der Tabellen zum L&ouml;schen von Daten ermittelt<\/span><\/b><\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Wenn Sie programmatisch mehrere verkn&uuml;pfte Tabellen eines Datenmodells leeren oder die Inhalte einer Datenbank in eine Datenbank mit identischem Datenmodell &uuml;bertragen m&ouml;chten, m&uuml;ssen Sie eine entsprechende Reihenfolge beachten. Diese liefern die beiden Funktionen <b>TabellenreihenfolgeKopieren <\/b>und <b>TabellenreihenfolgeLoeschen <\/b>in Form einer Collection mit den Tabellennamen in der richtigen Reihenfolge.<\/p>\n<p>Im Beispielformular werden diese nach einem Mausklick auf eine der beiden Schaltfl&auml;chen eingelesen und in einem Listenfeld namens <b>lstTabellen <\/b>in der jeweils korrekten Reihenfolge dargestellt. Sie k&ouml;nnen die beiden Funktionen einfach in die Datenbank kopieren, in der Sie diese nutzen m&ouml;chten. Der Beitrag <b>Wiederherstellungspunkt f&uuml;r Daten <\/b>(<b>www.access-im-unternehmen.de\/929<\/b>) liefert ein Beispiel f&uuml;r den Einsatz der beiden Funktionen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>LoeschUndKopierreihenfolge.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{9C008430-21FA-440E-8AD1-B0C8619D8985}\/aiu_926.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bei der einen oder anderen Gelegenheit werden Sie die Daten von Tabellen von einer Datenbank zur n&auml;chsten kopieren wollen oder einfach den Inhalt aller Tabellen l&ouml;schen. Wenn die Tabellen mit referenziellen Beziehungen versehen sind, ist sowohl das Kopieren als auch das L&ouml;schen der enthaltenen Daten nicht trivial: Sie m&uuml;ssen n&auml;mlich in beiden F&auml;llen in einer bestimmten Reihenfolge vorgehen. Beim L&ouml;schen m&uuml;ssen Sie erst alle verkn&uuml;pften Daten aus der Detailtabelle einer Beziehung entfernen, bevor Sie die Daten der Mastertabelle l&ouml;schen k&ouml;nnen. Beim Kopieren sind hingegen erst die Daten in den Mastertabellen einzuf&uuml;gen, bevor Sie die Detailtabellen samt Fremdschl&uuml;sselfeldinhalt f&uuml;llen k&ouml;nnen.<\/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":[66022014,662014,44000021],"tags":[],"class_list":["post-55000926","post","type-post","status-publish","format-standard","hentry","category-66022014","category-662014","category-Tabellen_und_Datenmodellierung"],"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>L&ouml;sch- und Kopierreihenfolge f&uuml;r Tabellen - 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\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"L&ouml;sch- und Kopierreihenfolge f&uuml;r Tabellen\" \/>\n<meta property=\"og:description\" content=\"Bei der einen oder anderen Gelegenheit werden Sie die Daten von Tabellen von einer Datenbank zur n&auml;chsten kopieren wollen oder einfach den Inhalt aller Tabellen l&ouml;schen. Wenn die Tabellen mit referenziellen Beziehungen versehen sind, ist sowohl das Kopieren als auch das L&ouml;schen der enthaltenen Daten nicht trivial: Sie m&uuml;ssen n&auml;mlich in beiden F&auml;llen in einer bestimmten Reihenfolge vorgehen. Beim L&ouml;schen m&uuml;ssen Sie erst alle verkn&uuml;pften Daten aus der Detailtabelle einer Beziehung entfernen, bevor Sie die Daten der Mastertabelle l&ouml;schen k&ouml;nnen. Beim Kopieren sind hingegen erst die Daten in den Mastertabellen einzuf&uuml;gen, bevor Sie die Detailtabellen samt Fremdschl&uuml;sselfeldinhalt f&uuml;llen k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:19:34+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/bcf7a5e99b3143cd88c9c2eb091e7e2c\" \/>\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=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"L&ouml;sch- und Kopierreihenfolge f&uuml;r Tabellen\",\"datePublished\":\"2020-05-22T21:19:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/\"},\"wordCount\":2608,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/bcf7a5e99b3143cd88c9c2eb091e7e2c\",\"articleSection\":[\"2\\\/2014\",\"2014\",\"Tabellen und Datenmodellierung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/\",\"name\":\"L&ouml;sch- und Kopierreihenfolge f&uuml;r Tabellen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/bcf7a5e99b3143cd88c9c2eb091e7e2c\",\"datePublished\":\"2020-05-22T21:19:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/bcf7a5e99b3143cd88c9c2eb091e7e2c\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/bcf7a5e99b3143cd88c9c2eb091e7e2c\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"L&ouml;sch- und Kopierreihenfolge f&uuml;r Tabellen\"}]},{\"@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":"L&ouml;sch- und Kopierreihenfolge f&uuml;r Tabellen - 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\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/","og_locale":"de_DE","og_type":"article","og_title":"L&ouml;sch- und Kopierreihenfolge f&uuml;r Tabellen","og_description":"Bei der einen oder anderen Gelegenheit werden Sie die Daten von Tabellen von einer Datenbank zur n&auml;chsten kopieren wollen oder einfach den Inhalt aller Tabellen l&ouml;schen. Wenn die Tabellen mit referenziellen Beziehungen versehen sind, ist sowohl das Kopieren als auch das L&ouml;schen der enthaltenen Daten nicht trivial: Sie m&uuml;ssen n&auml;mlich in beiden F&auml;llen in einer bestimmten Reihenfolge vorgehen. Beim L&ouml;schen m&uuml;ssen Sie erst alle verkn&uuml;pften Daten aus der Detailtabelle einer Beziehung entfernen, bevor Sie die Daten der Mastertabelle l&ouml;schen k&ouml;nnen. Beim Kopieren sind hingegen erst die Daten in den Mastertabellen einzuf&uuml;gen, bevor Sie die Detailtabellen samt Fremdschl&uuml;sselfeldinhalt f&uuml;llen k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:19:34+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/bcf7a5e99b3143cd88c9c2eb091e7e2c","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"L&ouml;sch- und Kopierreihenfolge f&uuml;r Tabellen","datePublished":"2020-05-22T21:19:34+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/"},"wordCount":2608,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/bcf7a5e99b3143cd88c9c2eb091e7e2c","articleSection":["2\/2014","2014","Tabellen und Datenmodellierung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/","url":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/","name":"L&ouml;sch- und Kopierreihenfolge f&uuml;r Tabellen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/bcf7a5e99b3143cd88c9c2eb091e7e2c","datePublished":"2020-05-22T21:19:34+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/bcf7a5e99b3143cd88c9c2eb091e7e2c","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/bcf7a5e99b3143cd88c9c2eb091e7e2c"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Loesch_und_Kopierreihenfolge_fuer_Tabellen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"L&ouml;sch- und Kopierreihenfolge f&uuml;r Tabellen"}]},{"@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\/55000926","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=55000926"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000926\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000926"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000926"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000926"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}