Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: joschi50 am Juli 29, 2023, 13:24:52

Titel: VBA warten lassen bis Aktionen abgearbeitet sind
Beitrag von: joschi50 am Juli 29, 2023, 13:24:52
Die folgende Funktion ruft einige Ereignise auf:
Function export()
DoCmd.SetWarnings False
Call importlöschen   'löscht Einträge in 2 Tabellen einer externen Datenbank
CurrentDb.Execute "exportre"    'kopiert Einträge in eine Tabelle einer externen DB
CurrentDb.Execute "exportrea"  'kopiert Einträge in eine Tabelle einer externen DB
CurrentDb.Execute "exportreok" 'löscht Eintrage aus Tabelle in CurrentDB
Call importrename ' benennt die externe DB mit Zeitstempel um
Call datenaustausch ' Erzeugt ein Email mit Anhang der externen DB
DoCmd.SetWarnings True
End Function

Gibt es eine Möglichkeit sicherzustellen, dass alle Schritte vollständig abgearbeitet werden, bevor der nächste Schritt erfolgt ?
Access ist da teilweise schneller als mir lieb ist.
Titel: Re: VBA warten lassen bis Aktionen abgearbeitet sind
Beitrag von: Beaker s.a. am Juli 29, 2023, 13:33:05
Suche nach "Transaktion".
Titel: Re: VBA warten lassen bis Aktionen abgearbeitet sind
Beitrag von: MzKlMu am Juli 29, 2023, 13:52:34
Hallo,
Hinweise zum Code:
Im Zusammenhang mit Execute sind die beiden Zeilen mit SetWarnings überflüssig.
Mit CurrentDb.Execute werden keine Warnmeldungen ausgegeben. Nur Fehlermeldungen (ist was anderes als Warnungen).
Die Fehlermeldungen müssen aber extra eingeschaltet werden, was man unbedingt machen sollte.
Das sieht dann so aus:
CurrentDb.Execute "exportre", DbFailOnError
Titel: Re: VBA warten lassen bis Aktionen abgearbeitet sind
Beitrag von: joschi50 am Juli 29, 2023, 14:31:59
ok danke, der Aufruf für Fehlermeldungen ist drin aber die Suche nach "Transaktion" hat mich nicht wirklich weiter gebracht.
Titel: Re: VBA warten lassen bis Aktionen abgearbeitet sind
Beitrag von: markusxy am Juli 29, 2023, 14:55:06
Zitat von: joschi50 am Juli 29, 2023, 13:24:52dass alle Schritte vollständig abgearbeitet werden, bevor der nächste Schritt erfolgt ?

Grundsätzlich arbeitet Access ja nicht asynchron.
Bei welchem Schritt gibt es denn ein Problem?
Und nicht nur den Aufruf einer Prozedur/Funktion zeigen sondern auch den Code dazu.

Titel: Re: VBA warten lassen bis Aktionen abgearbeitet sind
Beitrag von: joschi50 am Juli 29, 2023, 15:15:58
Markus, ich habe jetzt erstmal eine MSGBOX nach Ausführung der Aktionsabfragen eingebaut. So kann ich sicher sein, dass diese abgearbeitet sind bevor die Datei umbenannt wird.
Der ausführende Code funktioniert ansonsten problemlos.
In der aktuellen Anwendung habe ich das Problem noch nicht da die Menge der Datensätze die kopiert und gelöscht werden sehr klein sind.
Es ist einfach eine Sicherheit die ich einbauen wollte.

Eine Frage hätte ich noch, hängt indirekt mit dem Thema zusammen.
Kann man die Zieldatei in den Eigenschaften der Aktionsabfrage (z.B. Anfügeabfrage) zur Laufzeit per VBA ändern ?
Titel: Re: VBA warten lassen bis Aktionen abgearbeitet sind
Beitrag von: MzKlMu am Juli 29, 2023, 16:32:42
Hallo,
zu Transaktion:
https://codekabinett.com/rdumps.php?Lang=1&targetDoc=access-transaktion-verwenden

ZitatKann man die Zieldatei in den Eigenschaften der Aktionsabfrage (z.B. Anfügeabfrage) zur Laufzeit per VBA ändern ?
Ja, das geht.
Titel: Re: VBA warten lassen bis Aktionen abgearbeitet sind
Beitrag von: markusxy am Juli 29, 2023, 18:34:53
Zitat von: joschi50 am Juli 29, 2023, 15:15:58In der aktuellen Anwendung habe ich das Problem noch nicht da die Menge der Datensätze die kopiert und gelöscht werden sehr klein sind.

