Autor |
Beitrag |
Habak
      
Beiträge: 24
|
Verfasst: Sa 20.11.10 21:55
Guten Abend zusammen,
leider bin ich mit meinem Latein am Ende. Auch googlen hat nichts gebracht.
Mein Problem ist folgendes:
Ich habe eine Tabelle "Landstriche", in der zu einem Landstrich sechs Länder gespeichert werden können. Es gibt also jeweils ein Feld LandID1, LandID2, usw.
Zu einer übergeordneten Tabelle "Länder" in der eine LandID geführt wird, habe ich FK-Beziehungen erstellt. Nämlich sechs Stück, da ich auf die LandID aus der Tabelle "Länder" nur immer eine LandID aus der Tabelle "Landstriche" zuweisen darf (die FK´s heissen: Landstriche, Landstriche1, Landstriche2 usw.).
Wie kann ich nun mit LINQ eine Abfrage durchführen in der alle sechs FK-Beziehungen einbauen (im u.g Beispiel Landstriche, Landstriche1, Landstriche2 usw.)?
Mit folgendem Code kann ich nur die LandID1 abfragen (FK-Beziehung Landstriche) und die LandID2 wird ignoriert, da diese mit der FK-Beziehung Landstriche1 verbunden ist:
GeoDataContext Daten = new GeoDataContext();
C#-Quelltext 1: 2: 3: 4:
| var ListeLandstriche = from LS in Daten.Landstriche where (LS.LandID1 == 2 || LS.LandID2 == 2) orderby LS.Landstrich select new { LS.Landstrich }; |
Wie muss ich die Abfrage gestalten umd die LandID1 aus FK-Landstriche und gleichzeitig die LandID2 aus der FK-Landstriche1 abzufragen?
Vielen Dank schon im voraus.
Gruß Habak
Moderiert von Kha: C#-Tags hinzugefügt
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: So 21.11.10 11:04
Hallo,
also, ich werde erstmal ein Bild des Modells einbinden, damit man das Ganze bessert versteht. Bilder sagen bekanntlich mehr als tausend Worte.
Ich habe mal die Navigationsproperties bei Landstriche in Land1- Land6 umbenannt, um die Abfrage leichter zu gestalten.
Also, um nun die Landstriche mit ihren 6 Ländern abzufragen, könntest Du solch eine Abfrage an den Context stellen:
C#-Quelltext 1: 2: 3: 4: 5: 6:
| var landstriche = context.Landstriche.Include("Land1") .Include("Land2") .Include("Land3") .Include("Land4") .Include("Land5") .Include("Land6").ToList(); | Die Includes sind dafür da, damit die dazugehörigen Daten aus der Laender-Tabelle mitgeladen werden. Und nur die.
Alternativ könntest Du auch erst alle Daten aus der Laender-Tabelle abfragen und dann die Landstriche, dann wäre das mit den Includes nicht notwendig.
C#-Quelltext 1: 2:
| var laender = context.Laender.ToArray(); var landstriche = context.Landstriche.ToList(); |
LG, Marko
Einloggen, um Attachments anzusehen!
|
|
Habak 
      
