Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: accessy am August 16, 2013, 10:26:16

Titel: Speichern verhindern mit Cancel = True
Beitrag von: accessy am August 16, 2013, 10:26:16
Ich hatte dieses Anliegen bereits hier angefragt.
http://www.access-o-mania.de/forum/index.php?topic=17812.0

Vielleicht kann man das nur über VBA lösen.

In Excel funktioniert es mit dem
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Cancel = True
End Sub

Das muss man doch irgendwie verhindern können.
Gruß Achim
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: database am August 16, 2013, 10:38:37
Hallo,

nachdem es sich hier nicht um Excel sondern Access handelt, liegt die Sachlage ein wenig anders.

Du kannst den Dialog ausblenden, es handelt sich dabei um einen Access-Standarddialog.
Erzeuge dazu ein Standardmodul und in diesem eine Sub, die du meinetwegen 'Ruhe' benennst.
Schreib in diese Sub ...  DoCmd.SetWarnings False'
Diese Sub rufst du dann entweder über ein AutoExec Makro beim Starten der DB oder durch ein Call Ruhe beim Öffnen des betreffenden Formulars auf.

Änderst du nun die Abfrage und schließt sie wieder, wirst du nicht mehr gefragt ob du speichern willst.
Allerdings wird deine geänderte Sortierung dauerhaft in den Abfrage Eigenschaften unter 'Sortieren nach...' eingetragen.
Die Voreinstellung der Sortierung aus dem Entwurf ist danach nur noch bedingt wirksam!

Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: accessy am August 16, 2013, 19:10:28
Hallo Peter,

ich habe im Modul1

Sub No_Save_Dialog()
  DoCmd.SetWarnings False
End Sub

hinzugefügt.

Ich kann den Call No_Save_Dialog gar nicht einbauen.
Mein Autoexec ist ja kein VBA
Und die Schaltfläche, die die Kreuztabelle startet,
wird über ein Makro gesteuert, dass diese Abfrage öffnet.

Wo, oder wie soll ich denn Call No_Save_Dialog,
bzw. dieses No_Save_Dialog aus der Autoexec aufrufen?

Öffnen Modul
Ausführen Code
Ausführen Makro

Das geht alles nicht.

Gruß Achim
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: bahasu am August 16, 2013, 20:22:30
Hi,

probier mal, aus der sub eine function zu machen.

Public Function No_Save_Dialog() as boolean
 DoCmd.SetWarnings False
End Function

Die läßt sich im Makro aufrufen. Und den Begriff PUBLIC bitte verwenden!

Harald

Nachtrag:
Ist nicht auch "Warnmeldungen" auf false gesetzt im Makro zielführend?
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: accessy am August 16, 2013, 21:04:50
Irgendetwas läuft hier grundsätzlich schief.

So, nun habe ich im Modul 1
aus der SUB eine PUBLIC FUNCTION gemacht.
Aber es hat sich nichts geändert.

Also, in meinem Formular klicke ich auf eine Befehlsschaltfläche.
Diese öffnet die Abfrage und erstellt in der Ansicht Datenblatt eine Kreuztabelle.
Funktioniert prima.
Dieser gesamte Makroablauf unterliegt keinem einzigen VBA Code.

Gehe ich z.B. ins Autoexec, gehe in die 2. Zeile und schreibe bei Aktion z.B.
Makro ausführen hin und will dann unten den Namen "No_Save_Dialog" angeben.....tja, is nich....der wird hier gar nicht gelistet.

Da ich in diesen gesamten Ablauf keinen VBA Code habe,
wo soll ich denn das CALL No_Save_Dialog hinschreiben?

WO oder besser gesagt WIE soll ich die Function No_Save_Dialog aufrufen?

Gruß Achim
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: bahasu am August 16, 2013, 21:27:45
Hi Achim,

siehe Anhang.

Gibt dort zwei Makros:
Das eine ruft die Function aus dem Modul auf: Im unteren Bereich ist der Name der aufzurufenen Funktion manuell einzutragen (inkl "()" ).
Gibt tatsächlich noch Gegebenheiten, in denen microsoft uns offenbart, dass nicht nur die Maus sondern auch die Tastatur wichtig ist  ;D

Das andere Makro benutzt die Makro-Aktion.

Berichte mal, welche hilft.

Harald

[Anhang gelöscht durch Administrator]
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: accessy am August 16, 2013, 23:21:37
Keine der beiden funktionieren.

Ich habe im Autoexec als 2. Zeile
einmal das Ausführen Code eingebaut,

dann mal die andere Lösung mit den Warnmeldungen.
Dennoch bekomme ich in der geöffneten Abfrage bei Änderung der Sortierung die Frage ob ich das Speichern will.

Gruß Achim
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: accessy am August 17, 2013, 10:41:46
Nachtrag.
Nochmal der genaue Ablauf.

Im Formular ist eine Befehlsschaltfläche.
Diese löst ein Makro aus.
In diesem Makro gibt es 2 Aktionen
1. Aktion - Ausführen Code
    Funktionsname - No_Save_Dialog()
2. Aktion - Öffnen Abfrage
    Abfragename - Umsatzvergleich
    Ansicht - Datenblatt
    Datenmodus - Bearbeiten

