MS-Office-Forum


Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 28.09.2009, 18:04   #1
Toni
MOF User
MOF User
Standard Acc2003 - Reicht '= Nothing" um recordset zu schließen?

Hallo,

reicht es, wenn ich am Ende einer Prozedur ein recordset mit

SET rs = nothing

schließe oder muss ich vorher den .close-Befehl anwenden?

Vielen Dank!

__________________

Gruß Toni
Toni ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 28.09.2009, 18:32   #2
Storch
MOF Koryphäe
MOF Koryphäe
Standard

soweit ich weiss nicht.

mit nothing leerst du nur die recordsetvariable

um das recordset zu schließen bedarf es der Close-methode also:

rs.Close

__________________

Gruß
Uwe
Wenn fertig dann Thema als erledigt setzen und vllt. mal die eigene Lösung posten, damit andere auch was von haben.
*bitte meine Beiträge ruhig später nochmal einsehen, ich neige auch zu nachträglichen Änderungen
*wenn ich es mal vergessen habe, sag ich hiermit Danke für Eure Hilfe !!!
Favoriten: www.access-im-unternehmen.de * www.access-paradies.de * www.donkarl.com
Weitere www.smarttools.de
________________________________________________________________________

Laptop Celeron 420, 1.6 Ghz, 1GB-RAM, 40 GB-HD, Windows XP-Home, MS-Office Professional 2003
Storch ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 28.09.2009, 18:55   #3
Toni
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Uwe,

vielen Dank!

In der Hilfe habe ich bei close das gefunden:
'Eine Alternative zur Close-Methode ist es, den Wert einer Objektvariable auf Nothing (Set dbsTemp = Nothing) zu setzen.'

Dann müssten doch die Systemresourcen wieder frei sein, oder?

Kann ich irgendwie feststellen, ob sich Access durch fehlende close- bzw. nothing-Befehle aufschaukelt und die Resourcen knapp werden?

__________________

Gruß Toni
Toni ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 28.09.2009, 19:03   #4
Claypool
MOF User
MOF User
Standard

Hallo!

Schau mal hier nach. Das dürfte helfen.

Grüße
Ingo

__________________

--
XP SP3, Access 2002, 2007
Claypool ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.09.2009, 10:10   #5
Toni
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Ingo,

das ist auf jeden Fall die sicherste Methode. Ich hatte alles auf "= nothing" und seit einiger Zeit stürzt die Applikation - sogar manchmal wenn Sie nur im Hintergrund aktiv ist - 10-20 mal täglich ab. Ich hoffe, dass das der Fehler ist. Warum es vorher ging: ???

Ich werde noch mal berichten.

Vielen Dank!

__________________

Gruß Toni
Toni ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.09.2009, 10:12   #6
Sascha Trowitzsch
MS-Office-Forum Team MS-Office-Forum Team
Standard

Im Prinzip muss man gar nichts machen - weder ein .Close absetzen, noch auf Nothing setzen.
Denn nach Ablauf einer Prozedur, in der das Recordset deklariert wurde (...also nicht global), werden laut Theorie in VB(A) alle Variablen entfernt bzw. geschlossen.
Nur: Verlassen tut sich niemand darauf.

Also sollte man Objektvariablen sicherheitshalber per Code behandeln und abbauen, was grundsätzlich per Nothing geschieht.

Das Setzen auf Nothing zählt die Referenz auf das Objekt um eins herunter.
Wenn der interne Zähler eines Objekts bei Null angekommen ist, wird es aus dem Speicher entfernt, konkret: Die Destruktor-Methjode des Objekts wird angesteuert.
Wenn das Recordset innerhalb einer Prozedur deklariert wurde, dann gibt es normal auch nur innerhalb dieser Prozedur eine Referenz auf das Objekt - das Setzen auf Nothing setzt also den Referenzzähler auf Null, wodurch der Recordset-Destruktor anspringt, der implizit das .Close veranlassen sollte.

Nur: Auch darauf verlässt man sich besser nicht, sondern führt das Close ausdrücklich so bald wie möglich, sprich: sobald man das Recordset nicht mehr braucht, per Code aus.
Und das zusätzliche Setzen auf Nothing kann zumindest nicht schaden.
Das erhöht zudem die Übersichtlichkeit und Verständlichkeit des Codes.

Ciao, Sascha

__________________

Microsoft Access MVP
O2k bis O2010, VB6, VS2008, Delphi7, ...
Bitte keine ungefragten E-Mails. Probleme werden hier gelöst.
Bitte beachten: Grundlegendes zum Access-Forum

Knowhow auf Access-im-Unternehmen | Das Access 2007 Praxisbuch für Entwickler | www.mossTOOLs.de
Sascha Trowitzsch ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.09.2009, 10:17   #7
Toni
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Sascha,

