PDA

Vollständige Version anzeigen : Dateien suchen


boris1100
07.05.2001, 14:43
Hallo liebe Forumsteilnehmer!

Wer kann mir helen? Ich möchte in ACCESS 97 Dokumente suchen, deren Dateiname zum Teil bekannt ist. Die gefundenen Dokumente sollten in einem Fenster angezeigt werden und per Doppelklick zu öffnen sein!

Vielen Dank im Voraus für Eure Hilfe

Stefan Kulpa
07.05.2001, 16:31
<font face="Verdana" size="2">Hallo!

Das ist nicht so ganz einfach und auch nicht ohne etwas Aufwand.
Unabhängig von Access97 würde ich einen Weg über das Win32-API nehmen - das ist der schnellste aber auch der komplizierteste Weg.

Um Dateien suchen zu wollen, musst Du zunächst wissen, wo Du suchen willst.
Dabei kannst Du folgende drei Suchkriterien ansetzen:

Datei(en) in einem bekannten Ordner suchen
Datei(en) im Systempfad suchen
Datei(en) in einem Laufwerk suchen

Hast Du diese Hürde genommen, geht es darum die Dateien in eine Liste zu
schreiben, was - denke ich - nicht weiter schwierig ist.

Um nun eine Datei auszuführen, gibt es wiederum verschiedene Wege.
Handelt es sich um eine ausführbare Datei (.exe) reicht ein simpler Shell-Befehl.
Handelt es sich allerdings um eine andere Datei (Word-Dokument, Excel-Arbeitsblatt etc.)
muss das dazugehörige Programm gestartet werden.
Auch hierzu empfehle ich die Nutzung des API.

Nachfolgend ein paar Links mit fertigen Code-Ausschnitten für die jeweilige
Aufgabe:

für die Suche:
<a href="http://www.kulpa-online.de/tipps/visualbasic/105.htm" target="_blank">Wie suche ich eine Datei auf einem Laufwerk?</a>
<a href="http://www.kulpa-online.de/tipps/visualbasic/107.htm" target="_blank">Wie suche ich eine Datei im Pfad?</a>

für die Ausführung:
<a href="http://www.kulpa-online.de/tipps/visualbasic/408.htm" target="_blank">Wie führe ich verschiedene Shell-Funktionen aus? </a>

Mit diesen Links müßte die Aufgabe eigentlich zu bewältigen sein ...

Gruß,</font>

Sascha Trowitzsch
07.05.2001, 17:01
Statt Win-API würde ich aber das FileSearch-Objekt (siehe VBA-Hilfe) nehmen. Das ist genauso schnell, lässt sich flexibel verändern und ist in der Hilfe ganz gut dokumentiert.

Ciao, Sascha

Alexander Jan Peters
07.05.2001, 17:08
<font color="#000000" size="2" face="Tahoma">Hallo,

das ist ja mal typisch für dieses Forum, erst den komplizierten Weg ;) .
Also, die anderen Varianten sind der auch unter Access verfügbare Befehl Dir() (s.Hilfe), ist sehr leicht, wenn Du das Verzeichnis kennst.
Ansonsten mußt Du Dich mal mit Rekursion beschäftigen und auch die Windows Scripting Runtime mit ihrem FileSystemObject ist da sehr geeignet.
Eine weitere Variante ist das von Office bereitgestellte Objekt FileSearch, es handelt sich dabei um eine gemeinsame Office-Komponente, die es ermöglicht
sehr schnell Dateien zu finden (w/Indexerstellung -> schau mal in den Ordner Start-Programme-Autostart).
Beispiel:</font>
<font color="#000000" size="2" face="Courier New">'//Benötigt eine Referenz zur Microsoft
'//Office 8.0 Object Library
Sub sSearchForFiles()
Dim varFound As Variant
With Application.FileSearch
.FileName = "*.pdf"
.LookIn = "C:\Eigene Dateien\"
.SearchSubFolders = False
.Execute
For Each varFound In .FoundFiles
Debug.Print varFound
Next varFound
End With
End Sub</font>
<font color="#000000" size="2" face="Tahoma">
Die API-Funktionen von Stefan sind allerdings etwas schneller, als diese Methoden (mal abgesehen von FileSearch) und allgemein für alle Dateitypen einsetzbar.
Das starten der Dateien kannst Du auch mit der Methode FollowHyperlink realisieren.
Hab' ich alle Varianten erwähnt? Na egal, ist ja erstmal genug.

