[gelöst] Subformular sperren/entsperren

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

bbberti
**
Beiträge: 38
Registriert: Do, 28.05.2009 13:55

[gelöst] Subformular sperren/entsperren

Beitrag 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
Zuletzt geändert von bbberti am Mo, 02.07.2012 22:21, insgesamt 1-mal geändert.
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Subformular sperren/entsperren

Beitrag 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
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Subformular sperren/entsperren

Beitrag 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
bbberti
**
Beiträge: 38
Registriert: Do, 28.05.2009 13:55

Re: Subformular sperren/entsperren

Beitrag 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
bbberti
**
Beiträge: 38
Registriert: Do, 28.05.2009 13:55

Re: Subformular sperren/entsperren

Beitrag 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
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Subformular sperren/entsperren

Beitrag 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
bbberti
**
Beiträge: 38
Registriert: Do, 28.05.2009 13:55

Re: Subformular sperren/entsperren

Beitrag 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
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Subformular sperren/entsperren

Beitrag 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
bbberti
**
Beiträge: 38
Registriert: Do, 28.05.2009 13:55

Re: Subformular sperren/entsperren

Beitrag 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.
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Subformular sperren/entsperren

Beitrag 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
bbberti
**
Beiträge: 38
Registriert: Do, 28.05.2009 13:55

Re: Subformular sperren/entsperren

Beitrag von bbberti »

Allen vielen Dank für die Hilfe, Problem gelöst.

Berti
Antworten