Beiträge: 24
|
Verfasst: So 21.11.10 12:49
Hallo Trashkid,
vielen Dank für die Hilfe.
Ich glaube Dein Beispiel trifft es noch nicht ganz.
Bei mir sehen die Beziehungen folgendermaßen aus:
D.h. es sind insgesamt 8 FK-Beziehungen von Landstriche.LandID1, Landstriche.LandID2, usw. immer zu Länder.LandID
Beispielhaft ein Screenshot für die erste:
Nachdem ich zuvor noch mehrere "Abfragen" (from...) habe, die aufeinander aufbauen und erst zum Schluss die zu Beginn gepostete (Schluss-)Abfrage verwende, etwa so:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var ListeLandstriche5 = from LS15 in Landstriche5.Regionen where (LS15.RegionID == ((int)((DataRowView)regionenBindingSource.List[Auswahl_Region1.SelectedIndex])["RegionID"]) || LS15.RegionID == 99999) from LS25 in LS15.Länder where LS25.RegionID == LS15.RegionID from LS45 in LS25.Landstriche where (LS45.LandID1 == LS25.LandID) orderby (LS45.Landstrich) select new { LS45.Landstrich }; |
würde ich gerne diese Abfrageform so ähnlich verwenden können.
Ich hoffe, nun kommt es verständlicher rüber.
Vielen Dank für die Hilfe.
Gruß Habak
Moderiert von Kha: C#-Tags hinzugefügt
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: So 21.11.10 18:12
Hallo,
also was es mit den ganzen "LS..." auf sich hat, weiß ich nicht.
Aber habe es mal anders versucht. Ja, ich hatte Langeweile
Also, erstmal füllen des Datasets
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| DataSet1 ds = new DataSet1(); RegionenTableAdapter regionenTableAdapter = new RegionenTableAdapter(); regionenTableAdapter.Fill(ds.Regionen); LänderTableAdapter länderTableAdapter = new LänderTableAdapter(); länderTableAdapter.Fill(ds.Länder); LandstricheTableAdapter landstricheTableAdapter = new LandstricheTableAdapter(); landstricheTableAdapter.Fill(ds.Landstriche); regionenBindingSource.DataSource = ds.Regionen; |
Und nun die Abfrage der Länder und Landstriche zu einer Region:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var länderLandstrichCollection = ds.Länder.Where(l => l.RegionId == ((int)((DataRowView)regionenBindingSource.List[comboBox1.SelectedIndex])["RegionId"]) || l.RegionId == 9999) .Select(l=> l.GetLandstricheRowsByFK_Landstriche_Länder() .Union(l.GetLandstricheRowsByFK_Landstriche_Länder1() .Union(l.GetLandstricheRowsByFK_Landstriche_Länder2() .Union(l.GetLandstricheRowsByFK_Landstriche_Länder3() .Union(l.GetLandstricheRowsByFK_Landstriche_Länder4() .Union(l.GetLandstricheRowsByFK_Landstriche_Länder5() .Union(l.GetLandstricheRowsByFK_Landstriche_Länder6() .Union(l.GetLandstricheRowsByFK_Landstriche_Länder7()))))))));
foreach (var land in länderLandstrichCollection) { foreach (DataSet1.LandstricheRow landstrich in land) { } } | Ich gebe zu, das sieht ein bisschen kompliziert aus.
In der länderLandstrichCollection ist dann also eine Liste der Länder zu der Region, die ausgewählt wurde, und zu jedem Land die dazugehörigen Landstriche.
Weiss nicht, ob es das ist, was Du wolltest.
LG, Marko
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: So 21.11.10 18:19
Hm, spätestens an diesem Punkt würde ich behaupten, dass eine n*m-Beziehung besser geeignet wäre, selbst wenn m oder n konstant ist  .
PS: Worüber reden wir nun überhaupt, anscheinend LINQ auf ein DataSet? Aber wo kommt dann bitte der DataContext her  ?
_________________ >λ=
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: So 21.11.10 18:34
Ja, mit dem DataContext habe ich mich auch gefragt.
Dachte, das Ganze dreht sich ums Entity-Framework, deswegen mein erster Post.
Bei den Bildern dann wurde mir bewusst, dass es ein gutes, altes Dataset ist
Marko
|
|
Habak 
      
