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
Hallo,
einfach so:
30 CurrentDb.Execute "qryLoeschAbfrage_1", dbFailOnError
40 CurrentDb.Execute "qryLoeschAbfrage_2", dbFailOnError
50 CurrentDb.Execute "qryLoeschAbfrage_3", dbFailOnError
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
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.
@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?
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
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