Seite 1 von 1

[gelöst] Subformular sperren/entsperren

Verfasst: Mi, 27.06.2012 17:21
von bbberti
Hallo!

Ich arbeite mit der internen Datenbank und habe ein Formular, das Daten anzeigt und ein Subformular, in dem Daten geschrieben/verändert werden können. Damit das nicht aus Versehen passiert, hätte ich gerne einen button oder sowas, mit dem ich das Subformular schreibschützen kann bzw für die Eingabe entsperren kann. Geht sowas?

Vielleicht hat jemand einen Tipp. Vielen Dank im voraus
Berti

Re: Subformular sperren/entsperren

Verfasst: Mi, 27.06.2012 20:11
von RobertG
Hallo Berti,

ich möchte jetzt nicht in Details zum Code gehen. Aber der folgende Weg scheint mir ohne Probleme machbar:
Angenommen dein Formular basiert nur auf einer Tabelle. Dann kannst Du eine Abfrage der Tabelle erstellen, in der der Primärschlüssel fehlt. Der wird ja meist sowieso nicht im Formular benötigt sondern nur automatisch hochgeschrieben. Über ein Makro müsste jetzt die Datenquelle für das Formular ausgetauscht werden. Ist es die Tabelle, so kann der Datensatz geändert werden. Ist es die Abfrage, so können keine Daten eingegeben werden.
Zum Austauschen der Datenquelle des Formulars gab es vor gar nicht allzu langer Zeit hier einen Thread. Geht natürlich nur über Makro.

Gruß

Robert

Re: Subformular sperren/entsperren

Verfasst: Mi, 27.06.2012 20:24
von F3K Total
Hallo,
ich habe gerade parallel zu Robert eine Idee entwickelt.
Angenommen Dein Haupformular heißt im Formularnavigator "MainForm" das Subformular "SubForm".
Du öffnest das Formular im Entwurfsmodus, und änderst in den Formulareigenschaften/Reiter Daten Daten ändern auf nein.
Dann legst Du einen Button "ändern" an, unter Ereignisse/Aktion ausführen trägst du dieses Makro ein:

Code: Alles auswählen

Sub S_Aenderungen_zulassen
oSubform = thiscomponent.drawpage.forms.getByName("MainForm").getByName("SubForm")
oSubform.AllowUpdates = true
nrow = oSubform.row
oSubform.reload
oSubform.absolute(nrow)
msgbox ("Änderungen möglich")
End Sub
Einen zweiten Button, etwa "sperren", belegst Du analog mit diesem Makro:

Code: Alles auswählen

Sub S_Aenderungen_verbieten
oSubform = thiscomponent.drawpage.forms.getByName("MainForm").getByName("SubForm")
oSubform.AllowUpdates = false
nrow = oSubform.row
oSubform.reload
oSubform.absolute(nrow)
msgbox ("gesperrt")
End Sub
So, jetzt speicherst Du das Formular, verläßt den Entwurfsmodus und öffnest es normal.
Änderungen sind nicht möglich.
Mit den Buttons kannst Du nun umschalten.

Gruß R

Re: Subformular sperren/entsperren

Verfasst: Do, 28.06.2012 14:50
von bbberti
Hallo!
Erst mal vielen Dank! Ich bin schon am probieren, aber es funktioniert noch nicht. Vielleicht genaueres zu meinem Formular (Praktikumsverwaltung in einer Schule):

MainForm: listet aus einer Abfrage die Daten der Praktikumseinrichtung auf
Subform1 in Form einer Tabelle listet aus einer Abfrage die Stellennummer der Praktikumsstelle, die zugeordneten Schüler, die Betreuungslehrer, den Status (im Praktikum, abgebrochen) auf.
Subform2: listet in einzelnen Textfeldern die Primärschlüssel auf (PraktikumsstellenID, SchülerID, BetreuerID, StatusID), wobei ich Betreuer und Status als Listenfeld gestaltet habe)

Ich bin nicht so der Makro-Spezialist, so dass ich einfaches gerne übersehe.

Schon mal vielen Dank

Berti

Re: Subformular sperren/entsperren

Verfasst: Do, 28.06.2012 16:05
von bbberti
Iversuche mal die Struktur des Formulars genauer zu beschreiben mit den exakten Namen (In Klammern jeweils Beispiele für dazugehörige Felder):

