PDA

Vollständige Version anzeigen : Import-Daten anpassen


Wuff
18.01.2008, 15:04
Hallo Spezialisten!
Folgende Aufgabe:
Aus einer csv-Datei sollen Daten in Access importiert werden (das läuft im Versuch fein ;) ). Diese sollen dann in Access in zwei weiteren Feldern manuell (durch browsen/sichten/Eingabe) ergänzt werden (lässt aufgrund Natur der Daten sich nicht automatisieren), und danach in mehreren Berichten ausgegeben werden. Zwar benutze ich Access schon länger, habe es aber nie wirklich gelernt. :(

Problem: Die Daten in der csv-Datei stammen aus einem anderen Standard-Bereich (Zeichensatz, Dezimal-Zeichen, Datumsdarstellung); mein Standard ist deutsch/Österreich.

Deshalb erscheinen im Text z.B. Umlaute als Zeichenkombinationen, Zahlen nehmen den DezimalPUNKT als Tausender-Trennzeichen statt Dezimalstellen zu trennen.

Frage: Wie kann ich die Daten beim Import (oder in einem Aktualisierungsschritt) anpassen? Und zwar ...
Zahlen: Dezimalpunkt durch Dezimalkomma ersetzen;
Textfelder: enthaltene Zeichenkomination wie etwa "Ä%" in korrekten Umlaut (Klein/Großbuchstabe) ersetzen;
Datumsfeld: Datenformat "05 Oct 05 10:16" nach "05.10.05 10:16" wandeln.

Ich denke, dass Zahlen- und Datumsfelder in einem Schritt verändert werden können - aber die Textfelder ... muss ich da einen Code schreiben, der je Zeile eines der möglichen Zeichen sucht und ersetzt??

Wirklich wichtig sind mir aber eigentlich nur die Zahlenfelder, weil damit gerechnet werden muss!

Herzlichen Dank für jeden Tip und Hinweis (auf entsprechend belehrende Literatur, Tutorials etc).

Wuff

Anne Berg
18.01.2008, 15:56
Hast du mal versucht, eine Import-Spezifikation anzulegen? Da kannst du etliche Einstellungen vornehmen, mit denen sich die Probleme mit dem Zeichensatz etc. umgehen lassen.

ebs17
18.01.2008, 16:24
Hallo und willkommen im Forum!

Das Ersetzen von Zeichen kannst Du mit der Replace-Funktion (z.B. in einer Aktualisierungsabfrage) vornehmen.
Außerdem können Formatierung und Typumwandlungsfunktionen (CDate, CDouble u.a.) interessant sein.

Lanz Rudolf
18.01.2008, 17:08
Hallo
Datum Umwandlung mit Datevalue:
Beispiel (DateValue/TimeValue (in Abfrage Deutsch: DatWert):
Dim td1 As Date
td1 = Format("26.06.1949 01:15:16", "dd.mm.yyyy hh:nn:ss")
Debug.Print td1
Debug.Print DateValue(td1)
Debug.Print TimeValue(td1)

Debug.Print DateValue(Now())
Debug.Print DateValue("1. Februar 2008")
Debug.Print DateValue("6. Juni 0")
Debug.Print DateValue("7. Jul 97")
Debug.Print DateValue("1.1.01")
Debug.Print DateValue("3.3.3")
Debug.Print DateValue("11.11.1999")
Debug.Print DateValue("12.12.02")
Debug.Print DateValue("8.8")
Debug.Print DateValue("8.Aug")
Debug.Print DateValue("Mrz 16 1946")
Resultat:
26.06.1949 01:15:16
26.06.1949
01:15:16

24.06.2004
01.02.2008
06.06.2000
07.07.1997
01.01.2001
03.03.2003
11.11.1999
12.12.2002
08.08.2004
08.08.2004
16.03.1946
Ev. Müssen Deutsche Kürzel nach Englisch Konvertiert werden z.B. so:
Public Function datengtoger(s As Variant) As Variant
If Not IsNull(s) Then
s = Replace(Replace(Replace(Replace(s, "MAR", "MRZ"), "MAI", "MAY"), "OKT", "OCT"), "DEZ", "DEC")
datengtoger = CDate(s)
Else
datengtoger = Null
End If
End Function

Datevalue("05 Okt 05 10:16") --> 05.10.2005
ev Kombiniert mit TimeValue
Datevalue("05 Okt 05 10:16") & " " & Timevalue("05 Okt 05 10:16") --> 05.10.2005 10:16:00

Wuff
18.01.2008, 18:35
Hi!

An Anne Berg: Danke für den Hinweis! Aber ja, ich habe die Importspezifikation benutzt (war mit Anmerkung "läuft im Versuch fein" gemeint). Damit konnte ich ja die Datensätze überhaupt erst importieren, denn ohne gab es ja ein Problem mit Dezimalpunkt und Datum-Trennzeichen.

An Lanz Rudolf: Wunderbar, diese Antwort! Damit komme ich ganz gewiss zurecht! Und sie leuchtet mir von A bis Z ein (obwohl ich erst die Praxis erleben muss! ;) ) Herzlichen Dank!

Gibt es denn eine ähnliche Methode für den Dezimalpunkt?

An ebs 17: Auch vielen Dank! Ja, an die Replace-Funktion habe ich schon gedacht, aber ... wenn in einem Text (Feld) nun zufällig 5 solche Zeichen wären ... kann ich das denn in einer Abfrage auf einmal erledigen?

Und ... das "Herkunftsfeld" von Zahlen ist ein Textfeld, das Zielfeld ein Zahlenfeld - die Daten werden mit einer Anfügeabfrage "hereingeholt"; also müsste ich zuvor (vor dem Anfügen in der neuen Tabelle) im Textfeld die Aktualisierung vornehmen, nicht wahr?

Wuff

ebs17
18.01.2008, 20:20
Du hattest noch nicht erwähnt, ob diese "Konvertierung" ein einmaliger Vorgang ist oder ob er laufend wiederholt werden muss (neue Daten).

Zu Deiner Frage: Pro zu ersetzendes Zeichen würde ich eine Abfrage erstellen und alle in einer Routine zusammenfassen. Das ist übersichtlich und leicht pflegbar. So kann man auch komplexere Umwandlungen in Teilschritte zerlegen.

Und ... das "Herkunftsfeld" von Zahlen ist ein Textfeld, das Zielfeld ein Zahlenfeld - die Daten werden mit einer Anfügeabfrage "hereingeholt"; also müsste ich zuvor (vor dem Anfügen in der neuen Tabelle) im Textfeld die Aktualisierung vornehmen, nicht wahr?
Oder im Rahmen der Anfügeabfrage

ebs17
18.01.2008, 20:30
Konvertierung der Zahlen: z.B. 1,555,567.987

Sofern es keine elegantere Lösung gibt oder man diese nicht findet, kann man das mit einer zweimaligen Anwendung mit Replace erreichen:
(1) Ersetzen "," durch ""
(2) Ersetzen "." durch "," sowie Typumwandlung mit CDbl

Die Tausenderpunkte ergeben sich durch das eingestellte Format in der Tabellendefinition der Zieltabelle.