Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: smily68 am September 05, 2014, 09:00:28

Titel: Set db = CurrentDb / allgemeine Frage dazu
Beitrag von: smily68 am September 05, 2014, 09:00:28
Hallo

Ich habe eine allgemeine Frage zu Set db = CurrentDb

Was ist sinnvoll? Die CurrentDb in jeder Prozedur zu setzen, oder einmal beim Formular das beim Starten geöffnet wird zu setzen und in eine Public Variable zu schreiben.

Was machen die erfahrenen Programmierer?

Wenn ich die CurrentDb in einer Prozedur setze, muss ich in dieser zwingend (sinnvollerweise) am Ende der Prozedur auch wieder CurrentDb = Nothing setzen?

Gruss Daniel
Titel: Re: Set db = CurrentDb / allgemeine Frage dazu
Beitrag von: bahasu am September 05, 2014, 11:30:23
Hi,

siehe: http://microsoft.public.de.access.narkive.com/iAphsJlq/fehler-3048-mehr-datenbanken-konnen-nicht-geoffnet-werden

Bei intensivem Einsatz von currentdb kann obiger Fehler auftreten, der durch die im Artikel beschrieben Art vermieden werden kann.

Dieser Vorschlag soll von Kaplan stammen. Siehe auch: http://www.utteraccess.com/forum/lofiversion/index.php/t1720104.html

Harald
Titel: Re: Set db = CurrentDb / allgemeine Frage dazu
Beitrag von: Hondo am September 05, 2014, 22:05:58
Hallo,
am besten macht man ne Property draus, speichert das Datenbankobjekt in einer lokalen Varialbe und prüft ob diese gesetzt wurde, ansonsten macht man ne Zuweisung von CurrentDB an diese Variable und gibt diese zurück.
Das ganze nennt sich dann CurrentDbC - einfach mal danach googeln. Stammt von Michael Kaplan:
In einem Modul folgender Code:

Private m_DaoDB As DAO.Database

Public Property Get CurrentDbC() As DAO.Database
    If (m_DaoDB Is Nothing) Then
         Set m_DaoDB = CurrentDb
    End If
    Set CurrentDbC = m_DaoDB
End Property


Im VBA Code schreibt man dann direkt: Set rs = CurrentdbC.OpenDatabase... ohne ein zusätzliches Datenbankobjekt zu erstellen.

Gruß Andreas
Titel: Re: Set db = CurrentDb / allgemeine Frage dazu
Beitrag von: bahasu am September 05, 2014, 22:18:30
Hi,

Zitat von: Hondo am September 05, 2014, 22:05:58
CurrentDbC - einfach mal danach googeln.


Wieso in die Ferne schweifen? Siehe, das Gute liegt so nahe:
http://www.access-o-mania.de/forum/index.php?topic=18363.msg103554#msg103554

Harald
Titel: Re: Set db = CurrentDb / allgemeine Frage dazu
Beitrag von: ebs17 am September 05, 2014, 22:56:49
set CurrentDb = Nothing
Diesen Selbstabschuss ignoriert Access.

Ansonsten: CurrentDb erstellt jedesmal eine neue Instanz der aktuellen DB. Das benötigt geringfügig mehr Zeit, als wenn man einmalig eine Instanz (siehe CurrentDbC von Michael Kaplan, ThisDB von Nouba) einrichtet und nachfolgend darauf verweist.
Bei vielen Schleifendurchläufen wird das dann auch messbar, siehe auch Performance in VBA+Formularen (http://www.donkarl.com/Downloads/AEK/AEK7_PerfTuning.zip) von Josef Pötzl (Seite 9).
Umgedreht: Hat man eine solche Instanz eingerichtet, gibt es auch keinen Grund, diese Instanz dann links liegen zulassen und beim CurrentDb zu bleiben.

@Hondo zur Vollständigkeit: rs => Openrecordset