[gelöst] Subformular sperren/entsperren
Moderator: Moderatoren
[gelöst] Subformular sperren/entsperren
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
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.
Re: Subformular sperren/entsperren
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
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
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:
Einen zweiten Button, etwa "sperren", belegst Du analog mit diesem Makro:
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
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
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
Änderungen sind nicht möglich.
Mit den Buttons kannst Du nun umschalten.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Subformular sperren/entsperren
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
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
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
- 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
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
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
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
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
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.
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
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.
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.... 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;
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
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.
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
Dann ist natürlich der folgende Zugang unzureichend:
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
Du gehst bei den Formularen nicht in die 2. Ebene, sondern in die dritte Ebene:oSubform = thiscomponent.drawpage.forms.getByName ("MainForm").getByName("Schuelerinnen")
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
Allen vielen Dank für die Hilfe, Problem gelöst.
Berti
Berti