lendrod
Goto Top

Access 2000 VB Code bleibt plötzlich hängen

Hallo,

ich habe hier eine schwierige Access Anwendung die von meiner Vorhängering programmiert wurde.
Seit Freitag funktioniert es plötzlich nicht mehr.

Wenn ich den VBA Code step by step durch gehe bleibt er immer an Stellen mit "Wend" hängen.
Wenn ich die manuell übergehe ist der Code irgendwann durch und alles hat geklappt wie früher.

Mal einen Ausschnitt aus dem Code sieht man hier:

With CurrentDb.OpenRecordset("Reservierungen")
While Not .EOF
.MoveFirst
.Delete
.MoveNext
Wend
.Close
End With

Was macht dieses "Wend" ?
jemand eine Idee wie es passieren kann das Freitag morgen alles geht und Nachmittags nicht mehr oder wo ich so was nach schauen kann ?

Content-ID: 136001

Url: https://administrator.de/contentid/136001

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

Biber
Biber 15.02.2010 um 18:24:39 Uhr
Goto Top
Moin lendrod,

Zitat von @lendrod:
Hallo,

ich habe hier eine schwierige Access Anwendung die von meiner Vorhängering programmiert wurde.
WTF ist eine Vorhängering?? Bzw. mag sie es wirklich, wenn du sie so bezeichnest, wenn sie grade den Raum verlassen hat?


Seit Freitag funktioniert es plötzlich nicht mehr.
Jepp, genau diese Fehlerbeschreibung bekommt wohl jeder von uns am Montag um die Ohren gehauen.

Wenn ich den VBA Code step by step durch gehe bleibt er immer an Stellen mit "Wend" hängen.
Wenn ich die manuell übergehe ist der Code irgendwann durch und alles hat geklappt wie früher.
Okay - jetzt weiß ich, was passiert beim "manuellen Durchsteppen".
Und ich weiß, dass es ordnungsgemäß läuft, wenn du die Zeile "Wend" übergehst.

Der Vollständigkeit halber
  • Springt denn in der Applikation selbst auch plötzlich der VBA-Editor auf oder läuft es da auch "alles wie früher"?
  • Du bist sicher, dass nicht nur im Debugger Haltepunkte auf der "Wend"-Zeile gesetzt sind?
  • Wenn du schreibst, du "übergehst" die Zeile "Wend", dann heißt das.... F7? F8? F9? oder mit welcher Taste genau?

