PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Access 2010 SQL Problem


Pennywise
2014-11-05, 14:41:22
Vorab, ich bin leider kein Programmierer. Eher so der Klicki hier und da und es geht Typ :) habe nun folgendes Problem.

Ich habe eine grosse Tabelle (400.000 Datensätze) als CSV Datei. Da müsste ich ein paar kleine Änderungen vornehmen. So dachte ich mir, guckste mal was Access 2010 kann. Komm aber nicht wirklich weiter.

Zunächst mal habe ich eine verknüpfte Tabelle zur CSV Datei angelegt. Nun dachte ich mir, mache ich eine Abfrage und ändere die so dass meine Daten entsprechend geändert als neue Tabelle exportiert werden können.

Leider bekomme ich die Änderungen nicht hin :(

In einer Spalte gibt es Dateneinträge die wie folgt aussehen

A1B9C1D1E3~Noten -> Gesang -> Sologesang -> Gesang -> Gesang mit Klavier

Ich möchte nun alles vor und inklusive der Tilde ~ löschen und den String Noten gegen was anderes austauschen. Zum Schluss soll der Eintrag dann so aussehen

Kategorie/Gesang/Sologesang/Gesang/Gesang mit Klavier

Ich denke das wird irgendwie machbar sein, ich habe aber keinen Schnall wie. Kann mir da jemand helfen? Sollte mit Trim und Replace möglich sein.

Das ist die Basisabfrage
SELECT CSV_full.systemnr, CSV_full.isbn, CSV_full.ismn, CSV_full.Stilrichtungen, CSV_full.ArtikelKategorie
FROM CSV_full;

Exxtreme
2014-11-05, 15:22:43
Wenn die Länge von "A1B9C1D1E3~" etc. immer gleich ist kannst du mit Ue: Rechts([Text2];Länge([text2])-11) schon mal das Ding wegschneiden. Ist die Länge variabel dann kann man mit Ue2: Rechts([Text2];Länge([text2])-InStr([Text2];"~")) das universeller machen. Ist aber wahrscheinlich langsamer da Access massiv Zeichenkenntenvergleiche fahren muss.

Dann kann man Noten durch Kategorie ersetzen:

Ue3: Ersetzen([ue2];"Noten";"Kategorie")

Und am Ende Pfeile gegen Slashes:

Ue4: Ersetzen([ue3];"->";"/")

Ue... sind jeweils eigene Spalten.

Pennywise
2014-11-05, 16:38:06
Jo klappt schon mal ganz gut danke :) Kann man die Abfrage die ja dann 3 Spalten erzeugt nicht in Eine packen?

Momentan sieht das so aus.

SELECT Right([ArtikelKategorie],Len([ArtikelKategorie])-InStr([ArtikelKategorie],"~")) AS Katt1, Replace([Katt1],"Noten","Kategorie") AS Katt2, Replace([Katt2],"->","/") AS Katt3
FROM CSV_full;

Und da wo nix steht, kommt als Ergebnis "#Fehler"
EDIT hab da was mit NZ gebastelt :D

Pennywise
2014-11-06, 13:52:51
Kann man auch von Rechts was wegschneiden? instrev klappt irgendwie nicht

Exxtreme
2014-11-06, 14:02:09
Rechts wegschneiden macht man mit: Links(String;Anzahl_Zeichen)

Pennywise
2014-11-06, 15:28:59
Hatte dann das Problem, das wenn das Zeichen nicht da war der alles gelöscht hat. Habe nun einfach oben InStr gegen Instrrev getauscht, so wird nicht bis zum ersten ~ alles gelöscht sondern bis zum Letzten.