PDA

Vollständige Version anzeigen : Access kommt mir immer zuvor


Lalle
14.02.2001, 12:21
Hallo,
wenn in meinem Formular alle Felder außer dem Primärschlüsselfeld ausgefüllt werden und man dann versucht, das Formular auf eine andere Art als über die dafür vorgesehene Schaltfläche zu schliessen, kommt sofort immer die Meldung "Null-Wert in Index oder Primärschlüssel nicht möglich". Das ist ja nicht so schlimm, diese kann ich ja unterbinden, aber anschließend kommt auch immer die Meldung "Sie können dieses Objekt nicht speichern....", bei der der Benutzer wählen kann zwischen, abbrechen oder Formular schliessen. Eigentlich habe ich diese ganze Sache auch abgefangen, dass man nicht anders als über die Schaltflächen aus dem Formular herauskommt, diese Prüfung habe ich ins ENTLADEN-Ereignis des Formulars gepackt, aber trotzdem kommt die ACCESS-Meldung meiner Prüfung immer zuvor !! WARUM ???

Heathen
14.02.2001, 13:34
Hallo,
schreib doch einfach:

Private Sub Form_Error(DataErr As Integer, Response As Integer)

Response = acDataErrContinue
' so werden ALLE Access-Fehlermeldungen unterdrückt,das Formular schließt sich.
' Du kannst aber auch mit Err.Raise eine eigene Fehlermeldung generieren oder eine MsgBox erscheinen lassen

End Sub

Lalle
14.02.2001, 14:09
Ich habe doch geschrieben, dass sich die erte Fehlermeldung ja unterbinden lässt, aber mich das nicht weiterbringt, denn die nachfolgende Meldung lässt sich nicht unterbinden, und es ist ja auch nicht Sinn der Sache FehlerMELDUNGEN einfach nur zu unterdrücken. Ich möchte einfach nur access zuvor kommen mit meiner Plausibilitätsprüfung !!!!

MSchmidgall
14.02.2001, 16:19
Hallo Lalle,
wie soll Access deinen Datensatz speichern, wenn du den Primärschlüssel nicht eingetragen hast. Denn dies ist die einzige Eintragung, die bei jedem Datensatz vorhanden sein MUSS. Ich habe mir diese Eingabe über ein "nicht sichtbares" AutoWert-Feld erspart. Denn Primärschlüssel heisß ja, daß über dieses Feld dieser Datensatz unverwechselbar wird, doch wie soll Access in einem leeren Feld einen Unterschied feststellen.

Mike
14.02.2001, 16:38
versuch's mal auf diese Art:Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Me!PSchlüssel) Then
MsgBox "Der Primärschlüssel ist noch nicht eingetragen!"
Me!PSchlüssel.SetFocus
Cancel = True
End If
End SubMike

MSchmidgall
14.02.2001, 16:48
Hallo Lalle,
wie soll Access deinen Datensatz speichern, wenn du den Primärschlüssel nicht eingetragen hast. Denn dies ist die einzige Eintragung, die bei jedem Datensatz vorhanden sein MUSS. Ich habe mir diese Eingabe über ein "nicht sichtbares" AutoWert-Feld erspart. Denn Primärschlüssel heisß ja, daß über dieses Feld dieser Datensatz unverwechselbar wird, doch wie soll Access in einem leeren Feld einen Unterschied feststellen.

Lalle
14.02.2001, 18:52
Ich glaube, ich habe micht nicht richtig ausgedrückt !!
Was ich eigentlich will ist, verhindern, dass der Benutzer das Formular nicht über MEINE Schaltflächen schließt, sondern z.B. durch Betätigen des Kreuzes oben rechts oder von mir aus auch ALT+F4. Ich will nichts speichern oder das Primärschlüsselfeld füllen oder so. Ich möchte einfach, dass es dem Benutzer nicht möglich ist.
Um das zu bewerkstelligen habe ich ein Kontrollkästchen in mein Formular eingefügt, dass gefüllt wird, wenn die Speichern oder Abbrechen-Schaltflächen (die ich erstellt habe) gedrückt werden. Beim Entladen-Ereignis gucke ich nun, ob das Kontrollkästchen gefüllt ist oder nicht. Wenn nicht, dann heisst das, dass der Anwender das Formular "anders" verlassen will. Dann mache ich einfach DOCMD.CANCELEVENT und das SChliessen wird verhindert. Das klappt wunderbar. NUR wenn jetzt der Benutzer ein Feld füllt, dass nicht das Schlüsselfeld ist, und er dann das Formular "anders" schliessen will, meckert ACCESS natürlich das fehlende Schlüsselfeld an (der Grund ist mir durchaus bekannt) und das leider bevor meine Prüfunf des Kontrollkästchens erfolgt, das eigentlich ja das Schliessen (und somit auch das Speichern) verhindern soll.

