WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Access VBA - Plattenplatz überprüfen (http://www.wcm.at/forum/showthread.php?t=96002)

renew 05.05.2003 11:01

Access VBA - Plattenplatz überprüfen
 
Mich würde interessieren, wie man in Access den freien Plattenplatz auf einem Laufwerk bzw. Netzlaufwerk / Netzordner überprüfen kann.

Weil es kann sein, dass während der Laufzeit die Datenbank ziemlich groß wird (>1GB).
Und wenn dann gerade ein Modul läuft und keinen Platz mehr zum Speichern hat, könnt da gröber was schief gehen.

Meine Idee wäre übers Filesystemobject.... (nur eine Vermutung - noch nicht probiert)

Naja, danke schon mal für die Ideen.

SNo0py 05.05.2003 13:59

Die Idee ist richtig :)

Ich weiß jetzt zwar selber nicht genau, wie es geht, aber über das FSO sollte es möglich sein. Ansonsten verwende die Win32-API!

mfg

renew 05.05.2003 14:10

Zitat:

Original geschrieben von SNo0py
Die Idee ist richtig :)

Ich weiß jetzt zwar selber nicht genau, wie es geht, aber über das FSO sollte es möglich sein. Ansonsten verwende die Win32-API!

mfg

Die Idee is mir nämlich erst beim Schreiben eingefallen... ;)
Aber ich habs halt gleich dazu geschrieben, weil ich mir eben nicht 100%ig sicher war obs geht.

Jetzt muss ich nur noch rausfinden, wo das im Programm am geschicktesten wäre.
Weil sonst frisst das viel zu viel Performance.

Seidl 05.05.2003 21:47

Also ich glaube offengesagt nicht, dass diese Funktion besonders viel Performance frisst (sofern man sie nicht 10 mal in der Sekunde aufruft ;) )

Verweis auf "scrrun.dll" und gib ihm.

Public Sub FreeSpace()
Dim FileSys As FileSystemObject
Dim drvCheck As Drive
Dim FreeSpace As String
Set FileSys = New FileSystemObject
Set drvCheck = FileSys.GetDrive("C:")
FreeSpace = Format(drvCheck.FreeSpace / (2 ^ 30), "#.000")
FreeSpace = Left(FreeSpace, Len(FreeSpace) - 1) & " GB"
MsgBox FreeSpace
End Sub

renew 05.05.2003 21:54

Zitat:

Original geschrieben von Seidl
Also ich glaube offengesagt nicht, dass diese Funktion besonders viel Performance frisst (sofern man sie nicht 10 mal in der Sekunde aufruft ;) )

Verweis auf "scrrun.dll" und gib ihm.

Public Sub FreeSpace()
Dim FileSys As FileSystemObject
Dim drvCheck As Drive
Dim FreeSpace As String
Set FileSys = New FileSystemObject
Set drvCheck = FileSys.GetDrive("C:")
FreeSpace = Format(drvCheck.FreeSpace / (2 ^ 30), "#.000")
FreeSpace = Left(FreeSpace, Len(FreeSpace) - 1) & " GB"
MsgBox FreeSpace
End Sub

danke...

Naja, es kommt darauf an wo das Ding positioniert ist.

Weil es geht ja darum, in einer Schleife zu checken ob er noch weiter machen kann (Datansätze erstellen), oder ob die Platte schon voll ist.
Ich müsst mir aber erst anschaun wo das sein soll, bzw. der der das Modul geschrieben hat tut dies und ich stell nur die Funktion bereit (sowas was du geschrieben hast - danke dafür, dann brauch ich es mir nciht raus suchen ;))

Oder man checkt das beim Formular/Modulaufruf - und gibt eine "Warnmeldung" aus, wenn der freie Platz unter einen gewissen Wert gefallen ist. ;)

btw - passt zwar nicht dazu, aber du hast mal davon gesprochen, dass du Office 2k Developer verwendest.
Gibts so eine Edition auch für XP, weil ich davon eigentlich noch nix gehört hab. :)

renew 05.05.2003 21:59

Nachtrag:

hab mich grad gewundert wofür du einen Verweis auf die scrrun.dll setzt.
Dann hab ich nachgeschaut und gesehen, dass das die Scripting Runtime ist.

Das coole daran ist aber, ich verwend in dem Projekt schon öfter das FSO, hab aber noch nie den Verweis gesetzt.

Das ganze hab ich auch schon mal mit deaktiviertem VBScript auf einer Maschine getestet - und da hats genauso funktioniert.

Jetzt stellt sich natürlich wieder die frage: WARUM GEHT DAS TROTZDEM!? ;)

Seidl 05.05.2003 22:41

Zur Zeit treibe ich mit OfficeXP und dem "Microsoft Office XP Developer" mein Unwesen. Es gibt ihn also durchaus. Natürlich ist er bei weitem nicht so verbreitet wie Office allein. Wenn man nicht gerade Anwendungen schreibt die von vielen Personen verwendet werden sollen braucht man ihn ja auch nicht wirklich. Spätestens aber bei der ersten Notewendigkeit eine Access-Anwendung auf 100 Rechnern mit verschiedenen Windows-Versionen zu installieren erweist er sich als sehr nützlich ;)

Betreffend scrrun.dll:
Manche Verweise setze ich eigentlich nur wegen der Libraries auch wenn es ohne Verweis genauso funktionieren würde. Ausserdem müssen verwendete Komponenten ja ohnehin geladen werden. Da mach ich's lieber gleich explizit als implizit.
Warum die Sache auch mit deaktiviertem VBScript funktioniert darfst du mich allerdings nicht fragen. Ich kann mir nur vorstellen, dass eine Scripting-Komponente die aus einer Executable heraus verwendet wird nicht als eigentliches Script gilt. Es geht ja nur um die Sicherheit und mit einer EXE kann ich ohnehin alles anstellen was mir in den Sinn kommt. Ob ich da jetzt das FSO verwende oder nicht macht ja im Endeffekt nicht wirklich einen Unterschied.

Zur Plazierung:
Wenn Datensätze einzeln erstellt werden, könntest du ja z.B. über "if aktuellerDatensatz mod X = 0 then" deine Abfrage starten. Wenn du z.B. nach jedem geschriebenen MB eine Überprüfung machen willst müsstest du ja nur X auf "1024 / DurchschnittlicheSatzgrösseInKB" setzen.

renew 05.05.2003 23:00

Zitat:

Original geschrieben von Seidl
Ich kann mir nur vorstellen, dass eine Scripting-Komponente die aus einer Executable heraus verwendet wird nicht als eigentliches Script gilt. Es geht ja nur um die Sicherheit und mit einer EXE kann ich ohnehin alles anstellen was mir in den Sinn kommt. Ob ich da jetzt das FSO verwende oder nicht macht ja im Endeffekt nicht wirklich einen Unterschied.

das war auch das was ich mir damals gedacht hab...

Nur ists mir jetzt wieder in den Sinn gekommen, weil es ja ohne expliziten Verweis auch funktioniert. :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag