Hallo zusammen,
im Anhang habe ich ein Demo angehängt.
Ist es eigentlich möglich eine Tabelle nach ihren Inhalten automatisch zu sortieren?
Die Tabelle 1... ist die Ausgangssituation, die 2... ist das von mir händisch erstellte Ergebnis.
Dabei kommte es auf die ersten 4 Spalten (desc_1 bis desc_4) an:
- in desc_1 die Info ob
vorn, hinten, rechts...- in desc_2 die Info
Bauart- in desc_3 die Info
Typ- in desc_4 die Info
SystemWenn bspw. wie bei art_nr
20053 keine
Typ-Info vorhanden ist, sollte dieses Feld mit dem Feldinhalt der nächsten, rechten Spalte (hier: Befestigungsart:...) gefüllt werden.
Wenn allerdings
System-Info vorhanden wäre, dann sollte zunächst der
System-Inhalt ins Feld eingefügt werden. Also Füllung der Felder nach Reihenfolge der obigen Auflistung, erst dann mit den rechten Feldinhalten.
Noch kurz zur Info:
- - die angehängte Tabelle hat im originalen weitere Spalten, die ich aber der Übersicht wegen in dieser Demo rausgenommen habe
- die orig. Tabelle hat keine ID-Spalte
- Tabelle enthält 50tsd Datensätze - daher händisch nicht mehr machbar
Ich hoffe ich konnte es so erklären, dass Ihr es verstanden habt.
Ich würde mich freuen wenn Ihr mir helfen könntet.
Gruß Torsten.
Hallo,
es gibt noch einige hier, die kein Access2010 haben. Konvertiere die DB mal nach Access2003 (MDB), da gibt es mehr Helfer.
Hier zusätzlich die 2003er-Version
hmm
irgendwie sieht das ganz böse nach excel aus.
Hallo,
ich habe nicht ganz verstanden, was Du jetzt erreichen willst, trotz Deines Beispiels. Wenn das Beispiel weniger Datensätze und Spalten hätte, wäre es sich leichter zu verstehen.
Aber eines vorweg, dass das Datenmodell für eine Datenbank völlig ungeeignet ist, ist Dir bewusst?
Das lässt sich alleine schon aus den vielen leeren Feldern und den vielen sich wiederholenden Einträgen ableiten. In einer Datenbank gibt es im Regelfall keine redundante Daten und auch keine so viele leere Felder.
Hier liegen mehrere n:m Beziehungen vor, die mit mehreren Tabellen aufzulösen wären. Hier wirst Du mit Access nicht viel Freude haben.
Auch so etwas:
Zitatdie orig. Tabelle hat keine ID-Spalte
stimmt mich höchst bedenklich. Eine Datenbanktabelle ohne Primärschlüssel darf es eigentlich nicht geben.
Kannst Du das Datenmodell noch ändern ?
Ich stelle gleich weitere Informationen zur Verfügung.
Stelle sie jetzt zusammen.
Gruß Torsten
Im Anhang die erweiterte DB.
Ich versuche weiter zu erklären:
Alle 4 Tabellen sind vom Inhalt her ein Auzug der kompletten Datensätze, die Spalten sind 1 zu 1 dargestellt.
Ich bekomme die Daten als CSV und importiere sie in Access und erhalte die Tbl "rohdaten".
Über Module/Prozeduren die ich mit Eurer Hilfe erstellt habe, erstelle ich die Tbl "vorsortiert".
Daraus habe ich zur Demo auszugsweise die Tbl "1_Ausgangstabelle" erstellt.
Das Ergebnis der jetzigen Tbl "vorsortiert" in angepasster Form findet Ihr im Online Shop unter http://tinyurl.com/mf46lgz (http://tinyurl.com/mf46lgz). Klickt dann bitte auf Stoßdämpfer und der 1. Artikel 20114 ist ein Beispiel. In der Auflistung seht Ihr dann bspw. die einzelnen desc_*-Felder. Wenn Ihr abweichende Feldinhalte seht, bspw. StoßdämpferEinbauseite: Hinterachse und online als hinten, dann habe ich das per Replace-Befehl im Vorfeld in Access geändert (nur zur Info, ist nicht wichtig für die Ausgangsfrage).
Das zum ersehen der Zusammenhänge.
Wenn Ihr jetzt in der Tbl "vorsoriert" in der Spalte "beschrbg" schaut, seht Ihr anhand des Artikels (art_nr) 20012 sehr gut, dass die Information "vorne" erst an 4. Stelle erfolgt. Das ist das Problem.
Im Shop http://tinyurl.com/lghj3qx (http://tinyurl.com/lghj3qx) wird die Info "vorne" nicht zuerst angezeigt sondern erst an 2. Stelle. Zuvor: Typ Gasdruck.
Ich hoffe ich konnte verständlich machen warum ich die Feldinhalte nach dem Prinzip:
- in desc_1 die Info ob vorn, hinten, rechts...
- in desc_2 die Info Bauart
- in desc_3 die Info Typ
- in desc_4 die Info System
abändern möchte.
Habt Ihr eine Idee, kann man das überhaupt maschinell lösen?
Gruß Torsten.
Hallo,
ich denke mal, Deine Vorgehensweise führt nicht zum Ziel...
M.E sollte der Inhalt aus Feld beschreibg bezogen auf eine art_nr so aufgedröselt werden, dass sich eine Tabelle mit (ähnlich) folgendem Aufbau ergibt:
tblBeschreibungen BID (PK,Autowert) B_art_nr (FK, Text) falls das nicht besser eine Zahl,Long sein könnte. B_Item (Text) B_Wert (Text)
BID B_art_nr B_Item B_Wert 1 20053 StoßdämpferEinbauseite Hinterachse 2 20053 Stoßdämpferart Gasdruck 3 20053 Stoßdämpfer-Befestigungsart oben Auge 4 20053 Stoßdämpfer-Befestigungsart unten Auge nur paarweise austauschen |
wobei ich die Struktur dieses "Beschreibungs"-Strings nicht so recht interpretieren kann.
Die Tabelle wird dann mit der Originaltabelle über das Feld art_Nr in Beziehung gesetzt.
Hallo Franz,
das verstehe ich jetzt erstmal nicht.
Ich werden heute Nachmittag versuchen es zu verstehen und komme dann zurück.
Gruß Torsten.
Hallo
Die Tabelle Vorsortiert unterscheidet sich jetzt aber von der ersten demodatei die du hier hochgeladen hattest. Was ist dein Ziel? die Zerlegung des Feldes "beschreibg" in einzelne Felder (wie in 1_Ausgangstabelle/2_Ergebnis) oder willst du nur das Feld "beschreibg" in Tabelle "Vorsortiert" entsprechend sortieren?
Hallo daolix,
ich schrieb zuvor:
ZitatDie Tabelle Vorsortiert unterscheidet sich jetzt aber von der ersten demodatei die du hier hochgeladen hattest.Zitat...Über Module/Prozeduren die ich mit Eurer Hilfe erstellt habe, erstelle ich die Tbl "vorsortiert".
Daraus habe ich zur Demo auszugsweise die Tbl "1_Ausgangstabelle" erstellt.
In sofern das jetzt die gesamten Spalten angezeigt werden, die Datensätze allerdings nicht 1 zu 1 sind.
Ich möchte in Tbl "vorsortiert" die Spalte "beschrbg" sortiert*** zerlegen. Jetzt ist sie ja nur 1 zu 1 zerlegt:
Inhalt bis zum 1. Komma = desc_1
Inhalt bis zum 2. Komma = desc_2
usw., das Ergebnis siehe weiter rechts desc_1 bis desc_15.
***
- in desc_1 die Info ob vorn, hinten, rechts...
- in desc_2 die Info Bauart
- in desc_3 die Info Typ
- in desc_4 die Info System
Vielen Dank zunächst das Ihr Euch überhaupt in die Situation reindenkt, ist ja ziehmlich verquert.
Gruß Torsten.
Zitat...das Ergebnis siehe weiter rechts desc_1 bis desc_15
Ahsoo, die Felder da rechts hab ich nicht geblickt.
Folgende bsp-Funktion gibt einen sortierten String zurück, welchen du dann ggf. in deine Zerlegungsfunktion einbauen/aufrufen musst:
Public Function SortBschr(ByVal s As String) As String
Dim z() As String
Dim r() As String
Dim i As Long
Dim l As Long
z() = Split(s, ",")
ReDim r(LBound(z()) To UBound(z()) + 3)
For i = LBound(z()) To UBound(z())
s = Trim$(Split(z(i), ":")(0))
l = Switch(s = "Bauart", 1, s = "Typ", 2, s = "System", 3, i = 0, 0, Left$(s, 5) = "vorne" Or Left$(s, 6) = "hinten", 0, s <> "", 3 + i)
r(l) = z(i)
Next
s = Join$(r(), ",")
Do While InStr(s, ",,"): s = Replace(s, ",,", ","): Loop
SortBschr = Left$(s, Len(s) - 1)
End Function
Aufruf ist z.b.
SortBschr("Typ: Gasdruck, Bauart: Federbein, System: 2-Rohr, vorne, für Fahrzeuge mit Standard Fahrwerk, Nutzlast: 1000 kg, Nutzlast: 1400 kg")Ergebnis wäre dann:
vorne, Bauart: Federbein,Typ: Gasdruck, System: 2-Rohr, für Fahrzeuge mit Standard Fahrwerk, Nutzlast: 1000 kg, Nutzlast: 1400 k
Hallo daolix,
ich habe Deinen Code umgesetzt und zusätzl. die aktualisierte DB angehängt.
Denn es treten zwei Probleme auf:
1) Bei den im Modul nicht definierten Spalten
l = Switch(s = "Bauart", 1, s = "Typ", 2, s = "System", 3, i = 0, 0, Left$(s, 5) = "vorne" Or Left$(s, 6) = "hinten", 0, s <> "", 3 + i)
fehlt am Ende des Datensatzes jeweils 1 Zeichen
2) Bekomme ich beim ausführen der Abfrage die Fehlermeldung:
Laufzeitfehler '9':
Index außerhalb des gültigen Bereichs
Würdest Du da bitte nochmal schauen?
Gruß Torsten.
Hallo
zu1: Die Zeile
ReDim r(LBound(z()) To UBound(z()) + 3)
in
ReDim r(LBound(z()) To UBound(z()) + 4)
ändern
zu2. Diesen Fehler kann ich mit deinen Demodaten nicht reproduzieren. Die von dir angefügte Aktualisierungsabfrage lief bei mir ohne FM durch.
So, jetzt funktioniert es.
zu 1) ok
zu 2) FM kam weil in meinen Produktionsdaten in einigen Datensätzen ,, vorhanden waren und desweiteren das Wort hinten 2mal vorkam
Vielen Dank für die Hilfe, ich bin begeistert das die Situation maschinell gelöst werden kann.
Beste Grüße Torsten.