Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: thorsten1981 am Juli 29, 2013, 16:09:28

Titel: VBA reparieren von mehreren Datenbanken Access 2007
Beitrag von: thorsten1981 am Juli 29, 2013, 16:09:28
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
Titel: Re: msaccess.exe /myfolder/*.mdb /repair (Warum keine Wildcards?)
Beitrag von: daolix am Juli 29, 2013, 16:38:53
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.

Code (Ohne Gewähr, luftcode, völlig ungetestet) [Auswählen]


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.


Titel: Re: msaccess.exe /myfolder/*.mdb /repair (Warum keine Wildcards?)
Beitrag von: thorsten1981 am Juli 30, 2013, 08:02:09
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
Titel: Re: VBA reparieren von mehreren Datenbanken Access 2007
Beitrag von: DF6GL am Juli 30, 2013, 08:14:44
Hallo,

Sfile = Dir()

Titel: Re: VBA reparieren von mehreren Datenbanken Access 2007
Beitrag von: thorsten1981 am Juli 30, 2013, 08:34:20
Bekomme immernoch

Erwartet Anweisungsende

Komisch. Er will das nicht so machen!
Titel: Re: VBA reparieren von mehreren Datenbanken Access 2007
Beitrag von: DF6GL am Juli 30, 2013, 08:50:33
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
Titel: Re: VBA reparieren von mehreren Datenbanken Access 2007
Beitrag von: thorsten1981 am Juli 30, 2013, 09:07:48
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.
Titel: Re: VBA reparieren von mehreren Datenbanken Access 2007
Beitrag von: DF6GL am Juli 30, 2013, 09:11:39
Hallo,

kannst Du diese Frage nicht selber beantworten  , nachdem Du das Problem ja schon selber ansprichst ???  :o
Titel: Re: VBA reparieren von mehreren Datenbanken Access 2007
Beitrag von: thorsten1981 am Juli 30, 2013, 09:20:35
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. 
Titel: Re: VBA reparieren von mehreren Datenbanken Access 2007
Beitrag von: DF6GL am Juli 30, 2013, 13:15:15
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"
   
Titel: Re: VBA reparieren von mehreren Datenbanken Access 2007
Beitrag von: daolix am Juli 30, 2013, 15:07:45
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.