Supportnet Computer
Planet of Tech

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

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

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

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

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


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

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?


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

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

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

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

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

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

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



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?



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

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


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: