Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Löschabfragen ausführen mit vba

Begonnen von trebuh, November 10, 2015, 12:14:49

⏪ vorheriges - nächstes ⏩

trebuh

Hallo,

eine banale Frage. Ich führe per VBA mehrere Löschabfragen aus. Dies sieht z.B so aus:



        Dim db_L1 As DAO.Database
        Dim db_L2 As DAO.Database
        Dim db_L3 As DAO.Database


20      Set db_L1 = CurrentDb
30          db_L1.Execute "qryLoeschAbfrage_1"
40      Set db_L1 = Nothing
       
50      Set db_L2 = CurrentDb
60          db_L2.Execute "qryLoeschAbfrage_2"
70      Set db_L2 = Nothing

80      Set db_L3 = CurrentDb
90          db_L3.Execute "qryLoeschAbfrage_3"
100     Set db_L3 = Nothing


Kann ich dass auch so schreiben?
 
     Dim db_L1 As DAO.Database
   

20      Set db_L1 = CurrentDb
30          db_L1.Execute "qryLoeschAbfrage_1"
40          db_L1.Execute "qryLoeschAbfrage_2"
50          db_L1.Execute "qryLoeschAbfrage_3"
40      Set db_L1 = Nothing
 
       

Gruß trebuh

MzKlMu

#1
Hallo,
einfach so:

30          CurrentDb.Execute "qryLoeschAbfrage_1", dbFailOnError
40          CurrentDb.Execute "qryLoeschAbfrage_2", dbFailOnError
50          CurrentDb.Execute "qryLoeschAbfrage_3", dbFailOnError

Gruß Klaus

MaggieMay

Hi,
ZitatKann ich dass auch so schreiben?
Ja, das kannst du und das solltest du auch, um den vielfachen Einsatz von CurrentDB zu vermeiden.

Und wenn du schon Execute einsetzt, solltest du auch die Fehlerbehandlung aktivieren:
db_L1.Execute "qryLoeschAbfrage_1", dbFailOnError
Freundliche Grüße
MaggieMay

MzKlMu

Hallo,
dbFailOnError gehört selbstverständlich noch dazu, habe ich oben vergessen.

@MaggieMay
Zitatum den vielfachen Einsatz von CurrentDB zu vermeiden.
was spricht dagegen ?
Es ist ja nur ein Verweis auf die aktuelle DB, ohne eine Zuweisung.
Gruß Klaus

MaggieMay

@Klaus:
Ich habe mal gelesen, dass da mehr dahinter steckt als nur ein Verweis, eigentlich handelt es sich dabei ja um eine Funktion/Methode und nicht einfach nur eine Objektvariable.

Auszug aus der Access-Hilfe:
Die CurrentDb-Methode [b][color=red]erstellt eine weitere Instanz[/color][/b] der aktuellen Datenbank, während die Syntax
DBEngine(0)(0) auf die geöffnete Kopie der aktuellen Datenbank verweist.


Jetzt frage ich mich allerdings wozu es gut sein soll, eine weitere Instanz anzulegen.  :-\
Wann bzw. wozu braucht man das?
Freundliche Grüße
MaggieMay

bahasu

Hi,

Zitat von: MaggieMay am November 10, 2015, 14:05:19
Ich habe mal gelesen, dass da mehr dahinter steckt als nur ein Verweis, eigentlich handelt es sich dabei ja um eine Funktion/Methode und nicht einfach nur eine Objektvariable.

Mit currentdb hatte ich Fehlermeldungen wie sie in http://microsoft.public.de.access.narkive.com/iAphsJlq/fehler-3048-mehr-datenbanken-konnen-nicht-geoffnet-werden beschrieben werden.
Die dortige Empfehlung, auf currentdb zu verzichten, war auch in meinem Fall hilfreich und deshalb gebe ich sie hiermit weiter.

Harald
Servus

Beaker s.a.

Hallo,
Oder man verwendet dieses hier:Option Compare Database
Option Explicit

'nach Michael Kaplan

Private m_db As DAO.Database

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

    Set CurrentDbC = m_db

End Property

'Why is this the "CurrentDbC" property proc best? Because it is the
'most generic and handles the most issues and problems. After all, a
'global can be erased if someone hits the code reset button in VBE.
'DBEngine(0)(0) might not be the current db. CurrentDb is expensive if
'called repeatedly. And so on.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)