PDA

Vollständige Version anzeigen : AllowEdits = False in Form ohne Wirkung


MichaH
19.04.2011, 14:15
Hallo Zusammen,

ich habe hier ein merkwürdiges Verhalten in einer Form:

In der Entwurfsansicht sind die Eigenschaften:

AllowEdits
AllowAdditions
AllowDeletions


alle auf false gesetzt. Trotzdem können in der "normalen" Ansicht Änderungen vorgenommen werden. Selbst wenn ich die Eigenschaften im Form_open nochmal explizit setze, ändert sich nichts.

Hat jemand 'ne Idee, woran das liegt?

Danke für Eure Tipps!

Michael

Thomas Möller
19.04.2011, 14:20
Hallo Michael,

kannst Du mal eine Kopie Deiner Datenbank nur mit dem Formular und der zugehörigen Tabelle hier hochladen. Dann kann man sich das mal anschauen.

CU

MichaH
19.04.2011, 15:01
Hallo Thomas,

hab' auf die schnelle 'was gestrickt (quick and dirty), denn das ganze Project ist recht groß. Wenn Du die Form "F_Hebezeuge" öffnest, kannst Du beliebige Eingaben machen, trotz AllowEdits = false.

Interessant ist allerdings Folgendes: im unteren Bereich der Form findet sich unter anderem ein Button (der mit dem Bleistift), der das Ändern ermöglichen soll. Nutzt man diesen und speichert oder bricht ab (z.B. mit dem Button mit der Diskette), dann ist die Form plötzlich "AllowEdits = false". Was sie ja auch sein soll ...

FW
19.04.2011, 15:10
... so ist das eben mit Software, die man/frau nicht selbst entwickelt hat, plötzlich passiert da etwas.
Du solltest vielleicht mal den Code scannen, ob dort irgendwo der Wert dieser Eigenschaft(en) geändert wird...

MichaH
19.04.2011, 15:11
hat er schon gemacht ...

;-)

Thomas Möller
19.04.2011, 19:56
Hallo Michael,

hab' auf die schnelle 'was gestrickt (quick and dirty), denn das ganze Project ist recht groß. Wenn Du die Form "F_Hebezeuge" öffnest, kannst Du beliebige Eingaben machen, trotz AllowEdits = false.

das Problem ist, dass Du im Form_Current-Ereignis die Prozedur "typ_beruecksichtigen" aufrufst. Dort änderst Du per VBA den Wert eines oder mehrer Steuerelemente, z.B. so:

Me.Rahmen_bauform = -1

Durch diese Aktion wird das Formular "Dirty" und weitere Daten können somit geändert werden.

Ich habe mir jetzt nicht die Mühe gemacht, den gesamten Code und den Ablauf durchzugehen um zu verstehen, warum Du die Werte-Änderung im Form_Current-Ereignis durchführst. Wenn Du die entsprechenden Zeilen wegläst, wird Dein Formular wie gewünscht funktionieren.

HTH

MichaH
20.04.2011, 06:07
Guten Morgen Thomas,

danke für Deine Hilfe. Ich hatte inzwischen auch die von Dir angesprochene Prozedur als "Übeltäter" lokalisiert. Da muss ich mir noch 'was einfallen lassen ...

Danke nochmal

Michael

Thomas Möller
20.04.2011, 06:36
Hallo Michael,

danke für Deine Hilfe. Ich hatte inzwischen auch die von Dir angesprochene Prozedur als "Übeltäter" lokalisiert. Da muss ich mir noch 'was einfallen lassen ...

vielleicht erklärst Du mal kurz, warum Du im Form_Current-Ereignis die Datensätze änderst.

CU

MichaH
20.04.2011, 07:17
Du drückst mich mit der Nase auf den Fehler ;-)

Ich erkläre 'mal etwas zur Funktion. Der Form zu Grunde liegt eine Tabelle, die Informationen zu Hebezeugen beinhaltet. Diese sind nicht alle gleich (unterschiedliche Typen). Je nach Typ sollen bestimmte Merkmale ausgefüllt werden oder nicht. Hat ein bestimmtes Hebezeug ein Merkmal nicht (z.B. Rahmen_bauform), so soll der Wert automatisch "-1" sein.

Und da liegt dann auch mein Fehler. Das Anpassen des Wertes muss natürlich nicht beim Anzeigen (form_current) erfolgen. Dies geschieht bei der Eingabe bzw. Änderung eines Datensatzes.

Entstanden ist der Fehler, weil ich die sub "typ_beruecksichtigen", bei unterschiedlichen Ereignissen aufrufe, zunächst bei Änderungen des Hebezeugtyps -da geht die Änderung des Wertes eines Datensatzes in Ordnung- aber eben auch beim Anzeigen, was das nicht erwartete Verhalten verursacht.

Gruss
Michael

gpswanderer
20.04.2011, 08:08
Hallo,
Hat ein bestimmtes Hebezeug ein Merkmal nicht (z.B. Rahmen_bauform), so soll der Wert automatisch "-1" sein.Hier würde ich auch das Datenmodell verändern.
Die Zuordnung der Merkmale sollten in einer extra Tabelle erfasst werden. Als n:m Beziehung und nicht als Ja/Nein Feld. Die Auswahl der zutreffenden Merkmale erfolgt dann mit einem Kombi aus einer Tabelle die alle möglichen Merkmale als Datensatz enthält.
Das wäre viel flexibler, da die Merkmale jederzeit in der Tabelle erweiterbar/änderbar sind. In der Tablle mit den Merkmalen stehen diese auch im Klartext. Z.B. "Rahmen Bauform".

Frank200
20.04.2011, 08:48
Hallo,
ich möchte mal kurz auf Thomas' Bemerkung in #6 zurückkommen.
... Dort änderst Du per VBA den Wert eines oder mehrer Steuerelemente, z.B. so:

Me.Rahmen_bauform = -1

Durch diese Aktion wird das Formular "Dirty" und weitere Daten können somit geändert werden...

Eventuell verstehe ich Thomas falsch. Aber für mich liest sich dies, als würde durch Änderung eines Wertes via VBA die AllowEdits=False Eigenschaft geändert oder außer Kraft gesetzt. Stellt Dirty die AllowEdits-Eigenschaft um?

Nebenbei: Rahmen_bauform ist sicher ein Control und keine Property. Sollte Me!Rahmen_bauform dann nicht besser sein?

Josef P.
20.04.2011, 09:03
Hallo!

Aber für mich liest sich dies, als würde durch Änderung eines Wertes via VBA die AllowEdits=False Eigenschaft geändert oder außer Kraft gesetzt.

Das trifft auch zu. Die Eigenschaft AllowEdits bleibt zwar auf false, man kann aber trotzdem Werte in die Steuerelemente eintragen.
Das ist aber nur möglich solange Dirty auf True steht.

Ich nehme an, dass Me.AllowEdits nicht das Ändern generell verhindert sondern nur das Wechseln in den "Dirty-Modus".

Nebenbei: Rahmen_bauform ist sicher ein Control und keine Property. Sollte Me!Rahmen_bauform dann nicht besser sein?
Dazu gibt es unterschiedliche Meinungen. ;)
Ich bin ein Freund von Earlybinding mit Me.SteuerelementName (=Formulareigenschaft), da mir dann der Compiler hilft, falls mein Code nicht stimmt (weil z. B. das Steuerelement gelöscht wurde).

Me!SteuerelementName ist die Kurzform von Me.Controls.Item("SteuerelementName") und entsrpicht late binding, da erst zur Laufzeit (beim Erreichen der Codezeile) der Zugriff auf das Steuerelement passiert.

Zu diesem Thema findest du bestimmt eine Menge Diskussionen mit Google & Co.

mfg
Josef

Frank200
20.04.2011, 09:40
Danke Josef