txt- Import

18/09/2009 - 20:30 von Johann Weiss | Report spam
Hallo, ich habe ein Problemmit einem Dateiimport.
Bisher habe mit folgendem Code eine txt- Datei in eine Tabelle importiert.

Private Sub DATEIIMPORT_Click()

Dim i As Long, j As Long, K As Long, L As Long
Dim F As Long, E As Long, D As Long
Dim TEXTZEILE As String
Dim Pos As Long
Dim POS1 As Long
Dim Arbeitsplatz As Variant, gewZeit As String, Auslastung As String,
Mitarbeiter As String, Beschreibung As String
Dim F_Gruppe, gewVerrZeit, Auslast, Mitarbeit, Beschreib
Dim AF As Variant, Kurztext As Variant
Dim ZART As String
Dim ANTWORT As String
Dim ANZ As Long
Dim TEXTZEILE1 As String
Dim VARRAY
Dim strFN As String
Dim strML As String
Dim strBA As String


On Error GoTo FehlerDateiimport
' Überprüfen ob Kw eingetragen
If IsNull(Me!txtKw) Or Me!txtKw = "" Then
MsgBox "Achtung!! - Sie haben noch keine Kw eingetragen",
vbCritical, "Überprüfung der KW"
DoCmd.CancelEvent
Exit Sub
End If

' Abprüfen ob auch eine Datei ausgewàhlt wurde falls nicht wird die
Funktion abgebrochen
If IsNull(Me!Dateiname) Or Me!Dateiname = "" Then
MsgBox "Achtung!! - Sie haben keine Datei zum Importieren
ausgewàhlt", vbCritical, "Prüfen Dateidialog"
DoCmd.CancelEvent
Exit Sub
End If

' Aus Dateinamen die Zuortnung für Bandabschnitt und Montagelinie
herstellen
If Not IsNull(Me!Dateiname) Then
strFN = MID(Me!Dateiname, InStrRev(Me!Dateiname, "\") + 1)
strML = Right(strFN, InStr(strFN, "."))
strBA = Right(strFN, InStr(strFN, ".") + 3)
Me!txtBA = Left(strBA, InStr(strBA, ".") - 3)
Me!txtML = Left(strML, InStr(strML, ".") - 1)
End If

' Überprüfung ob bereits Daten vorhanden
If CheckImport(Me!txtBA, Me!txtML, Me!txtKw) = False Then
MsgBox "Daten wurden bereits importiert.", vbCritical
Exit Sub
End If

' Abfrage ob die Daten in der temporàren Tabelle gelöscht werden sollen
ANTWORT = MsgBox("Wollen Sie die Daten in der Temporàren Tabelle
löschen?", vbYesNo)
If ANTWORT = vbYes Then
DoCmd.SetWarnings False
DoCmd.RunSQL ("Delete * from ta_Importdaten;")
DoCmd.SetWarnings True
End If

' txt-Daten einlesen

' On Error Resume Next Forms![Message]![Message] +
Forms![Message]![Message] = "Daten von " + (Me!Dateiname) + " werden
eingelesen..." + vbCrLf + vbCrLf
Call Delay
Open Me!Dateiname For Input As #1
ZART = ""

' Datei wird Zeilenweise gelesen und in einem Array abgelegt.
Do While Not EOF(1)
Line Input #1, TEXTZEILE

' Prüfen, ob die eingelesen Datenzeile einen Inhalt hat - wenn ja werden
die Daten verarbeitet
If Not IsNull(TEXTZEILE) And TEXTZEILE <> "" Then

' Prüfen, ob in der eingelesenen Datenzeile das Wort F.-Gruppe vorkommt,
wenn ja, dann ist
' der nàchste Datensatz ein F.-Gruppe Datensatz
Pos = InStr(1, TEXTZEILE, "F.-Gruppe")
If Pos = 1 Then
ZART = "FI"
GoTo NAECHSTEZEILE
End If

' Prüfen, ob in der eingelesenen Datenzeile das Wort Arbeitsplatz
vorkommt, wenn ja, dann ist
' der nàchste Datensatz ein Arbeitsplatz Datensatz
Pos = InStr(1, TEXTZEILE, "Arbeitsplatz")
If Pos = 1 Then
ZART = "VK"
GoTo NAECHSTEZEILE
End If

' Prüfen, ob in der eingelesenen Datenzeile das Wort AF vorkommt, wenn ja,
dann ist
' der nàchste Datensatz eine Arbeitsfolge
Pos = InStr(1, TEXTZEILE, "AF")
If Pos = 1 Then
ZART = "KD1"
GoTo NAECHSTEZEILE
End If

If ZART = "FI" Then

VARRAY = Split(TEXTZEILE, ";") ' hier wird
nach jedem ; getrennt
F_Gruppe = VARRAY(0)
gewVerrZeit = Left(VARRAY(1), InStr(VARRAY(1), "min") - 1)
Auslast = Left(VARRAY(2), InStr(VARRAY(2), "%") - 1) ' hier wird
das % weggeschnitten
Mitarbeit = VARRAY(3)
Beschreib = VARRAY(4)
i = i + 1 ' hier
werden die F_Gruppen gezàhlt

' Das sollte dann ein Datensatz mit Arbeitsplatz sein!!
ElseIf ZART = "VK" Then
' Hier werden die Arbeitsplàtze und Arbeitsfolgen gezàhlt
If E > 0 Then
Forms![Message]![Message] = Forms![Message]![Message] & _
"Arbeitsplatz " & Arbeitsplatz & " - " & Beschreibung & ": " & E
& " Arbeitsfolgen eingelesen" & vbCrLf
E = 0
End If
'Call Delay
VARRAY = Split(TEXTZEILE, ";")
' hier wird nach jedem ";" getrennt
Arbeitsplatz = VARRAY(0) '
gewZeit = Left(VARRAY(1), InStr(VARRAY(1), "min") - 1)
' hier wird das "min" weggeschnitten
Auslastung = CDbl(ReplaceString(Left(VARRAY(2), InStr(VARRAY(2),
"%") - 1), "#", "0")) ' hier wird die Auslastung in eine Zahl,


' umgewandelt das "%" weggeschnitten und


' die Raute gegen eine "0" ausgetauscht
Mitarbeiter = VARRAY(3)
Beschreibung = VARRAY(4)
j = j + 1
' ' hier werden die Arbeitsplàtze gezàhlt
ElseIf ZART = "KD1" Then
ZART = "KD"
GoTo NAECHSTEZEILE

' Hier werden die Daten in die Tabelle eingetragen
ElseIf ZART = "KD" Then
rs.AddNew
rs!Arbeitsplatz = Arbeitsplatz
rs!gewZeit = gewZeit
rs!Auslastung = Auslastung
rs!Mitarbeiter = Mitarbeiter
rs!Beschreibung = Beschreibung
rs!F_Gruppe = F_Gruppe
rs!gewVerrZeit = gewVerrZeit
rs!Auslast = Auslast
rs!Mitarbeit = Mitarbeit
rs!Beschreib = Beschreib
VARRAY = Split(TEXTZEILE, ";")
AF = AF
Kurztext = Kurztext
rs!AF = VARRAY(0)
rs!Kurztext = VARRAY(1)
rs!Verr_Zeit = CDbl(Left(VARRAY(2), InStr(VARRAY(2), "min") -
1)) 'VARRAY(2)
rs!Hàufigk = VARRAY(3)
rs!gew_verr_zeit = CDbl(Left(VARRAY(4), InStr(VARRAY(4),
"min") - 1)) 'VARRAY(4)
rs!FzgKl = VARRAY(5)
rs!PRNr = VARRAY(6)
rs!Klassif = VARRAY(7)
rs!Arbeitsb = VARRAY(8)
rs!EingelesenAm = Now
rs!Jahr = Me!txtjahr
rs!ML = Me!txtML
rs!BA = Me!txtBA
rs!KW = Me!txtKw
rs.Update
K = K + 1 ' Arbeitsfolgen
E = E + 1 ' Zàhler pro Arbeitsplatz
F = F + 1 ' Zàhler pro F.- Gruppe

End If
End If
NAECHSTEZEILE:
Loop
' HIer wird das Endergebnis für das Statusfenster zusammengefast
Forms![Message]![Message] = Forms![Message]![Message] & " " & vbCrLf & _
"Es wurden insgesamt " & CStr(K) & " Arbeitsfolgen " & vbCrLf & _
" für " & CStr(i) & " Gruppen " & vbCrLf & _
" mit " & CStr(j) & " Arbeitsplàtze " &
"eingelesen." & vbCrLf & vbCrLf & _
"Fertig mit dem Import der Daten.." & vbCrLf &
vbCrLf
Call Delay

EndeDateiimport:
Close #1
Exit Sub
FehlerDateiimport:
MsgBox Err.Number & " " & Err.Description
Resume EndeDateiimport
End Sub
-
Nun meine Frage, ist es möglich das so aufzuteilen das es in gleichzeitig in
3 Tabellen importiert wird.
Wenn es ginge wie müste ich aufteilen und wie würde das funktionieren.

gruss Johann
 

Lesen sie die antworten

#1 Thomas Möller
18/09/2009 - 20:52 | Warnen spam
Hallo Johann,

Johann Weiss schrieb:
Hallo, ich habe ein Problemmit einem Dateiimport.
Bisher habe mit folgendem Code eine txt- Datei in eine Tabelle importiert.

Private Sub DATEIIMPORT_Click()

' viel Code

End Sub
-
Nun meine Frage, ist es möglich das so aufzuteilen das es in gleichzeitig in
3 Tabellen importiert wird.



an der Stelle, an der Du das Recordset "rs" schließt könntest Du Code
einfügen, der die Daten in ein bzw. zwei weitere Recordsets einfügt:

rs.Update
rsTab2.AddNew
rsTab2!Arbeitsplatz = Arbeitsplatz
...
rsTab2.Update
rsTab3.AddNew
rsTab3!Arbeitsplatz = Arbeitsplatz
...
rsTab3.Update


Vielleicht kannst Du mal Deinen Anwendungsfall erlàutern. Wenn die
selben Daten in mehr als einer Tabelle gespeichert werden klingt das bei
mir immer ein bisschen nach fehlender Normalisierung der Tabellen.

CU
Thomas

Homepage: www.Team-Moeller.de

Ähnliche fragen