collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 55
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 2
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13973
  • stats Beiträge insgesamt: 66540
  • stats Themen insgesamt: 8971
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Formular schließt zu langsam  (Gelesen 8907 mal)

Offline Florian-BGL

  • Newbie
  • Beiträge: 43
Formular schließt zu langsam
« am: April 28, 2010, 18:03:49 »
Hallo zusammen,

ich habe eine Datenbank, in deren Verlauf ein Formular mit eien Web Fenster geöffnet wird. Wird nun das Fenster geschossen geht die Anwendung zurück ins das vorherige VBA und arbeitet das weiter ab.
Das Problem ist, das ich eine Fehlermeldung bekomme bevor der nächste Schritt vollzogen wird. Wenn ich das ganze in Einzelschritten ausführe funktioniert das. Es funktioniert auch, wenn ich eine MsgBox einbaue. Dann scheint genug Zeit für das Schließen vorhanden zu sein. Ich habe schon versucht eine Zeitschleife einzubauen funktioniert aber nicht.
Vieleicht noch wichtig, das Webfenster öffnet eine Datei in einem Temp-Verzeichnis. Nach dem Schließen soll über Kill zunächst die Datei und dann das Verzeichnis gelöscht werden. Genau hier kommt es zu dem Problem.

Habt ihr eine Idee?

Vorab danke

Florian BGL
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23344
Re: Formular schließt zu langsam
« Antwort #1 am: April 28, 2010, 20:20:34 »
HAllo,

ohne den Code zu sehen, ist nur zu mutmaßen.


Du kannst mal versuchen, an ein paar Stellen im Code
DoEventseinzubauen.

Offline Florian-BGL

  • Newbie
  • Beiträge: 43
Re: Formular schließt zu langsam
« Antwort #2 am: April 28, 2010, 21:01:26 »

Hallo,
hier ist der Code aus dem WebFormular:

Option Compare Database
Private Declare Function RemoveDirectory Lib _
"kernel32" Alias "RemoveDirectoryA" _
(ByVal lpPathName As String) As Long

Private Sub Btn_Beenden_Click()

Dim Conn6 As New ADODB.Connection
Dim DBS6 As ADODB.Recordset
Set Conn6 = CurrentProject.Connection
    Set DBS6 = New ADODB.Recordset
        DBS6.Open "Tab_Zwischenablage", Conn6, adOpenKeyset, adLockOptimistic
        DBS6.MoveFirst
        DBS6.Delete
        DBS6.Close
DoCmd.Close
DoCmd.OpenForm "Frm_Postbuch_Suche"
End Sub



Private Sub Form_Close()
Dim Conn6 As New ADODB.Connection
Dim DBS6 As ADODB.Recordset
Dim Str_Datenanzahl As String
Set Conn6 = CurrentProject.Connection
Set DBS6 = New ADODB.Recordset
DBS6.Open "Tab_Zwischenablage", Conn6, adOpenKeyset, adLockOptimistic
Str_Datenanzahl = DBS6.RecordCount
 'Wenn ein Datensatz erfasst wurde dann geht es weiter; ansonsten Aufruf der Erfassung für die Ablagepfad der Anlagen
If Str_Datenanzahl = "0" Then GoTo Weiter Else
DBS6.MoveFirst
DBS6.Delete
Weiter:
   DBS6.Close
End Sub

Private Sub Form_Open(Cancel As Integer)
Dim Conn6 As New ADODB.Connection
Dim DBS6 As ADODB.Recordset

Set Conn6 = CurrentProject.Connection
        Set DBS6 = New ADODB.Recordset
        DBS6.Open "Tab_Zwischenablage", Conn6, adOpenKeyset, adLockOptimistic
        DBS6.MoveFirst
        Str_Zwischenablage = DBS6!Zwischenablage
        DBS6.Close
Me.MeinWebBrowser.Navigate Str_Zwischenablage
End Sub



Und hier dann der Code vom Unterformular:

Private Sub Anlage_Click()
    Dim Str_Anlage As String
    Const Verz = "Temp"
    Set Conn4 = CurrentProject.Connection
    Set DBS4 = New ADODB.Recordset
    Set Conn6 = CurrentProject.Connection
    Set DBS6 = New ADODB.Recordset
    DBS4.Open "Tab_Anlagenpfad", Conn4, adOpenKeyset, adLockOptimistic
    DBS4.MoveFirst
    Str_Anlagenpfad = DBS4!Ablage_Anlagen
    DBS4.Close
    Str_Anlage = Me!Anlage
