Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Daten aus verschiedenen Tabellen gleichzeitig sperren

Begonnen von neni, März 30, 2011, 10:10:39

⏪ vorheriges - nächstes ⏩

neni

Hallo

Ich habe folgende Tabellen


Kandidat  1:n  Toxizitätsdetail
               1:n  SNP
               1:n  Haplotype


Es gibt mehre Formulare, in welchen die Daten dieser 4 Tabellen bearbeitet werden können.
Sobald ein Kandidat in einer Studie eingeschlossen wird, sollte an seinen Daten nichts mehr verändert werden können, d.h. die Datensätze aus "Kandidat", "Toxdetail", "SNP" und "Haplotype", welche zu diesem Kandidat gehören, sollten alle gleichzeitig gesperrt sein.  Wie kann ich das machen? Oder muss in jeder Tabelle einzeln gesperrt werden?

PS: ich habe bis anhin noch nie mit sperren gearbeitet, bin also um eine DAU Erklärung dankbar  ;)

database

Hallo,

es wäre eine Möglichkeit, die Steuerelemente der Formulare zu sperren, wenn ein Kandidat die Veraussetzungen erfüllt und so eine Änderung der Daten über Formulare zu verhindern.

Die Prüfung der Voraussetzung würde dann ins Ereignis 'Beim Anzeigen' fallen, das z.B. auch bei einem Datensatzwechsel ausgelöst wird.

Die Änderung auf Tabellenebene wird dadurch jedoch nicht verhindert.

neni

#2
das klingt schon mal gut und würde verhindern, dass jemand sich verklickt.

d.h. ich habe in die Tabelle Kandidat ein Feld "Gesperrt" einfügen, welches man auf ja/nein setzten kann. Jetzt die magische Fragen: wie geht das, (VB null Ahnung... ???) dass ich definieren kann, dass in den entsprechenden Formularen die Daten nur noch angezeigt, aber nicht mehr bearbeitet werden können, wenn dieses Feld auf ja steht?

database

Hallo,

.... unabhängig davon wie die Information, dass sich ein Kandidat in einer Studie befindet, in die Datenbank gelangt ...

Wie du richtig bemerkt hast KÖNNTEST du (auch) ein Feld dazu verwenden.
Das Feld muss dann auf den Formularen vorhanden sein (Sichtbarkeit auf NEIN stellen) um den Inhalt auszulesen.
Wenn du dazu eine Checkbox einsetzt und in der Tabelle ein Ja/nein Feld dann ...

Private Sub Form_Current()

    If Me.AenderungSperren = True Then
        Me.AllowEdits = False
    Else
        Me.AllowEdits = True
    End If

End Sub


neni

#4
irgendwie funktioniert es nicht...

Ich habe ein Feld "Looked" in der Tabelle Kandidat mit ja/nein erstellt und dies ins Formular als Kontrollkästchen eingefügt und im Formular unter "Beim Anzeigen" die Ereignisprozedur

Private Sub Form_Current()
If Me.Looked = True Then
Me.AllowEdits = False
Else
Me.AllowEdits = True
End If
End Sub

eingefügt. Gespeichert, Formular erneut in diesem Kandidat geöffnet: Ich kann aber nach wie vor die Felder im Formular mutieren...  ???

DF6GL

Hallo,


ich lese weiter unten, dass das Feld "Gesperrt"  heißt  und nicht "Looked" ...

Hast Du in Feld auch den Haken gesetzt?  Weiterhin ist für die sofortige Wirkung noch diese Ereignisprozedur nötig.


Private Sub Looked_Afterupdate()
Me.AllowEdits = not Me!Looked
End Sub


neni

Feld heisst jetzt definitiv "Looked". Ja, Häkchen ist gesetzt und die weitere Prozedur eingefügt, nutzt aber immer noch nichts, die Felder  können weiter mutiert werden... Muss ich irgendwo noch eine Einstellung ändern?

DF6GL

Hallo,


1) Gibt es das Feld "Looked" in der Tabelle, an das das Form gebunden ist (--> Datenherkunft) , als Ja/Nein-Feld?
2) Gibt es im Formular ein Kontrollkästchen, das "Looked" heißt und an das Tabellenfeld "Looked" gebunden ist (-->  Steuerelementinhalt) ?
3) Steht in der Eigenschaftenzeile "Nach Akualisierung" des Formular-Kontrollkästchens "[Ereignisprozedur]" drin?
4) Steht in der Eigenschaftenzeile "Beim Anzeigen" des Forms "[Ereignisprozedur]" drin?