Hab auch mal die Reihenfolge der beiden Aktionen geändert
Hab auch mal von Bearbeiten auf "Nur Lesen" gestellt.
Hab alle mögliche Versuche im Makro AUTOEXEC probiert.
Hab beide Varianten probiert, also auch     Als Function mit dem VBA Code
und auch mal die Variante im Makro (Warnmeldungen)

Alles Null.... Beim Schließen der Abfrage kommt immer die Frage des Speicherns.

Gruß Achim
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: database am August 17, 2013, 10:42:47
Hallo Achim,

du hast nun in deinem Modul1 den Code...


Sub No_Save_Dialog()
 DoCmd.SetWarnings False
End Sub


...stehen - das ist so korrekt, ändere die Deklaration hier auf 'Public Sub ...' !

in das Ereignis - 'Beim Laden' jenes Formulars, auf dem sich der Button für die Kreuztabellenabfrage befindet schreibst du:


Private Sub Form_Load()

   Call No_Save_Dialog

End Sub


Dann wird das 'SetWarnings False' jedesmal ausgeführt, wenn das Formular geöffnet wird - und nur dann!
In der Folge sollte dann keine Rückfrage erscheinen, wenn du an der Sortierung deines Abfrageergebnisses was änderst.
Versuch' das mal, ich kann mir nicht vorstellen, dass das nicht funktioniert.
Im Anhang findest du eine kleine TestDB - öffne die und öffne dann die darin enthaltene Abfrage.
Ändere dann die Sortierung einer der Spalten und schließe die Abfrage - der Dialog zum Speichern erscheint. Bestätige mit NEIN.
Dann öffne das Formular - lass dich nicht von etwaigen Fehleranzeigen bei einem der Formularfelder irritieren  ;D

Schließe dann das Formular und versuch' dich nochmals an der Abfrage - es wird kein Dialog mehr angezeigt.

Welche Access-Version hast du in Verwendung? (interessenshalber)



[Anhang gelöscht durch Administrator]
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: accessy am August 17, 2013, 10:55:10
Ich habe Access 2003 im Einsatz.

Ich habe den Call Befehl mal ins
Form_Load
und danach mal ins
Form_Open
eingebaut.

Hilft beides nichts. Ich öffne die Abfrage und lasse die Kreuztabelle in irgendeiner Spalte sortieren.
Klick aufs Kreuz oben rechts in der Abfrage und schon kommt die Frage des Speicherns.

Gruß Achim
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: database am August 17, 2013, 10:57:25
Hi,

ich habe zur Demo in meinen vorigen Beitrag eine TestDB nachgeladen - bitte auch den Beitrag nochmals GENAU lesen!
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: accessy am August 17, 2013, 11:11:27
Ich muss sagen, dass es immer verwirrender wird.

Das ist jetzt der Stand der Dinge:
Private Sub Form_Load()
   Call No_Save_Dialog
End Sub

Und im Modul1 steht
Public Sub No_Save_Dialog()
  DoCmd.SetWarnings False
End Sub

Es bleibt dabei, die Frage nach dem Speichern erscheint wieder.
Habe ich noch was wichtiges übersehen?

Gruß Achim
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: database am August 17, 2013, 11:14:35
Hallo,

ZitatIch muss sagen, dass es immer verwirrender wird

Da stimme ich dir zu!  ;)

Kannst du eine abgespeckte Version hochladen - nur die beteiligten Tabellen, das Formular, die Abfrage und das Modul - ich würde das gerne mal anschauen
Hast du meine TestDB ausgeführt?
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: accessy am August 17, 2013, 11:36:42
Die TestDB ausgeführt?
Ja, aber da passiert nix. Sind ja auch nur die beiden Makros drin.

Hochladen?
Oh je, ich habe vor kurzem mit Hilfe eines Bekannten seinen Ratschlag umgesetzt,
die Tabellen und die Formulare in 2 DB zu trennen. Also alles nur noch Verknüpfungen.
Bin froh, dass meine DB so läuft.
Ich mache nach der kleinsten Änderung/ Eintrag sofort eine Sicherungskopie der DB; also aller Teile der DB.
Man weiß ja nie...

Ich hab das schon mal versucht etwas hochzuladen.
Das ging irgendwie alles schief. DB war viel zu groß, etc...

Also wenn das nicht geht (bei mir nicht geht) mit dem Abschalten; na ja, dann ist dem halt so. Pech gehabt.
Hauptsache die DB funktioniert.

Aber schade ist es dennoch. In Excel ist das so einfach, in Access... naja.....
Auf jeden Fall danke ich euch allen für die vielen Hinweise dazu.

Gruß Achim
Titel: Re: Speichern verhindern mit Cancel = True
Beitrag von: database am August 17, 2013, 11:43:52
Hallo,

Zitat
Die TestDB ausgeführt?
Ja, aber da passiert nix. Sind ja auch nur die beiden Makros drin.

Ja ausgeführt, nach meiner Beschreibung um den Unterschied zu sehen.

Nö, Makros sind da gar keine drin sondern 2 Zeilen Code  ;)