Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Mini Script um Access 2007 import funktion zu öfffnen, evt. mit bestimmten Vorgaben

Frage Entwicklung VB for Applications

Mitglied: roberth

roberth (Level 1) - Jetzt verbinden

22.04.2009, aktualisiert 09:38 Uhr, 8422 Aufrufe, 38 Kommentare

Liebe Admins,

ich habe eine kleines Script zusammengebastelt mit einer super Hilfe eines netten Users, welches am Schluss ein VB-Script aufrufen sollte, welches folgendes machen sollte

1.) schau nach ob Access 2007 schon läuft
2.) wenn nicht dann öffne es mit einer bestimmten Datenbank
3.) öffne mir den Import Assistenten (Funktion) um txt Dateien in eine Tabelle einzufügen
4.) Der Clou an der Sache wäre wenn ich die Datei die zu importieren ist (imp.txt) schon irgendwie vorgeben kann

Ich denke mal dass dies nicht mehr wie ein 3 Zeiler wird....Kann und mag mir bitte jemand helfen...?

Grüße,
Roberth
38 Antworten
Mitglied: LotPings
22.04.2009 um 10:19 Uhr
Hallo Roberth,

wenn deine Datensätze in der Textdatei immer die gleiche Struktur aufweisen ließe sich der Import ggfs auch komplett automatisieren.

Wenn das Beispiel aus deinem anderen Thread
A1234567;098234;oifdfdwd;000s04
Heißt vier Felder mit Semikolon getrennt fehlen noch Datenbank-,Tabellen- Feldnamen und Typen.

Gruß
LotPings
Bitte warten ..
Mitglied: roberth
22.04.2009 um 10:26 Uhr
Ah, Hi guten Morgen:

genau hat immer die gleiche Struktur und zwar so:


B1249600;;;;;Abgenommen;22.04.2009;

die Tabelle in der DB heisst txt-import

Gruß,
roberth
Bitte warten ..
Mitglied: LotPings
22.04.2009 um 10:35 Uhr
Google existiert übrigens immer noch, mit ein paar geeigneten Suchbegriffen findet man fast alles.
Zum Beispiel hier dieses
01.
Set DataFile = CreateObject("Scripting.FileSystemObject").OpenTextFile("IMP.txt",1) 
02.
 
03.
Set objConnection = CreateObject("ADODB.Connection") 
04.
objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=database.mdb" 
05.
 
06.
Set objRecordset = CreateObject("ADODB.Recordset") 
07.
objRecordset.CursorLocation = 3 
08.
objRecordset.Open "SELECT * FROM TableName" , objConnection, 3, 3 
09.
 
10.
Do Until DataFile.AtEndOfStream 
11.
    arrTemp = Split(DataFile.ReadLine, ";") 
12.
    If IsArray(arrTemp) Then 
13.
    	objRecordset.AddNew 
14.
    	objRecordset("FieldName1") = arrTemp(0) 
15.
    	objRecordset("FieldName2") = arrTemp(1) 
16.
    	objRecordset("FieldName3") = arrTemp(2) 
17.
    	objRecordset.Update 
18.
    Else 
19.
    	'Only one item of data is on this line 
20.
    End If  
21.
Loop  
22.
 
