none
Access 2010 Formulare Schreiben und Lesen von Feldern

    Frage

  • Hallo Experten,

    manchmal will man den User im Bildschirmformular nur lesen lassen, manchmal soll er Felder auch schreiben können.

    Nun gibt es mehrere Möglichkeiten, Lese-Schreib-Zugriff zu regeln:

    1. Im Feld selbst: aktiviert / gesperrt

    2. In der Formulardefinition: Bearbeitungen zulassen

    3. Beim Laden der Form im VBA-Code: z.B. DoCmd.OpenForm ... acFormEdit    (bei Set myForm = New Form... habe ich solch eine Möglichkeit allerdings noch nicht gefunden.)

    Meine Frage: welche der drei oben genannten Methoden "gewinnt"? Wer ist stärker, wenn gegensätzliche Restriktionen angegeben werden? Ein Austesten finde ich extrem aufwändig, da es zu viele Kombinationsmöglichkeiten gibt.

    Beispiel: Manchmal möchte ich die selbe Form mal nur zum Lesen, mal zum Erfassen benutzen. Manchmal habe ich in einem Formular einige Lesefelder und einige Schreibfelder. Was tun?

    Vielen Dank für Tipps!

    Raimund Gryszik, Berlin

    Mittwoch, 9. April 2014 15:50

Alle Antworten

  • Am 09.04.2014 schrieb IT-Designer:

    Nun gibt es mehrere Möglichkeiten, Lese-Schreib-Zugriff zu regeln:

    1. Im Feld selbst: aktiviert / gesperrt

    2. In der Formulardefinition: Bearbeitungen zulassen

    3. Beim Laden der Form im VBA-Code: z.B. DoCmd.OpenForm ... acFormEdit    (bei Set myForm = New Form... habe ich solch eine Möglichkeit allerdings noch nicht gefunden.)

    Beim Form_Current kann man auch Enable/Disable setzen.

    Meine Frage: welche der drei oben genannten Methoden "gewinnt"? Wer ist stärker, wenn gegensätzliche Restriktionen angegeben werden? Ein Austesten finde ich extrem aufwändig, da es zu viele Kombinationsmöglichkeiten gibt.

    Aus dem Bauch raus: Last Writer wins.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Mittwoch, 9. April 2014 16:25
  • Hallo Raimund

    Wenn ich Dich richtig verstehe ist es so, dass sobald eine der "gesperrt" oder "Nur-Lese" eigenschaften gesetzt ist, ist das Control gessperrt. Wenn also das Formular also AllowEditions = False gesetzt hat, sind alle Controls (auch die ungebundenen) für gesperrt. Wenn der Datensatz ein Snapshot ist, dann sind alle gebundenen Controls gesperrt. Wenn ein Control gesperrt ist, dann ist es per Definition ja sowieso gesperrt. Du kannst die übergeordneten Sperren nicht auf dem tiefsten Level deaktivieren. Ein Snapshot bleibt eben nur-lesen und ein Formular ist entweder als ganzes gesperrt oder nicht gesperrt.

    Wenn Du also nur einige Felder entsperren willst, dann musst Du das Formular entsperren und das Recordset hinter dem Formular muss ein Dynaset sein.

    Du kannst allerdings auch per Code z.B. alle Textboxen sperren, indem Du einen Loop über die Controls des Formulars machst, dann den Typen auf acTextBox kontrollierst und falls ja, die Enabled Eigenschaft auf False setzt. Dannach kannst Du dann einzelne Controls für die Bearbeitung freigeben. Mit vernünftiger Benamsung der Controls, kannst Du das wieder über einen Loop machen, oder Du setzt im Control selber einen Tag, den Du dann beim Loop auswertest. Damit wirst Du relativ dynamisch, was das Sperren angeht. Du musst das allerdings eben auf Control Ebene machen.

    Gruss

    Henry


    Freitag, 11. April 2014 09:49
  • Hallo Henry,

    vielen Dank für deine ausführliche Antwort!

    Ich werde es mir heute genauer anschauen, dann antworten, und ich hoffe, dass eventuell verbleibende Unklarheiten dann noch gelöst werden können : )

    Danke

    Raimund

    Mittwoch, 16. April 2014 08:17
  • Hallo Henry,

    ich habe das Ganze jetzt mal auf Basis deiner Ausführungen getestet und bin zu einem Ergebnis gekommen, das man fast in einem Satz zusammenfassen kann (das war meine Absicht):

    Sobald eine der fünf Schreibsperren gesetzt ist, ist das Feld schreibgeschützt. Das sind:

    - docmd.open-Parameter readOnly

    - recordset Snapshot

    - allowEdits=false

    - FeldAktiv=false

    - feldGesperrt=true.

    Mit anderen Worten: nur wenn alle fünf freigeschaltet sind, kann das Feld beschrieben werden.

    Es gibt jedoch eine Ausnahme: wenn man den open-Parameter auf acFormEdit setzt, wird die Eigenschaft AllowEdits=False überschrieben, und die Felder sind offen (sofern sie nicht durch eine andere der fünf Schutzmaßnahmen geschützt sind)

    Danke für Deine Hilfe!

    Raimund

    Mittwoch, 16. April 2014 11:32