Das "Wend" gehört zum "While".... ist also eine Art flapsiges "End While" ("wend" hört sich cooler an und es lässt sich einfacher beim Frühstücken aussprechen als "End While".

Grüße
Biber
schregi82
schregi82 15.02.2010 um 18:27:29 Uhr
Goto Top
While-Wend-Schleife

Eine Schleifenart, die nur noch aus Gründen der Kompatibilität in VBA enthalten ist, ist die While-Wend-Schleife:

While (Bedingung)
'Anweisungen
Wend

Wenn du vielleicht mehr aus der Quellcode reinkopieren könntest, wärs möglich das wir dir helfen können.
Ansonsten gerne auch per PN

lg,
lendrod
lendrod 15.02.2010 um 18:57:05 Uhr
Goto Top
Sorry, ich glaube die Grippe raft mich hin das ich so ein quatsch schreibe face-smile

Also der gepostete Code läuft die Ganze Zeit im Debugmodus durch.
Er läuft bis zu dem wend und fängt in der schleife wieder oben an.

In der Debug Funjtion ist so ein kleiner gelber Pfeil links, wenn ich den einen weiter schiebe auf close rennt die anwendung weiter step by step durch bis sie wieder auf eine schleife mit wend trifft und läuft da wieder im kreis.

Normal wird die DB geöffnet und es wird im autoexec modus halt dieser VBA Code durch gegangen.
Aber er scheint irgendwo in einer schlefe hängen zu bleiben. Das einzige was mir halt aufgefallen ist, ist das an diesem wend punkt der Code stehen bleibt und ich halt nicht genaus weiss warum er das tut, weil ohne die wend punkte scheint er ja durch zu laufen.

es wird immer beim öffnen angezeigt wann das letzte mal dieses Programm durch gelaufen ist und das war Freitag 7:38 Uhr und dann ging es nimmer.

Ich poste morgen mal den ganzen Programm teil
76109
76109 16.02.2010 um 00:04:37 Uhr
Goto Top
Hallo lendrod!

Falls der Code tatsächlich am Wend hängen bleibt, dann versuchs mal hiermit:
With CurrentDb.OpenRecordset("Reservierungen")  
    Do Until .EOF
        .Delete
        .MoveNext
    Loop
   .Close
End With

Gruß Dieter
lendrod
lendrod 16.02.2010 um 20:45:21 Uhr
Goto Top
Danke didi1954 das werde ich mal probieren.
Seltsam ist wirklich der Umstand das dieses Programm seit 2 Jahren täglich läuft und ohne jeglich veränderung nicht mehr läuft.
Änderungen kann nur der Admin machen, und das wäre ich... Also ich habe keine Änderungen vorgenommen
76109
76109 16.02.2010 um 23:16:56 Uhr
Goto Top
Hallo lendrod!

Für's bedanken ist es wohl noch zu frühface-wink

Vielleicht geht's, oder auch nicht?

Interessant wäre noch die Beantwortung der bereits von Biber gestellten Fragen:
Zitat von @Biber:
Der Vollständigkeit halber
  • Springt denn in der Applikation selbst auch plötzlich der VBA-Editor auf oder läuft es da auch "alles wie früher"?
  • Du bist sicher, dass nicht nur im Debugger Haltepunkte auf der "Wend"-Zeile gesetzt sind?
  • Wenn du schreibst, du "übergehst" die Zeile "Wend", dann heißt das.... F7? F8? F9? oder mit welcher Taste genau?
Kann auch sein, dass ein erneutes kompilern und speichern den Fehler schon behebt?

Gruß Dieter
jhinrichs
jhinrichs 17.02.2010 um 09:50:33 Uhr
Goto Top
Hallo,

dass das Programm beim erreichen von "Wend" wieder zur "While"-Zeile springt, ist der Sinn und die Funktion von "Wend". Wenn das Programm aus dieser Schleife nicht mehr herauskommt, dann liegt es daran, dass die Bedingung ("Not.EOF") weiterhin erfüllt ist. Wenn das Recordset "Reservierungen" 1000 Items enthält, musst Du die Schleife auch 1000mal durchlaufen.

Wie oft hast Du die Schleife denn durchlaufen, bevor Du gesagt hast, es geht hier nicht mehr weiter?
lendrod
lendrod 18.02.2010 um 12:47:23 Uhr
Goto Top
Hallo,

Also wenn die User die DB öffnen kommt eine meldung die Zeigt wann der letzte Dateiabgleich gemacht worden ist.
Wenn er zu alt ist kann man mit ja einen neuen machen.
Dort bleibt er dann auch stehen.
Für normal ist es in max 30sek fertig.
Die Anwendung kann nur noch über den Task Manager beendet werden.
Leider habe ich nciht genug ahnung um von dort aus in den Debug zu kommen oder mir anziegen zu lassen an welcher stelle er den steht.

Das mit der Wend schleife ist natürlich intressant, ich weiss natürlich nciht wie öft er durch die Schleife muss, ich bin am Ende wenn ich mit F8 zu Wend gekommen bin habe ich mit der Maus einfach den Courser manuell darüber geschoben.
Biber
Biber 18.02.2010 um 17:55:42 Uhr
Goto Top
Moin lendrod,

ich fürchte, du überforderst uns jetzt ein wenig.

Bis vor kurzer Zeit war die Rede davon, das "Access 2000 VB Code plötzlich hängenbleibt" und irgendwie magisch-magnetisch von einem coolen Szene-Wort namens "Wend" angezogen wird.

Die zwei Zentimeter Codefragment rund um dieses "Wend" eiern über eine Tabelle "Reservierungen", über die auch keine Details bekannt sein müssen, da einfach pauschal alle Datensätze gelöscht werden. Zwar einzeln, Satz für Satz, statt mit einem "DELETE FROM (ohne WHERE)" ...
... ungewöhnlich, aber positiv formuliert ein Indiz für Fleiß, Sorgfalt und Geduld.

Auf dieses daumenbreite Stückchen Code haben nun 100 Leute draufgeschaut, um genau dort vielleicht doch irgendwelche Verdachtsmomente zu finden ... vergeblich.

Jetzt, gefühlte Jahre später, erwähnst du beiläufig, dass eventuell vorhandene User vielleicht eine Option ausgewählt haben könnten, die sich "Dateiabgleich" nennt.
Und dass die APPZ von dort nicht in vertretbarer Zeit zurückkehrt.

Okay, ich kann mir nicht vorstellen, dass deine Vorhänge-Dingens oder wie du sie nennst eine Funktion "Alle Reservierungen plattmachen" euch verkauft hat als "Dateiabgleich".
Da wird vermutlich etwas anderes passieren.

  • Was? Und mit wem? Lokal, global, Abgleich mit den Outlook-Kalendern von 3000 Usern oder zwei Oracle-Datenbanken in Taiwan oder wer gleicht wen ab?
  • Von wieviel "Datenvolumen" reden wir denn, wenn dieses "Dateiabgleichen" schon 30 Sekunden unter normalen Bedingungen braucht?
  • Hängt dieses Access im Netz für 55 User, die alle "Admin" heißen? Oder ist es eine in Frontend- und Daten-MDB geteilte Appz?

Wenn sich herausstellt, dass eigentlich nur das Löschen oder das Index-Neuanlegen nicht ging, weil vielleicht noch ein paar andere User diese Appz auf dem Monitor brennen haben und grad kein exklusiver Zugriff möglich war...

UND wir diese Informationen erst nach Tagen bekommen...

.. dann bin ich etwas ärgerlich.

Grüße
Biber
lendrod
lendrod 22.02.2010 um 09:13:41 Uhr
Goto Top
Ich muss sagen das die letzte Antwort von Biber mich sehr zum schmunzeln gebracht hat.
Und er hat ja recht, was ich aber auch schon mal einen Schritt nach vorne gebracht hat.

Dann werde ich mal den rest von dem Code auch Posten:
Option Compare Database

Public Function Gastdaten_holen()

Dim PlNr, Stat As String 'Reservierungen  
Dim Anr, Abr As Date
Dim Kat, BuNr, Aufent As Long


'Reservierungen löschen  
With CurrentDb.OpenRecordset("Reservierungen")  
 While Not .EOF
  .MoveFirst
   .Delete
  .MoveNext
 Wend

Ich hoffe der Code ist nun nicht zu lang.
 .Close
End With

'Counter = 0  
'Reservierungen updaten  
With CurrentDb.OpenRecordset("Select Nr, Kategori, BAN, BAB, Status, BookingNr, KundLbNr from ssc_Bookings_byDay")  
 .MoveFirst
 While Not .EOF
   
   'Inc (Counter)  
   'Print "Akt Record " + Counter  
   
   PlNr = !NR
   Kat = !Kategori
   Anr = DateAdd("d", -2, Format(!BAN, "dd.mm.yyyy"))  'Format(!BAN, "dd.mm.yyyy")  
   Abr = DateAdd("d", -2, Format(!BAB, "dd.mm.yyyy"))  'Format(!BAB, "dd.mm.yyyy")  
   Aufent = DateDiff("d", Anr, Abr)  
   Stat = !Status
   GaNr = !KundLbNr
   BNu = !BookingNr
   HNR = 0
      With CurrentDb.OpenRecordset("Reservierungen")  
       .AddNew
        !PlatzNr = PlNr
        !Kategorie = Kat
        !BAN = Anr
        !BAB = Abr
        !Aufenthalt = Aufent
        !Status = Stat
        !GNR = GaNr
        !BNR = BNu
       .Update
       .Close
      End With
    BuNr = 0
  .MoveNext
 Wend
.Close
End With
'MsgBox "Reservierungen fertig"  
Call Mitglholen
Call Gastname_aktualisieren
With CurrentDb.OpenRecordset("HDatum")  
 .AddNew
 !Dholen = Date
 !Dtimeholen = Time()
 .Update
 .Close
End With
End Function


Public Function Mitglholen()

Dim VN, NM, HTxt, H2Txt, Sex, DText, HGNR As String 'Mitglieder  
Dim Anzahl, GNR, LNr As Long
Dim Gebu As Date

'Mitglieder löschen  
With CurrentDb.OpenRecordset("Mitglieder")  
 While Not .EOF
  .MoveFirst
   .Delete
  .MoveNext
 Wend
 .Close
End With
'Familienmitglieder  


 With CurrentDb.OpenRecordset("Select GNR, DATUM, NotatKey, LinNr, Tekst, Status From G_Anwesende_Mitglieder")  
 If Not .EOF Then
 .MoveFirst
  While Not .EOF
   If !NotatKey > 0 Then
     If !LinNr = 2 Then
         HTxt = Left(!Tekst, 2)
        If HTxt Like "m^*" Or HTxt Like "w^*" Or HTxt Like "G^*" Then  
         GNR = !NotatKey
         LNr = !LinNr
         VN = "K"  
         NN = "K"  
         Sex = Left(!Tekst, InStr(Trim(!Tekst), "^") - 1)  
         H2Txt = Mid(!Tekst, InStr(Trim(!Tekst), "^") + 1)  
         If Not H2Txt Like "" Or H2Txt Like "     *" Then  
          H2Txt = Mid(!Tekst, InStr(Trim(!Tekst), "^") + 1)  
         End If
         If Not H2Txt Like "   *" Or H2Txt Like "" Then  
           H2Txt = Left(H2Txt, InStr(H2Txt, "^") - 1)  
         End If
         If IsDate(H2Txt) = True Then DText = Format(H2Txt, "dd.mm.yyyy")  
         If IsDate(H2Txt) = False Then DText = "01.01.1910"  
         Anzahl = 1
        Else
         If HTxt Like "^*" Then  
          GNR = !NotatKey
          LNr = !LinNr
          VN = "K"  
          NN = "K"  
          Sex = "o"  
          Gebu = "01.10.1910"  
          Anzahl = 1
         End If
        End If
     Else
       If !LinNr > 2 Then
         GNR = !NotatKey
         LNr = !LinNr
         H2Txt = Mid(!Tekst, InStr(Trim(!Tekst), "^") + 1)  
         VN = Left(!Tekst, InStr(Trim(!Tekst), "^") - 1)  
         If H2Txt Like "" Or H2Txt Like "     *" Then  
          NN = "K"  
         Else
          NN = Left(H2Txt, InStr(H2Txt, "^") - 1)  
         End If
         H2Txt = Mid(H2Txt, InStr(H2Txt, "^") + 1)  
         If H2Txt Like "m^*" Or HTxt Like "w^*" Or HTxt Like "G^*" Then  
          Sex = Left(H2Txt, InStr(H2Txt, "^") - 1)  
         Else
          Sex = "o"  
         End If
         If Not H2Txt Like "" Or H2Txt Like "     *..." Then  
          H2Txt = Mid(H2Txt, InStr(H2Txt, "^") + 1)  
          H3Txt = Mid(H2Txt, InStr(H2Txt, "^") + 1)  
          If H2Txt Like "" Or H2Txt Like "     *" Then  
            H2Txt = ""  
          Else
           H2Txt = Left(H2Txt, InStr(H2Txt, "^") - 1)  
          End If
         End If
          If IsDate(H2Txt) = True Then DText = Format(H2Txt, "dd.mm.yyyy")  
          If IsDate(H2Txt) = False Then DText = "01.01.1910"  
         If H3Txt Like "1*" Or H3Txt Like "2*" Or H3Txt Like "3*" Or H3Txt Like "4*" Or H3Txt Like "5*" Or H3Txt Like "6*" Or H3Txt Like "7*" Or H3Txt Like "8*" Or H3Txt Like "9*" Then  
          Anzahl = Left(H3Txt, InStr(H3Txt, "^") - 1)  
         Else
          Anzahl = 0
         End If
       End If
      End If
     If GNR > 0 Then
      With CurrentDb.OpenRecordset("Mitglieder")  
       .AddNew
        !GNR = GNR
        !LinNr = LNr
        If VN Like "" Then !Vorn = "K" Else !Vorn = VN  
        If NN Like "" Then !Nachn = "K" Else !Nachn = NN  
        !Gebdat = DText
        !Anzahl = Anzahl
        If Sex = "" Then !Sex = "o" Else !Sex = Sex  
       .Update
       .Close
      End With
     End If
    End If
    VN = ""  
    NN = ""  
    Geb = "00.00.0000"  
    Anzahl = 0
    Sex = ""  
    HTxt = ""  
    H2Txt = ""  
    H3Txt = ""  
    GNR = 0
  .MoveNext
  Wend
  .Close
 End If
 End With



End Function

Public Function Gastname_aktualisieren()
Dim HGNR As Long
Dim Hnam As String



Set RS = CurrentDb.OpenRecordset("Select LinNR, GNR, Vorn, Nachn From Mitglieder Where LinNr = 2")  

If Not RS.EOF Then
  RS.MoveFirst
  
  While Not RS.EOF
  If RS!Vorn Like "K" And RS!Nachn Like "K" Then  
    HGNR = RS!GNR
   
    Set RS2 = CurrentDb.OpenRecordset("Select KundLbNr, Navn From CAMPKUND Where KundLbNr = " & HGNR)  
    If Not RS2.EOF Then
      Hnam = Trim(RS2!Navn)
      If Not Hnam Like "" Then  
        RS.Edit
        RS!Nachn = Hnam
        RS.Update
      End If
    End If
    RS2.Close
    
  End If
  HGNR = 0
  Hnam = ""  
  RS.MoveNext
  Wend
End If
End Function
[Edit Biber] Codetags gesetzt, falls wir über die eine oder andere Zeilennummer sprechen wollen face-wink [/Edit]
lendrod
lendrod 22.02.2010 um 10:08:38 Uhr
Goto Top
Fragt mich nicht warum, aber seit Samstag scheint es wieder zu funktionieren ohne das ich irgendetwas geändert habe.

Manchmal passieren Dinge zwischen Himmel und Hölle die sich meiner Kenntnis völlig entziehen.

Aber es geht ja nun wieder.. bis zum nächsten Freitag den 13.

Danke für die Hilfe.
Biber
Biber 22.02.2010 um 10:22:11 Uhr
Goto Top
Moin lendrod,

Zitat von @lendrod:
Fragt mich nicht warum, aber seit Samstag scheint es wieder zu funktionieren ohne das ich irgendetwas geändert habe.

War eventuell am Freitag eine blaubekittelte Reinigungsfachkraft da und hat die Brötchenkrümel aus deiner Tastatur abgesaugt?

Anyway -es uns hätte Schlimmeres widerfahren können an einem Montachmorgen...

Grüße
Biber
76109
76109 22.02.2010 um 10:50:53 Uhr
Goto Top
Hallo lendrod!

Zitat von @lendrod:
Aber es geht ja nun wieder.. bis zum nächsten Freitag den 13.
So ein Glück! Der nächste Freitag den 13. ist erst am 13.Augustface-smile

Gruß Dieter