PDA

Vollständige Version anzeigen : Datensatz sperren?


Kuli139
28.08.2009, 08:31
Hallo,

ich habe bisher über den Arbeitsgruppenadministrator verhindert das alte Datensätze noch einmal verändert werden können. Nun habe ich einige Formulare in denen Unterformulare enthalten sind. Wenn ich dort das Hauptformular verlasse und im Unterformular eingaben mache wird der Datensatz im Hauptformular gesperrt. Gibt es eine Möglichkeit am Ende des Formulars einen Button einzufügen der den Datensatz Haupt- und Unterformulare "speichert" und für weitere Veränderungen sperrt?

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.

ZeC
28.08.2009, 08:47
Ich hoffe ich habe dich richtig verstanden.
Wenn du willst das der Datensatz nicht mehr verändert wird, mach doch einfach in der Tabelle ein weiteres Feld mit einem JA/NEIN Wert.
Dieses setzt du mit dem Button auf -1 oder 0 und wenn du in deinem Formular eine Änderung bekommst frage einfach das Feld ab um es zu blockieren oder zu ändern.

raist10
28.08.2009, 09:49
@ Kuli139

Ich habe es auch wie ZeC verstanden und da würde ich auch an die gleiche Vorgehensweise denken.

Wobei ich mich aber nicht darauf verlassen würde, dass der User den Button auch wirklich drückt. Zumindest bei grundlegenden Dingen, wenn es nur ein Feature ist das der User möchte dann kann man es sicherlich mit dem Button lösen. Gehört es aber zur zwingenden Funktionsweise, dann wäre es mir zu unsicher das der User schlicht vergisst den Button zu clicken.

Wäre es nicht sinnvoller das Flag ob veränderbar oder nicht automatisch setzen zu lassen, z.B. im AfterUpdate-Ereignis (wobei immer das Problem zu berücksichtigen ist, was ist wenn der User eine Fehleingabe gemacht hat und diese nachträglich korrigieren will?).

Gruß

Rainer

Atrus2711
28.08.2009, 09:54
Hi,

es wäre vielleicht grundsätzlich zu überlegen, wann so ein Datensatz "unabänderlich" wird. Je nachdem, wann das ist (Zeitablauf, Ordre du Chef, Jahresabschluss, nächster Datensatz eingegeben, ...) wird dann das Gesperrt-Kennzeichen auf ja gestellt.

Alternative: die ID der gesperrten Sätze wird in einer Tabelle gespeichert. Diese Sätze sind dann gesperrt. Vorteil: man könnte hier die Sperrung userbezogen machen, statt "den Satz an sich" zu sperren.

Kuli139
28.08.2009, 09:56
Im Moment ist es so das über den Arbeitsgr.Admin. ein DS gesperrt wird wenn er velassen wird. Da auf den Formularen aber Unterformulare sind wird der DS im Hauptformular gesperrt sobald ein User in ein UF geht. Wenn ihm nun aber auffällt das er im HF einen Fehler gemacht hat oder eine Eingabe vergessen hat kann er dort nichts mehr machen. Deswegen würde ich gern die kompletten Datensätze erst sperren wenn er auf den Button klickt. Den gleichen Code könnte man dann ja auch beim Formular schließen usw. anwenden.

Atrus2711
28.08.2009, 10:04
Im Moment ist es so das über den Arbeitsgr.Admin. ein DS gesperrt wird wenn er velassen wird
Wie das? Die Arbeitsgruppe regelt doch nur die Rechte und die möglichen Anmeldenamen. Fragst du die ab?

Egal: mach das, was du bisher beim Verlassen als Admin machst, beim Buttonklick (oder einem anderen, passenden Ereignis).

Kuli139
28.08.2009, 10:41
@ Atrus

Für den Admin bleiben die DS natürlich änderbar. Nur für die Gruppe User werden die Datensätze gesperrt. Dafür brauche ich gar nichts tun, diese haben nur die Berechtigung Daten einzufügen, diese jedoch nicht mehr zu ändern oder zu löschen.

Deine Alternative aus #4 hört sich eigentlich ganz gut an. Dann könnte man im Arbeitsgruppen.Admin. auch die rechte zum ändern einräumen und trotzdem Userbezogen die Datensätze sperren. Kannst du mir das näher erläutern oder mal ein kleines Beispiel hochladen?

Atrus2711
28.08.2009, 10:52
Der Gedanke ist, dass die Sperrtabelle die IDs enthält, die nicht mehr geändert werden dürfen. Du müsstest also deine Formulare so umbauen, dass sie alle die Sperrtabelle mit der Datentabelle verbinden (Daten LEFT JOIN Sperrung ON Daten.ID = Sperrung.F_DatenID). Das Formular muss dann untersuchen, ob die F_Satz_ID leer ist. Wenn ja, ist der Satz nicht gesperrt, wenn nein, ist er gesperrt.

Wenn das auf Userebene passieren soll, müsste die Abfrage dann noch die UserID berücksichtigen (Subselect).

Kuli139
31.08.2009, 09:24
Danke erst mal dafür. Ich werde mich daran mal versuchen.