23.
DataFile.Close 
24.
objConnection.Close 
25.
Set DataFile = Nothing 
26.
Set objRecordset = Nothing 
27.
Set objConnection = Nothing 
Das weiter anpassen (zu lassen sollte möglich sein.

Gruß
LotPings
Bitte warten ..
Mitglied: roberth
22.04.2009 um 12:10 Uhr
so, erstaml wieder danke und dann versuche ichs mal zu verstehn was da angepasst werden muss:

01.
Set DataFile = CreateObject("Scripting.FileSystemObject").OpenTextFile("IMP.txt",1) 
-> muss das script jetzt in dem verzeichnis liegen wo auch die imp.txt ist ? oder kann/muss ich mit pfaden arneiten ? wenn ja mit mappings oder unc ?

01.
objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=database.mdb"
-> selbe frage: datasource= DATENBANKNAME aber muss das script jetzt in dem verzeichnis liegen wo auch die imp.txt ist ? oder kann/muss ich mit pfaden arneiten ? wenn ja mit mappings oder unc ?

01.
objRecordset.Open "SELECT * FROM TableName" , objConnection, 3, 3
TableName = Tabellename ist klar, aber was heist die 3,3 dahinter ?

01.
 
02.
Do Until DataFile.AtEndOfStream 
03.
    arrTemp = Split(DataFile.ReadLine, ";") 
04.
    If IsArray(arrTemp) Then 
05.
    	objRecordset.AddNew 
06.
    	objRecordset("FieldName1") = arrTemp(0) 
07.
    	objRecordset("FieldName2") = arrTemp(1) 
08.
    	objRecordset("FieldName3") = arrTemp(2) 
09.
    	objRecordset.Update
meine interpretation:
gehe zum letzten datensatz
dann arrTemp = Split(DataFile.ReadLine, ";") da schreibt er sich ein temporäres array , dass er durch ; trennt
dann muss ich in
objRecordset("FieldName1") = arrTemp(0)
alle meine Spaltennamen eintragen
also bei meinem bsp wären das dann
(B0704600;;;;;Abgenommen;22.04.2009;xy) 7 Fieldnames (spaltennamen)

01.
    Else 
02.
    	'Only one item of data is on this line 
03.
    End If  
04.
Loop 
dass versteh ich nicht ganz, also wann kommt das else end if und der loop ?

der rest ist klar, er löscht die variablen....

Stimmt das so ?
Bitte warten ..
Mitglied: 76109
22.04.2009 um 15:55 Uhr
Hallo roberth,

ich möchte LotPings ein wenig unterstützen und versuchen Deine Fragen zu beantworten


Eine wichtige Frage vorweg: Hat Deine Datenbank einen Passwortschutz. Dann wird's etwas komplizierter?


Alternativ können die Dateinamen auch per Batch als Argumente übergeben werden, ansonsten:


Zum Import:
01.
  
02.
Set DataFile = CreateObject("Scripting.FileSystemObject").OpenTextFile("IMP.txt",1) 
Anstatt "IMP.txt" muss hier der komplette Dateipfad der Datei stehen z.B: "D:\Test\Import.Txt"


Zur Datenbank:
01.
objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=database.mdb;"
Anstatt Source=database.mdb" muss hier der komplette Dateipfad der Datei stehen z.B: ...Source=D:\Test\Datenbank.Mdb;"


Zu TableName und 3,3:
01.
objRecordset.Open "SELECT * FROM TableName" , objConnection, 3, 3
Anstatt TableName muss hier der Tabellenname der Tabelle in der Datenbank stehen z.B: ...FROM Tabelle1"...

Die 3,3 stehen für den Datenbankzugriff = adModeReadWrite, adUseClient


Zu Loop, IF, Feldnamen etc.:
01.
Do Until DataFile.AtEndOfStream 
02.
    arrTemp = Split(DataFile.ReadLine, ";") 
03.
    If IsArray(arrTemp) Then 
04.
    	objRecordset.AddNew 
05.
    	objRecordset("FieldName1") = arrTemp(0) 
06.
    	objRecordset("FieldName2") = arrTemp(1) 
07.
    	objRecordset("FieldName3") = arrTemp(2) 
08.
    	objRecordset.Update 
09.
    Else 
10.
    	'Only one item of data is on this line 
11.
    End If  
12.
Loop 
1. Die Anweisung Do bis Loop bildet eine Schleife und wird für jede Textzeile in Import.Txt einmal ausgeführt.

2. If prüft ob die aktuelle Zeile Trennzeichen (;) enthält, wenn ja werden die Einträge in die Datenbank geschrieben
wenn Nein (Else) wird hier bestimmt was passieren soll, wenn eine Zeile keine Trennzeichen beinhaltet.
Entweder Else entfernen, was soviel heisst wie Zeile ignorieren oder mit Else eine Fehlermeldung ausgeben.
Aktuell steht hier nur ein Kommentar mit (') gekennzeichnet

3. Mit Feldnamen sind nicht die Einträge in der Import.Txt gemeint, sondern die Feldnamen, wie sie in der
Datenbank-Tabelle stehen. (B0704600;;;;;Abgenommen;22.04.2009;xy) sind Einträge und keine Feldnamen.
Hier wäre es nicht schlecht zu wissen ob die Anzahl der Einträge in Import.Txt und die Anzahl der Felder
in der Datenbank und auch die Reihenfolge übereinstimmt?

Hoffe, ich hab alles so erklärt, dass Du es auch verstehst.


Gruß Dieter
Bitte warten ..
Mitglied: LotPings
22.04.2009 um 16:02 Uhr
Zitat von roberth:
so, erstaml wieder danke und dann versuche ichs mal zu verstehn was da
angepasst werden muss:

01.
> Set DataFile = 
02.
> CreateObject("Scripting.FileSystemObject").OpenTextFile("IMP.txt",1) 
03.
>  
04.
> 
-> muss das script jetzt in dem verzeichnis liegen wo auch die imp.txt ist ?
Nein
oder kann/muss ich mit pfaden arneiten ?
JA
wenn ja mit mappings oder unc ?
AFAIK Beides

selbe frage: datasource= DATENBANKNAME aber muss das script jetzt in dem verzeichnis liegen wo auch die imp.txt ist ?
oder > kann/muss ich mit pfaden arneiten ? wenn ja mit mappings oder unc ?
Wie oben

01.
> objRecordset.Open "SELECT * FROM TableName" , 
02.
> objConnection, 3, 3 
03.
> 
TableName = Tabellename ist klar, aber was heist die 3,3 dahinter ?
Übernommener Code, habe derzeit keinenen Access auf Access da musst du jemand anderen Fragen.


Do Until DataFile.AtEndOfStream
arrTemp = Split(DataFile.ReadLine, ";")
If IsArray(arrTemp) Then
objRecordset.AddNew
objRecordset("FieldName1") = arrTemp(0)
objRecordset("FieldName2") = arrTemp(1)
objRecordset("FieldName3") = arrTemp(2)
objRecordset.Update
</code>

meine interpretation:
gehe zum letzten datensatz
Nein, arbeite Zeilen 11 bis 20 ab bis die DO Bedingung zutrifft.

dann arrTemp = Split(DataFile.ReadLine, ";") da schreibt er sich ein temporäres array , dass er durch ; trennt
Richtig hatte ich schon so angepasst.

dann muss ich in
objRecordset("FieldName1") = arrTemp(0)
alle meine Spaltennamen eintragen
also bei meinem bsp wären das dann
(B0704600;;;;;Abgenommen;22.04.2009;xy) 7 Fieldnames (spaltennamen)
Wobei aber der Text Fieldname1 durch deinen ersten Spaltenamen auszutauschen ist, die folgenden Zeilen entsprechend.

Else
'Only one item of data is on this line
End If
Loop
</code>

dass versteh ich nicht ganz, also wann kommt das else end if und der loop ?
Das Else bezieht sich auf das vorherige IF (Dafür sind doch die Einrückungen da, um das zu verdeutlichen)
Sprich wenn es ein Array IST werden die Spalten zugeordnet. Wenn es keine Array ist wird die Zeile ignoriert.


der rest ist klar, er löscht die variablen....

Stimmt das so ?
Siehe meine Anmerkungen, also nicht ganz

Gruß
LotPings
Bitte warten ..
Mitglied: roberth
23.04.2009 um 10:10 Uhr
vielen Dank für diese ausführlcihe interpretation, ich werds glecih mal zusammenstricken.
die db hat keinen passwortschutz.
kann ich auch mit unc pfaden arbeiten ?
die einträge sind in der richtigen reihenfolge auch wie die feldnamen

gruß,
roberth
Bitte warten ..
Mitglied: roberth
23.04.2009 um 10:13 Uhr
erstmal vielen Dank !! Ich werds jetzt mal zusammenstricken mal gucken....
Gruß,Roberth
Bitte warten ..
Mitglied: roberth
23.04.2009 um 11:04 Uhr
Also nach dem Anpassen sagt mir der Windows Script Host folgendes:

Skript: Z:\blabla\import_access.vbs
Zeile: 4
Zeichen: 1
Fehler: Nicht erkennbares Datenbankformat "\\blbla\bla.accdb
Code: 80004005
Quelle: Microsoft Jet Database Engine

mhhh, was das denn jetzt ? Fehler Code im Internet nachgeguckt: Allgemeiner Fehler, kann alles mögliche sein, u.U. Rechteprobleme, Passwort etc.
Allerdings ist die DB nicht passwort geschützt o.ä.

Gruß,
Roberth
Bitte warten ..
Mitglied: 76109
23.04.2009 um 12:12 Uhr
Hallo roberth,

hast Du den Pfad der Datenbank-Datei richtig angegeben? Die Datei muss natürlich schon existieren.

Aber ich vermute mal, selbst wenn ja, das es so trotzdem noch nicht funktioniert, weil wahrscheinlich
noch UserID, User-Passwort etc beim Schreib-Modus mit angegeben werden müssen, was dann
leider auch noch den Zugriff auf die Sicherheitsdatei "%System32%\System.Mdw" erfordert.

Falls der Dateipfad stimmt und es trotzdem noch nicht funktioniert, muss Du etwas Geduld haben.
Muss es selbst erst testen.

Gruß Dieter
Bitte warten ..
Mitglied: roberth
23.04.2009 um 12:26 Uhr
Hallo,

danke für Deine Antwort. Also der Pfad stimmt 100% -> habs mit ausführen...etc getestet.
Das mit den Schreib-Modus kann schon sein, liegt auf nem Netzlaufwerk...oder hat das nix damit zu tun ?

Gruß,
roberth
Bitte warten ..
Mitglied: 76109
23.04.2009 um 13:05 Uhr
Hallo roberth,

das Script müsste nach entsprechender Anpassung funktionieren:

1. Dateipfade anpassen
2. Tabellenname anpassen (From Tabelle1)

01.
Option Explicit 
02.
 
03.
Const mdbPath = "F:\Test\Script05\Test.mdb"	 
04.
Const csvPath = "F:\Test\Script05\Test.csv"  	 
05.
 
06.
Const mdbSql = "SELECT * FROM [Tabelle1]"   	 
07.
 
08.
Const adModeRead = 1 
09.
Const adModeReadWrite = 3 
10.
Const adUseClient = 3 
11.
Const adOpenKeyset = 1 
12.
Const adLockOptimistic = 3 
13.
Const adPromptComplete = 2 
14.
 
15.
Dim mdbCon, mdbRec, Data, Fso, csvFile, i 
16.
 
17.
'Main Begin 
18.
     
19.
    Set Fso = CreateObject("Scripting.FileSystemObject") 
20.
    Set csvFile = Fso.OpenTextFile(csvPath) 
21.
     
22.
    Call OpenRecordset 
23.
     
24.
    Do Until csvFile.AtEndOfStream 
25.
        Data = Split(csvFile.ReadLine, ";") 
26.
        If UBound(Data) = 7 Then 
27.
            With mdbRec 
28.
                .AddNew 
29.
                 For i = 0 To 6:  .Fields(i) = Data(i):  Next 
30.
                .Update 
31.
            End With 
32.
        End If 
33.
    Loop 
34.
     
35.
    mdbRec.Close:   mdbCon.Close:  csvFile.Close 
36.
 
37.
    WScript.Quit 
38.
 
39.
'Main End 
40.
 
41.
 
42.
Private Sub OpenRecordset() 
43.
     
44.
    Set mdbCon = CreateObject("ADODB.Connection") 
45.
    Set mdbRec = CreateObject("ADODB.Recordset") 
46.
     
47.
    With mdbCon 
48.
        .Mode = adModeReadWrite 
49.
        .CursorLocation = adUseClient 
50.
        .Provider = "Microsoft.ACE.OLEDB.12.0"    'Access 2007 
51.
        .Properties("Data Source") = mdbPath 
52.
        .Properties("Persist Security Info") = False 
53.
        .Open 
54.
    End With 
55.
     
56.
    With mdbRec 
57.
        .ActiveConnection = mdbCon 
58.
        .CursorLocation = adUseClient 
59.
        .CursorType = adOpenKeyset 
60.
        .LockType = adLockOptimistic 
61.
        .Source = mdbSql 
62.
        .Open 
63.
    End With 
64.
End Sub
Gruß Dieter


[edit]Korrekturen vorgenommen am24.04.2009 um 14:27[/edit]
Bitte warten ..
Mitglied: roberth
23.04.2009 um 13:17 Uhr
testes glecih, danke !!!
sind diese alten script zeilen da auch untergebracht ? versteh das script nämlcih jetzt gar nimmer.....

01.
Do Until DataFile.AtEndOfStream 
02.
    arrTemp = Split(DataFile.ReadLine, ";") 
03.
    If IsArray(arrTemp) Then 
04.
    	objRecordset.AddNew 
05.
    	objRecordset("Systemnummer") = arrTemp(0) 
06.
    	objRecordset("Feld2") = arrTemp(1) 
07.
    	objRecordset("Feld3") = arrTemp(2) 
08.
	objRecordset("Feld4") = arrTemp(3) 
09.
	objRecordset("Abgenommen") = arrTemp(4) 
10.
	objRecordset("Austausch Datum") = arrTemp(5) 
11.
	objRecordset("Bemerkung") = arrTemp(6) 
12.
    	objRecordset.Update 
13.
    Else 
14.
    	'ignoriere Zeilen ohne vollständige Inhalt 
15.
    End If  
16.
Loop 
Gruß,roberth
Bitte warten ..
Mitglied: 76109
23.04.2009 um 13:45 Uhr
Hallo roberth,

dies ist im Prinzip genau identisch.

Der Unterschied ist nur, dass das was zwischen <With> und <With End> steht mit einem "." abgekürzt werden kann.
D.h. wenn da steht <With objRecordset> und dann <Punkt..AddNew> ist das dasselbe wie <objRecordset.AddNew>.

Die Feldnamen der Tabelle kann man auch über Item(0), Item(1) usw. ansprechen. D.h. Item(0) = Feld "Sytemnummer"
Item(1) = "Feld2" usw. Dadurch kann ich mit einem Zähler in der For-Schleife alle Felder mit der Zahl 1 - 7 ansprechen.
Ubound repräsentiert die Zahl bzw. Anzahl der Spalten im Import-Array.

Sofern Du keine Fehlermeldung ausgeben möchtest, falls sich in der Import.txt eine Leerzeile befindet, dann kann das Else entfallen.

Gruß Dieter
Bitte warten ..
Mitglied: roberth
23.04.2009 um 13:54 Uhr
ah,ok !
meinste mit der zeile:

01.
Const csvPath = "F:\Test\Script05\Test.csv" 

dass der sich noch ne csv "zwischentabelle" anlegt ?
oder ist dass der verweis auf meine imp.TXT ?
weil ich habe ja keine csv datei zum importieren sondern eine txt

Gruß,
Roberth
Bitte warten ..
Mitglied: 76109
23.04.2009 um 13:59 Uhr
Hallo roberth,

nö, hier soll Deine Pfadangabe für die Import-Datei stehen. Das war mein Pfad zum Testen

Habe ich doch am Anfang vom Code darauf hingewiesen?


Gruß Dieter

PS. Ob die Datei jetzt *.Csv oder *.Txt heisst, ist völlig wurscht. Wicht ist nur das die Einträge mit dem Trennzeichen ";" getrennt sind.
Bitte warten ..
Mitglied: 76109
23.04.2009 um 14:44 Uhr
Hallo roberth,

habe im Code Zeile 26 eine Kleinigkeit übersehen und bereits geändert.

01.
If UBound(Data) Then
muss heissen:
01.
If UBound(Data) = 6 Then 
Gruß Dieter
Bitte warten ..
Mitglied: roberth
23.04.2009 um 14:57 Uhr
so, jetzt kommt der selbe Fehler bei :

Zeile 53
Zeichen 9
nicht erkennbares Datenbankformat
Fehlercode: 80004005

Gruß,
roberth
Bitte warten ..
Mitglied: 76109
23.04.2009 um 15:07 Uhr
Hallo roberth,

hast Du den Pfad der Datenbank-Datei in <mdbPath= "?"> richtig angegeben (*.mdb)?
hast Du den Tabellennamen angepasst <From ?(Tabellenname)>

Gruß Dieter
Bitte warten ..
Mitglied: roberth
23.04.2009 um 15:20 Uhr
mhh, immer noch, exakt der selbe Fehler:

Zeile 53
Zeichen 9
nicht erkennbares Datenbankformat
Fehlercode: 80004005

Gruß,roberth
Bitte warten ..
Mitglied: 76109
23.04.2009 um 15:26 Uhr
Hallo roberth,

also, trifft das zu: Die Datenbank-Datei *.Mdb existiert bereits und beinhaltet eine Tabelle mit 7 Feldern?

Den Tabellennamen hast Du in <FROM ?> anstelle von Tabelle1 hingeschrieben?

Gruß Dieter
Bitte warten ..
Mitglied: 76109
23.04.2009 um 15:54 Uhr
Hallo roberth,

Der Fehler liegt vermutlich doch am Datenbank-Format.

Habe noch Access 2002 und Access 2007 hat wahrscheinlich ein anderes Format.

Dazu muss ich wissen, welche Dateierweiterung Deine Datenbank-Datei hat, *.mdb oder anders?

Wenn *.accdb, dann muss folgendes in Zeile 50 geändert werden:

<.Provider = "Microsoft.Jet.OLEDB.4.0"> in <.Provider="Microsoft.ACE.OLEDB.12.0">

Gruß Dieter
Bitte warten ..
Mitglied: roberth
23.04.2009 um 16:29 Uhr
so, ja genau das wars, die db ist ne 2007er mit der .accdb endung.....
allerdings kommt jetzt folgende FM:

Zeile: 62
Zeichen: 9
Fehler : Syntax Fehler in From-klausel
Code: 80040e14

hab gogoogelt aber leider kann ich mir keinen reim drauf machen...

Gruß,
Roberth
Bitte warten ..
Mitglied: roberth
23.04.2009 um 16:31 Uhr
ja, ich habe alles individualisiert....
Bitte warten ..
Mitglied: 76109
23.04.2009 um 16:43 Uhr
Hallo roberth,

da bin ich im Moment leider auch überfragt.

Ist Dir vielleicht eine Stringquote am String-Ende abhanden gekommen "SELECT ......"

Hast Du stehen "SELECT * FROM Tabellenname" ?

Dann Versuch mal: "SELECT * FROM [Tabellenname]"


Gruß Dieter
Bitte warten ..
Mitglied: roberth
23.04.2009 um 16:48 Uhr
ja, hab ich:

01.
Const mdbSql = "SELECT * FROM txt-import"
Gruß,roberth
Bitte warten ..
Mitglied: 76109
23.04.2009 um 16:51 Uhr
Versuch mit [ ]: Const mdbSql = "SELECT * FROM [txt-import]"

Gruß Dieter
Bitte warten ..
Mitglied: roberth
24.04.2009 um 10:42 Uhr
naja, jetzt kommt keine FM mehr, aber es funktioniert auch nicht...also es passiert nix, er schreibt die daten nicht in die tabelle txt-import

oder meinst du ich soll das [] mit vorne dran ? Natürlicht nicht , oder ?

Gruß,
roberth
Bitte warten ..
Mitglied: 76109
24.04.2009 um 11:22 Uhr
Hallo roberth,

nö, natürlich nicht. Nur das, was hinter dem Doppelpunkt steht

Steht in der Import.Txt was drinne und enthält eine Zeile 6 oder 7 Trennzeichen ";" ?

Gruß Dieter
Bitte warten ..
Mitglied: roberth
24.04.2009 um 11:38 Uhr
....scherzchen auf meine kosten, weil ich halt das script überhaupt nimmer richtig versteh....war schon klar...))