Setze einen Haltepunkt an den Anfang der Form_Current-Prozedur und teste, ob der Code überhaupt und richtig durchlaufen wird.


Setze in JEDEN(!) Modulkopf die Zeile
Option Explicit
ein.

Kompiliere den Code (VBA-Editor/Menüleiste/Debuggen/Kompilieren)

database

#8
Hallo,

ich habe dir zu Demonstrationszwecken ein kleines Beispiel erstellt.  ;)
Daran kannst du sehen wie die Sperre funktioniert.
Die Code-Erweiterung von Franz habe ich mit aufgenommen und ein bisschen abgeändert/erweitert, sodass der Sperr-Effekt gleich eintritt, wenn du den Haken setzt.
Zurücknehmen kannst du eine im Beispiel gesetzte Sperre nur noch in der Tabelle und nicht mehr am Formuar.

Bei meinem ersten Vorschlag bin ich davon ausgegangen, dass das Setzen der Sperre NICHT in den Formularen der Kandidaten erfolgt sondern in einem anderen (wo eben die Bestimmung zur Teilnahme an einer Studie stattfindet). Meine Annahme war weiter, dass die so gekennzeichneten Datensätze bereits in den Formularen der Kandidaten enthalten wären weshalb ich keine Aktualisierung vorgeschlagen habe und die Checkbox verborgen hätte.



[Anhang gelöscht durch Administrator]

neni

#9
hi peter und DF6GL

vielen dank für eure hilfestellung! aber irgendwie bin ich furchtbar renitent...
@peter: ich hab dein beispiel geöffnet, doch selbsts da kann ich die gesperrten werte (z.b. max) im formular löschen/mutieren. den code in meine db kopiert ergibt das selbe: ich kann immer mutieren, egal, ob das häkchen gesetzt ist oder nicht. (gibt es so was wie ein almighty berechtigungs knopf, den ich unabsichtlich mal aktiviert habe  ???  ;D )

@DF6GL: ich hab alle deine punkte kontrolliert und soweit ich sehen kann, ist alles, wie es sein sollte...  nun eine ganz dumme frage: kann es an dem Me. liegen?

grüsse
neni

[Anhang gelöscht durch Administrator]

DF6GL

Hallo,

kann nichts Ungewöhnliches erkennen...


Lad die DB hier (vorher komprimiert/repariert  und gezippt) mal hoch...


An dem "Me" liegt das nicht, das ist der Verweis auf das Form(objekt) , in dem der Code sich befindet.

neni

#11
hab das problem gefunden! (wildes rumklicken führt manchmal zum ziel  ::) )

wenn ich die db öffne, ist immer unter der Menuliste eine Leiste mit "Sicherheitswarnung". Wenn ich nun dort unter "Optionen" "diesen Inhalt aktivieren" auswähle, dann funktioniert das sperren Häkchen plötzlich und nix is mehr mit mutieren (also doch eine Art allmighty knopf  ;D )

ich musste erst im vertrauenszenter  "alle Makros aktivieren" auswählen... dies ist nun aber eine generelle Access einstellung und nicht spezifisch für meine DB gesetzt, was schlecht ist.  (wenn irgend ein mitarbeiter auf einem neuen rechner die DB öffnet, ist das makro hinter dem sperren häkchen wieder nicht aktiv und er könnte unabsichtlich daten mutieren, welche eingentlich gesperrt wären...) kann ich das anders lösen? -> es müssten einfach nur in dieser DB alle makros standardmässig aktiviert sein

DF6GL

Hallo,

da bist Du auf das neue Sicherheitskonzept von >=A2007 gestoßen.  Lies Dich mal in die "vertrauenswürdigen Speicherorte" in diesem Zusammenhang ein.


Unterbinden kannst Du die "Mutationen" beim Start der DB ja dadurch , indem Du im Formentwurf die Eigenschaft "Bearbeitungen zulassen" (AllowEdits) gleich auf Nein stellst und das Setzen des "Hakens" erst die Änderungen erlaubt

database

Hallo,

Zitatund das Setzen des "Hakens" erst die Änderungen erlaubt

Bedeutet dann natürlich auch, dass die Benutzer auf ihren Rechnern die Einstellungen für Makros trotz
Allem ändern müssen, da ansonsten eine Erlaubnis zum Ändern nicht erteilt werden kann.
Ggf. ist hierbei die Verwendung einer dig. Signatur interessant?

:D ;D
Zitatwildes rumklicken führt manchmal zum ziel
ja, manchmal - lesen ist da viel treffsicherer  ;) ;) ::)

neni

#14
vielen Dank!