Supportnet / Forum / Datenbanken
Meldung unterdrücken?
Frage
Hallo
Ich lasse im Maus-Down Ereignis des Detailbereiches sql-Updates im Hintergrund schreiben. Beim späteren Wert setzen in ein Kontrollkästchen bekomme ich die Meldung, das ein Anderesr Benutzer zwischenzeitlich Daten gespeichert hat, die ich bearbeite. (Was natürlich Quatsch ist) Wie kann ich das unterdrücken?
gruß struppi
Antwort 1 von Koebi
Grüezi Struppi
Hast Du donkarl vergessen??
Hier seine Lösung aus der Access-FAQ, Ziffer 2.4:
P r o b l e m
Bei Aktionsabfragen oder Datensatzänderungen erscheint eine Warnmeldung.
L ö s u n g e n
Diese Meldungen können im Menü Extras/Optionen/BearbeitenSuchen für die ganze mdb ausgeschaltet werden.
Per Code z.B.: Application.SetOption "Confirm Action Queries", False
Wenn die Meldungen nur für eine Aktion per VBA ausgeschaltet werden sollen:
DoCmd.SetWarnings False
Aktion durchführen und danach wieder einschalten mit
DoCmd.SetWarnings True
(in A2 gehört ein Leerzeichen statt dem Punkt nach DoCmd)
Wenn es um Aktionsabfragen geht, gibt es noch eine weitere Möglichkeit, Nachfragen zu verhindern. Man kann statt DoCmd.RunSQL die Execute-Methode verwenden. In der Art:
CurrentDb.Execute ("Name_der_Abfrage_oder_SQL_Statement")
Gruss
Köbi
Hast Du donkarl vergessen??
Hier seine Lösung aus der Access-FAQ, Ziffer 2.4:
P r o b l e m
Bei Aktionsabfragen oder Datensatzänderungen erscheint eine Warnmeldung.
L ö s u n g e n
Diese Meldungen können im Menü Extras/Optionen/BearbeitenSuchen für die ganze mdb ausgeschaltet werden.
Per Code z.B.: Application.SetOption "Confirm Action Queries", False
Wenn die Meldungen nur für eine Aktion per VBA ausgeschaltet werden sollen:
DoCmd.SetWarnings False
Aktion durchführen und danach wieder einschalten mit
DoCmd.SetWarnings True
(in A2 gehört ein Leerzeichen statt dem Punkt nach DoCmd)
Wenn es um Aktionsabfragen geht, gibt es noch eine weitere Möglichkeit, Nachfragen zu verhindern. Man kann statt DoCmd.RunSQL die Execute-Methode verwenden. In der Art:
CurrentDb.Execute ("Name_der_Abfrage_oder_SQL_Statement")
Gruss
Köbi
Antwort 2 von struppi
Hi Köbi
Danke für den Tip, aber mit setWarnings abschalten habe ich es schon probiert.
Meldung kommt trotzdem!
Ich probier mal die Execute - Methode.
Gruß struppi
Danke für den Tip, aber mit setWarnings abschalten habe ich es schon probiert.
Meldung kommt trotzdem!
Ich probier mal die Execute - Methode.
Gruß struppi
Antwort 3 von struppi
Hallo
Das ist mir zu hoch!
Mit Execute kommt auch die Meldung. Aaaaber in beiden Varianten nur wenn ich den 1. Datensatz des Formulares ändere.
Scheinbar stört es Access nur, wenn ich den Datensatz per SQL in der Tabelle Update auf dem sich im Moment meine Formularansicht bezieht.
Was nun?
Gruß struppi
Das ist mir zu hoch!
Mit Execute kommt auch die Meldung. Aaaaber in beiden Varianten nur wenn ich den 1. Datensatz des Formulares ändere.
Scheinbar stört es Access nur, wenn ich den Datensatz per SQL in der Tabelle Update auf dem sich im Moment meine Formularansicht bezieht.
Was nun?
Gruß struppi
Antwort 4 von Koebi
Hallo struppi
Und die Methode bei donkarl, die Meldungen für die ganze DB auszuschalten? Ist halt ein wenig extrem, ich weiss.
Gruss
Köbi
Und die Methode bei donkarl, die Meldungen für die ganze DB auszuschalten? Ist halt ein wenig extrem, ich weiss.
Gruss
Köbi
Antwort 5 von struppi
Hi Köbi
Nein das nicht, aber es funktioniert nicht! Die Meldung kommt trotzdem.
Access meint es schon wieder mal zu gut..!
gruß struppi
Nein das nicht, aber es funktioniert nicht! Die Meldung kommt trotzdem.
Access meint es schon wieder mal zu gut..!
gruß struppi
Antwort 6 von Koebi
Hallo Struppi
Kommt den eigentlich nur die Meldung und werden die Daten trotzdem geschrieben und aktualisiert, oder erfolgt ein Abbruch.
Nicht dass mir jetzt eine Lösung einfallen würde, aber es ist doch sicher ein Unterschied.
Gruss
Köbi
Kommt den eigentlich nur die Meldung und werden die Daten trotzdem geschrieben und aktualisiert, oder erfolgt ein Abbruch.
Nicht dass mir jetzt eine Lösung einfallen würde, aber es ist doch sicher ein Unterschied.
Gruss
Köbi
Antwort 7 von struppi
Nur die Meldung als Info.
Funktionieren tut alles:
--------------------------------------
Die Daten wurden geändert
Ein anderer Benutzer hat diesen Datensatz bearbeitet und die von ihm vorgenommene Änderung gespeichert, bevor Sie versucht haben, Ihre Änderung zu speichern.
Bearbeiten Sie den Datensatz erneut.
--------------------------------------
Ich weiß was was A meint. Bei dem klick ins Kontrollkästchen will es die vorliegenden Daten abspeichern und trifft auf die Änderung.
Das führt zu Verunsicherung und Nachfrage..:-)
und nun?
Funktionieren tut alles:
--------------------------------------
Die Daten wurden geändert
Ein anderer Benutzer hat diesen Datensatz bearbeitet und die von ihm vorgenommene Änderung gespeichert, bevor Sie versucht haben, Ihre Änderung zu speichern.
Bearbeiten Sie den Datensatz erneut.
--------------------------------------
Ich weiß was was A meint. Bei dem klick ins Kontrollkästchen will es die vorliegenden Daten abspeichern und trifft auf die Änderung.
Das führt zu Verunsicherung und Nachfrage..:-)
und nun?
Antwort 8 von PotzBlitz
Hallo struppi,
das MouseDown-Ereignis ist denkbar ungeeignet für Datenaktualisierungen. Du solltest auf jeden Fall versuchen, davon wegzukommen.
Was willst du denn damit überhaupt erreichen?
Gruss
PotzBlitz
das MouseDown-Ereignis ist denkbar ungeeignet für Datenaktualisierungen. Du solltest auf jeden Fall versuchen, davon wegzukommen.
Was willst du denn damit überhaupt erreichen?
Gruss
PotzBlitz
Antwort 9 von struppi
Hi Potzblitz
Ja, ich klicke in mein Formular das einen Lageplan als Hintergrundbild enthält. Die x und y Koordinaten des MouseDown-Ereignisses positionieren daraufhin ein Steuerelement an diese Stelle. Gleichzeitig werden die neuen Koordinaten im Hintergund mit sql-update in einer Tabelle geändert. Damit beim nächsten Aufruf des Formulares alle Steuerelemente automatisch an die letzte Position gesetzt werden.
Die Textfelder sollen Anlagen des Betriebes darstellen.
Ich sehe also einen Lageplan mit Anlagen die schon vom Aussehen Farbe tip-text spezialeffeckt etc beurteilt werden können. Beim klick auf die textfelder verzweige ich zu weiteren Informationen zu den Anlagen.
Um zu positionieren setze ich ein öffentliche Kontrollkästchen auf true.
Wenn das true ist klicke ich diesmal das Steuerelement an wird es als letztes Element erfasst. Beim klick in das Formular wird dieses dann versetzt. Nächstes anklicken---versetzen. Das geht so lange wie das KK auf true steht.
Versetze ich aber das Steuerelement dessen Aussehen auf dem ersten Datensatz beruht und möchte danach das KK auf false setzen kommt diese Meldung!
Was nun?
struppi
Ja, ich klicke in mein Formular das einen Lageplan als Hintergrundbild enthält. Die x und y Koordinaten des MouseDown-Ereignisses positionieren daraufhin ein Steuerelement an diese Stelle. Gleichzeitig werden die neuen Koordinaten im Hintergund mit sql-update in einer Tabelle geändert. Damit beim nächsten Aufruf des Formulares alle Steuerelemente automatisch an die letzte Position gesetzt werden.
Die Textfelder sollen Anlagen des Betriebes darstellen.
Ich sehe also einen Lageplan mit Anlagen die schon vom Aussehen Farbe tip-text spezialeffeckt etc beurteilt werden können. Beim klick auf die textfelder verzweige ich zu weiteren Informationen zu den Anlagen.
Um zu positionieren setze ich ein öffentliche Kontrollkästchen auf true.
Wenn das true ist klicke ich diesmal das Steuerelement an wird es als letztes Element erfasst. Beim klick in das Formular wird dieses dann versetzt. Nächstes anklicken---versetzen. Das geht so lange wie das KK auf true steht.
Versetze ich aber das Steuerelement dessen Aussehen auf dem ersten Datensatz beruht und möchte danach das KK auf false setzen kommt diese Meldung!
Was nun?
struppi
Antwort 10 von struppi
Nachtrag
Ich könnte vielleicht den ersten Datensatz leer lassen und auf diese Weise kein sichtbares Steuerelement erzeugen. Dachte nur es gibt da was Einfacheres!
struppi
Ich könnte vielleicht den ersten Datensatz leer lassen und auf diese Weise kein sichtbares Steuerelement erzeugen. Dachte nur es gibt da was Einfacheres!
struppi
Antwort 11 von struppi
OK, ich habe das Problem erst mal beseitigt, indem ich das Formular jetzt ungebunden öffne und statt Recordsetclone die openrecordset-Methode zum Einlesen der Steuerelemente benutze. Hat aber auch wieder Nachteile..
Fals jemand noch eine Idee hat wäre es schön, diese hier kund zu tun.
Danke struppi
Fals jemand noch eine Idee hat wäre es schön, diese hier kund zu tun.
Danke struppi
Antwort 12 von PotzBlitz
Hallo Struppi,
wenn ich dich richtig verstanden habe, dann hast du ein Kontrollkästchen, dass im Prinzip einen "Verschiebe-Modus" aktiviert und du dann alle Textfelder auf dem Steuerelement durch Klicken verschiebst. Nach jedem Verschieben werden dann die neuen Koordinaten des betroffenen Textfeldes in einer Tabelle gespeichert.
Wenn dem so ist, dann gäbe es zwei Möglichkeiten:
1. Du könntest unmittelbar vor der Ausführung der SQL-Anweisung den aktuellen Datensatz speichern lassen mittels "RunCommand acCmdSaveRecord". Das wäre eine schnelle, aber auch "schmutzige" Lösung, denn damit fällt gleichzeitig auch die Möglichkeit weg, die Änderungen des Datensatzes mit ESC wieder rückgängig zu machen. So könntest du aber deine bisherige Verfahrensweise beibehalten.
2. Die andere Möglichkeit wäre, die Koordinaten der jeweiligen Steuerelemente zwischenzuspeichern, bis sie später endgültig gespeichert werden. Wenn du nur ein Steuerelement hättest, dann könnte man die Koordinaten über im Modul deklarierte Variablen speichern und beim Beenden des Formulars bzw. nach Aktualisierung des Datensatzes in die Tabelle schreiben. Da du aber mehrere Steuerelemente hast, würde sich eine Klasse anbieten, die in einer Auflistung die Koordination für jedes Steuerelement speichert. Das Handling dieser Auflistung wäre dann jeder anderen, access-eigenen Auflistung ähnlich, z.B. der Fields-Auflistung von Tabellen. Wenn du daran interessiert bist, könnte ich so ein Grundgerüst für dich auf die Beine stellen.
Gruss
PotzBlitz
wenn ich dich richtig verstanden habe, dann hast du ein Kontrollkästchen, dass im Prinzip einen "Verschiebe-Modus" aktiviert und du dann alle Textfelder auf dem Steuerelement durch Klicken verschiebst. Nach jedem Verschieben werden dann die neuen Koordinaten des betroffenen Textfeldes in einer Tabelle gespeichert.
Wenn dem so ist, dann gäbe es zwei Möglichkeiten:
1. Du könntest unmittelbar vor der Ausführung der SQL-Anweisung den aktuellen Datensatz speichern lassen mittels "RunCommand acCmdSaveRecord". Das wäre eine schnelle, aber auch "schmutzige" Lösung, denn damit fällt gleichzeitig auch die Möglichkeit weg, die Änderungen des Datensatzes mit ESC wieder rückgängig zu machen. So könntest du aber deine bisherige Verfahrensweise beibehalten.
2. Die andere Möglichkeit wäre, die Koordinaten der jeweiligen Steuerelemente zwischenzuspeichern, bis sie später endgültig gespeichert werden. Wenn du nur ein Steuerelement hättest, dann könnte man die Koordinaten über im Modul deklarierte Variablen speichern und beim Beenden des Formulars bzw. nach Aktualisierung des Datensatzes in die Tabelle schreiben. Da du aber mehrere Steuerelemente hast, würde sich eine Klasse anbieten, die in einer Auflistung die Koordination für jedes Steuerelement speichert. Das Handling dieser Auflistung wäre dann jeder anderen, access-eigenen Auflistung ähnlich, z.B. der Fields-Auflistung von Tabellen. Wenn du daran interessiert bist, könnte ich so ein Grundgerüst für dich auf die Beine stellen.
Gruss
PotzBlitz
Antwort 13 von struppi
Hallo Potzblitz
Da haben wir wohl unseren Beitrag zeitgleich geschickt.
An Deinem 2. Vorschlag würde mich schon die allgemeine Vorgehensweise interessieren. Aber nur wenn es nicht so viel Mühe macht.
Ich kann auch mit der "schmutzigen" Variante leben. :-))
Auf jeden Fall schon mal recht vielen Dank, ich probiere das gleich mal aus!
Danke
struppi
Da haben wir wohl unseren Beitrag zeitgleich geschickt.
An Deinem 2. Vorschlag würde mich schon die allgemeine Vorgehensweise interessieren. Aber nur wenn es nicht so viel Mühe macht.
Ich kann auch mit der "schmutzigen" Variante leben. :-))
Auf jeden Fall schon mal recht vielen Dank, ich probiere das gleich mal aus!
Danke
struppi
Antwort 14 von PotzBlitz
Hallo Struppi,
in Ordnung, ich schreibe dir so eine Klasse, aber erstmal guck ich mir James Bond - Feuerball an, das fängt in fünf Minuten an. :-))
Gruss
PotzBlitz
in Ordnung, ich schreibe dir so eine Klasse, aber erstmal guck ich mir James Bond - Feuerball an, das fängt in fünf Minuten an. :-))
Gruss
PotzBlitz
Antwort 15 von struppi
Hallo Potzblitz
Leider hat auch der schmutzigste Trick versagt....die Meldung kommt egal wo und wann ich speichern lasse.
Ich verstehe nicht das die nicht einfach abschaltbar ist. Wenn ich Warnungen und errors ausblenden kann muß ich doch auch eine Infobox unterdrücken können?
Leider hat auch der schmutzigste Trick versagt....die Meldung kommt egal wo und wann ich speichern lasse.
Ich verstehe nicht das die nicht einfach abschaltbar ist. Wenn ich Warnungen und errors ausblenden kann muß ich doch auch eine Infobox unterdrücken können?
Antwort 16 von PotzBlitz
Hallo Struppi,
ich habe meinen ersten Vorschlag ausprobiert und es lief einwandfrei. Da ich deine Datenbank nicht kenne, kann ich jetzt auch schlecht sagen, ob und wo noch etwas geschrieben wird (evtl. auch von einem Ereignis) oder sonst irgendetwas dazwischen funkt.
Ich habe dir das o.g. Klassenbeispiel erstellt. Wenn du willst, kannst du es von der Download-Seite runterladen, die in meiner Visitenkarte genannt ist. Ich hoffe, das hilft dir weiter. :-)
Gruss
PotzBlitz
ich habe meinen ersten Vorschlag ausprobiert und es lief einwandfrei. Da ich deine Datenbank nicht kenne, kann ich jetzt auch schlecht sagen, ob und wo noch etwas geschrieben wird (evtl. auch von einem Ereignis) oder sonst irgendetwas dazwischen funkt.
Ich habe dir das o.g. Klassenbeispiel erstellt. Wenn du willst, kannst du es von der Download-Seite runterladen, die in meiner Visitenkarte genannt ist. Ich hoffe, das hilft dir weiter. :-)
Gruss
PotzBlitz
Antwort 17 von struppi
Hallo Potzblitz
Das ging ja blitzartig..
Recht vielen Dank schon mal für Deine Mühe.
Ich werde heute noch nicht dazu kommen mir Alles anzusehen. Morgen...
gruß struppi
Das ging ja blitzartig..
Recht vielen Dank schon mal für Deine Mühe.
Ich werde heute noch nicht dazu kommen mir Alles anzusehen. Morgen...
gruß struppi

