Archiv verlassen und diese Seite im Standarddesign anzeigen : Textdateien in Tabelle
Krümmelmonster
23.07.2004, 13:06
Habe einen Ordner mit ca 2000 Textdateien alle tragen 2 buchstaben und das datum als namen.
Von diesen Text dateien brauch ich alle die eine gewisse zeichenfolge enthalten.
Alle Textdateien die diese Zeichenfolgen enthalten sollen in einer Tabelle zusammengefasst werden.
Wie zum Teufel mach ich das?
Habe mich kurz mit Access und VBS beschäftigt..
das sah dann so aus.
Function Einlesen()
Dim db As Database, rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("tabelle")
Dim q%, x$, i%
Dim varTDat(5000) ' erhöhen wenn >100
Dim Text1$, Text2$, Text3$, Text4$, Text5$, Text6$, Text7$, Text8$, Text9$
For i = 0 To 99
varTDat(i) = ""
Next
i = 0
x = Dir("c:\log\log\*.txt")
varTDat(0) = x
Do While x <> ""
i = i + 1
x = Dir
varTDat(i) = x
Loop
For q = 0 To i - 1
On Error GoTo bye
Open "c:\" & varTDat(q) For Input As #1
Do While Not EOF(1)
Input #1, Text1, Text2, Text3, Text4, Text5, Text6, Text7, Text8, Text9
rs.AddNew
rs("feld1") = Text1
rs("feld2") = Text2
rs("feld3") = Text3
rs("feld3") = Text4
rs("feld3") = Text5
rs("feld3") = Text6
rs("feld3") = Text7
rs("feld3") = Text8
rs("feld3") = Text9
rs.Update
Loop
Close #1
Next q
bye:
rs.Close
End Function
das funktioniert natürlich total nicht weil ich auch keine ahnung von vbs habe und sonstigen sprachen ausser batch..
aber jemand ne idee??? muss nicht access und vbs sein kann auch mysql oder sowas sein..
Function Einlesen()
Dim bHasString As Boolean
Dim db As Database
Dim rs As Recordset
Dim i As Integer
Dim q As Integer
Dim x As String
Dim varTDat(5000) As String ' erhöhen wenn >100
Dim Text1 As String
Dim Text2 As String
Dim Text3 As String
Dim Text4 As String
Dim Text5 As String
Dim Text6 As String
Dim Text7 As String
Dim Text8 As String
Dim Text9 As String
Set db = CurrentDb
Set rs = db.OpenRecordset("tabelle")
x = Dir("c:\log\log\*.txt")
While x <> ""
If x <> "." And x <> ".." Then
varTDat(i) = x
i = i + 1
End If
x = Dir
WEnd
On Error GoTo bye
For q = 0 To i - 1
Open "c:\" & varTDat(q) For Input As #1
While Not EOF(1)
Input #1, Text1, Text2, Text3, Text4, Text5, Text6, Text7, Text8, Text9
' Text1 bis Text9 enthält jetzt jeweils 1 Zeile!
bHasString = (Text1 Like "xyz")
bHasString = bHasString Or (Text2 Like "xyz")
bHasString = bHasString Or (Text3 Like "xyz")
bHasString = bHasString Or (Text4 Like "xyz")
bHasString = bHasString Or (Text5 Like "xyz")
bHasString = bHasString Or (Text6 Like "xyz")
bHasString = bHasString Or (Text7 Like "xyz")
bHasString = bHasString Or (Text8 Like "xyz")
bHasString = bHasString Or (Text9 Like "xyz")
' wenn eine Zeile die Zeichenfolge xyz enthält, ist bHasString jetzt True
' man kann auch Platzhalter verwenden: "abcyz" Like "*yz" gibt True zurück
rs.AddNew
rs("feld1") = Text1
rs("feld2") = Text2
rs("feld3") = Text3
rs("feld3") = Text4
rs("feld3") = Text5
rs("feld3") = Text6
rs("feld3") = Text7
rs("feld3") = Text8
rs("feld3") = Text9
rs.Update
WEnd
Close #1
Next q
bye:
rs.Close
End Function
Ob der Datenbank-Code stimmt, weiß ich jetzt nicht, schau da notfalls mal hier (http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0278.shtml) vorbei. Der Rest müsste eigentlich klappen (kanns grad nicht testen).
Krümmelmonster
23.07.2004, 14:04
verdammt ich weiss nicht mal wie man das gescheit einbindent..
wieso geht das copy & paste ned?
Hatte noch einen kleinen Fehler drin. Übrigens ist das VBA und kein VBS.
Original geschrieben von Friday69
verdammt ich weiss nicht mal wie man das gescheit einbindent..Hmmm, gute Frage. Das letzte Mal, dass ich mit Access und VBA hantiert habe war vor ziemlich genau 3 Jahren beim Bund. Seitdem nutze ich auch kein Access mehr.
Original geschrieben von Friday69
wieso geht das copy & paste ned? Was genau geht denn nicht?
Access bietet doch aber auch so eine Importfunktion. Habe auf Arbeit so selber schon große Textdateien importiert. *noahnung*
Krümmelmonster
10.08.2004, 07:51
Original geschrieben von Campari
Access bietet doch aber auch so eine Importfunktion. Habe auf Arbeit so selber schon große Textdateien importiert. *noahnung*
ja aber das sind mehr als 2000 textdateien :P
und da hab ich ja also diesen schönen code.. also geh ich auf access.erstelle ein neues modul und kopier den code da rein oder? ;D
ich seh schon.. beschränktes denken *buck*
habt ihr ne idee.. für was anderes als access bezüglich datenbanken.. den dieses access hängt mir sowas zum hals raus. :-*
zum beispiel my sql oder was auch immer?
PuckPoltergeist
10.08.2004, 14:23
Original geschrieben von Friday69
habt ihr ne idee.. für was anderes als access bezüglich datenbanken.. den dieses access hängt mir sowas zum hals raus. :-*
zum beispiel my sql oder was auch immer?
Du solltest wissen, was du willst und brauchst. Access ist ein DB-frontend, keine Datenbank. Für eine richtige DB kannst du dir mal MySQL oder PostgreSQL ansehen. Vor allem ersteres ist sehr gut dokumentiert, und für kleinere Sachen vollkommen ausreichend. Beide DBMS sind frei verfügbar, mach dich im Netz dazu schlau.
Krümmelmonster
11.08.2004, 08:34
Also um das ganz deutlich zu machen..
Es sind 601 Textdateien aber es werden mehr hinzukommen Tag für Tag.
Die Grösse dieser Dateien reich von ein paar Bytes bis zu 300Kbyte.
Die Namensgebung der Dateien ist ähnlich aber nicht gleich.
Gesucht werden alle Textdateien die z.b den Inhalt "Mail@Sms.li" enthalten.
Dieso sollen dann ausgewertet werden d.h die Daten von der Datei in eine Datenbank zu übernehmen.
Ob man jetzt zuerst herausfiltert und dann in die Datenbank integriert oder zuerst alles in eine Datenbank und dann die Sachen herausfiltert ist egal.
Hier mal ein Beispiel einer Datei:
00000 192.********* Wed, 28 Apr 2004 00:01:27 +0200 <-- +OK MERCUR POP3-Server (v4.02.12 *********) for Windows NT ready <*******@mail.sms.li-gate.com>
00456 192.********* Wed, 28 Apr 2004 00:01:28 +0200 --> HELO
00456 192.********* Wed, 28 Apr 2004 00:01:28 +0200 <-- +OK ****.li-gate.com Hello 192.*********
00456 192.********* Wed, 28 Apr 2004 00:01:28 +0200 --> QUIT
00456 192.********* Wed, 28 Apr 2004 00:01:28 +0200 <-- +OK
00000 192.********* Wed, 28 Apr 2004 00:06:28 +0200 *** POP3-User 192.1****
connect
irgendwie so sieht das aus..
Vielleicht merken einige das es sich um Logdateien handelt.
Wie man aus einer Datenbank in Access Abfragen erstellt usw.. weiss ich ja aber wie zum Teufel kann ich über 600 Textdateien durchsuchen und diejenigen die das Resultat enthalten einbinden?
Ich will einfach die einfachst möglichste Lösung.. Ich bin eine Niete was DB anbelangt und von programmieren kann ich nur ein bisschen Batch.
Krümmelmonster
12.08.2004, 09:56
Function Einlesen()
Dim db As Database, rs As Recordset
Set db = CurrentDb("currentdb")
Set rs = db.OpenRecordset("tabelle")
Dim q%, x$, i%
Dim varTDat(1000) ' erhöhen wenn >100
Dim Text1$, Text2$, Text3$, Text4$, Text5$, Text6$, Text7$, Text8$, Text9$, Text10$, Text11$, Text12$, Text13$, Text14$, Text15$
'---Dateinamen feststellen und im 100-Array speichern
For i = 0 To 1000
varTDat(i) = ""
Next
i = 0
x = Dir("c:\log\log\*.txt")
varTDat(0) = x
Do While x <> ""
i = i + 1
x = Dir
varTDat(i) = x
Loop
'--- Dateien einlesen mit jeweils 3 Zeilen
For q = 0 To i - 1
On Error GoTo bye
Open "c:\log\log\" & varTDat(q) For Input As #1
Do While Not EOF(1)
Input #1, Text1, Text2, Text3, Text4, Text5, Text6, Text7, Text8, Text9, Text10, Text11, Text12, Text13, Text14, Text15
rs.AddNew
rs("feld1") = Text1
rs("feld2") = Text2
rs("feld3") = Text3
rs("feld4") = Text4
rs("feld5") = Text5
rs("feld6") = Text6
rs("feld7") = Text7
rs("feld8") = Text8
rs("feld9") = Text9
rs("feld10") = Text10
rs("feld11") = Text11
rs("feld12") = Text12
rs("feld13") = Text13
rs("feld14") = Text14
rs("feld15") = Text15
rs.Update
Loop
Close #1
Next q
bye:
rs.Close
End Function
Laufzeitfehler 3734
Die Datenbank wurde vom Benutzer Admin auf Computer SOundSo in einen Status versetzt, in dem sie nicht geöffnet oder gesperrt werden kann.
Wenn ich dann auf Debuggen klicke ist die 3. Zeile " Set db = CurrentDb("currentdb") " Gelb umrandet also anscheinend Fehlerhaft.
Weiss da jemand was?
moin moin
Nicht, dass ich was von Access oder deinem Script verstehe, aber im MS SQL Server könnte die Meldung bedeuten, dass du grade über die grafische Oberfläche auf die DB zugreifst (Tabellenansicht) und sie (die Tabelle...) deshalb gesperrt ist.
Nur mein erster Gedanke...
Krümmelmonster
12.08.2004, 10:29
Ne der Fehler war das ich anscheinen gleichzeitig DAO wie ADO versucht habe zu verwenden.
Jetzt lautet der Code so:
Funktioniert zwar immer noch nicht, aber das erste mal das ich keine Fehlermeldung bekomme.
Function Einlesen()
Dim db As Database, RS As DAO.Recordset
Set db = CurrentDb
Set RS = db.OpenRecordset("tabelle")
Dim q%, x$, i%
Dim varTDat(1000) ' erhöhen wenn >100
Dim Text1$, Text2$, Text3$, Text4$, Text5$, Text6$, Text7$, Text8$, Text9$, Text10$, Text11$, Text12$, Text13$, Text14$, Text15$
'---Dateinamen feststellen und im 100-Array speichern
For i = 0 To 1000
varTDat(i) = ""
Next
i = 0
x = Dir("c:\log\log\*.txt")
varTDat(0) = x
Do While x <> ""
i = i + 1
x = Dir
varTDat(i) = x
Loop
'--- Dateien einlesen mit jeweils 3 Zeilen
For q = 0 To i - 1
On Error GoTo bye
Open "c:\log\log\" & varTDat(q) For Input As #1
Do While Not EOF(1)
Input #1, Text1, Text2, Text3, Text4, Text5, Text6, Text7, Text8, Text9, Text10, Text11, Text12, Text13, Text14, Text15
RS.AddNew
RS("feld1") = Text1
RS("feld2") = Text2
RS("feld3") = Text3
RS("feld4") = Text4
RS("feld5") = Text5
RS("feld6") = Text6
RS("feld7") = Text7
RS("feld8") = Text8
RS("feld9") = Text9
RS("feld10") = Text10
RS("feld11") = Text11
RS("feld12") = Text12
RS("feld13") = Text13
RS("feld14") = Text14
RS("feld15") = Text15
RS.Update
Loop
Close #1
Next q
bye:
RS.Close
End Function
Krümmelmonster
12.08.2004, 13:40
und schon hab ich das nächste Problem
Open "c:\log\log\" & varTDat(q) For Input As #1
nach dieser Linie springt das Programm automatisch auf
RS.Close
End Function
ab und zu gehts auch weiter bis
RS("feld2") = Text2
und springt erst dann runter
in der überwachung steht sogar das dann Feld 1 einen wert hat.. aber das wars dann auch :-/ reingeschrieben wird nix
Original geschrieben von Friday69
und schon hab ich das nächste Problem
Open "c:\log\log\" & varTDat(q) For Input As #1
nach dieser Linie springt das Programm automatisch auf
RS.Close
End FunctionFüge mal nach bye: folgende Zeile ein:
MsgBox "Es trat folgender Fehler auf: " & Err.Number & " - " & Err.Description
Original geschrieben von Friday69
in der überwachung steht sogar das dann Feld 1 einen wert hat.. aber das wars dann auch :-/ reingeschrieben wird nix Weil das RS.Update nicht aufgerufen wird.
Krümmelmonster
12.08.2004, 14:03
JA die Message Boc kommt jetz mit : 0 -
aber was heisst das nun?
und wie rufe ich das rs update auf..
sorry aber ich hab eben wie gesagt keine ahnung von vba ich hab mir diesen code nur in stundenlanger arbeit zusammengeschuster und zusammengeklaut. :-[
Original geschrieben von Friday69
JA die Message Boc kommt jetz mit : 0 -
aber was heisst das nun?Dass kein Fehler aufgetreten ist.
Damit das nochmal was wird, solltest Du Dich dringend in VBA einarbeiten und versuchen, den Code zu verstehen. Als erstes solltest Du die Variablen richtig deklarieren. varTDat ist bei Dir bspw. ein Variant, obwohl String besser wäre. Dann könntest Du auch die allererste For-Schleife weglassen. Statt mit den Kürzeln $, & und % solltest Du As String, As Long und As Integer schreiben, da das schonmal die Lesbarkeit erhöht. Desweiteren solltest Du mal nach der Zeile mit dem Input #1 jeden der gelesenen Werte mit MsgBox "Text1=" & Text1 usw. ausgeben, damit Du siehst was überhaupt gelesen wurde. Vermutlich gibt's da schon Probleme.
Sind die Felder in der Tabelle alle vom Datentyp String? Ansonsten könnte es AFAIK bei RS("bla") = ... Probleme geben, da Textx ein String ist.
Krümmelmonster
12.08.2004, 14:29
??? ??? ??? ??? *buck* *kopfkratz
google und die wörter die ich nicht verstehe werden in den nächsten minuten mein freund sein
Access hat meines Wissens auch eine recht gute Hilfe zu VBA.
Krümmelmonster
16.08.2004, 16:07
Ok jetzt sieht er so aus
Function Einlesen()
Dim db As Database, RS As DAO.Recordset
Set db = CurrentDb
Set RS = db.OpenRecordset("tabelle1")
Dim q As Long
Dim x As String
Dim i As Integer
Dim varTDat(1000) ' erhöhen wenn >100
Dim Text1$, Text2$, Text3$, Text4$, Text5$, Text6$, Text7$, Text8$, Text9$, Text10$, Text11$, Text12$, Text13$, Text14$, Text15$
'---Dateinamen feststellen und im 100-Array speichern
For i = 0 To 1000
varTDat(i) = ""
Next
i = 0
x = Dir("c:\log\log\*.txt")
varTDat(0) = x
Do While x <> ""
i = i + 1
x = Dir
varTDat(i) = x
Loop
'--- Dateien einlesen mit jeweils 3 Zeilen
For q = 0 To i - 1
On Error GoTo bye
MsgBox "Es trat folgender Fehler auf: " & Err.Number & " - " & Err.Description
Open "c:\log\log\" & varTDat(q) For Input As #1
Do While Not EOF(1)
Input #1, Text1, Text2, Text3, Text4, Text5, Text6, Text7, Text8, Text9, Text10, Text11, Text12, Text13, Text14, Text15
RS.AddNew
RS("feld1") = Text1
MsgBox "Text1=" & Text1
RS("feld2") = Text2
MsgBox "Text2=" & Text2
RS("feld3") = Text3
MsgBox "Text3=" & Text3
RS("feld4") = Text4
MsgBox "Text4=" & Text4
RS("feld5") = Text5
RS("feld6") = Text6
RS("feld7") = Text7
RS("feld8") = Text8
RS("feld9") = Text9
RS("feld10") = Text10
RS("feld11") = Text11
RS("feld12") = Text12
RS("feld13") = Text13
RS("feld14") = Text14
RS("feld15") = Text15
RS.Update
Loop
Close #1
Next q
bye:
RS.Close
End Function
also entweder sprint er von dieser zeile
Open "c:\log\log\" & varTDat(q) For Input As #1
direkt zum ende
oder er
er gibt bei MsgBox "Text1=" & Text1 diesen inhalt aus
und springt dann bei
RS("feld2") = Text2
ans ende.
aber hey schon wieder ein schritt weiter.. kann ich morgen wieder dransitzen :]
Argh! Nimm mal folgendes als Grundlage für weitere Versuche:
Sub Einlesen()
Dim db As Database
Dim RS As DAO.Recordset
Dim q As Long
Dim x As String
Dim i As Integer
Dim varTDat(1000) As String ' erhöhen wenn >100
Dim Text1$, Text2$, Text3$, Text4$, Text5$, Text6$, Text7$, Text8$, Text9$, Text10$, Text11$, Text12$, Text13$, Text14$, Text15$
' Recordset öffnen
Set db = CurrentDb
Set RS = db.OpenRecordset("tabelle1")
'---Dateinamen feststellen und im 100-Array speichern
x = Dir("c:\log\log\*.txt")
Do
varTDat(i) = x
i = i + 1
x = Dir
Loop Until x = ""
'--- Dateien einlesen mit jeweils 3 Zeilen
' bei Fehler zu fehler springen
On Error GoTo fehler
For q = 0 To i - 1
' Datei öffnen
Open "c:\log\log\" & varTDat(q) For Input As #1
' tue solange wir nicht am Ende der Datei sind...
Do While Not EOF(1)
Input #1, Text1, Text2, Text3, Text4, Text5, Text6, Text7, Text8, Text9, Text10, Text11, Text12, Text13, Text14, Text15
RS.AddNew
MsgBox "Text1=" & Text1
RS("feld1") = Text1
MsgBox "Text2=" & Text2
RS("feld2") = Text2
MsgBox "Text3=" & Text3
RS("feld3") = Text3
MsgBox "Text4=" & Text4
RS("feld4") = Text4
MsgBox "Text5=" & Text5
RS("feld5") = Text4
MsgBox "Text6=" & Text6
RS("feld6") = Text6
MsgBox "Text7=" & Text7
RS("feld7") = Text7
MsgBox "Text8=" & Text8
RS("feld8") = Text8
MsgBox "Text9=" & Text9
RS("feld9") = Text9
MsgBox "Text10=" & Text10
RS("feld10") = Text10
MsgBox "Text11=" & Text11
RS("feld11") = Text11
MsgBox "Text12=" & Text12
RS("feld12") = Text12
MsgBox "Text13=" & Text13
RS("feld13") = Text13
MsgBox "Text14=" & Text14
RS("feld14") = Text14
MsgBox "Text15=" & Text15
RS("feld15") = Text15
' Recordset updaten
RS.Update
Loop
' Datei schließen
Close #1
Next q
' Recordset schließen
RS.Close
' Sub verlassen
Exit Sub
fehler:
' Fehlermeldung anzeigen
MsgBox "Es trat folgender Fehler auf: " & Err.Number & " - " & Err.Description
' Datei schließen
Close #1
' Recordset schließen
RS.Close
End Sub
Krümmelmonster
16.08.2004, 21:52
na danke geht doch dachte schon ich muss mich noch dümmer anstellen :P
wie schon erwähnt du kannst einem kindergärtner.. auch nicht einfachso erhöhte algebra beibringen *buck*
Krümmelmonster
17.08.2004, 13:33
juhuh er bindet was ein..
weiss zwar ned was genau.. usw usw.. aber ich hab danach was in der tabelle.
Krümmelmonster
17.08.2004, 16:20
Fehler 62
Einlesen hinter Dateiende :-/
irgendwas soll da angeblich ned stimmen
Naja, wenn er bei dem Input plötzlich über das Dateiende kommt, gibt's natürlich Probleme. Also am besten immer nur 1 Zeile am Stück einlesen:
Sub Einlesen()
Dim db As Database
Dim RS As DAO.Recordset
Dim q As Long
Dim x As String
Dim i As Integer
Dim varTDat(1000) As String ' erhöhen wenn >100
Dim txt As String
' Recordset öffnen
Set db = CurrentDb
Set RS = db.OpenRecordset("tabelle1")
'---Dateinamen feststellen und im 100-Array speichern
x = Dir("c:\log\log\*.txt")
Do
varTDat(i) = x
i = i + 1
x = Dir
Loop Until x = ""
'--- Dateien einlesen mit jeweils 3 Zeilen
' bei Fehler zu fehler springen
On Error GoTo fehler
For q = 0 To i - 1
' Datei öffnen
Open "c:\log\log\" & varTDat(q) For Input As #1
' tue solange wir nicht am Ende der Datei sind...
Do While Not EOF(1)
' 1 Zeile lesen
Line Input #1, txt
' bei jeder 16. Zeile einen neuen Datensatz einfügen
If q Mod 16 = 0 Then RS.AddNew
' Feld füllen
MsgBox CStr((q Mod 16) + 1) & "=" & txt
RS(CStr((q Mod 16) + 1)) = txt
' vor jeder 16. Zeile den Datensatz updaten
If q Mod 16 = 15 Then RS.Update
Loop
' Datei schließen
Close #1
Next q
' Recordset schließen
RS.Close
' Sub verlassen
Exit Sub
fehler:
' Fehlermeldung anzeigen
MsgBox "Es trat folgender Fehler auf: " & Err.Number & " - " & Err.Description
' Datei schließen
Close #1
' Recordset schließen
RS.Close
End Sub
Wenn er beim letzten Datensatz vor Feld 15 auf das Dateiende trifft, müsste dieser Datensatz automatisch verworfen werden, da dann das RS.Update nicht aufgerufen wird.
(Alle Angaben ohne Gewähr - ich hab's nicht getestet)
Krümmelmonster
18.08.2004, 14:11
MsgBox CStr((q Mod 16) + 1) & "=" & txt
RS(CStr((q Mod 16) + 1)) = txt
hier muss noch ein fehler drinliegen..
es gibt die fehlermeldung
3265 Element in dieser Auflistung nicht gefunden.
anscheinend wird der wert nicht richtig eingetragen,
cih weiss zwar ned was das ist aber.. naja googlen ;D
'Mod' bedeutet Modulo. Es gibt Dir den Rest der Division zurück:
0 Mod 16 = 0
1 Mod 16 = 1
...
15 Mod 16 = 15
16 Mod 16 = 0
17 Mod 16 = 1
usw.
'CStr' wandelt etwas in einen String um.
Der Fehler ist, dass ich etwas vergessen habe. Es muss heißen:
MsgBox CStr((q Mod 16) + 1) & "=" & txt
RS("feld" & CStr((q Mod 16) + 1)) = txt
Krümmelmonster
19.08.2004, 10:32
Ich glaub du hast was gut :-*
Krümmelmonster
19.08.2004, 15:03
super nach einigen änderungen hab ichs hingekriegt das es läuft
und dann hab ichs wieder versaut.. man bin ich sauer..
schwups hats gemacht da hat ich ne datenbank mit 57*** zeilen und jetz nix damit )((
Krümmelmonster
19.08.2004, 15:57
anscheinend wird rs.addnew nicht richtig ausgeführt den ich bekomme immer den fehler 3020
update oder cancel update ohne addnew oder edit
Krümmelmonster
01.09.2004, 14:50
so jetz noch ein problem
Sub Einlesen()
Dim db As Database
Dim RS As DAO.Recordset
Dim q As Long
Dim x As String
Dim i As Long
Dim varTDat(1000) As String ' erhöhen wenn >100
Dim txt As String
Dim Text1$, Text2$, Text3$, Text4$, Text5$, Text6$, Text7$, Text8$, Text9$, Text10$, Text11$, Text12$, Text13$, Text14$, Text15$, Text16$, Text17$, Text18$, Text19$, Text20$
' Recordset öffnen
Set db = CurrentDb
Set RS = db.OpenRecordset("tabelle1")
'---Dateinamen feststellen und im 100-Array speichern
x = Dir("c:\log\log\*.txt")
Do
varTDat(i) = x
i = i + 1
x = Dir
Loop Until x = ""
'--- Dateien einlesen mit jeweils 3 Zeilen
' bei Fehler zu fehler springen
On Error GoTo fehler
For q = 0 To i - 1
' Datei öffnen
Open "c:\log\log\" & varTDat(q) For Input As #1
' tue solange wir nicht am Ende der Datei sind...
Do While Not EOF(1)
' 1 Zeile lesen
Line Input #1, txt
' bei jeder 16. Zeile einen neuen Datensatz einfügen
If q Mod 1 = 0 Then RS.AddNew
' Feld füllen
RS("feld" & CStr((q Mod 1) + 1)) = txt
' vor jeder 16. Zeile den Datensatz updaten
If q Mod 1 = 0 Then RS.Update
' Recordset updaten
Loop
' Datei schließen
Close #1
Next q
' Recordset schließen
RS.Close
' Sub verlassen
Exit Sub
fehler:
' Fehlermeldung anzeigen
MsgBox "Es trat folgender Fehler auf: " & Err.Number & " - " & Err.Description
' Datei schließen
Close #1
' Recordset schließen
RS.Close
End Sub
das ist die einzige möglichkeit das ich keinen fehler 3020 bekomme..
ich habe dann zwar nur 1 spalte in der ganzen tabelle..
dafür viele viele tausen datens$tze
gibts da ne möglichkeit in der mitte das zeug zu trennen?
also 2 spalten?
Warum ersetzt Du nicht die Do-Schleife hiermit:
Do While Not EOF(1)
' 1 Zeile lesen
Line Input #1, txt
' bei jeder 16. Zeile einen neuen Datensatz einfügen
If q Mod 16 = 0 Then
RS.AddNew
End If
' Feld füllen
MsgBox CStr((q Mod 16) + 1) & "=" & txt
RS("feld" & CStr((q Mod 16) + 1)) = txt
' vor jeder 16. Zeile den Datensatz updaten
If q Mod 16 = 15 Then
RS.Update
End If
Loop
Und setzt dann in jeder Zeile des Programms mit F9 einen Haltepunkt und gehst den Spaß Schritt für Schritt mit dem Debugger durch? Da siehst Du ja wann er RS.Update aufruft, ohne vorher mit RS.AddNew eine Zeile eingefügt zu haben. Vll. muss man ja auch nach jeder Zuweisung (RS("feld" blabla) = txt) das RS.Update ausführen? *noahnung*
Spiele einfach mal ein wenig mit dem Code, dann verstehst Du ihn irgendwann auch.;)
vBulletin® v3.8.7, Copyright ©2000-2012, vBulletin Solutions, Inc.