können die Abstürze dadurch verursachtsein? Ich weiß mir sonst keinen Rat.

__________________

Gruß Toni
Toni ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.09.2009, 10:20   #8
Atrus2711
MOF Guru
MOF Guru
Standard

Hi,
der Garbage Collector von VBA ist halt nicht verlässlich. "Irgendwann" nach dem Runterzählen auf 0 wird das Objekt vernichtet. Bis dahin belegt es Speicher. Und wenn dann da hingegriffen wird, krachts.

Alte Handwerkerregel: Halte deinen Arbeitsplatz sauber. Lass nichts rumliegen. Räum deine Werkzeuge weg, sobald du sie nicht mehr brauchst. Verlass dich nichtr drauf, dass die Putzkolonne das rechtzeitig/richtig/sinnvoll aufräumt.

Geändert von Atrus2711 (29.09.2009 um 11:14 Uhr).
Atrus2711 ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.09.2009, 10:29   #9
Toni
Threadstarter Threadstarter
MOF User
MOF User
Standard

Bin schon beim aufräumen. Werde mich melden, wenn alles sauber ist.

__________________

Gruß Toni
Toni ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 30.09.2009, 14:57   #10
Toni
Threadstarter Threadstarter
MOF User
MOF User
Standard

Bis jetzt läuft alles. Allerdings kamen schon Fehlermeldungen, dass die Objektvable nicht existiert, obwoh ich 'if not...' verwende:
If Not rs Is Nothing Then rs.Close: Set rs = Nothing

Kann das Recorset einen Inhalt haben, obwohl es nicht offen ist???

__________________

Gruß Toni
Toni ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 30.09.2009, 15:05   #11
JPA
MOF Profi
MOF Profi
Standard

Hi,

mir ist auch schon aufgefallen, das Objektvariable nicht mehr gültig sind, jedoch nicht Nothing sind. Un mit anderen prüffunktionen kann man dies auch nicht sauber abfangen.
Daher mache ich es immer so:
Code:

On Error Resume next
rs.Close
Set rs = Nothing

__________________

Der Access Text Manager
http://www.abiss.de/downloads/public/atm.zip
Abfrage-Assistent zur Duplikatsuche für Access
http://www.abiss.de/downloads/public/acwzdup.zip
JPA ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 30.09.2009, 15:19   #12
Atrus2711
MOF Guru
MOF Guru
Standard

Das Set rs = Nothing kann keinen Fehler auslösen, wenn rs deklariert ist (und das sollte es ja eh immer sein). Und schließen sollte man immer sobald wie mögloch. Dann braucht es keinen "Schließversuch".
Atrus2711 ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 30.09.2009, 15:21   #13
Steffen0815
MOF Koryphäe
MOF Koryphäe
Standard

Hallo,

Zitat: von Atrus2711 Beitrag anzeigen

Hi,
der Garbage Collector von VBA ist halt nicht verlässlich

Bist du dir sicher, dass es sowas in VBA gibt .
Ich bin der Meinung, ein lokaler Objektverweis wird am Ende der Prozedur zuverlässig zerstört. Deshalb ist es in VBA nicht notwendig, lokale Verweise explizit frei zu geben.
Code:

Option Compare Database
Option Explicit

Sub Irgendwas()
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("acTabelle1")
' viel Code

' meiner Meinung nach überflüssig
'rs.Close
'Set rs = Nothing
End Sub

Sub testen()
Dim i As Integer
For i = 1 To 10000
    Call Irgendwas
Next
End Sub

__________________

Gruß Steffen
Steffen0815 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 30.09.2009, 15:48   #14
Bernd_G
MOF User
MOF User
Standard

Zitat: von Steffen0815 Beitrag anzeigen

Code:

' meiner Meinung nach überflüssig
'rs.Close

aber auch nur, wenn der Destructor explizit Close aufruft - aber wer weiss das schon.

Bei lokalen Variablen kann vielleicht auf das ' = Nothing ' verzichtet werden, aber das ' .Close ' würde ich zur Sicherheit lieber grundsätzlich aufrufen.

__________________

Bernd Gilles
... Subversion als Versions- und Quellcodeverwaltung für Access nutzen
coming soon:
EFEU - Enhanced FrontEnd Updater
VUNIT - Unit-Tests für VBA
Bernd_G ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 30.09.2009, 15:52   #15
Steffen0815
MOF Koryphäe
MOF Koryphäe
Standard

Hallo,

Zitat:

aber auch nur, wenn der Destructor explizit Close aufruft - aber wer weiss das schon

Was für Zeugs .
Der obere Code beweist meiner Meinung nach, dass es nicht notwendig ist.

__________________

Gruß Steffen
Steffen0815 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:29 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Home - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.

Copyright ©2000-2009 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.