also, die imp.txt da steht was drinne, und eine original zeile wäre:


B1845252;;;;;Abgenommen;24.04.2009; -> macht 7 ";"

mir ist aber aufgefallen dass manchmal die erste zeile / oder die ersten 2 zeilen leer sind, das kommt daher weils halt noch alles manuell gemacht wird und dann die imp.txt auch noch händisch gelöscht wird, dann abgespeichert mim cursor in der falschen zeile....kann das auch damit zu tun haben ?

oder wäre das hier die lösung:

01.
If UBound(Data) = 7 Then


gruß,
roberth
Bitte warten ..
Mitglied: 76109
24.04.2009 um 11:51 Uhr
Hallo roberth,

das wäre schon mal richtig, aber es muss noch etwas geändert werden:

01.
If UBound(Data) = 7 Then
Und:

01.
For i = 0 To 6:  .Fields(i) = Data(i):  Next
Leerzeichen sind egal, sofern Leerzeilen keine 7 Trennzeichen beinhalten.


Gruß Dieter
Bitte warten ..
Mitglied: roberth
24.04.2009 um 11:55 Uhr
nicht so :

01.
For i = 0 To 7:  .Fields(i) = Data(i):  Next  
also bei der der for schleife eine 6 und nicht 7 ? erklärung ? 0 ist schon was sozusagen....

