PDA

Vollständige Version anzeigen : .txt in Access-DB einlesen ohne GUI zu öffnen


skho
18.01.2007, 07:58
Hallo,

ich habe folgende Batch-Datei geschrieben

start c:/Programme/"Microsoft Office"/OFFICE11/MSACCESS.EXE "//Server/users/Username/access/Unterordner/db.mdb" /nostartup /Excl /X Import_MSH

um ein Text-File in eine Access Datenbank zu importieren (Macro Import_MSH) ...

Leider befriedigt mich das noch nicht so, da natürlich immer Access richtig aufgeht (also die GUI) ... ich schließe Access zwar dann per Macro wieder,

aber gibt es nicht eine Möglichkeit eine Access-DB zu füllen ohne das Access aufgemacht werden muss (per Shellscript oder Tool) ??

Grüße
skho

Claus Kreksch
04.03.2007, 20:05
Hallo skho,

habe ein kleines Beispiel erstellt das eine Txt-Datei mit Eingabedaten in eine Datenbank schreibt. Ich hoffe Du kommst damit weiter.

###################################################
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adUseClient = 3

Set FSO = CreateObject("Scripting.FileSystemObject")
Set wshshell = CreateObject("WScript.Shell")

Ordner = "d:\Dat_import\"
filename = "Import.txt"
Set folder = FSO.GetFolder(Ordner)

' Datenbank öffnen

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source = d:\Dat_import\beispiel.MDB"

objRecordSet.CursorLocation = adUseClient
objRecordSet.Open "SELECT * FROM Import" , objConnection, adOpenStatic, adLockOptimistic
Set textstream = FSO.OpenTextFile(Ordner & filename)
Do Until textstream.AtEndOfStream
zeile = textstream.ReadLine
'Felder einlesen
pos = 1
Erfassungsdatum = Mid(zeile, pos+6, 2) & "-" & Mid(zeile, pos+4, 2) & "-" & Mid(zeile, pos, 4)
pos=pos+8
Betrag = Mid(zeile, pos, 16)
pos=pos+16
Kostenstelle = Mid(zeile, pos, 10)
'in Datenbank schreiben
objRecordSet.AddNew
objRecordSet("Erfassungsdatum") = Erfassungsdatum
objRecordSet("Betrag") = Betrag / 100
objRecordSet("Kostenstelle") = Kostenstelle
objRecordSet.Update
Loop
textstream.Close
objRecordSet.Close
objConnection.Close
####################################################

Gruß Claus

TheEagle
29.11.2007, 19:38
Es reicht aus hinter der Batch Zeile noch folgendes Komando anzuhängen: /embedding (Klappt bei Windows XP auf meinem Rechner problemlos)

In dem oberen Fall also:
start c:/Programme/"Microsoft Office"/OFFICE11/MSACCESS.EXE "//Server/users/Username/access/Unterordner/db.mdb" /nostartup /Excl /X Import_MSH /embedding

Der Textfile Import in Access läuft nun völlig im Hintergrund, ohne die Access GUI zu starten.
Lediglich im Taskmanger ist der Prozeß in der Auflistung aller Prozesse sichtbar.

Daher sollte man vosichtig sein und alle Programmfehler im Vorfeld sauber abfangen.