Hallo Leute,
(Access 2007)
ich habe hier einen Ordner mit mehreren Unterordnern. Ich will mir aus allen Unterordnern die *.mdb ziehen und diese reparieren bzw. komprimieren und reparieren.
Ich habe bereits per cmd und /repair versucht mehrere Dateien anzusprechen, doch Wildcards werden hier ebenso wie UNC-Pfade nicht akzeptiert.
Wenn ich die mdb einzeln per skript aufrufe gelingt ein Reparieren auf jeden Fall, ich will aber alle repaieren und nicht nur eine. Hat einer eine Lösung, welche nicht kostenpflichtig ist?
Danke und Grüße
Thorsten
Warum sollte auch. Wildcards in dieser Form sind Elemente für das Dateisystem und seinen Funktionen und nicht für Access, d.h du musst dafür sorgen das aus den Wildcards echte Dateinamen werden. In VB(A), was Access verwendet, gib es den Befehl dir, mit welchem du das Dateisystem auslesen kannst.
Sub irgendwas()
dim sFile as string
sFile = dir$(Currentproject.path & "/myfolder/*.mdb")
do while len(sFile)
shell "msaccess.exe " & Currentproject.path & "/myfolder/" & sfile & " /repair"
sfile = dir$
loop
End Sub
Da Shell asyncron arbeitet weis ich jetzt nicht mit wievielen Accessfenstern dein Desk jetzt zugekleistert wird, evtl mit der Anzahl der Dateien im Folder myfolder.
Dankeschön, das ist schon mal ein Ansatz. Da muss ich mich wohl was in VBA einarbeiten. Das Skript nimmt er nämlich nicht so. Fehler beim Kompilieren --> Erwartet = Anweisungsende . Aber er erkennt schon irgendwie die Dateien.
Haben wir hier irgendeinen, der das Skript anpassen könnte oder mal bei sich testen könnte? Danke.
LG
Thorsten
Hallo,
Sfile = Dir()
Bekomme immernoch
Erwartet Anweisungsende
Komisch. Er will das nicht so machen!
Hallo,
in WELCHER Zeile tritt der Fehler auf?
zudem heißt der Access-Parameter nicht Repair , eher "compact" und auch die Schrägstriche (im PfadDateinamen) würde ich in "Backslash"es ändern.
Zusätzlich, sollte der Pfad, bzw. Dateiname Leerzeichen enthalten, das Ganze noch in Gänsefüße einschliessen:
Sub irgendwas()
Dim sFile As String
sFile = Dir(Currentproject.Path & "\myfolder\" & "*.mdb")
Do While Len(sFile)
Shell "msaccess.exe """ & Currentproject.Path & "\myfolder\" & sFile & """ /compact"
sFile = Dir()
Loop
End Sub
Danke es sieht gut aus. Jetzt die Frage wie ich das anspreche wenn ich z.B. das hier haben will:
Sub irgendwas2()
Dim sFile As String
sFile = Dir(CurrentProject.Path & "c:\temp\" & "*.mdb")
Do While Len(sFile)
Shell "msaccess.exe """ & CurrentProject.Path & "C:\temp\" & sFile & """ /compact"
sFile = Dir()
Loop
End Sub
Er hat jetzt mit dem Pfad Probleme. Ich will alle mdb Dateien des Unterordners Temp auf C: komprimieren. Dankeschön.
Hallo,
kannst Du diese Frage nicht selber beantworten , nachdem Du das Problem ja schon selber ansprichst ??? :o
Ja
Sub irgendwas2()
Dim sFile As String
sFile = Dir(CurrentProject.Path & "c:" & "*.mdb")
Do While Len(sFile)
Shell "msaccess.exe """ & CurrentProject.Path & "\temp\" & sFile & """ /compact"
sFile = Dir()
Loop
End Sub
Er meldet keinen Fehler. Aber er macht jetzt nix! Das müsste ich ja u.a. am "geändert am" Datum sehen.
Hallo,
offensichtlich doch nicht..
sFile = Dir(CurrentProject.Path & "c:" & "*.mdb")
Do While Len(sFile)
Shell "msaccess.exe """ & CurrentProject.Path & "\temp\" & sFile & """ /compact"
Was sagen Dir denn die rot markierten Stellen?
sFile = Dir( "c:\temp\" & "*.mdb") 'oder gleich: Dir( "c:\temp\*.mdb")
...
Shell "msaccess.exe """ & "c:\temp\" & sFile & """ /compact"
Hallo
da du ja das Eingangspost und damit die Ausgangsbedingungen etwas geändert hast, ist noch anzumerken das du etweder der Sub den Path als Parameter mitgibst und für jeden vollständigen Unterordner diese Sub dann aufrufst, oder du die Sub so umschreibst das diese sich selbst (recursiv) aufruft.