- MainForm ((Einrichtungsname, Strasse, Ort, etc)
eingerückt - Schuelerinnen
weiter eingerückt tableControl (=Schülerzuordnung angezeigt aus der Abfrage)
eingerückt wie davor - Sch__St_Belegung
BelegID (Textfeld)
SchJID (Textfeld)
StellenID (Textfeld)
SchuelerID (Textfeld)
BetreuerID (als Listenfeld)
StatusID (als Listenfeld)
Abbruchdatum (Datumsfeld)

Die Makros:


Sub S_Aenderungen_zulassen
oSubform = thiscomponent.drawpage.forms.getByName("MainForm").getByName("Schuelerinnen")
oSubform.AllowUpdates = true
nrow = oSubform.row
oSubform.reload
oSubform.absolute(nrow)
msgbox ("Änderungen möglich")
End Sub


Sub S_Aenderungen_verbieten
oSubform = thiscomponent.drawpage.forms.getByName ("MainForm").getByName("Schuelerinnen")
oSubform.AllowUpdates = false
nrow = oSubform.row
oSubform.reload
oSubform.absolute(nrow)
msgbox ("gesperrt")
End Sub


Das Ergebnis: Ich kann zwar die Buttons klicken und es kommt die msg-box, aber ich kann in keinem Fall die Daten ändern.

wenn ich in das Makro statt "Schuelerinnen" "Sch__St-Belegung" eingebe, sagt er Basic Laufzeitfehler, Es ist eine Exception aufgetreten; Type: com.sun.star.container.NoSuchElementException; Message:.

Leider weiß ich nicht, wie ichs besser darstellen soll. Danke!
Berti

Re: Subformular sperren/entsperren

Verfasst: Do, 28.06.2012 16:26
von RobertG
Hallo Berti,

ist es denn überhaupt möglich, in die Abfrage etwas einzutragen, die ja dem Formular zugrunde liegt? Das heißt auch: Funktioniert denn die Eingabe ohne die Buttons?

Gruß

Robert

Re: Subformular sperren/entsperren

Verfasst: Do, 28.06.2012 16:44
von bbberti
Hallo,

in den Abfrage-Teil kann man nichts eintragen, darum habe ich ja ein zweites Subformular eingebaut, das auf die Tabelle zugreift und in das ich die Daten direkt eingeben kann. Das funktioniert einwandfrei.

Grüße
Berti

Re: Subformular sperren/entsperren

Verfasst: Do, 28.06.2012 17:39
von RobertG
Hallo Berti,

also noch einmal: In welches Subformular kannst Du von vornherein nichts eintragen:
"Schuelerinnen" oder "Sch__St_Belegung"?
In dem Subformular "Schuelerinnen" liegt ja das Tabellenkontrollfeld. In dem anderen Formular liegen lauter ID-Felder als Textfeld (wie kannst Du die lesen?) oder als Listenfeld.
Ich nehme an, dass es das zweite Formular sein soll, was zur Eingabe geeignet ist.
... wenn ich in das Makro statt "Schuelerinnen" "Sch__St-Belegung" eingebe, sagt er Basic Laufzeitfehler, Es ist eine Exception aufgetreten; Type: com.sun.star.container.NoSuchElementException;
Falls Du Dich nicht beim Tippen vertan hast, so wundert mich nicht, dass das Element nicht vorhanden ist. Statt eines Unterstrichs steht dort ein Bindestrich zwischen "St" und "Belegung". Fehleranfällig ist außerdem das Arbeiten mit mehr als einem Unterstrich.
Ich hatte im Unterricht schon manchmal SchülerInnen, die bei Feldbenennungen zum Abschluss Leerzeichen gesetzt hatten. Das gab bei Abfragen dann ein heilloses Durcheinander, sobald in den SQL-Modus umgeschaltet wurde.

Gruß

Robert

Re: Subformular sperren/entsperren

Verfasst: Fr, 29.06.2012 10:33
von bbberti
Hallo,

sorry, dass ich Eure Geduld strapaziere.

In das Subformular "Schuelerinnen" kann ich nichts eintragen und ändern, da es auf einer Abfrage basiert und nicht auf einer Tabelle.
Das SubFormular Sch__St_Belegung (war nur im Forum ein Tippfehler) ist ein Subformular des Subformulars "Schuelerinnen" und dort werden die Fremdschlüssel, die in der Tablelle "tblSchuelerStellenBelegung" eingegeben werden angezeigt und können verändert werden.

In meinem Formular habe ich also die Praktikumseinrichtung angezeigt, dann das Subformular "Schülerinnen" in Tabellenform, das die dort untergebrachten Schüler anzeigt (Mit Namen, Betreuer etc), und eine Ebene drunter dann das Subformular "Sch__St_Belegung", das aus einzelnen Textfeldern besteht, die die Fremdschlüssel derjenigen Tabelle anzeigt, die die Stellennummer der Praktikumseinrichtung, die Schülernummer, die BetreuerNummer etc zusammenführt.

Ich klicke also in meinem Subformular "Schuelerinnen" auf den Schüler, der zum Beispiel abgebrochen hat, dann werden im zweiten Subformular die entsprechenden Fremdschlüssel angezeigt und ich kann z.B. bei Status "Abgebrochen" und Abbruchdatum eingeben oder bei einem Schüler den Betreuungslehrer verändern.

So funktioniert es bisher gut. Da aber im zweiten Subformular quasi ein ungeschützter Zugriff auf die zu Grunde liegende Tabelle vorliegt, wollte ich diese Sperrvorrichtung einbauen um versehentliche Änderungen/Löschungen durch irgendwelche Mausklicks zu vermeiden.

Re: Subformular sperren/entsperren

Verfasst: Fr, 29.06.2012 14:36
von RobertG
Dann ist natürlich der folgende Zugang unzureichend:
oSubform = thiscomponent.drawpage.forms.getByName ("MainForm").getByName("Schuelerinnen")
Du gehst bei den Formularen nicht in die 2. Ebene, sondern in die dritte Ebene:
oSubform = thiscomponent.drawpage.forms.getByName ("MainForm").getByName("Schuelerinnen").getByName("Sch__St_Belegung")
Damit kommst Du auch auf das Subform eines Subforms. Wie das Objekt benannt wird, ob "oSubform" oder "Karltheodor", ist dabei natürlich egal. Daher kannst Du ruhig in den Makros weiter von oSubform schreiben - nur ist es eben ein Unterformular eines Unterformulars.

Gruß

Robert

Re: Subformular sperren/entsperren

Verfasst: Mo, 02.07.2012 14:37
von bbberti
Allen vielen Dank für die Hilfe, Problem gelöst.

Berti