![]() |
|
|||||||
| Excel Lösungsarchiv Hier findet Ihr die abgeschlossenen Themen, in welchem die Lösungsansaetze für die angefragten Themen zu finden sind. Benutzer haben hier "nur" Leseberechtigung. |
![]() |
|
|
Thread Tools | Display Modes |
|
|
#1 | |
|
Excel Moderator
![]() Senior Member (Board-Inventar)
Join Date: Oct 2004
Location: Ilsfeld
Posts: 2.610
Abgegebene Danke: 16
Erhielt 183 Danke für 180 Beiträge
|
Problem
Quote:
Viel zu wenig bekannt und benutzt die Möglichkeit die Textdateien als Datenbankfile zu behandeln. Die notwendigen Treiber liefert M$ doch im Office mit. Der Vorteil liegt auf der Hand, weil man das Textfile sogar dann per SQL filtern kann hier zum Beispiel am Datum im Logfile oder Messbericht. Dabei kann man auch das leidige Problem der Komma separierten Textdateien Umgehen. Es spielt dann keine Rolle ob Semikolon oder Komma separiert. Zunächts braucht man eine schema.ini. Nähere Erläuterungn dazu als Anhang - zip. Code:
[Logfile.txt] ColNameHeader=True Format=CSVDelimited 'CharacterSet=ANSI DecimalSymbol=. 'DateTimeFormat=DMY Col1= Feld1 Date Col2= Feld2 Date Col3= Feld3 Float Col4= Feld4 Float Col5= Feld5 Float Eigentlich ist es das Format DD.MM.YYYY hh.mm, beinhaltet also den Datumswert+Zeitwert. Daher nicht erschrecken wenn wie hier nach Import im Feld für die Zeit 01.01.1900 10:25:00 steht (Datumswert ist 0 daher 1900). Das Beispiel als Code für ADO - Zugriff. Code:
Option Explicit
' benötigt im VBA einen Verweis auf Microsoft ActiveX Data Objects x.y Library
' Hier getestet mit der Version 2.8
Public Function TextDataImport()
Dim CN As ADODB.Connection, rs As ADODB.Recordset
Dim strSQL As String, strFolder As String, rngZielCelle As Range
' Zur Beachten das Datum im SQL-Format hat engl. schreibweise mit Slash
strSQL = "SELECT * FROM Logfile.txt where [Feld1] > #06/27/2005#"
' In diesem Verzeichnis muß die Textdatei Logfile.txt liegen
strFolder = "E:\TEST"
' hierhin wird das Ergebnis kopiert
Set rngZielCelle = Range("A2")
If rngZielCelle Is Nothing Then Exit Function
Set CN = New ADODB.Connection
On Error Resume Next
CN.Open "Driver={Microsoft Text Driver (*.txt; *.csv)**;" & "Dbq=" & strFolder & ";" & "Extensions=asc,csv,tab,txt;"
On Error GoTo 0
If CN.State <> adStateOpen Then Exit Function
Set rs = New ADODB.Recordset
On Error Resume Next
rs.Open strSQL, CN, adOpenForwardOnly, adLockReadOnly, adCmdText
On Error GoTo 0
If rs.State <> adStateOpen Then
CN.Close
Set CN = Nothing
Exit Function
End If
rngZielCelle.CopyFromRecordset rs
rs.Close
Set rs = Nothing
CN.Close
Set CN = Nothing
End Function
Da hier ein gefilterter Auszug der Quelldatei nur importiert wird, spielt die Zeilenanzahl der Quelldatei keine Rolle. Auch der Zugriff erfolgt ja nur lesen. Loomex -- Nachtrag bst: 11.01.2007 Fehler mit strVerzeichnis bzw. strFolder korrigiert Achtung: Der Connectionstring (CN.Open ...) wird hier leider falsch dargestellt. Anstatt des ** muß dort eine geschweifte Klammer zu stehen!!! Last edited by bst on 06-12-2007 at 12:45 |
|
|
|
| Sponsored Links | |
![]() |
| Thread Tools | |
| Display Modes | |
|
|