PDA

Vollständige Version anzeigen : textdatei einlesen


Mausi
27.03.2006, 20:57
Hallo,

ich öffne eine Textdatei zum einlesen in einem Textfeld, es funktioniert so weit, aber wenn ich auf die Bildaufleisten klickt zum navigieren, stürzt der Datenbank Komplet ab, ich bekomme die Fehlermeldung "Nicht genügend Speicherplatz, um diese Operation durchzuführen".
Die Textdatei ist 6 MByte groß. Ich weiß nicht woran es liegt! Ist die Datei zu groß für einen Textfeld? oder vielleicht liegt daran dass der Tab Zeichen zwischen die Felder mitimportiert wurden?

Private Sub Dateilesen(Name As String)
On Error GoTo err
Dim FSO As New Scripting.FileSystemObject

Dim FichText As Scripting.TextStream

Set FichText = FSO.OpenTextFile(Name, ForReading)

'Tausgabe = name der textfeld
Tausgabe = FichText.ReadAll

GoTo Ende
err:
MsgBox "Fehler bei lesen der Datei", vbCritical, _
err.Description

Ende:

'variable freigabe
Set FichText = Nothing
Set FSO = Nothing
End Sub

Private Sub Einlesen_Click()

On Error GoTo err
Dim Datei As String

Datei = Dateioeffnen(Me.Hwnd, "Öffnen eine Textdatei", _
1, "Textdatei", "txt")
If Datei <> "" Then

Pfad = Datei

Dateilesen (Trim(Datei))

End If
Exit Sub
err:
MsgBox "Fehler bei öffnen der Datei", vbCritical, _
"Erreur"
End Sub



LG,

Mausi

gpswanderer
27.03.2006, 21:50
Hallo,
versteh ich irgentwie nicht. Willst Du die Datei in ein einziges Feld einlesen?
Das geht dann natürlich nicht. Ein normales Textfeld fasst 256 Zeichen = 256 Byte.
Ein Memofeld fasst 64000 Zeichen = 64 KByte, jedenfalls bei A2K.

Entschuldige habe nicht fertig gelesen. Du musst natürlich die Textdatei richtig auf die Felder aufteilen. "Tab" darf nicht mitgelesen werden. Tab ist wahrscheinlich das Trennzeichen. Ich denke mal Du musst mit "Daten importieren" arbeiten.

balda
28.03.2006, 06:48
Ich würde einen Import nach folgendem Schema machen:

DoCmd.TransferText acImportDelim, "Importspezifikation", "Zieltabelle", "Dateipfad der Textdatei"
Die Importspezifikation erhälst du, indem du einmalig den Importassistenten für Textdateien nutzt, dort alle Einstellungen, wie zb Trennzeichen TAB, einstellst und diese Spezifikation abspeicherst.

Mausi
28.03.2006, 09:06
Hi,

Das Trennzeichen wird leider mit eingelesen, ich bekomme die einfach nicht weg. Die Tabelle habe ich bereit mit Transferttext... in der DB importiert. Ich soll die Möglichkeit anbieten, die Tabelle im Formular zu öffnen und bestimmte Suchkriterium einsetzen, die nicht einfach im Editor möglich ist, falls ich die Tabelle als Links öffnen wurde. Die Tabellen sollen nicht immer in der DB gespeichert werden.

Mfg,

Mausi

racoon0506
28.03.2006, 09:13
Ohne die Daten in die DB zu importieren wirds schwierig(er).
Da die Dateien für ein einzelnes Feld zu groß sind, könnte man z.B. mit temporären Tabellen arbeiten, sprich: Datei in eine eigene Tabelle importieren, mit dieser dann arbeiten. Wenn Daten nicht fest in der DB bleiben sollen, die Tabelle löschen.....

btw: irgend etwas scheint mit den Importspezifikationen nicht zu stimmen wenn die Trennzeichen mit importiert werden. Normalerweise sollten die ausgefiltert werden, da sie ja nur als Trennzeichen interpretiert werden...