Beiträge: 24
|
Verfasst: Mo 22.11.10 20:35
Hallo Marko,
herzlichen Dank für Deine Mühe, denn ich bin absoulter Datenbank-Neuling und will für meine Begriffe doch nur ein paar "einfache" Dinge anstellen.
Die verschiedenen Möglichkeiten bei C# sind manchmal schon schwer zu verstehen.
Du hast mein Anliegen schon richtig verstanden.
Das mit dem DataContext hat folgendes auf sich:
Die Gebiete, Regionen, Länder, Landstriche usw. können über DropDown-Listen ausgewählt werden. Die ComboBoxen sind mit den einzelnen Tabellen (z.B. Länder) der Datenbank als DataSource verknüpft.
Um einfache, abhängige Abfragen zu ermöglichen, ziehe ich die Daten aus dem DataContext, weil ich das in dem o.g. Zusammenhang so in dem Buch "Datenbankprogrammierung mit Visual C# 2008, Microsoft Press" gelesen habe.
Weil in dem DataContext mehrere Tabellen enthalten sind (Gebiete, Regionen, Länder, Landstriche usw.) muss ich beispielsweise bei der Vorgabe einer Region die zugehörigen Länder und Landstriche "filtern", die für die gewählte Region übrigbleiben. Daher die ganzen "from LS..." (LS für Landstrich).
Ist das mit dem DataContext denn falsch?
Weiterhin würde mich interessieren, ob man diesen Ablauf nicht auch mit meinem "Abfragestil" erledigen kann? Das Problem (in meinem letzten Listing) ist "nur" das "select". Hier bekomme ich die Fehlermeldung, dass "ein anonymer Typ kann nicht mehrere Eigenschaften mit demselben Namen haben" kann.
Das mit dem DataSet habe ich probiert, aber es klappt noch nicht ganz, denn wie komme ich an die Daten? Für die Variablen "land" und "landstrich" bekomme ich folgendes angezeigt:
Land: System.Linq.Enumerable+<UnionIterator>d__81`1[Drehzahlfreunde_Motorrad_Info_Portal.DokuDBDataSet+LandstricheRow]
Landstrich: Drehzahlfreunde_Motorrad_Info_Portal.DokuDBDataSet+LandstricheRow
Hinweis: Das "DokuDBDataSet" ist der Bezug zur Datenbank und entspricht deinem "ds". Die aufgeführten Table.Adapter waren auch alle schon definiert.
Was Kha mit der n*m-Beziehung meint verstehe ich ehrlich gesagt nicht.
In jedem Fall vielen Dank für Deine Mühe und Hilfe.
Viele Grüße
Habak
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Mo 22.11.10 22:53
Hi,
ha, "Drehzahlfreunde". Cool
also, bei der Abfrage oben (etwas modifiziert)
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| foreach (var land in länderLandstrichCollection) { foreach (IEnumerable<DataSet1.LandstricheRow> landstrichInLand in länderLandstrichCollection) { List<DataSet1.LandstricheRow> landstricheInLaenderList = landstrichInLand.ToList(); } } | "landstricheInLaenderList" ist also die Liste der Landstriche eines Landes innerhalb des gewählten Landstriches.
Was Kha meint ist folgendes Schema:
dabei gibt es noch die Zwischentabelle, die die m-zu-n-Beziehung herstellt. Also kann ein Land n Landstriche haben, und ein Landstrich kann in m Länder vertreten sein.
Eine Abfrage darauf würde foldendermaßen aussehen:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| RegionenTableAdapter regionenTableAdapter = new RegionenTableAdapter(); regionenTableAdapter.Fill(ds.Regionen); LänderTableAdapter länderTableAdapter = new LänderTableAdapter(); länderTableAdapter.Fill(ds.Länder); LandstricheTableAdapter landstricheTableAdapter = new LandstricheTableAdapter(); landstricheTableAdapter.Fill(ds.Landstriche); LandLandstricheTableAdapter landLandstricheTableAdapter = new LandLandstricheTableAdapter(); landLandstricheTableAdapter.Fill(ds.LandLandstriche); | (es ist der eine TableAdapter und die eine DataTable hinzugekommen)
Die Abfrage ansich:
C#-Quelltext 1: 2: 3: 4: 5:
| EnumerableRowCollection<DataSet1.LänderRow> länder = ds.Länder.Where(l => l.RegionId == ((int)((DataRowView)regionenBindingSource.List[0])["RegionId"]) || l.RegionId == 9999); foreach (DataSet1.LänderRow land in länder) { DataSet1.LandLandstricheRow[] landLandstriche = land.GetLandLandstricheRows(); } | Ich gebe zu, die Abfrage sieht viel besser aus als die davor. War 'ne gute Idee mit der Zwischentabelle, Kha .
Ja, mit dem DataContext: Kenne das persönlich nur vom Entity Framework, mit dem ich gerade auf Atbeit arbeite bzw. rumexperimentiere. Würde einen DataContext nicht in Verbindung mit einem DataSet bringen.
LG, Marko
Einloggen, um Attachments anzusehen!
|
|
Habak 
      
Beiträge: 24
|
Verfasst: Di 23.11.10 20:54
Hallo Marko,
vielen Dank für die ausführliche Erklärung.
Das werde ich mir am Wochenend in Ruhe ansehen.
Wie kann ich denn aus der Liste
"List<DataSet1.LandstricheRow> landstricheInLaenderList = landstrichInLand.ToList();"
die Daten rausholen?
Ich bekomme leider immer für mich unverständliche, lange Ausdrücke.
Merci.
Gruß Habak
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Mi 24.11.10 10:10
Hi,
also, wenn Du eine List<DataSet1.LandstricheRow> hast, die in diesem Beispiel "landstricheInLaenderList" heißt, so kannst Du entweder mit einer Schleife duchiterieren
C#-Quelltext 1: 2: 3: 4:
| foreach (DataSet1.LandstricheRow landstrich in landstricheInLaenderList) { } | , oder aber auch nur einen bestimmten Landstrich in der Liste abfragen:
per Index:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| DataSet1.LandstricheRow landstrich = landstricheInLaenderList.ElementAtOrDefault(0); if (landstrich != null) { } else { } |
Oder nach einem Kriterium gefiltert:
C#-Quelltext 1: 2:
| List<DataSet1.LandstricheRow> gefilterteLandstriche = landstricheInLaenderList.Where(l => l.LandstrichName.Equals("Landstrich1")).ToList(); | Oder was meinst Du noch für Daten?
LG, Marko
|
|
Habak 
      
Beiträge: 24
|
Verfasst: Fr 26.11.10 18:09
Hallo Marko,
merci vielmals.
Bin leider derzeit beruflich stark eingebunden und komme daher die Tage leider nicht dazu das umzusetzen. Ich gebe Rückmeldung sobald ich es testen konnte.
Gruß
Habak
|
|
Habak 
      
Beiträge: 24
|
Verfasst: Fr 26.11.10 18:38
Hallo Marko,
jetzt habe ich es doch noch schnell ausprobiert und bekomme bei Deiner Iteration folgende Meldung für "landstrich":
"Drehzahlfreunde_Motorrad_Info_Portal.DokuDBDataSet+LandstricheRow"
wobei das DataSet bei mir DokuDBDataSet heisst.
Was mache ich denn falsch?
Gruß
Habak
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Sa 27.11.10 11:55
Hallo,
Hmm, wo das mit dem "+" herkommt... Müsste eigentlich aus einer Linq-Abfrage mit einem Union kommen.
Aber habe auch was verplant. Bei der Abfrage
C#-Quelltext 1: 2: 3: 4: 5: 6:
| EnumerableRowCollection<DataSet1.LänderRow> länder = ds.Länder.Where(l => l.RegionId == ((int)((DataRowView)regionenBindingSource.List[0])["RegionId"]) || l.RegionId == 9999); foreach (DataSet1.LänderRow land in länder) { DataSet1.LandLandstricheRow[] landLandstriche = land.GetLandLandstricheRows(); } | wird nur bis zur Tabelle "LandLandstriche gegangen". Aber Du wolltest ja eigentlich dei Landstriche. Tut mir leid
Und wenn Du die Abfrage so gestaltest:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| foreach (DataSet.LänderRow land in dataSet.Länder.Where(l => l.RegionId == 0 || l.RegionId == 9999)) { DataSet.LandLandstricheRow[] landLandstriche = land.GetLandLandstricheRows(); List<DataSet.LandstricheRow> landstricheImLand = dataSet.Landstriche.Where(ls => landLandstriche.Where (lls => lls.LandstrichId == ls.LandstrichId).Count() > 0).ToList(); } | Ich weiß, das kann man auch in einem Einzeiler schreiben, aber davon wird es auch nicht verständlicher.
LG, Marko
//edit: Kurzes Demo-Projekt angehängt. Die DataTables darin werden händisch gefüllt, damit die Datenbank nicht benötigt wird.
Einloggen, um Attachments anzusehen!
|
|
Habak 
      
Beiträge: 24
|
Verfasst: Sa 27.11.10 19:31
Hallo Marko,
das ist schon beeindruckend, was Du so herzauberst. Auf jeden Fall vielen Dank für das Beispiel, das hat mir das Thema Datenbank und Abfrage schon ein Stück näher gebracht.
Weiterhin habe ich jetzt meines Erachtens in meinem Programm alles entsprechend umgesetzt.
Jetzt komme ich schon fast bis zum gewünschten Ende, aber zwei Sachen sind mir jedoch noch unklar:
1) Der TableAdapter LandLandstriche: Muss ich die Tabelle noch "von Hand" füllen oder wird diese "automatisch" erzeugt (dh. die LandID´s und LandstrichID´s)?
2) In der "foreach"-Schleife kann ich mir bereits die Länder für die entsprechende Region anzeigen lassen.
Aber wie kann man sich die Einzelergebnisse von: "DataSet.LandLandstricheRow[] landLandstriche = land.GetLandLandstricheRows();" anzeigen lassen? Das kapiere ich noch nicht.
Gleiches gilt für die nächste Zeile: "List<DataSet.LandstricheRow> landstricheImLand = dataSet.Landstriche.Where(ls => landLandstriche.Where
(lls => lls.LandstrichId == ls.LandstrichId).Count() > 0).ToList();"
Wie zeige ich die Einzel-Daten aus dieser Liste an?
Habe schon einiges probiert aber alles führt entweder zu eine Exception oder zu einem "kryptischen" Text mit dem "+" (wie bereits schon vpr ein paar Tagen geschrieben).
Es sind noch 10% bis zu meinem absoluten Glück.
Vielen Dank und viele Grüße
Habak
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Sa 27.11.10 21:06
Hi,
also zu Deinen Fragen:
zu 1.)
Also, in dem Beispiel fülle ich alle DataTables per Code. In der Realität würden diese natürlich mit den Werten aus der Datenbank gefüllt werden, z.B. per TableAdapter. So natürlich auch die Tabelle LandLandstriche. In Deiner Datenbank ist ja (hoffentlich) die Verknüpfungstabelle vorhanden.
zu 2.)
Die Anzeige der Einzeldaten aus dem Array DataSet.LandLandstricheRow[] landLandstriche wird Dir nicht viel nützen, da in der Tabelle ja nur 2 Verknüpfungs-Id's drin stehen. Aber wenn Du es unbedingt willst:
C#-Quelltext 1: 2:
| foreach (DataSet.LandLandstricheRow landLandstrich in landLandstriche) Console.WriteLine(string.Format("LandId: {0}, LandstrichId: {1}", landLandstrich.LandId, landLandstrich.LandstrichId)); |
Und die List<DataSet.LandstricheRow> landstricheImLand:
C#-Quelltext 1: 2:
| foreach (DataSet.LandstricheRow landstrich in landstriche) Console.WriteLine(string.Format("LandstrichId: {0}, Landstrichname:{1}", landstrich.LandstrichId, landstrich.LandstrichName)); |
Habak hat folgendes geschrieben : |
Habe schon einiges probiert aber alles führt entweder zu eine Exception oder zu einem "kryptischen" Text mit dem "+" (wie bereits schon vpr ein paar Tagen geschrieben).
|
Weiß nun nicht, an welcher Stelle Du eine Exception bekommst, bzw. bei welcher Aktion. Und das mit dem Typ mit dem "+" im Namen. Aber das Demoprogramm läuft bei Dir ohne Fehler durch?
Habak hat folgendes geschrieben : |
Es sind noch 10% bis zu meinem absoluten Glück. |
Na, Du bist ja schnell glücklich zu stellen! Aber dann ist der Weg ja nicht mehr allzu weit!
LG, Marko
|
|
Habak 
      
Beiträge: 24
|
Verfasst: Sa 27.11.10 22:34
Hallo Marko,
jetzt sind es nur noch 5% bis zum Erfolg. An die Einzeldaten komme ich Dank Deiner Hilfe jetzt problemlos; aber nur wenn ich die LandLandstriche-Tabelle von Hand fülle.
Hierfür einen wirklich herzlichen Dank!
Nun stehe ich noch vor dem Problem diese LandLandsrtiche-Tabelle automatisch zu füllen. Vielleicht habe ich hier noch ein grundsätzliches Verständnisproblem.
Vielleicht erläutere ich kurz den momentanen Aufbau der beiden Tabellen:
Die Tabelle "Länder" hat folgende Felder:
LandID, RegionID, Land (z.B. 16,5, Spanien und 3,5, Frankreich)
Die Tabelle "Landstriche" hat folgende Felder:
LandstrichID, Landstrich, LandID1, LandID2, ...LandID8 (z.B. 2, Pyrenäen, 3,16,NULL, NULL,...,NULL).
Um nun die LandLandstriche-Tabelle automatisch mit Daten zu füllen, müsste ich dort für meine Begriffe aus der Tabelle "Landstriche" eine Art Zuweisung durchführen, die zu jeder LandstrichID und den LandID´s von 1 bis 8 aus der Landstriche-Tabelle, die nicht NULL sind, jeweils einen Datensatz für LandstrichID und LandID in der LandLandstriche-Tabelle generiert.
Aber wie macht man das? Oder ist mein Ansatz schon völlig falsch?
Vielleicht hat es jetzt auch "Klack" (der Groschen ist gefallen) bei mir gemacht, denn könnte es sein, das Ihr folgendes gemeint habt:
Diese LandID-Verknüfungen von 1 bis 8, die ich bisher in der Landstriche-Tabelle "verwaltet" habe, wird einfach in der LandLandstriche-Tabelle geführt und die ursprüngliche Landstriche-Tabelle enthält nur noch die LandstrichID und den Namen des Landstrichs.
Viele Grüße
Habak
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: So 28.11.10 09:39
Hallo,
Habak hat folgendes geschrieben : | Vielleicht hat es jetzt auch "Klack" (der Groschen ist gefallen) bei mir gemacht, denn könnte es sein, das Ihr folgendes gemeint habt:
Diese LandID-Verknüfungen von 1 bis 8, die ich bisher in der Landstriche-Tabelle "verwaltet" habe, wird einfach in der LandLandstriche-Tabelle geführt und die ursprüngliche Landstriche-Tabelle enthält nur noch die LandstrichID und den Namen des Landstrichs. |
Ja, genau so war es gemeint. Kommunikation ist manchmal schon schwer
Das Schema, das das DataSet hat, soll ja die Struktur Deiner Datenbank wiederspiegeln. Also ist es notwendig, die Datenbankstruktur umzubauen, mit der Zwischentabelle (ohne zu wissen, wie viele Daten die Tabellen enthalten, und wie umfangreich es wird. Aber zur Not muss das per Programm gemacht werden). Oder Du lässt es so und musst die Abfrage und das DataSet wieder umbauen. Womit wir wieder am Anfang wären.
Mit der Zwischentabelle hat einfach mal viele Vorteile:
- ein Landstrich kann mehr als 8 Ländern zugeordnet sein
- ein Landstrich kann einem Land wirklich nur 1x zugeordnet werden (wegen dem zusammengesetzten Primärschlüssel in LandLandstriche)
- einfachere Abfrage
LG, Marko
Für diesen Beitrag haben gedankt: Habak
|
|
Habak 
      
Beiträge: 24
|
Verfasst: So 28.11.10 11:37
Hallo Marko,
vielen Dank für Deine Unterstützung; die hat mich ein ganzes Stück weitergebracht.
Das mit der Zwischentabelle werde ich sicherlich nicht mehr vergessen.
Nochmals herzlichen Dank für die tolle Hilfe.
Viele Grüße
Habak
|
|
|