-> und ohne das doppelte next was hier komischerweise angezeigt wird ...

Gruß,
roberth
Bitte warten ..
Mitglied: 76109
24.04.2009 um 11:58 Uhr
Hallo roberth,

eine 6 bitte. Es sind ja nur 7 Felder und in der For-Schleife wird ab 0 gezählt. D.h. von 0-6 ergibt 7 Felder.

Die For-Zeile genauso, wie angegeben.

Gruß Dieter
Bitte warten ..
Mitglied: roberth
28.04.2009 um 13:04 Uhr
hallo dieter,

also ich konnts jetzt erst testen, es funktionert nun perfekt, vielen herzlichen Dank !!!!
gruß,
roberth
Bitte warten ..
Mitglied: roberth
28.04.2009 um 16:09 Uhr
noch eine kleinigkeit:


wie lösche cih denn jetzt am ende des scripts den inhalt der xyz.txt ?? (nicht die datei sondern nur den inhalt)

gruß,
roberth
Bitte warten ..
Mitglied: 76109
29.04.2009 um 00:34 Uhr
Hallo roberth,

gottseidank

Schreibe bzw. kopiere diese Code-Zeile und füge sie im Script (siehe weiter oben) in Zeile 36 ein.
Dadurch wird die Datei auf 0 gesetzt und gespeichert..
01.
Set csvFile = Fso.CreateTextFile(csvPath):   csvFile.Close 
Gruß Dieter