Ich hoffe, es ist jetzt klarer, wo mein Problem liegt ! Falls sich jetzt überhaupt noch jemand diesen Text durchliest !!!

Danke für die Hilfe !!!

Mad
14.02.2001, 19:08
Probier, ob deine Abfrage "Vor Aktualisierung" nicht besser platziert wäre als "Beim Entladen".
Gruß, Dietmar

Lalle
14.02.2001, 19:13
Leider nicht, denn es geht ja darum zu verhindern, das der Benutzer das Formular schliesst (auf eine andere Art) und nicht um das Verhindern der Speicherung !!!

holgii
14.02.2001, 20:43
Hallo Lalle,

hier ein kurzer Auszug aus der Access-Online-Hilfe, der Dir nützlich sein könnte...

Speichern eines Datensatzes

Microsoft Access speichert den gerade hinzugefügten oder bearbeiteten Datensatz automatisch, sobald Sie die Einfügemarke auf einen anderen Datensatz bewegen, oder sobald Sie das Formular oder Datenblatt, an dem Sie gerade arbeiten, schließen.

Mein Tip, probier' den einen oder anderen der hier geposteten Vorschläge aus.

Gruß
holgii

Mike
15.02.2001, 09:39
Ja, warum setzt du dann nicht einfach die Formular-Eigenschaft 'Schließen Schaltfläche' auf NEIN. Dann stellt sich dein Problem doch gar nicht erst?!

Lalle
15.02.2001, 09:50
Mike: Wie glücklich wäre ich, wenn es so einfach wäre.
Erstens kann der Benutzer dann immernoch über Alt+F4 das Formular verlassen und zweitens ist die Schliessen-Schaltfläche leider nicht weg, wenn man es in den Eigenschaften angibt, weil die Menüleiste auch noch eine Schliessen-schaltfläche enthält.
Aber mittlerweile hat sich mein Problem erledigt, danke Euch allen für die Hilfe !!

Sonja Reindl
03.05.2001, 07:51
Hallo Lalle,

Du hast geschrieben, dass sich Dein Problem gelöst hat. Da ich mich auch schon des öfteren mit dem Problem "Schließen" herumgeplagt habe, aber bisher noch keine zufriedenstellende Lösung gefunden habe, würde mich interessieren, wie Du es jetzt gelöst hast.

Kannst mir gerne auch direkt mailen
sonja.reindl@ingolstadt.de

Danke

Birgit Dannenberg
03.05.2001, 08:02
Hallo Lalle,

ich denke, das Thema könnte folgendermaßen beendet werden:

wenn Du nicht willst, daß ein unvollständiger Datensatz gespeichert wird, mußt Du die Eingaben mit UNDO (o.ä.) rückgängig machen oder den Benutzer zwingen, das fehlende Feld zu ergänzen, bevor Du weiter Daten eingeben läßt oder das Formular schließt.
Du kannst auch das BeforeUpdate-Ereignis (mit Cancel-Möglichkeit) einsetzen.

So einfach ist das!

A.S.
03.05.2001, 08:23
Zum Thema "Unterdrücken der vorzeitigen Beendigung der Datenbank bzw. des Formulares" lässt sich das Thema

<a href="http://www.donkarl.com/FAQ/FAQ1Grundlagen.htm">FAQ 1.12 Schliesen der Datenbank verhindern</a>

natürlich auch auf ein einzelnes Formular ummünzen.

HTH

Arno