Ohne mir tiefgreifendere Gedanken über die Durchsuchbarkeit zu machen (da werden diverse andere hier sicher eher einen Rat haben!): Evtl. lässt sich da etwas über ein OLE-Objekt machen, in dem die externe Datei lediglich angezeigt wird...
(der Denkanstoss kann natürlich absoluter Blödsinn sein! bin geistig schon wieder woanders..)

Mausi
28.03.2006, 11:45
"Evtl. lässt sich da etwas über ein OLE-Objekt machen, in dem die externe Datei lediglich angezeigt wird..."

Was meinst du damit? ich kenne mich noch nicht so gut mit Access.

Locutus
28.03.2006, 12:21
Ich kann die Funktion SplitVBA (Google) empfehlen.
Man liest die Datei zeilenweise ein und übergibt die Zeile der SplitVBA-Funktion, als Trennzeichen gibt man den Tabulator an. Der Inhalt der Zeile wird daraufhin in einem Array abgelegt, dessen Elemente man bequem auslesen und in Tabellenfeldern speichern kann - ohne Trennzeichen. Dann weiter mit der nächsten Zeile, usw.

Anne Berg
28.03.2006, 13:24
Das wird dir nichts nützen, denn wenn ich dich recht verstanden habe, willst du die Daten doch in eine Tabelle einlesen, um sie in einem Formular mit Filtern und Abfragen bearbeiten zu können.

Wie ist denn der Aufbau dieser Textdatei, kannst du mal ein Muster zeigen? Und wie soll die Zieltabelle aussehen (Struktur)?

PS:Ist die Datei zu groß für einen Textfeld? Eine ganze Datei - zumal von der Größe - in ein Textfeld einzulesen, ist natürlich Unfug.

Mausi
28.03.2006, 16:16
Hi,
@ Anne, die Datei habe bereit in der DB gespeichert (In einer Tabelle importieren und Im Formular bearbeiten.

DoCmd.TransferText acImportDelim, "TabImportspezifikation", Nom, Datei

Ich soll die Datei auch zum bearbeiten im Formular öffnen ohne es zu speichern bzw in einer Tabelle zu importieren.

@Locutus, ich versuche jetzt mit der Split VBA, diese Tab Trennzeichen weg zu bekommen.

mfg

Mausi

Anne Berg
28.03.2006, 17:34
Da möchte ich mich doch gern korrigieren:
eine Textdatei der genannten Größe in einem Formularfeld anzeigen und bearbeiten zu wollen ist grober Unfug! :entsetzt:
Da wird dir auch SplitVBA nicht viel helfen...

Wer das von dir verlangt, ist wohl ein ziemlicher Scherzbold. Biete doch per Hyperlink das Editieren mit Notepad an!

Locutus
28.03.2006, 17:45
@Mausi
Bitte folge doch Annes Vorschlag, etwas mehr über die Struktur der Datei, bzw der Zieltabelle zu verraten. Mein SplitVBA-Vorschlag bezog sich auf eine Datei der StrukturEintrag1 TAB Eintrag2 TAB Eintrag...RETURN...Eine solcherart strukturierte Datei kann natürlich auch dann eingelesen und feldweise (!) bearbeitet werden, wenn sie 6 MB groß ist. Aber die ganzen 6 MB auf einmal in einem Tabellen- oder Formularfeld darzustellen halte ich auch für Kokolores, das kriegt ja nicht mal Word anständig hin :p

Mausi
28.03.2006, 18:42
so sieht eine zeile diese Datei aus.

2005-11-07 09:20:43 Loc.Info 192.201.46.20 Nov 07 2005 09:03:57: %FWSM-6-209015: Built STP connect for 192.100.1.100/2 addr 192.100.2.101/1 paddr 192.100.2.103/12 duration 0:00:00 bytes 784

Es wird leider so von mir verlangt :( ! , ich habe auch vorgeschlagen, die Tabelle im Editor zu öffnen ( als hyperlink), aber er findet die Suchmöglichkeit der Editor nicht so gut wie aber er findet die Suchmöglichkeit der Editor nicht so gut wie selbsterstellte Suchfelder.

Es geht ihm darum Speicherplatz zu sparen, werde ich dann die Möglichkeit anbieten die Tabelle nach dem Importieren wieder zu löschen oder die DB zu komprimieren.