Die Menge spielt doch keine Rolle. Auch eine Transaktion ändert da nichts. Der Vorteil der Transaktion, ist dass man bei Problemen alle Datenbank-Änderungen gemeinsam rückgängig machen kann - ansonsten hat das keine Bedeutung - vor allem nicht in diesem Kontext.
Man sollte aber unbedingt mit Transaktionen umgehen können und es verstehen wenn man mit Datenbanken arbeitet.
So lange eine Abfrage nicht asynchron ausgeführt wird, wartet VBA mit der Fortsetzung immer bis der gesamte Vorgang abgeschlossen ist.

Zitat von: joschi50 am Juli 29, 2023, 15:15:58Kann man die Zieldatei in den Eigenschaften der Aktionsabfrage (z.B. Anfügeabfrage) zur Laufzeit per VBA ändern ?

Was willst du denn konkret ändern?
Titel: Re: VBA warten lassen bis Aktionen abgearbeitet sind
Beitrag von: ebs17 am Juli 29, 2023, 19:06:42
ZitatEs ist einfach eine Sicherheit die ich einbauen wollte.
Vielleicht solltest Du auch den Workflow überdenken. Löschen + Neuanlegen sind geeignet, Aufblähungen zu verursachen. Ohne Komprimieren wachsen Deine Datenbanken und verlangsamen einfach durch vorhandene Größe.

Der Verzicht auf unnötige Schritte verringert auch Gedanken auf ein Abwarten dieser.
Für die externe DB könnte man ein Template mit leeren Tabellen einsetzen oder die DB-Kopie voll per Code erzeugen (wenn man wüsste, was sonst noch da zu finden ist).
Titel: Re: VBA warten lassen bis Aktionen abgearbeitet sind
Beitrag von: joschi50 am Juli 30, 2023, 09:13:34
Hallo Eberhard,
die externe Datenbank enthölt nur 2 Tabellen mit wenigen Einträgen. Bevor ich neue Einträge anfüge, leere ich die beiden Tabellen.
DB hat nur ca. 400KB

Zur Frage mit den Eigenschaften der Aktionsabfragen: Ich möchte den Pfad der Zieldatei ändern.

Zum Hintergrund:
Ich arbeite mit einer selbstgestrickten Fakturierung auch von unterwegs (Wohnmobil).
Ein Mitarbeiter zu Hause soll die Aufträge eigentlich nur ausdrucken, Etiketten erzeugen und die Ware verpacken.
Die Rechnungen etc. schreibe ich von unterwegs.
Er erhält dann lediglich eine DB mit den neuesten Aufträgen, importiert sie in die Hauptanwendung und kann mit der Arbeit beginnen.
Wenn ich wieder zuhause bin, überschreibe ich die Hauptanwendung mit meiner Version und damit ist alles wieder auf aktuellem Stand.
Die Hauptanwendung befindet sich zu Hause auf einem Netzlaufwerk. Den Pfad zur Hauptanwendung möchte ich gerne in den Stammdaten hinterlegen damit bei einer anderen Situation (Laufwerkswechsel) der Import ebenfalls funktioniert.
Titel: Re: VBA warten lassen bis Aktionen abgearbeitet sind
Beitrag von: ebs17 am Juli 30, 2023, 13:43:37
Dim ZDB As DAO.Database
Dim ZielDB As String
Dim QuellDB As String

ZielDB = irgendwas
Set ZDB = DBEngine.CreateDatabase(ZielDB, dbLangGeneral)
QuellDB = CurrentDb.Name

ZDB.Execute "SELECT * INTO Tabelle1 FROM [" & QuellDB & "].Tabelle1", dbFailOnError
ZDB.Execute "SELECT * INTO Tabelle2 FROM [" & QuellDB & "].Tabelle2", dbFailOnError
ZDB.Close
CurrentDb.Execute "loeschabfrage", dbFailOnError
Dieser Code erstellt ein neues DB-File. Pfad und Name inkl. Zeitstempel kannst Du sinnvoll vorbelegen.
Anschließend werden per Tabellenerstellungsabfrage die Tabellen kopiert. Danach ein reduziertes Löschen + Mailerstellung.
Titel: Re: VBA warten lassen bis Aktionen abgearbeitet sind
Beitrag von: itwebmaster am Juli 31, 2023, 11:59:28
Zitat von: joschi50 am Juli 29, 2023, 13:24:52Gibt es eine Möglichkeit sicherzustellen, dass alle Schritte vollständig abgearbeitet werden, bevor der nächste Schritt erfolgt ?
bei mir funktioniert DoEvents nach dem Befehl