VB-Tec.de Visual Basic - Technik, FAQ, Tricks, BeispieleHome / Allgemein / Bugs / With...EndWith With...EndWith-Problem |
With ... End With-Konstrukt ist ein schönes Hilfmittel, um mehrfach hintereinander auf dasselbe Objekt zuzugreifen (und die Programmausführung wird sogar schneller dadurch). Jedoch gibt es ein wenig bekanntes Problem damit. With obj stößt wird der interne Referenzzähler des Objekts um eins erhöht. Nur wenn VB im weiteren Programmverlauf auf das zugehörige End With stößt, wird dieser Referenzzähler wieder um eins verringert. Passiert dies nicht, so bleibt der Referenzzähler erhöht und das Objekt wird nie mehr freigegeben (zumindest nicht vor der Terminierung der Anwendung)! Auch ein Set obj = Nothing kann dann nicht weiterhelfen!
Sub Test()
Dim db As Database
On Error Goto ErrorHandler
Set db = OpenDatabase(Connect)
With db
.TimeOut = 1000
'...mehr Code...
.Close
End With
ErrorHandler:
Set db = Nothing
'...mehr Code...
End Sub
Wenn nun ein Fehler innerhalb des With-Blocks auftaucht (z.B. wegen eines Typkonflikts), wird das Objekt "db" trotz Set db = Nothing nie terminieren (solange das Programm läuft). © Jost Schwider, 30.04.2000-30.04.2000 - http://vb-tec.de/with.htm