PS. Um eventuellen Missverständnissen vorzubeugen: Die Zeile 35 und 37 bleiben genauso wie sie sind.
Bitte warten ..
Mitglied: roberth
29.04.2009 um 09:21 Uhr
super vielen Dank, dass hat jetzt jede Menge rumfummelei per Hand erspart !!!
Was passiert denn jetzt eigentlcih wenn ein Fehler kommt, sagen wir mal doppelter Eintrag, da motzt dann eh Access aber wird das File dann trotzdem gelöscht ?

gruß,
roberth
Bitte warten ..
Mitglied: 76109
29.04.2009 um 09:43 Uhr
Hallo roberth,

Access schreibt auch mehrfach gleiche Datensätze in die Datenbank.

Und sollte ein Fehler auftreten, wird der Dateinhalt nicht gelöscht, da sich die Anweisungen - Datei auf 0 setzen - am Code-Ende befinden und nicht mehr ausgeführt werden.

Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
gelöst Access 2007 (2)

Frage von Everest zum Thema Microsoft Office ...

Microsoft Office
Access ein Script alle X Minuten ausführen und bei Bedarf stoppen (5)

Frage von thomas1972 zum Thema Microsoft Office ...

JavaScript
If Funktion mit wildcards in google sheets script (3)

Frage von Stoffn zum Thema JavaScript ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...