MkDir "V:\Abt3\3.6\Temp"
RestoreBinFile Me!Anlage, "V:\Abt3\3.6\Temp\", True
DBS6.Open "Tab_Zwischenablage", Conn6, adOpenKeyset, adLockOptimistic
DBS6.AddNew
DBS6!Zwischenablage = "V:\Abt3\3.6\Temp\" & Me!Anlage
DBS6.Update
DoCmd.OpenForm "MeinWebBrowser", , , , , acDialog
Kill ("V:\Abt3\3.6\Temp\*.*")
RmDir ("V:\Abt3\3.6\Temp")
  
End Sub


Ich hoffe das hilft weiter.

Gruß
Florian-BGL
« Letzte Änderung: April 28, 2010, 21:06:22 von Florian-BGL »
 

Offline Florian-BGL

  • Newbie
  • Beiträge: 43
Re: Formular schließt zu langsam
« Antwort #3 am: Mai 18, 2010, 13:20:49 »
Hallo zusammen,

hat keiner eine Idee?
Ich habe zwischenzeitlöich verschi9ede Dinge ausprobiert. Wenn ich die Befehle Kill... und RmDir auseinander ziehe also z.B. in unterschiedlichen Formularen ablege funktioniert es.  Es liegt offensichtlich an der Art der Datei. Bei Jepg funktioniert es und bei doc oder xls Dateien wiederum nicht. Wahrscheinlich brauchen diese Dateien länger bis sie geschlossen und gelöscht wurden. Es ist ein eindeutiges Laufzeitproblem. Der Befehl RmDir will das Verzeichnis löschen obwohl noch Dateien enthalten sind.
Vieleicht gibt es einen Befehl der sowohl das Verzeichnis als auch die Dateien löscht. Analog der Verfahrensweise in Explorer.
Was macht denn der Befehl DoEvents? Ich konnte damit nichts anfangen.

Beste grüße
ein ratloser Florian
 


Offline Florian-BGL

  • Newbie
  • Beiträge: 43
Re: Formular schließt zu langsam
« Antwort #5 am: Mai 18, 2010, 18:11:31 »
Hallo zusammen,

ich habe mich für folgende Variante entschieden:
Public Function DelTreeVB(ByVal Path As String) As Boolean
Dim sName As String
  If Right$(Path, 1) <> "\" Then
 Path = Path & "\"
  End If 
  DelTreeVB = True
  On Error GoTo Error_DelTree1
  sName = Dir$(Path & "*.*", vbHidden + vbDirectory)
  While Len(sName)
 If (sName <> ".") And (sName <> "..") Then
   If (GetAttr(Path & sName) Or vbDirectory) = vbDirectory Then
  DelTreeVB = DelTreeVB(Path & sName & "\")
  sName = Dir$(Path & "*.*", vbHidden + vbDirectory)
   Else
  SetAttr Path & sName, vbNormal ' Attribute zurücksetzen
  Kill Path & sName 
  sName = Dir$()  ' nächste Datei suchen
   End If
 Else
   sName = Dir$()
 End If
  Wend
 
  RmDir Path
Exit_DelTreeVB:
  Exit Function
Error_DelTreeVB:
 
  DelTreeVB = False
  Resume Next
End Function

Nun meine Frage:
Wo lege ich fest welches Verzeichnis gelöscht wird?
Mache ich das mit Path = "C:\Temp\"

lDanke vorab Florian
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23344
Re: Formular schließt zu langsam
« Antwort #6 am: Mai 18, 2010, 22:06:36 »
Hallo,

den Pfad legst Du beim Aufruf der Funktion als Parameter für deren Argument fest....

Offline Florian-BGL

  • Newbie
  • Beiträge: 43
Re: Formular schließt zu langsam
« Antwort #7 am: Mai 19, 2010, 08:20:05 »
Hallo,

kannst du mir dafür ein Beispiel nennen?

Das Verzeichnis könnte Beispielhaft "C:\Temp" sein.

danke
Gruß
Florian
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23344
Re: Formular schließt zu langsam
« Antwort #8 am: Mai 19, 2010, 09:16:22 »
Hallo,

wirklich?

If  DelTreeVB("C:/temp")  then
Msgbox "alles paletti"
Else
Msgbox "irgendwas stimmt nicht"
End if

Offline Florian-BGL

  • Newbie
  • Beiträge: 43
Re: Formular schließt zu langsam
« Antwort #9 am: Mai 19, 2010, 15:51:27 »
Hallo,

vielen Dank funktioniert alles .

Das mit den Parametern hatte ich bislang noch nicht.

Danke
Florian