Gruß

A.J. Peters

Empfehlenswerte Links:
<a href="http://www.donkarl.com">Access FAQ von Karl Donaubauer</a>
<a href="http://www.access-paradies.de/Links.htm">Access-Paradies Links</a></font>

Stefan Kulpa
07.05.2001, 17:30
Hallo Sascha, Hallo Alexander Jan,

normalerweise reagiere ich ja nicht auf Alternativlösungen, sofern diese inhaltlich korrekt sind. Mein Hinweis "unabhängig von Access97" schließt die Nutzung von internen Funktionen wie Dir() oder Application.FileSearch() aus, da dies Lösungen sind, die applikationsgebunden sind - und so etwas versuche ich persönlich in der Regel zu vermeiden.
Die Aussage das WSH sei genauso schnell wie das Win-API ist definitiv falsch! Ohne hier auf vorhandene Studien über entsprechende Vergleiche verweisen zu wollen, gilt auch hier die Abhängigkeit von WSH. Nutzt man dieses im Rahmen von Early-Binding durch Referenzierung auf die SCRRUN.DLL, hat man spätestens dann ein Problem, wenn die Applikation auf einem System laufen soll, wo das WSH nicht oder in einer früheren Version installiert ist. Die Alternative ist die Nutzung via CreateObject() - aber das ist keine Lösung für zeitintensive Suchvorgänge.
Ich habe nichts gegen das WSH (ein separates Modul mit den wichtigsten Methoden kann man sogar von meinen Seiten downloaden) - aber ich bin der Meinung, jede Technik zur passenden Zeit.
Aber vielleicht sehe ich das VB-Entwickler (und API-Fan ;-) wieder mal alles zu akribisch ...

Nichts für ungut,

Gruß,

Alexander Jan Peters
07.05.2001, 17:50
<font color="#000000" size="2" face="Tahoma">Hallo Stefan,

aber, aber, hab' ich behauptet der WSH wäre die schnellere Lösung? Ich denke, daß in meinem Beitrag ganz deutlich zu lesen ist, daß die von Dir vorgeschlagenen Methoden schneller sind, höchstens erreicht durch die Geschwindigkeit von Application.FileSearch und das gehört ja nun nicht zum WSH. Da wir uns hier im Access-Forum (und nicht in "Deinem" VB-Bereich :)~ ), also einem an eine Applikation gebundenen Forum, befinden, sind meiner Ansicht nach die "internen" Befehle zumindest erwähnenswert.
Auch ich gehöre zu den API-Fans und dachte nur an die vielen Probleme (*säusel*), die jemand bekommen kann, wenn er API-Funktionen einsetzt, die er nicht versteht, sondern nur kopiert.

Gruß

A.J. Peters</font>

boris1100
07.05.2001, 18:41
Hallo Sascha, Alexander, Stefan etc..

Danke für Eure rege und ausführliche Hilfe!

Vielen Vielen Dank

Liebe Grüße

boris1100

Sascha Trowitzsch
07.05.2001, 20:31
Hi,

muss jetzt auch noch was anschließen:

(...bzw. mich dem letzten Beitrag von Alex anschließen...)

Ich versuche hier jeweils Lösungen anzubieten, die dem Fragenden angemessen erscheinen. Wenn aus der Fragestellung hervorgeht, dass er nicht so der VB-Profi ist, dann lass ich Win-API links liegen, wenn es einfachere Alternativen gibt, in diesem Fall FileSearch-Objekt.
Rekursives Dir() ist für einen Anfänger ebenfalls nicht so leicht zu durchschauen, auch wenn der Lerneffekt hier vielleicht am größten ist.

Ansonsten: Hier haben wir jetzt einen Strauß von Alternativen... ist doch schön!

Grüße, Sascha